From 907801c8b97d47844230cabc896244dba3ecca2c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zlatko=20=C4=8Calu=C5=A1i=C4=87?=
Date: Fri, 2 Jun 2017 10:27:10 +0200
Subject: [PATCH] Update dependencies
---
glide.lock | 14 +-
glide.yaml | 11 +-
vendor/golang.org/x/net/bpf/constants.go | 3 +
vendor/golang.org/x/net/bpf/instructions.go | 272 +-
.../golang.org/x/net/bpf/instructions_test.go | 377 +-
vendor/golang.org/x/net/bpf/vm_bpf_test.go | 4 +-
vendor/golang.org/x/net/context/context.go | 30 +-
.../x/net/context/ctxhttp/ctxhttp_17_test.go | 1 +
vendor/golang.org/x/net/context/go17.go | 4 +-
vendor/golang.org/x/net/context/pre_go17.go | 18 +-
.../x/net/dns/dnsmessage/message.go | 1418 ++
.../x/net/dns/dnsmessage/message_test.go | 575 +
vendor/golang.org/x/net/http2/ciphers.go | 641 +
vendor/golang.org/x/net/http2/ciphers_test.go | 309 +
.../x/net/http2/client_conn_pool.go | 2 +-
.../x/net/http2/configure_transport.go | 2 +-
vendor/golang.org/x/net/http2/databuffer.go | 146 +
.../golang.org/x/net/http2/databuffer_test.go | 157 +
vendor/golang.org/x/net/http2/fixed_buffer.go | 60 -
.../x/net/http2/fixed_buffer_test.go | 128 -
vendor/golang.org/x/net/http2/frame.go | 81 +-
vendor/golang.org/x/net/http2/frame_test.go | 91 +-
vendor/golang.org/x/net/http2/go16.go | 27 -
vendor/golang.org/x/net/http2/go18.go | 6 +-
vendor/golang.org/x/net/http2/go18_test.go | 13 +
vendor/golang.org/x/net/http2/go19.go | 16 +
vendor/golang.org/x/net/http2/go19_test.go | 60 +
.../golang.org/x/net/http2/h2demo/h2demo.go | 70 +-
vendor/golang.org/x/net/http2/h2demo/tmpl.go | 1991 ++
vendor/golang.org/x/net/http2/h2i/h2i.go | 12 +-
vendor/golang.org/x/net/http2/hpack/encode.go | 29 +-
.../x/net/http2/hpack/encode_test.go | 70 +-
vendor/golang.org/x/net/http2/hpack/hpack.go | 104 +-
.../x/net/http2/hpack/hpack_test.go | 150 +-
vendor/golang.org/x/net/http2/hpack/tables.go | 255 +-
.../x/net/http2/hpack/tables_test.go | 214 +
vendor/golang.org/x/net/http2/not_go16.go | 25 -
vendor/golang.org/x/net/http2/not_go19.go | 16 +
vendor/golang.org/x/net/http2/pipe.go | 18 +-
vendor/golang.org/x/net/http2/pipe_test.go | 21 +
vendor/golang.org/x/net/http2/server.go | 423 +-
.../x/net/http2/server_push_test.go | 17 +-
vendor/golang.org/x/net/http2/server_test.go | 215 +-
vendor/golang.org/x/net/http2/transport.go | 18 +-
.../golang.org/x/net/http2/transport_test.go | 59 +-
.../x/net/http2/writesched_priority.go | 2 +-
.../x/net/http2/writesched_priority_test.go | 2 +-
.../x/net/http2/writesched_random_test.go | 2 +-
vendor/golang.org/x/net/idna/example_test.go | 65 +
vendor/golang.org/x/net/idna/idna.go | 672 +-
vendor/golang.org/x/net/idna/punycode.go | 23 +-
vendor/golang.org/x/net/idna/tables.go | 4477 ++++
vendor/golang.org/x/net/idna/trie.go | 72 +
vendor/golang.org/x/net/idna/trieval.go | 114 +
.../golang.org/x/net/internal/iana/const.go | 6 +-
.../x/net/internal/netreflect/socket.go | 37 -
.../x/net/internal/netreflect/socket_posix.go | 30 -
.../x/net/internal/netreflect/socket_stub.go | 11 -
.../x/net/internal/netreflect/socket_test.go | 123 -
.../x/net/internal/nettest/stack.go | 137 +-
.../x/net/internal/socket/cmsghdr.go | 11 +
.../x/net/internal/socket/cmsghdr_bsd.go | 13 +
.../internal/socket/cmsghdr_linux_32bit.go | 14 +
.../internal/socket/cmsghdr_linux_64bit.go | 14 +
.../internal/socket/cmsghdr_solaris_64bit.go | 14 +
.../x/net/internal/socket/cmsghdr_stub.go | 17 +
.../x/net/internal/socket/defs_darwin.go | 44 +
.../x/net/internal/socket/defs_dragonfly.go | 44 +
.../x/net/internal/socket/defs_freebsd.go | 44 +
.../x/net/internal/socket/defs_linux.go | 49 +
.../x/net/internal/socket/defs_netbsd.go | 47 +
.../x/net/internal/socket/defs_openbsd.go | 44 +
.../x/net/internal/socket/defs_solaris.go | 44 +
.../x/net/internal/socket/error_unix.go | 31 +
.../x/net/internal/socket/error_windows.go | 26 +
.../x/net/internal/socket/iovec_32bit.go | 15 +
.../x/net/internal/socket/iovec_64bit.go | 15 +
.../internal/socket/iovec_solaris_64bit.go | 15 +
.../x/net/internal/socket/iovec_stub.go | 11 +
.../x/net/internal/socket/mmsghdr_stub.go | 21 +
.../x/net/internal/socket/mmsghdr_unix.go | 42 +
.../x/net/internal/socket/msghdr_bsd.go | 39 +
.../x/net/internal/socket/msghdr_bsdvar.go | 12 +
.../x/net/internal/socket/msghdr_linux.go | 36 +
.../net/internal/socket/msghdr_linux_32bit.go | 20 +
.../net/internal/socket/msghdr_linux_64bit.go | 20 +
.../x/net/internal/socket/msghdr_openbsd.go | 10 +
.../internal/socket/msghdr_solaris_64bit.go | 34 +
.../x/net/internal/socket/msghdr_stub.go | 14 +
.../x/net/internal/socket/rawconn.go | 66 +
.../x/net/internal/socket/rawconn_mmsg.go | 74 +
.../x/net/internal/socket/rawconn_msg.go | 77 +
.../x/net/internal/socket/rawconn_nommsg.go | 18 +
.../x/net/internal/socket/rawconn_nomsg.go | 18 +
.../x/net/internal/socket/rawconn_stub.go | 25 +
.../x/net/internal/socket/reflect.go | 62 +
.../x/net/internal/socket/socket.go | 282 +
.../net/internal/socket/socket_go1_9_test.go | 256 +
.../x/net/internal/socket/socket_test.go | 46 +
.../golang.org/x/net/internal/socket/sys.go | 33 +
.../x/net/internal/socket/sys_bsd.go | 17 +
.../x/net/internal/socket/sys_bsdvar.go | 14 +
.../x/net/internal/socket/sys_darwin.go | 7 +
.../x/net/internal/socket/sys_dragonfly.go | 7 +
.../x/net/internal/socket/sys_linux.go | 27 +
.../x/net/internal/socket/sys_linux_386.go | 55 +
.../{ipv4 => internal/socket}/sys_linux_386.s | 3 +
.../x/net/internal/socket/sys_linux_amd64.go | 10 +
.../x/net/internal/socket/sys_linux_arm.go | 10 +
.../x/net/internal/socket/sys_linux_arm64.go | 10 +
.../x/net/internal/socket/sys_linux_mips.go | 10 +
.../x/net/internal/socket/sys_linux_mips64.go | 10 +
.../net/internal/socket/sys_linux_mips64le.go | 10 +
.../x/net/internal/socket/sys_linux_mipsle.go | 10 +
.../x/net/internal/socket/sys_linux_ppc64.go | 10 +
.../net/internal/socket/sys_linux_ppc64le.go | 10 +
.../x/net/internal/socket/sys_linux_s390x.go | 55 +
.../x/net/internal/socket/sys_linux_s390x.s | 11 +
.../x/net/internal/socket/sys_netbsd.go | 25 +
.../x/net/internal/socket/sys_posix.go | 168 +
.../x/net/internal/socket/sys_solaris.go | 71 +
.../socket}/sys_solaris_amd64.s | 5 +-
.../x/net/internal/socket/sys_stub.go | 64 +
.../x/net/internal/socket/sys_unix.go | 33 +
.../x/net/internal/socket/sys_windows.go | 70 +
.../x/net/internal/socket/zsys_darwin_386.go | 59 +
.../net/internal/socket/zsys_darwin_amd64.go | 61 +
.../x/net/internal/socket/zsys_darwin_arm.go | 59 +
.../internal/socket/zsys_dragonfly_amd64.go | 61 +
.../x/net/internal/socket/zsys_freebsd_386.go | 59 +
.../net/internal/socket/zsys_freebsd_amd64.go | 61 +
.../x/net/internal/socket/zsys_freebsd_arm.go | 59 +
.../x/net/internal/socket/zsys_linux_386.go | 63 +
.../x/net/internal/socket/zsys_linux_amd64.go | 66 +
.../x/net/internal/socket/zsys_linux_arm.go | 63 +
.../x/net/internal/socket/zsys_linux_arm64.go | 66 +
.../x/net/internal/socket/zsys_linux_mips.go | 63 +
.../net/internal/socket/zsys_linux_mips64.go | 66 +
.../internal/socket/zsys_linux_mips64le.go | 66 +
.../net/internal/socket/zsys_linux_mipsle.go | 63 +
.../x/net/internal/socket/zsys_linux_ppc64.go | 66 +
.../net/internal/socket/zsys_linux_ppc64le.go | 66 +
.../x/net/internal/socket/zsys_linux_s390x.go | 66 +
.../x/net/internal/socket/zsys_netbsd_386.go | 65 +
.../net/internal/socket/zsys_netbsd_amd64.go | 68 +
.../x/net/internal/socket/zsys_netbsd_arm.go | 59 +
.../x/net/internal/socket/zsys_openbsd_386.go | 59 +
.../net/internal/socket/zsys_openbsd_amd64.go | 61 +
.../x/net/internal/socket/zsys_openbsd_arm.go | 59 +
.../net/internal/socket/zsys_solaris_amd64.go | 60 +
.../x/net/internal/timeseries/timeseries.go | 2 +-
vendor/golang.org/x/net/ipv4/batch.go | 191 +
vendor/golang.org/x/net/ipv4/bpfopt_linux.go | 28 -
vendor/golang.org/x/net/ipv4/bpfopt_stub.go | 16 -
vendor/golang.org/x/net/ipv4/control.go | 74 +
vendor/golang.org/x/net/ipv4/control_bsd.go | 22 +-
.../golang.org/x/net/ipv4/control_pktinfo.go | 18 +-
vendor/golang.org/x/net/ipv4/control_stub.go | 18 +-
vendor/golang.org/x/net/ipv4/control_unix.go | 101 +-
.../golang.org/x/net/ipv4/control_windows.go | 23 +-
vendor/golang.org/x/net/ipv4/defs_linux.go | 2 +
.../ipv4/{dgramopt_posix.go => dgramopt.go} | 130 +-
vendor/golang.org/x/net/ipv4/dgramopt_stub.go | 106 -
vendor/golang.org/x/net/ipv4/doc.go | 20 +-
vendor/golang.org/x/net/ipv4/endpoint.go | 69 +-
.../{genericopt_posix.go => genericopt.go} | 40 +-
.../golang.org/x/net/ipv4/genericopt_stub.go | 29 -
vendor/golang.org/x/net/ipv4/header.go | 70 +-
vendor/golang.org/x/net/ipv4/header_test.go | 296 +-
vendor/golang.org/x/net/ipv4/helper.go | 14 -
vendor/golang.org/x/net/ipv4/packet.go | 53 +-
vendor/golang.org/x/net/ipv4/packet_go1_8.go | 56 +
vendor/golang.org/x/net/ipv4/packet_go1_9.go | 67 +
vendor/golang.org/x/net/ipv4/payload.go | 9 +-
vendor/golang.org/x/net/ipv4/payload_cmsg.go | 59 +-
.../x/net/ipv4/payload_cmsg_go1_8.go | 59 +
.../x/net/ipv4/payload_cmsg_go1_9.go | 67 +
.../golang.org/x/net/ipv4/payload_nocmsg.go | 10 +-
.../x/net/ipv4/readwrite_go1_8_test.go | 248 +
.../x/net/ipv4/readwrite_go1_9_test.go | 388 +
vendor/golang.org/x/net/ipv4/sockopt.go | 14 +-
.../x/net/ipv4/sockopt_asmreq_posix.go | 46 -
.../x/net/ipv4/sockopt_asmreq_stub.go | 21 -
vendor/golang.org/x/net/ipv4/sockopt_posix.go | 115 +-
vendor/golang.org/x/net/ipv4/sockopt_stub.go | 35 +-
.../ipv4/{sockopt_asmreq.go => sys_asmreq.go} | 38 +-
.../golang.org/x/net/ipv4/sys_asmreq_stub.go | 25 +
...sockopt_asmreqn_unix.go => sys_asmreqn.go} | 18 +-
...pt_asmreqn_stub.go => sys_asmreqn_stub.go} | 10 +-
vendor/golang.org/x/net/ipv4/sys_bpf.go | 23 +
vendor/golang.org/x/net/ipv4/sys_bpf_stub.go | 16 +
vendor/golang.org/x/net/ipv4/sys_bsd.go | 29 +-
vendor/golang.org/x/net/ipv4/sys_darwin.go | 79 +-
vendor/golang.org/x/net/ipv4/sys_dragonfly.go | 35 +
vendor/golang.org/x/net/ipv4/sys_freebsd.go | 37 +-
vendor/golang.org/x/net/ipv4/sys_linux.go | 36 +-
vendor/golang.org/x/net/ipv4/sys_openbsd.go | 32 -
vendor/golang.org/x/net/ipv4/sys_solaris.go | 33 +-
.../golang.org/x/net/ipv4/sys_solaris_amd64.s | 8 -
.../{sockopt_ssmreq_unix.go => sys_ssmreq.go} | 29 +-
...kopt_ssmreq_stub.go => sys_ssmreq_stub.go} | 10 +-
vendor/golang.org/x/net/ipv4/sys_stub.go | 4 +-
vendor/golang.org/x/net/ipv4/sys_windows.go | 23 +-
.../x/net/ipv4/syscall_linux_386.go | 31 -
.../golang.org/x/net/ipv4/syscall_solaris.go | 38 -
vendor/golang.org/x/net/ipv4/syscall_unix.go | 26 -
.../golang.org/x/net/ipv4/syscall_windows.go | 18 -
.../golang.org/x/net/ipv4/zsys_linux_386.go | 2 +
.../golang.org/x/net/ipv4/zsys_linux_amd64.go | 2 +
.../golang.org/x/net/ipv4/zsys_linux_arm.go | 2 +
.../golang.org/x/net/ipv4/zsys_linux_arm64.go | 2 +
.../golang.org/x/net/ipv4/zsys_linux_mips.go | 2 +
.../x/net/ipv4/zsys_linux_mips64.go | 2 +
.../x/net/ipv4/zsys_linux_mips64le.go | 2 +
.../x/net/ipv4/zsys_linux_mipsle.go | 2 +
.../golang.org/x/net/ipv4/zsys_linux_ppc.go | 2 +
.../golang.org/x/net/ipv4/zsys_linux_ppc64.go | 2 +
.../x/net/ipv4/zsys_linux_ppc64le.go | 2 +
.../golang.org/x/net/ipv4/zsys_linux_s390x.go | 2 +
vendor/golang.org/x/net/ipv6/batch.go | 119 +
vendor/golang.org/x/net/ipv6/bpfopt_linux.go | 28 -
vendor/golang.org/x/net/ipv6/bpfopt_stub.go | 16 -
vendor/golang.org/x/net/ipv6/control.go | 104 +-
.../x/net/ipv6/control_rfc2292_unix.go | 33 +-
.../x/net/ipv6/control_rfc3542_unix.go | 63 +-
vendor/golang.org/x/net/ipv6/control_stub.go | 18 +-
vendor/golang.org/x/net/ipv6/control_unix.go | 118 +-
.../golang.org/x/net/ipv6/control_windows.go | 23 +-
vendor/golang.org/x/net/ipv6/defs_linux.go | 2 +
.../ipv6/{dgramopt_posix.go => dgramopt.go} | 150 +-
vendor/golang.org/x/net/ipv6/dgramopt_stub.go | 119 -
vendor/golang.org/x/net/ipv6/doc.go | 20 +-
vendor/golang.org/x/net/ipv6/endpoint.go | 38 +-
.../{genericopt_posix.go => genericopt.go} | 40 +-
.../golang.org/x/net/ipv6/genericopt_stub.go | 30 -
vendor/golang.org/x/net/ipv6/icmp.go | 3 +
vendor/golang.org/x/net/ipv6/icmp_stub.go | 2 +-
vendor/golang.org/x/net/ipv6/payload.go | 9 +-
vendor/golang.org/x/net/ipv6/payload_cmsg.go | 47 +-
.../x/net/ipv6/payload_cmsg_go1_8.go | 55 +
.../x/net/ipv6/payload_cmsg_go1_9.go | 57 +
.../golang.org/x/net/ipv6/payload_nocmsg.go | 8 +-
.../x/net/ipv6/readwrite_go1_8_test.go | 242 +
.../x/net/ipv6/readwrite_go1_9_test.go | 373 +
vendor/golang.org/x/net/ipv6/sockopt.go | 15 +-
vendor/golang.org/x/net/ipv6/sockopt_posix.go | 113 +-
vendor/golang.org/x/net/ipv6/sockopt_stub.go | 39 +-
...{sockopt_asmreq_posix.go => sys_asmreq.go} | 8 +-
.../golang.org/x/net/ipv6/sys_asmreq_stub.go | 17 +
vendor/golang.org/x/net/ipv6/sys_bpf.go | 23 +
vendor/golang.org/x/net/ipv6/sys_bpf_stub.go | 16 +
vendor/golang.org/x/net/ipv6/sys_bsd.go | 31 +-
vendor/golang.org/x/net/ipv6/sys_darwin.go | 47 +-
vendor/golang.org/x/net/ipv6/sys_freebsd.go | 39 +-
vendor/golang.org/x/net/ipv6/sys_linux.go | 40 +-
vendor/golang.org/x/net/ipv6/sys_linux_386.s | 8 -
vendor/golang.org/x/net/ipv6/sys_solaris.go | 39 +-
.../{sockopt_ssmreq_unix.go => sys_ssmreq.go} | 29 +-
...kopt_ssmreq_stub.go => sys_ssmreq_stub.go} | 10 +-
vendor/golang.org/x/net/ipv6/sys_stub.go | 4 +-
vendor/golang.org/x/net/ipv6/sys_windows.go | 15 +-
.../x/net/ipv6/syscall_linux_386.go | 31 -
.../golang.org/x/net/ipv6/syscall_solaris.go | 38 -
vendor/golang.org/x/net/ipv6/syscall_unix.go | 26 -
.../golang.org/x/net/ipv6/syscall_windows.go | 18 -
.../golang.org/x/net/ipv6/zsys_linux_386.go | 2 +
.../golang.org/x/net/ipv6/zsys_linux_amd64.go | 2 +
.../golang.org/x/net/ipv6/zsys_linux_arm.go | 2 +
.../golang.org/x/net/ipv6/zsys_linux_arm64.go | 2 +
.../golang.org/x/net/ipv6/zsys_linux_mips.go | 2 +
.../x/net/ipv6/zsys_linux_mips64.go | 2 +
.../x/net/ipv6/zsys_linux_mips64le.go | 2 +
.../x/net/ipv6/zsys_linux_mipsle.go | 2 +
.../golang.org/x/net/ipv6/zsys_linux_ppc.go | 2 +
.../golang.org/x/net/ipv6/zsys_linux_ppc64.go | 2 +
.../x/net/ipv6/zsys_linux_ppc64le.go | 2 +
.../golang.org/x/net/ipv6/zsys_linux_s390x.go | 2 +
vendor/golang.org/x/net/lif/address.go | 4 +-
vendor/golang.org/x/net/lif/address_test.go | 6 +-
vendor/golang.org/x/net/lif/binary.go | 49 +-
vendor/golang.org/x/net/lif/defs_solaris.go | 2 +-
vendor/golang.org/x/net/lif/link.go | 14 +-
vendor/golang.org/x/net/lif/link_test.go | 6 +-
vendor/golang.org/x/net/lif/sys.go | 21 +
.../golang.org/x/net/lif/sys_solaris_amd64.s | 3 -
vendor/golang.org/x/net/lif/syscall.go | 5 -
.../x/net/lif/zsys_solaris_amd64.go | 2 +-
vendor/golang.org/x/net/nettest/conntest.go | 5 +
.../golang.org/x/net/nettest/conntest_test.go | 58 +-
vendor/golang.org/x/net/proxy/socks5.go | 59 +-
vendor/golang.org/x/net/publicsuffix/table.go | 17943 ++++++++--------
.../x/net/publicsuffix/table_test.go | 563 +-
vendor/golang.org/x/net/route/address.go | 152 +-
vendor/golang.org/x/net/route/binary.go | 2 +-
vendor/golang.org/x/net/route/defs_darwin.go | 8 +
.../golang.org/x/net/route/defs_dragonfly.go | 8 +
vendor/golang.org/x/net/route/defs_freebsd.go | 8 +
vendor/golang.org/x/net/route/defs_netbsd.go | 8 +
vendor/golang.org/x/net/route/defs_openbsd.go | 12 +
vendor/golang.org/x/net/route/message.go | 8 +-
.../x/net/route/message_darwin_test.go | 31 +-
.../x/net/route/message_freebsd_test.go | 106 +-
vendor/golang.org/x/net/route/message_test.go | 159 +-
vendor/golang.org/x/net/route/route.go | 59 +-
.../golang.org/x/net/route/route_classic.go | 36 +
.../golang.org/x/net/route/route_openbsd.go | 35 +-
vendor/golang.org/x/net/route/sys.go | 7 +-
vendor/golang.org/x/net/route/sys_darwin.go | 45 +-
.../golang.org/x/net/route/sys_dragonfly.go | 39 +-
vendor/golang.org/x/net/route/sys_freebsd.go | 39 +-
vendor/golang.org/x/net/route/sys_netbsd.go | 34 +-
vendor/golang.org/x/net/route/sys_openbsd.go | 39 +-
vendor/golang.org/x/net/route/syscall.go | 5 -
vendor/golang.org/x/net/route/syscall.s | 8 -
vendor/golang.org/x/net/route/zsys_darwin.go | 6 +
.../golang.org/x/net/route/zsys_dragonfly.go | 6 +
.../x/net/route/zsys_freebsd_386.go | 6 +
.../x/net/route/zsys_freebsd_amd64.go | 6 +
.../x/net/route/zsys_freebsd_arm.go | 6 +
vendor/golang.org/x/net/route/zsys_netbsd.go | 6 +
vendor/golang.org/x/net/route/zsys_openbsd.go | 10 +
vendor/golang.org/x/net/trace/events.go | 20 +-
vendor/golang.org/x/net/trace/histogram.go | 15 +-
vendor/golang.org/x/net/trace/trace.go | 31 +-
vendor/golang.org/x/net/trace/trace_go16.go | 21 +
vendor/golang.org/x/net/trace/trace_go17.go | 21 +
vendor/golang.org/x/net/trace/trace_test.go | 14 +
.../x/net/webdav/internal/xml/marshal.go | 8 +-
.../x/net/webdav/internal/xml/read.go | 8 +-
.../x/net/webdav/internal/xml/xml.go | 6 +-
vendor/golang.org/x/net/xsrftoken/xsrf.go | 12 +-
331 files changed, 30381 insertions(+), 12843 deletions(-)
create mode 100644 vendor/golang.org/x/net/dns/dnsmessage/message.go
create mode 100644 vendor/golang.org/x/net/dns/dnsmessage/message_test.go
create mode 100644 vendor/golang.org/x/net/http2/ciphers.go
create mode 100644 vendor/golang.org/x/net/http2/ciphers_test.go
create mode 100644 vendor/golang.org/x/net/http2/databuffer.go
create mode 100644 vendor/golang.org/x/net/http2/databuffer_test.go
delete mode 100644 vendor/golang.org/x/net/http2/fixed_buffer.go
delete mode 100644 vendor/golang.org/x/net/http2/fixed_buffer_test.go
create mode 100644 vendor/golang.org/x/net/http2/go19.go
create mode 100644 vendor/golang.org/x/net/http2/go19_test.go
create mode 100644 vendor/golang.org/x/net/http2/h2demo/tmpl.go
create mode 100644 vendor/golang.org/x/net/http2/hpack/tables_test.go
create mode 100644 vendor/golang.org/x/net/http2/not_go19.go
create mode 100644 vendor/golang.org/x/net/idna/example_test.go
create mode 100644 vendor/golang.org/x/net/idna/tables.go
create mode 100644 vendor/golang.org/x/net/idna/trie.go
create mode 100644 vendor/golang.org/x/net/idna/trieval.go
delete mode 100644 vendor/golang.org/x/net/internal/netreflect/socket.go
delete mode 100644 vendor/golang.org/x/net/internal/netreflect/socket_posix.go
delete mode 100644 vendor/golang.org/x/net/internal/netreflect/socket_stub.go
delete mode 100644 vendor/golang.org/x/net/internal/netreflect/socket_test.go
create mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr.go
create mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go
create mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go
create mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go
create mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go
create mode 100644 vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go
create mode 100644 vendor/golang.org/x/net/internal/socket/defs_darwin.go
create mode 100644 vendor/golang.org/x/net/internal/socket/defs_dragonfly.go
create mode 100644 vendor/golang.org/x/net/internal/socket/defs_freebsd.go
create mode 100644 vendor/golang.org/x/net/internal/socket/defs_linux.go
create mode 100644 vendor/golang.org/x/net/internal/socket/defs_netbsd.go
create mode 100644 vendor/golang.org/x/net/internal/socket/defs_openbsd.go
create mode 100644 vendor/golang.org/x/net/internal/socket/defs_solaris.go
create mode 100644 vendor/golang.org/x/net/internal/socket/error_unix.go
create mode 100644 vendor/golang.org/x/net/internal/socket/error_windows.go
create mode 100644 vendor/golang.org/x/net/internal/socket/iovec_32bit.go
create mode 100644 vendor/golang.org/x/net/internal/socket/iovec_64bit.go
create mode 100644 vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go
create mode 100644 vendor/golang.org/x/net/internal/socket/iovec_stub.go
create mode 100644 vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go
create mode 100644 vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go
create mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_bsd.go
create mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go
create mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_linux.go
create mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go
create mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go
create mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go
create mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go
create mode 100644 vendor/golang.org/x/net/internal/socket/msghdr_stub.go
create mode 100644 vendor/golang.org/x/net/internal/socket/rawconn.go
create mode 100644 vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go
create mode 100644 vendor/golang.org/x/net/internal/socket/rawconn_msg.go
create mode 100644 vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go
create mode 100644 vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go
create mode 100644 vendor/golang.org/x/net/internal/socket/rawconn_stub.go
create mode 100644 vendor/golang.org/x/net/internal/socket/reflect.go
create mode 100644 vendor/golang.org/x/net/internal/socket/socket.go
create mode 100644 vendor/golang.org/x/net/internal/socket/socket_go1_9_test.go
create mode 100644 vendor/golang.org/x/net/internal/socket/socket_test.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_bsd.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_bsdvar.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_darwin.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_dragonfly.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_386.go
rename vendor/golang.org/x/net/{ipv4 => internal/socket}/sys_linux_386.s (77%)
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_arm.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_mips.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_netbsd.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_posix.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_solaris.go
rename vendor/golang.org/x/net/{ipv6 => internal/socket}/sys_solaris_amd64.s (66%)
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_stub.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_unix.go
create mode 100644 vendor/golang.org/x/net/internal/socket/sys_windows.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_386.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go
create mode 100644 vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go
create mode 100644 vendor/golang.org/x/net/ipv4/batch.go
delete mode 100644 vendor/golang.org/x/net/ipv4/bpfopt_linux.go
delete mode 100644 vendor/golang.org/x/net/ipv4/bpfopt_stub.go
rename vendor/golang.org/x/net/ipv4/{dgramopt_posix.go => dgramopt.go} (69%)
delete mode 100644 vendor/golang.org/x/net/ipv4/dgramopt_stub.go
rename vendor/golang.org/x/net/ipv4/{genericopt_posix.go => genericopt.go} (59%)
delete mode 100644 vendor/golang.org/x/net/ipv4/genericopt_stub.go
create mode 100644 vendor/golang.org/x/net/ipv4/packet_go1_8.go
create mode 100644 vendor/golang.org/x/net/ipv4/packet_go1_9.go
create mode 100644 vendor/golang.org/x/net/ipv4/payload_cmsg_go1_8.go
create mode 100644 vendor/golang.org/x/net/ipv4/payload_cmsg_go1_9.go
create mode 100644 vendor/golang.org/x/net/ipv4/readwrite_go1_8_test.go
create mode 100644 vendor/golang.org/x/net/ipv4/readwrite_go1_9_test.go
delete mode 100644 vendor/golang.org/x/net/ipv4/sockopt_asmreq_posix.go
delete mode 100644 vendor/golang.org/x/net/ipv4/sockopt_asmreq_stub.go
rename vendor/golang.org/x/net/ipv4/{sockopt_asmreq.go => sys_asmreq.go} (65%)
create mode 100644 vendor/golang.org/x/net/ipv4/sys_asmreq_stub.go
rename vendor/golang.org/x/net/ipv4/{sockopt_asmreqn_unix.go => sys_asmreqn.go} (52%)
rename vendor/golang.org/x/net/ipv4/{sockopt_asmreqn_stub.go => sys_asmreqn_stub.go} (55%)
create mode 100644 vendor/golang.org/x/net/ipv4/sys_bpf.go
create mode 100644 vendor/golang.org/x/net/ipv4/sys_bpf_stub.go
create mode 100644 vendor/golang.org/x/net/ipv4/sys_dragonfly.go
delete mode 100644 vendor/golang.org/x/net/ipv4/sys_openbsd.go
delete mode 100644 vendor/golang.org/x/net/ipv4/sys_solaris_amd64.s
rename vendor/golang.org/x/net/ipv4/{sockopt_ssmreq_unix.go => sys_ssmreq.go} (54%)
rename vendor/golang.org/x/net/ipv4/{sockopt_ssmreq_stub.go => sys_ssmreq_stub.go} (52%)
delete mode 100644 vendor/golang.org/x/net/ipv4/syscall_linux_386.go
delete mode 100644 vendor/golang.org/x/net/ipv4/syscall_solaris.go
delete mode 100644 vendor/golang.org/x/net/ipv4/syscall_unix.go
delete mode 100644 vendor/golang.org/x/net/ipv4/syscall_windows.go
create mode 100644 vendor/golang.org/x/net/ipv6/batch.go
delete mode 100644 vendor/golang.org/x/net/ipv6/bpfopt_linux.go
delete mode 100644 vendor/golang.org/x/net/ipv6/bpfopt_stub.go
rename vendor/golang.org/x/net/ipv6/{dgramopt_posix.go => dgramopt.go} (68%)
delete mode 100644 vendor/golang.org/x/net/ipv6/dgramopt_stub.go
rename vendor/golang.org/x/net/ipv6/{genericopt_posix.go => genericopt.go} (59%)
delete mode 100644 vendor/golang.org/x/net/ipv6/genericopt_stub.go
create mode 100644 vendor/golang.org/x/net/ipv6/payload_cmsg_go1_8.go
create mode 100644 vendor/golang.org/x/net/ipv6/payload_cmsg_go1_9.go
create mode 100644 vendor/golang.org/x/net/ipv6/readwrite_go1_8_test.go
create mode 100644 vendor/golang.org/x/net/ipv6/readwrite_go1_9_test.go
rename vendor/golang.org/x/net/ipv6/{sockopt_asmreq_posix.go => sys_asmreq.go} (63%)
create mode 100644 vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go
create mode 100644 vendor/golang.org/x/net/ipv6/sys_bpf.go
create mode 100644 vendor/golang.org/x/net/ipv6/sys_bpf_stub.go
delete mode 100644 vendor/golang.org/x/net/ipv6/sys_linux_386.s
rename vendor/golang.org/x/net/ipv6/{sockopt_ssmreq_unix.go => sys_ssmreq.go} (55%)
rename vendor/golang.org/x/net/ipv6/{sockopt_ssmreq_stub.go => sys_ssmreq_stub.go} (52%)
delete mode 100644 vendor/golang.org/x/net/ipv6/syscall_linux_386.go
delete mode 100644 vendor/golang.org/x/net/ipv6/syscall_solaris.go
delete mode 100644 vendor/golang.org/x/net/ipv6/syscall_unix.go
delete mode 100644 vendor/golang.org/x/net/ipv6/syscall_windows.go
create mode 100644 vendor/golang.org/x/net/lif/sys.go
delete mode 100644 vendor/golang.org/x/net/route/syscall.s
create mode 100644 vendor/golang.org/x/net/trace/trace_go16.go
create mode 100644 vendor/golang.org/x/net/trace/trace_go17.go
diff --git a/glide.lock b/glide.lock
index 2b32766..16fb008 100644
--- a/glide.lock
+++ b/glide.lock
@@ -1,14 +1,22 @@
-hash: 2a84da35c7f6887fc08d80cd20da4e38731a81ea9845e1f137f1ba9913d0268d
-updated: 2017-05-31T23:28:23.41107346+02:00
+hash: fa6b47593c912fd3ce7a0a9bb3f2893f61e3e4b6f7a5772c5e602e1038d74015
+updated: 2017-06-02T10:26:06.121356863+02:00
imports:
- name: github.com/gorilla/handlers
version: a4043c62cc2329bacda331d33fc908ab11ef0ec3
+ repo: https://github.com/gorilla/handlers
+ vcs: git
- name: github.com/inconshreveable/mousetrap
version: 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75
+ repo: https://github.com/inconshreveable/mousetrap
+ vcs: git
- name: github.com/spf13/cobra
version: 8d4ce3549a0bf0e3569df3aae7423b7743cd05a9
+ repo: https://github.com/spf13/cobra
+ vcs: git
- name: github.com/spf13/pflag
version: e57e3eeb33f795204c1ca35f56c44f83227c6e66
+ repo: https://github.com/spf13/pflag
+ vcs: git
- name: goji.io
version: 0d89ff54b2c18c9c4ba530e32496aef902d3c6cd
repo: https://github.com/goji/goji
@@ -19,7 +27,7 @@ imports:
- pat
- pattern
- name: golang.org/x/net
- version: 45e771701b814666a7eb299e6c7a57d0b1799e91
+ version: 3da985ce5951d99de868be4385f21ea6c2b22f24
repo: https://github.com/golang/net
vcs: git
testImports: []
diff --git a/glide.yaml b/glide.yaml
index 2317c53..62c662c 100644
--- a/glide.yaml
+++ b/glide.yaml
@@ -5,8 +5,17 @@ import:
repo: https://github.com/goji/goji
vcs: git
- package: golang.org/x/net
- version: 45e771701b814666a7eb299e6c7a57d0b1799e91
repo: https://github.com/golang/net
vcs: git
- package: github.com/spf13/cobra
+ repo: https://github.com/spf13/cobra
+ vcs: git
- package: github.com/spf13/pflag
+ repo: https://github.com/spf13/pflag
+ vcs: git
+- package: github.com/gorilla/handlers
+ repo: https://github.com/gorilla/handlers
+ vcs: git
+- package: github.com/inconshreveable/mousetrap
+ repo: https://github.com/inconshreveable/mousetrap
+ vcs: git
diff --git a/vendor/golang.org/x/net/bpf/constants.go b/vendor/golang.org/x/net/bpf/constants.go
index 2c8bbab..ccf6ada 100644
--- a/vendor/golang.org/x/net/bpf/constants.go
+++ b/vendor/golang.org/x/net/bpf/constants.go
@@ -70,6 +70,9 @@ type Extension int
// Extension functions available in the Linux kernel.
const (
+ // extOffset is the negative maximum number of instructions used
+ // to load instructions by overloading the K argument.
+ extOffset = -0x1000
// ExtLen returns the length of the packet.
ExtLen Extension = 1
// ExtProto returns the packet's L3 protocol type.
diff --git a/vendor/golang.org/x/net/bpf/instructions.go b/vendor/golang.org/x/net/bpf/instructions.go
index 68ae6f5..3b4fd08 100644
--- a/vendor/golang.org/x/net/bpf/instructions.go
+++ b/vendor/golang.org/x/net/bpf/instructions.go
@@ -57,6 +57,9 @@ func (ri RawInstruction) Disassemble() Instruction {
}
return LoadScratch{Dst: reg, N: int(ri.K)}
case opAddrModeAbsolute:
+ if ri.K > extOffset+0xffffffff {
+ return LoadExtension{Num: Extension(-extOffset + ri.K)}
+ }
return LoadAbsolute{Size: sz, Off: ri.K}
case opAddrModeIndirect:
return LoadIndirect{Size: sz, Off: ri.K}
@@ -104,6 +107,14 @@ func (ri RawInstruction) Disassemble() Instruction {
case opJumpAlways:
return Jump{Skip: ri.K}
case opJumpEqual:
+ if ri.Jt == 0 {
+ return JumpIf{
+ Cond: JumpNotEqual,
+ Val: ri.K,
+ SkipTrue: ri.Jf,
+ SkipFalse: 0,
+ }
+ }
return JumpIf{
Cond: JumpEqual,
Val: ri.K,
@@ -111,6 +122,14 @@ func (ri RawInstruction) Disassemble() Instruction {
SkipFalse: ri.Jf,
}
case opJumpGT:
+ if ri.Jt == 0 {
+ return JumpIf{
+ Cond: JumpLessOrEqual,
+ Val: ri.K,
+ SkipTrue: ri.Jf,
+ SkipFalse: 0,
+ }
+ }
return JumpIf{
Cond: JumpGreaterThan,
Val: ri.K,
@@ -118,6 +137,14 @@ func (ri RawInstruction) Disassemble() Instruction {
SkipFalse: ri.Jf,
}
case opJumpGE:
+ if ri.Jt == 0 {
+ return JumpIf{
+ Cond: JumpLessThan,
+ Val: ri.K,
+ SkipTrue: ri.Jf,
+ SkipFalse: 0,
+ }
+ }
return JumpIf{
Cond: JumpGreaterOrEqual,
Val: ri.K,
@@ -171,6 +198,18 @@ func (a LoadConstant) Assemble() (RawInstruction, error) {
return assembleLoad(a.Dst, 4, opAddrModeImmediate, a.Val)
}
+// String returns the the instruction in assembler notation.
+func (a LoadConstant) String() string {
+ switch a.Dst {
+ case RegA:
+ return fmt.Sprintf("ld #%d", a.Val)
+ case RegX:
+ return fmt.Sprintf("ldx #%d", a.Val)
+ default:
+ return fmt.Sprintf("unknown instruction: %#v", a)
+ }
+}
+
// LoadScratch loads scratch[N] into register Dst.
type LoadScratch struct {
Dst Register
@@ -185,6 +224,18 @@ func (a LoadScratch) Assemble() (RawInstruction, error) {
return assembleLoad(a.Dst, 4, opAddrModeScratch, uint32(a.N))
}
+// String returns the the instruction in assembler notation.
+func (a LoadScratch) String() string {
+ switch a.Dst {
+ case RegA:
+ return fmt.Sprintf("ld M[%d]", a.N)
+ case RegX:
+ return fmt.Sprintf("ldx M[%d]", a.N)
+ default:
+ return fmt.Sprintf("unknown instruction: %#v", a)
+ }
+}
+
// LoadAbsolute loads packet[Off:Off+Size] as an integer value into
// register A.
type LoadAbsolute struct {
@@ -197,6 +248,23 @@ func (a LoadAbsolute) Assemble() (RawInstruction, error) {
return assembleLoad(RegA, a.Size, opAddrModeAbsolute, a.Off)
}
+// String returns the the instruction in assembler notation.
+func (a LoadAbsolute) String() string {
+ switch a.Size {
+ case 1: // byte
+ return fmt.Sprintf("ldb [%d]", a.Off)
+ case 2: // half word
+ return fmt.Sprintf("ldh [%d]", a.Off)
+ case 4: // word
+ if a.Off > extOffset+0xffffffff {
+ return LoadExtension{Num: Extension(a.Off + 0x1000)}.String()
+ }
+ return fmt.Sprintf("ld [%d]", a.Off)
+ default:
+ return fmt.Sprintf("unknown instruction: %#v", a)
+ }
+}
+
// LoadIndirect loads packet[X+Off:X+Off+Size] as an integer value
// into register A.
type LoadIndirect struct {
@@ -209,6 +277,20 @@ func (a LoadIndirect) Assemble() (RawInstruction, error) {
return assembleLoad(RegA, a.Size, opAddrModeIndirect, a.Off)
}
+// String returns the the instruction in assembler notation.
+func (a LoadIndirect) String() string {
+ switch a.Size {
+ case 1: // byte
+ return fmt.Sprintf("ldb [x + %d]", a.Off)
+ case 2: // half word
+ return fmt.Sprintf("ldh [x + %d]", a.Off)
+ case 4: // word
+ return fmt.Sprintf("ld [x + %d]", a.Off)
+ default:
+ return fmt.Sprintf("unknown instruction: %#v", a)
+ }
+}
+
// LoadMemShift multiplies the first 4 bits of the byte at packet[Off]
// by 4 and stores the result in register X.
//
@@ -224,6 +306,11 @@ func (a LoadMemShift) Assemble() (RawInstruction, error) {
return assembleLoad(RegX, 1, opAddrModeMemShift, a.Off)
}
+// String returns the the instruction in assembler notation.
+func (a LoadMemShift) String() string {
+ return fmt.Sprintf("ldx 4*([%d]&0xf)", a.Off)
+}
+
// LoadExtension invokes a linux-specific extension and stores the
// result in register A.
type LoadExtension struct {
@@ -235,7 +322,47 @@ func (a LoadExtension) Assemble() (RawInstruction, error) {
if a.Num == ExtLen {
return assembleLoad(RegA, 4, opAddrModePacketLen, 0)
}
- return assembleLoad(RegA, 4, opAddrModeAbsolute, uint32(-0x1000+a.Num))
+ return assembleLoad(RegA, 4, opAddrModeAbsolute, uint32(extOffset+a.Num))
+}
+
+// String returns the the instruction in assembler notation.
+func (a LoadExtension) String() string {
+ switch a.Num {
+ case ExtLen:
+ return "ld #len"
+ case ExtProto:
+ return "ld #proto"
+ case ExtType:
+ return "ld #type"
+ case ExtPayloadOffset:
+ return "ld #poff"
+ case ExtInterfaceIndex:
+ return "ld #ifidx"
+ case ExtNetlinkAttr:
+ return "ld #nla"
+ case ExtNetlinkAttrNested:
+ return "ld #nlan"
+ case ExtMark:
+ return "ld #mark"
+ case ExtQueue:
+ return "ld #queue"
+ case ExtLinkLayerType:
+ return "ld #hatype"
+ case ExtRXHash:
+ return "ld #rxhash"
+ case ExtCPUID:
+ return "ld #cpu"
+ case ExtVLANTag:
+ return "ld #vlan_tci"
+ case ExtVLANTagPresent:
+ return "ld #vlan_avail"
+ case ExtVLANProto:
+ return "ld #vlan_tpid"
+ case ExtRand:
+ return "ld #rand"
+ default:
+ return fmt.Sprintf("unknown instruction: %#v", a)
+ }
}
// StoreScratch stores register Src into scratch[N].
@@ -265,6 +392,18 @@ func (a StoreScratch) Assemble() (RawInstruction, error) {
}, nil
}
+// String returns the the instruction in assembler notation.
+func (a StoreScratch) String() string {
+ switch a.Src {
+ case RegA:
+ return fmt.Sprintf("st M[%d]", a.N)
+ case RegX:
+ return fmt.Sprintf("stx M[%d]", a.N)
+ default:
+ return fmt.Sprintf("unknown instruction: %#v", a)
+ }
+}
+
// ALUOpConstant executes A = A Val.
type ALUOpConstant struct {
Op ALUOp
@@ -279,6 +418,34 @@ func (a ALUOpConstant) Assemble() (RawInstruction, error) {
}, nil
}
+// String returns the the instruction in assembler notation.
+func (a ALUOpConstant) String() string {
+ switch a.Op {
+ case ALUOpAdd:
+ return fmt.Sprintf("add #%d", a.Val)
+ case ALUOpSub:
+ return fmt.Sprintf("sub #%d", a.Val)
+ case ALUOpMul:
+ return fmt.Sprintf("mul #%d", a.Val)
+ case ALUOpDiv:
+ return fmt.Sprintf("div #%d", a.Val)
+ case ALUOpMod:
+ return fmt.Sprintf("mod #%d", a.Val)
+ case ALUOpAnd:
+ return fmt.Sprintf("and #%d", a.Val)
+ case ALUOpOr:
+ return fmt.Sprintf("or #%d", a.Val)
+ case ALUOpXor:
+ return fmt.Sprintf("xor #%d", a.Val)
+ case ALUOpShiftLeft:
+ return fmt.Sprintf("lsh #%d", a.Val)
+ case ALUOpShiftRight:
+ return fmt.Sprintf("rsh #%d", a.Val)
+ default:
+ return fmt.Sprintf("unknown instruction: %#v", a)
+ }
+}
+
// ALUOpX executes A = A X
type ALUOpX struct {
Op ALUOp
@@ -291,6 +458,34 @@ func (a ALUOpX) Assemble() (RawInstruction, error) {
}, nil
}
+// String returns the the instruction in assembler notation.
+func (a ALUOpX) String() string {
+ switch a.Op {
+ case ALUOpAdd:
+ return "add x"
+ case ALUOpSub:
+ return "sub x"
+ case ALUOpMul:
+ return "mul x"
+ case ALUOpDiv:
+ return "div x"
+ case ALUOpMod:
+ return "mod x"
+ case ALUOpAnd:
+ return "and x"
+ case ALUOpOr:
+ return "or x"
+ case ALUOpXor:
+ return "xor x"
+ case ALUOpShiftLeft:
+ return "lsh x"
+ case ALUOpShiftRight:
+ return "rsh x"
+ default:
+ return fmt.Sprintf("unknown instruction: %#v", a)
+ }
+}
+
// NegateA executes A = -A.
type NegateA struct{}
@@ -301,6 +496,11 @@ func (a NegateA) Assemble() (RawInstruction, error) {
}, nil
}
+// String returns the the instruction in assembler notation.
+func (a NegateA) String() string {
+ return fmt.Sprintf("neg")
+}
+
// Jump skips the following Skip instructions in the program.
type Jump struct {
Skip uint32
@@ -314,6 +514,11 @@ func (a Jump) Assemble() (RawInstruction, error) {
}, nil
}
+// String returns the the instruction in assembler notation.
+func (a Jump) String() string {
+ return fmt.Sprintf("ja %d", a.Skip)
+}
+
// JumpIf skips the following Skip instructions in the program if A
// Val is true.
type JumpIf struct {
@@ -361,6 +566,51 @@ func (a JumpIf) Assemble() (RawInstruction, error) {
}, nil
}
+// String returns the the instruction in assembler notation.
+func (a JumpIf) String() string {
+ switch a.Cond {
+ // K == A
+ case JumpEqual:
+ return conditionalJump(a, "jeq", "jneq")
+ // K != A
+ case JumpNotEqual:
+ return fmt.Sprintf("jneq #%d,%d", a.Val, a.SkipTrue)
+ // K > A
+ case JumpGreaterThan:
+ return conditionalJump(a, "jgt", "jle")
+ // K < A
+ case JumpLessThan:
+ return fmt.Sprintf("jlt #%d,%d", a.Val, a.SkipTrue)
+ // K >= A
+ case JumpGreaterOrEqual:
+ return conditionalJump(a, "jge", "jlt")
+ // K <= A
+ case JumpLessOrEqual:
+ return fmt.Sprintf("jle #%d,%d", a.Val, a.SkipTrue)
+ // K & A != 0
+ case JumpBitsSet:
+ if a.SkipFalse > 0 {
+ return fmt.Sprintf("jset #%d,%d,%d", a.Val, a.SkipTrue, a.SkipFalse)
+ }
+ return fmt.Sprintf("jset #%d,%d", a.Val, a.SkipTrue)
+ // K & A == 0, there is no assembler instruction for JumpBitNotSet, use JumpBitSet and invert skips
+ case JumpBitsNotSet:
+ return JumpIf{Cond: JumpBitsSet, SkipTrue: a.SkipFalse, SkipFalse: a.SkipTrue, Val: a.Val}.String()
+ default:
+ return fmt.Sprintf("unknown instruction: %#v", a)
+ }
+}
+
+func conditionalJump(inst JumpIf, positiveJump, negativeJump string) string {
+ if inst.SkipTrue > 0 {
+ if inst.SkipFalse > 0 {
+ return fmt.Sprintf("%s #%d,%d,%d", positiveJump, inst.Val, inst.SkipTrue, inst.SkipFalse)
+ }
+ return fmt.Sprintf("%s #%d,%d", positiveJump, inst.Val, inst.SkipTrue)
+ }
+ return fmt.Sprintf("%s #%d,%d", negativeJump, inst.Val, inst.SkipFalse)
+}
+
// RetA exits the BPF program, returning the value of register A.
type RetA struct{}
@@ -371,6 +621,11 @@ func (a RetA) Assemble() (RawInstruction, error) {
}, nil
}
+// String returns the the instruction in assembler notation.
+func (a RetA) String() string {
+ return fmt.Sprintf("ret a")
+}
+
// RetConstant exits the BPF program, returning a constant value.
type RetConstant struct {
Val uint32
@@ -384,6 +639,11 @@ func (a RetConstant) Assemble() (RawInstruction, error) {
}, nil
}
+// String returns the the instruction in assembler notation.
+func (a RetConstant) String() string {
+ return fmt.Sprintf("ret #%d", a.Val)
+}
+
// TXA copies the value of register X to register A.
type TXA struct{}
@@ -394,6 +654,11 @@ func (a TXA) Assemble() (RawInstruction, error) {
}, nil
}
+// String returns the the instruction in assembler notation.
+func (a TXA) String() string {
+ return fmt.Sprintf("txa")
+}
+
// TAX copies the value of register A to register X.
type TAX struct{}
@@ -404,6 +669,11 @@ func (a TAX) Assemble() (RawInstruction, error) {
}, nil
}
+// String returns the the instruction in assembler notation.
+func (a TAX) String() string {
+ return fmt.Sprintf("tax")
+}
+
func assembleLoad(dst Register, loadSize int, mode uint16, k uint32) (RawInstruction, error) {
var (
cls uint16
diff --git a/vendor/golang.org/x/net/bpf/instructions_test.go b/vendor/golang.org/x/net/bpf/instructions_test.go
index 833d1e1..dde474a 100644
--- a/vendor/golang.org/x/net/bpf/instructions_test.go
+++ b/vendor/golang.org/x/net/bpf/instructions_test.go
@@ -5,6 +5,7 @@
package bpf
import (
+ "fmt"
"io/ioutil"
"reflect"
"strconv"
@@ -143,11 +144,6 @@ func TestInterop(t *testing.T) {
}
// Check that assembly and disassembly match each other.
-//
-// Because we offer "fake" jump conditions that don't appear in the
-// machine code, disassembly won't be a 1:1 match with the original
-// source, although the behavior will be identical. However,
-// reassembling the disassembly should produce an identical program.
func TestAsmDisasm(t *testing.T) {
prog1, err := Assemble(allInstructions)
if err != nil {
@@ -155,30 +151,375 @@ func TestAsmDisasm(t *testing.T) {
}
t.Logf("Assembled program is %d instructions long", len(prog1))
- src, allDecoded := Disassemble(prog1)
+ got, allDecoded := Disassemble(prog1)
if !allDecoded {
t.Errorf("Disassemble(Assemble(allInstructions)) produced unrecognized instructions:")
- for i, inst := range src {
+ for i, inst := range got {
if r, ok := inst.(RawInstruction); ok {
t.Logf(" insn %d, %#v --> %#v", i+1, allInstructions[i], r)
}
}
}
- prog2, err := Assemble(src)
- if err != nil {
- t.Fatalf("assembly of Disassemble(Assemble(allInstructions)) failed: %s", err)
+ if len(allInstructions) != len(got) {
+ t.Fatalf("disassembly changed program size: %d insns before, %d insns after", len(allInstructions), len(got))
}
-
- if len(prog2) != len(prog1) {
- t.Fatalf("disassembly changed program size: %d insns before, %d insns after", len(prog1), len(prog2))
- }
- if !reflect.DeepEqual(prog1, prog2) {
+ if !reflect.DeepEqual(allInstructions, got) {
t.Errorf("program mutated by disassembly:")
- for i := range prog2 {
- if !reflect.DeepEqual(prog1[i], prog2[i]) {
- t.Logf(" insn %d, s: %#v, p1: %#v, p2: %#v", i+1, allInstructions[i], prog1[i], prog2[i])
+ for i := range got {
+ if !reflect.DeepEqual(allInstructions[i], got[i]) {
+ t.Logf(" insn %d, s: %#v, p1: %#v, got: %#v", i+1, allInstructions[i], prog1[i], got[i])
}
}
}
}
+
+type InvalidInstruction struct{}
+
+func (a InvalidInstruction) Assemble() (RawInstruction, error) {
+ return RawInstruction{}, fmt.Errorf("Invalid Instruction")
+}
+
+func (a InvalidInstruction) String() string {
+ return fmt.Sprintf("unknown instruction: %#v", a)
+}
+
+func TestString(t *testing.T) {
+ testCases := []struct {
+ instruction Instruction
+ assembler string
+ }{
+ {
+ instruction: LoadConstant{Dst: RegA, Val: 42},
+ assembler: "ld #42",
+ },
+ {
+ instruction: LoadConstant{Dst: RegX, Val: 42},
+ assembler: "ldx #42",
+ },
+ {
+ instruction: LoadConstant{Dst: 0xffff, Val: 42},
+ assembler: "unknown instruction: bpf.LoadConstant{Dst:0xffff, Val:0x2a}",
+ },
+ {
+ instruction: LoadScratch{Dst: RegA, N: 3},
+ assembler: "ld M[3]",
+ },
+ {
+ instruction: LoadScratch{Dst: RegX, N: 3},
+ assembler: "ldx M[3]",
+ },
+ {
+ instruction: LoadScratch{Dst: 0xffff, N: 3},
+ assembler: "unknown instruction: bpf.LoadScratch{Dst:0xffff, N:3}",
+ },
+ {
+ instruction: LoadAbsolute{Off: 42, Size: 1},
+ assembler: "ldb [42]",
+ },
+ {
+ instruction: LoadAbsolute{Off: 42, Size: 2},
+ assembler: "ldh [42]",
+ },
+ {
+ instruction: LoadAbsolute{Off: 42, Size: 4},
+ assembler: "ld [42]",
+ },
+ {
+ instruction: LoadAbsolute{Off: 42, Size: -1},
+ assembler: "unknown instruction: bpf.LoadAbsolute{Off:0x2a, Size:-1}",
+ },
+ {
+ instruction: LoadIndirect{Off: 42, Size: 1},
+ assembler: "ldb [x + 42]",
+ },
+ {
+ instruction: LoadIndirect{Off: 42, Size: 2},
+ assembler: "ldh [x + 42]",
+ },
+ {
+ instruction: LoadIndirect{Off: 42, Size: 4},
+ assembler: "ld [x + 42]",
+ },
+ {
+ instruction: LoadIndirect{Off: 42, Size: -1},
+ assembler: "unknown instruction: bpf.LoadIndirect{Off:0x2a, Size:-1}",
+ },
+ {
+ instruction: LoadMemShift{Off: 42},
+ assembler: "ldx 4*([42]&0xf)",
+ },
+ {
+ instruction: LoadExtension{Num: ExtLen},
+ assembler: "ld #len",
+ },
+ {
+ instruction: LoadExtension{Num: ExtProto},
+ assembler: "ld #proto",
+ },
+ {
+ instruction: LoadExtension{Num: ExtType},
+ assembler: "ld #type",
+ },
+ {
+ instruction: LoadExtension{Num: ExtPayloadOffset},
+ assembler: "ld #poff",
+ },
+ {
+ instruction: LoadExtension{Num: ExtInterfaceIndex},
+ assembler: "ld #ifidx",
+ },
+ {
+ instruction: LoadExtension{Num: ExtNetlinkAttr},
+ assembler: "ld #nla",
+ },
+ {
+ instruction: LoadExtension{Num: ExtNetlinkAttrNested},
+ assembler: "ld #nlan",
+ },
+ {
+ instruction: LoadExtension{Num: ExtMark},
+ assembler: "ld #mark",
+ },
+ {
+ instruction: LoadExtension{Num: ExtQueue},
+ assembler: "ld #queue",
+ },
+ {
+ instruction: LoadExtension{Num: ExtLinkLayerType},
+ assembler: "ld #hatype",
+ },
+ {
+ instruction: LoadExtension{Num: ExtRXHash},
+ assembler: "ld #rxhash",
+ },
+ {
+ instruction: LoadExtension{Num: ExtCPUID},
+ assembler: "ld #cpu",
+ },
+ {
+ instruction: LoadExtension{Num: ExtVLANTag},
+ assembler: "ld #vlan_tci",
+ },
+ {
+ instruction: LoadExtension{Num: ExtVLANTagPresent},
+ assembler: "ld #vlan_avail",
+ },
+ {
+ instruction: LoadExtension{Num: ExtVLANProto},
+ assembler: "ld #vlan_tpid",
+ },
+ {
+ instruction: LoadExtension{Num: ExtRand},
+ assembler: "ld #rand",
+ },
+ {
+ instruction: LoadAbsolute{Off: 0xfffff038, Size: 4},
+ assembler: "ld #rand",
+ },
+ {
+ instruction: LoadExtension{Num: 0xfff},
+ assembler: "unknown instruction: bpf.LoadExtension{Num:4095}",
+ },
+ {
+ instruction: StoreScratch{Src: RegA, N: 3},
+ assembler: "st M[3]",
+ },
+ {
+ instruction: StoreScratch{Src: RegX, N: 3},
+ assembler: "stx M[3]",
+ },
+ {
+ instruction: StoreScratch{Src: 0xffff, N: 3},
+ assembler: "unknown instruction: bpf.StoreScratch{Src:0xffff, N:3}",
+ },
+ {
+ instruction: ALUOpConstant{Op: ALUOpAdd, Val: 42},
+ assembler: "add #42",
+ },
+ {
+ instruction: ALUOpConstant{Op: ALUOpSub, Val: 42},
+ assembler: "sub #42",
+ },
+ {
+ instruction: ALUOpConstant{Op: ALUOpMul, Val: 42},
+ assembler: "mul #42",
+ },
+ {
+ instruction: ALUOpConstant{Op: ALUOpDiv, Val: 42},
+ assembler: "div #42",
+ },
+ {
+ instruction: ALUOpConstant{Op: ALUOpOr, Val: 42},
+ assembler: "or #42",
+ },
+ {
+ instruction: ALUOpConstant{Op: ALUOpAnd, Val: 42},
+ assembler: "and #42",
+ },
+ {
+ instruction: ALUOpConstant{Op: ALUOpShiftLeft, Val: 42},
+ assembler: "lsh #42",
+ },
+ {
+ instruction: ALUOpConstant{Op: ALUOpShiftRight, Val: 42},
+ assembler: "rsh #42",
+ },
+ {
+ instruction: ALUOpConstant{Op: ALUOpMod, Val: 42},
+ assembler: "mod #42",
+ },
+ {
+ instruction: ALUOpConstant{Op: ALUOpXor, Val: 42},
+ assembler: "xor #42",
+ },
+ {
+ instruction: ALUOpConstant{Op: 0xffff, Val: 42},
+ assembler: "unknown instruction: bpf.ALUOpConstant{Op:0xffff, Val:0x2a}",
+ },
+ {
+ instruction: ALUOpX{Op: ALUOpAdd},
+ assembler: "add x",
+ },
+ {
+ instruction: ALUOpX{Op: ALUOpSub},
+ assembler: "sub x",
+ },
+ {
+ instruction: ALUOpX{Op: ALUOpMul},
+ assembler: "mul x",
+ },
+ {
+ instruction: ALUOpX{Op: ALUOpDiv},
+ assembler: "div x",
+ },
+ {
+ instruction: ALUOpX{Op: ALUOpOr},
+ assembler: "or x",
+ },
+ {
+ instruction: ALUOpX{Op: ALUOpAnd},
+ assembler: "and x",
+ },
+ {
+ instruction: ALUOpX{Op: ALUOpShiftLeft},
+ assembler: "lsh x",
+ },
+ {
+ instruction: ALUOpX{Op: ALUOpShiftRight},
+ assembler: "rsh x",
+ },
+ {
+ instruction: ALUOpX{Op: ALUOpMod},
+ assembler: "mod x",
+ },
+ {
+ instruction: ALUOpX{Op: ALUOpXor},
+ assembler: "xor x",
+ },
+ {
+ instruction: ALUOpX{Op: 0xffff},
+ assembler: "unknown instruction: bpf.ALUOpX{Op:0xffff}",
+ },
+ {
+ instruction: NegateA{},
+ assembler: "neg",
+ },
+ {
+ instruction: Jump{Skip: 10},
+ assembler: "ja 10",
+ },
+ {
+ instruction: JumpIf{Cond: JumpEqual, Val: 42, SkipTrue: 8, SkipFalse: 9},
+ assembler: "jeq #42,8,9",
+ },
+ {
+ instruction: JumpIf{Cond: JumpEqual, Val: 42, SkipTrue: 8},
+ assembler: "jeq #42,8",
+ },
+ {
+ instruction: JumpIf{Cond: JumpEqual, Val: 42, SkipFalse: 8},
+ assembler: "jneq #42,8",
+ },
+ {
+ instruction: JumpIf{Cond: JumpNotEqual, Val: 42, SkipTrue: 8},
+ assembler: "jneq #42,8",
+ },
+ {
+ instruction: JumpIf{Cond: JumpLessThan, Val: 42, SkipTrue: 7},
+ assembler: "jlt #42,7",
+ },
+ {
+ instruction: JumpIf{Cond: JumpLessOrEqual, Val: 42, SkipTrue: 6},
+ assembler: "jle #42,6",
+ },
+ {
+ instruction: JumpIf{Cond: JumpGreaterThan, Val: 42, SkipTrue: 4, SkipFalse: 5},
+ assembler: "jgt #42,4,5",
+ },
+ {
+ instruction: JumpIf{Cond: JumpGreaterThan, Val: 42, SkipTrue: 4},
+ assembler: "jgt #42,4",
+ },
+ {
+ instruction: JumpIf{Cond: JumpGreaterOrEqual, Val: 42, SkipTrue: 3, SkipFalse: 4},
+ assembler: "jge #42,3,4",
+ },
+ {
+ instruction: JumpIf{Cond: JumpGreaterOrEqual, Val: 42, SkipTrue: 3},
+ assembler: "jge #42,3",
+ },
+ {
+ instruction: JumpIf{Cond: JumpBitsSet, Val: 42, SkipTrue: 2, SkipFalse: 3},
+ assembler: "jset #42,2,3",
+ },
+ {
+ instruction: JumpIf{Cond: JumpBitsSet, Val: 42, SkipTrue: 2},
+ assembler: "jset #42,2",
+ },
+ {
+ instruction: JumpIf{Cond: JumpBitsNotSet, Val: 42, SkipTrue: 2, SkipFalse: 3},
+ assembler: "jset #42,3,2",
+ },
+ {
+ instruction: JumpIf{Cond: JumpBitsNotSet, Val: 42, SkipTrue: 2},
+ assembler: "jset #42,0,2",
+ },
+ {
+ instruction: JumpIf{Cond: 0xffff, Val: 42, SkipTrue: 1, SkipFalse: 2},
+ assembler: "unknown instruction: bpf.JumpIf{Cond:0xffff, Val:0x2a, SkipTrue:0x1, SkipFalse:0x2}",
+ },
+ {
+ instruction: TAX{},
+ assembler: "tax",
+ },
+ {
+ instruction: TXA{},
+ assembler: "txa",
+ },
+ {
+ instruction: RetA{},
+ assembler: "ret a",
+ },
+ {
+ instruction: RetConstant{Val: 42},
+ assembler: "ret #42",
+ },
+ // Invalid instruction
+ {
+ instruction: InvalidInstruction{},
+ assembler: "unknown instruction: bpf.InvalidInstruction{}",
+ },
+ }
+
+ for _, testCase := range testCases {
+ if input, ok := testCase.instruction.(fmt.Stringer); ok {
+ got := input.String()
+ if got != testCase.assembler {
+ t.Errorf("String did not return expected assembler notation, expected: %s, got: %s", testCase.assembler, got)
+ }
+ } else {
+ t.Errorf("Instruction %#v is not a fmt.Stringer", testCase.instruction)
+ }
+ }
+}
diff --git a/vendor/golang.org/x/net/bpf/vm_bpf_test.go b/vendor/golang.org/x/net/bpf/vm_bpf_test.go
index 4263623..77fa8fe 100644
--- a/vendor/golang.org/x/net/bpf/vm_bpf_test.go
+++ b/vendor/golang.org/x/net/bpf/vm_bpf_test.go
@@ -33,7 +33,7 @@ func canUseOSVM() bool {
}
// All BPF tests against both the Go VM and OS VM are assumed to
-// be used with a UDP socket. As a result, the entire contents
+// be used with a UDP socket. As a result, the entire contents
// of a UDP datagram is sent through the BPF program, but only
// the body after the UDP header will ever be returned in output.
@@ -85,7 +85,7 @@ func (mvm *multiVirtualMachine) Run(in []byte) (int, error) {
}
// All tests have a UDP header as part of input, because the OS VM
- // packets always will. For the Go VM, this output is trimmed before
+ // packets always will. For the Go VM, this output is trimmed before
// being sent back to tests.
goOut, goErr := mvm.goVM.Run(in)
if goOut >= udpHeaderLen {
diff --git a/vendor/golang.org/x/net/context/context.go b/vendor/golang.org/x/net/context/context.go
index 134654c..f143ed6 100644
--- a/vendor/golang.org/x/net/context/context.go
+++ b/vendor/golang.org/x/net/context/context.go
@@ -7,7 +7,7 @@
// and between processes.
//
// 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 +16,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
@@ -44,13 +44,13 @@ import "time"
// 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.
+ // 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.
+ // 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
@@ -79,24 +79,24 @@ type Context interface {
// a Done channel for cancelation.
Done() <-chan struct{}
- // Err returns a non-nil error value after Done is closed. Err returns
+ // 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.
+ // 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
+ // 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
+ // 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;
+ // Context.Value. A key can be any type that supports equality;
// packages should define keys as an unexported type to avoid
// collisions.
//
@@ -115,7 +115,7 @@ type Context interface {
// // This prevents collisions with keys defined in other packages.
// type key int
//
- // // userKey is the key for user.User values in Contexts. It is
+ // // 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
@@ -134,14 +134,14 @@ type Context 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
diff --git a/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_17_test.go b/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_17_test.go
index 9f0f90f..72411b1 100644
--- a/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_17_test.go
+++ b/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_17_test.go
@@ -19,6 +19,7 @@ func TestGo17Context(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "ok")
}))
+ defer ts.Close()
ctx := context.Background()
resp, err := Get(ctx, http.DefaultClient, ts.URL)
if resp == nil || err != nil {
diff --git a/vendor/golang.org/x/net/context/go17.go b/vendor/golang.org/x/net/context/go17.go
index f8cda19..d20f52b 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/pre_go17.go b/vendor/golang.org/x/net/context/pre_go17.go
index 5a30aca..0f35592 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/dns/dnsmessage/message.go b/vendor/golang.org/x/net/dns/dnsmessage/message.go
new file mode 100644
index 0000000..da43b0b
--- /dev/null
+++ b/vendor/golang.org/x/net/dns/dnsmessage/message.go
@@ -0,0 +1,1418 @@
+// 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 dnsmessage provides a mostly RFC 1035 compliant implementation of
+// DNS message packing and unpacking.
+//
+// This implementation is designed to minimize heap allocations and avoid
+// unnecessary packing and unpacking as much as possible.
+package dnsmessage
+
+import (
+ "errors"
+)
+
+// Packet formats
+
+// A Type is a type of DNS request and response.
+type Type uint16
+
+// A Class is a type of network.
+type Class uint16
+
+// An OpCode is a DNS operation code.
+type OpCode uint16
+
+// An RCode is a DNS response status code.
+type RCode uint16
+
+// Wire constants.
+const (
+ // ResourceHeader.Type and Question.Type
+ TypeA Type = 1
+ TypeNS Type = 2
+ TypeCNAME Type = 5
+ TypeSOA Type = 6
+ TypePTR Type = 12
+ TypeMX Type = 15
+ TypeTXT Type = 16
+ TypeAAAA Type = 28
+ TypeSRV Type = 33
+
+ // Question.Type
+ TypeWKS Type = 11
+ TypeHINFO Type = 13
+ TypeMINFO Type = 14
+ TypeAXFR Type = 252
+ TypeALL Type = 255
+
+ // ResourceHeader.Class and Question.Class
+ ClassINET Class = 1
+ ClassCSNET Class = 2
+ ClassCHAOS Class = 3
+ ClassHESIOD Class = 4
+
+ // Question.Class
+ ClassANY Class = 255
+
+ // Message.Rcode
+ RCodeSuccess RCode = 0
+ RCodeFormatError RCode = 1
+ RCodeServerFailure RCode = 2
+ RCodeNameError RCode = 3
+ RCodeNotImplemented RCode = 4
+ RCodeRefused RCode = 5
+)
+
+var (
+ // ErrNotStarted indicates that the prerequisite information isn't
+ // available yet because the previous records haven't been appropriately
+ // parsed or skipped.
+ ErrNotStarted = errors.New("parsing of this type isn't available yet")
+
+ // ErrSectionDone indicated that all records in the section have been
+ // parsed.
+ ErrSectionDone = errors.New("parsing of this section has completed")
+
+ errBaseLen = errors.New("insufficient data for base length type")
+ errCalcLen = errors.New("insufficient data for calculated length type")
+ errReserved = errors.New("segment prefix is reserved")
+ errTooManyPtr = errors.New("too many pointers (>10)")
+ errInvalidPtr = errors.New("invalid pointer")
+ errResourceLen = errors.New("insufficient data for resource body length")
+ errSegTooLong = errors.New("segment length too long")
+ errZeroSegLen = errors.New("zero length segment")
+ errResTooLong = errors.New("resource length too long")
+ errTooManyQuestions = errors.New("too many Questions to pack (>65535)")
+ errTooManyAnswers = errors.New("too many Answers to pack (>65535)")
+ errTooManyAuthorities = errors.New("too many Authorities to pack (>65535)")
+ errTooManyAdditionals = errors.New("too many Additionals to pack (>65535)")
+)
+
+type nestedError struct {
+ // s is the current level's error message.
+ s string
+
+ // err is the nested error.
+ err error
+}
+
+// nestedError implements error.Error.
+func (e *nestedError) Error() string {
+ return e.s + ": " + e.err.Error()
+}
+
+// Header is a representation of a DNS message header.
+type Header struct {
+ ID uint16
+ Response bool
+ OpCode OpCode
+ Authoritative bool
+ Truncated bool
+ RecursionDesired bool
+ RecursionAvailable bool
+ RCode RCode
+}
+
+func (m *Header) pack() (id uint16, bits uint16) {
+ id = m.ID
+ bits = uint16(m.OpCode)<<11 | uint16(m.RCode)
+ if m.RecursionAvailable {
+ bits |= headerBitRA
+ }
+ if m.RecursionDesired {
+ bits |= headerBitRD
+ }
+ if m.Truncated {
+ bits |= headerBitTC
+ }
+ if m.Authoritative {
+ bits |= headerBitAA
+ }
+ if m.Response {
+ bits |= headerBitQR
+ }
+ return
+}
+
+// Message is a representation of a DNS message.
+type Message struct {
+ Header
+ Questions []Question
+ Answers []Resource
+ Authorities []Resource
+ Additionals []Resource
+}
+
+type section uint8
+
+const (
+ sectionHeader section = iota
+ sectionQuestions
+ sectionAnswers
+ sectionAuthorities
+ sectionAdditionals
+ sectionDone
+
+ headerBitQR = 1 << 15 // query/response (response=1)
+ headerBitAA = 1 << 10 // authoritative
+ headerBitTC = 1 << 9 // truncated
+ headerBitRD = 1 << 8 // recursion desired
+ headerBitRA = 1 << 7 // recursion available
+)
+
+var sectionNames = map[section]string{
+ sectionHeader: "header",
+ sectionQuestions: "Question",
+ sectionAnswers: "Answer",
+ sectionAuthorities: "Authority",
+ sectionAdditionals: "Additional",
+}
+
+// header is the wire format for a DNS message header.
+type header struct {
+ id uint16
+ bits uint16
+ questions uint16
+ answers uint16
+ authorities uint16
+ additionals uint16
+}
+
+func (h *header) count(sec section) uint16 {
+ switch sec {
+ case sectionQuestions:
+ return h.questions
+ case sectionAnswers:
+ return h.answers
+ case sectionAuthorities:
+ return h.authorities
+ case sectionAdditionals:
+ return h.additionals
+ }
+ return 0
+}
+
+func (h *header) pack(msg []byte) []byte {
+ msg = packUint16(msg, h.id)
+ msg = packUint16(msg, h.bits)
+ msg = packUint16(msg, h.questions)
+ msg = packUint16(msg, h.answers)
+ msg = packUint16(msg, h.authorities)
+ return packUint16(msg, h.additionals)
+}
+
+func (h *header) unpack(msg []byte, off int) (int, error) {
+ newOff := off
+ var err error
+ if h.id, newOff, err = unpackUint16(msg, newOff); err != nil {
+ return off, &nestedError{"id", err}
+ }
+ if h.bits, newOff, err = unpackUint16(msg, newOff); err != nil {
+ return off, &nestedError{"bits", err}
+ }
+ if h.questions, newOff, err = unpackUint16(msg, newOff); err != nil {
+ return off, &nestedError{"questions", err}
+ }
+ if h.answers, newOff, err = unpackUint16(msg, newOff); err != nil {
+ return off, &nestedError{"answers", err}
+ }
+ if h.authorities, newOff, err = unpackUint16(msg, newOff); err != nil {
+ return off, &nestedError{"authorities", err}
+ }
+ if h.additionals, newOff, err = unpackUint16(msg, newOff); err != nil {
+ return off, &nestedError{"additionals", err}
+ }
+ return newOff, nil
+}
+
+func (h *header) header() Header {
+ return Header{
+ ID: h.id,
+ Response: (h.bits & headerBitQR) != 0,
+ OpCode: OpCode(h.bits>>11) & 0xF,
+ Authoritative: (h.bits & headerBitAA) != 0,
+ Truncated: (h.bits & headerBitTC) != 0,
+ RecursionDesired: (h.bits & headerBitRD) != 0,
+ RecursionAvailable: (h.bits & headerBitRA) != 0,
+ RCode: RCode(h.bits & 0xF),
+ }
+}
+
+// A Resource is a DNS resource record.
+type Resource interface {
+ // Header return's the Resource's ResourceHeader.
+ Header() *ResourceHeader
+
+ // pack packs a Resource except for its header.
+ pack(msg []byte, compression map[string]int) ([]byte, error)
+
+ // realType returns the actual type of the Resource. This is used to
+ // fill in the header Type field.
+ realType() Type
+}
+
+func packResource(msg []byte, resource Resource, compression map[string]int) ([]byte, error) {
+ oldMsg := msg
+ resource.Header().Type = resource.realType()
+ msg, length, err := resource.Header().pack(msg, compression)
+ if err != nil {
+ return msg, &nestedError{"ResourceHeader", err}
+ }
+ preLen := len(msg)
+ msg, err = resource.pack(msg, compression)
+ if err != nil {
+ return msg, &nestedError{"content", err}
+ }
+ conLen := len(msg) - preLen
+ if conLen > int(^uint16(0)) {
+ return oldMsg, errResTooLong
+ }
+ // Fill in the length now that we know how long the content is.
+ packUint16(length[:0], uint16(conLen))
+ resource.Header().Length = uint16(conLen)
+ return msg, nil
+}
+
+// A Parser allows incrementally parsing a DNS message.
+//
+// When parsing is started, the Header is parsed. Next, each Question can be
+// either parsed or skipped. Alternatively, all Questions can be skipped at
+// once. When all Questions have been parsed, attempting to parse Questions
+// will return (nil, nil) and attempting to skip Questions will return
+// (true, nil). After all Questions have been either parsed or skipped, all
+// Answers, Authorities and Additionals can be either parsed or skipped in the
+// same way, and each type of Resource must be fully parsed or skipped before
+// proceeding to the next type of Resource.
+//
+// Note that there is no requirement to fully skip or parse the message.
+type Parser struct {
+ msg []byte
+ header header
+
+ section section
+ off int
+ index int
+ resHeaderValid bool
+ resHeader ResourceHeader
+}
+
+// Start parses the header and enables the parsing of Questions.
+func (p *Parser) Start(msg []byte) (Header, error) {
+ if p.msg != nil {
+ *p = Parser{}
+ }
+ p.msg = msg
+ var err error
+ if p.off, err = p.header.unpack(msg, 0); err != nil {
+ return Header{}, &nestedError{"unpacking header", err}
+ }
+ p.section = sectionQuestions
+ return p.header.header(), nil
+}
+
+func (p *Parser) checkAdvance(sec section) error {
+ if p.section < sec {
+ return ErrNotStarted
+ }
+ if p.section > sec {
+ return ErrSectionDone
+ }
+ p.resHeaderValid = false
+ if p.index == int(p.header.count(sec)) {
+ p.index = 0
+ p.section++
+ return ErrSectionDone
+ }
+ return nil
+}
+
+func (p *Parser) resource(sec section) (Resource, error) {
+ var r Resource
+ hdr, err := p.resourceHeader(sec)
+ if err != nil {
+ return r, err
+ }
+ p.resHeaderValid = false
+ r, p.off, err = unpackResource(p.msg, p.off, hdr)
+ if err != nil {
+ return nil, &nestedError{"unpacking " + sectionNames[sec], err}
+ }
+ p.index++
+ return r, nil
+}
+
+func (p *Parser) resourceHeader(sec section) (ResourceHeader, error) {
+ if p.resHeaderValid {
+ return p.resHeader, nil
+ }
+ if err := p.checkAdvance(sec); err != nil {
+ return ResourceHeader{}, err
+ }
+ var hdr ResourceHeader
+ off, err := hdr.unpack(p.msg, p.off)
+ if err != nil {
+ return ResourceHeader{}, err
+ }
+ p.resHeaderValid = true
+ p.resHeader = hdr
+ p.off = off
+ return hdr, nil
+}
+
+func (p *Parser) skipResource(sec section) error {
+ if p.resHeaderValid {
+ newOff := p.off + int(p.resHeader.Length)
+ if newOff > len(p.msg) {
+ return errResourceLen
+ }
+ p.off = newOff
+ p.resHeaderValid = false
+ p.index++
+ return nil
+ }
+ if err := p.checkAdvance(sec); err != nil {
+ return err
+ }
+ var err error
+ p.off, err = skipResource(p.msg, p.off)
+ if err != nil {
+ return &nestedError{"skipping: " + sectionNames[sec], err}
+ }
+ p.index++
+ return nil
+}
+
+// Question parses a single Question.
+func (p *Parser) Question() (Question, error) {
+ if err := p.checkAdvance(sectionQuestions); err != nil {
+ return Question{}, err
+ }
+ name, off, err := unpackName(p.msg, p.off)
+ if err != nil {
+ return Question{}, &nestedError{"unpacking Question.Name", err}
+ }
+ typ, off, err := unpackType(p.msg, off)
+ if err != nil {
+ return Question{}, &nestedError{"unpacking Question.Type", err}
+ }
+ class, off, err := unpackClass(p.msg, off)
+ if err != nil {
+ return Question{}, &nestedError{"unpacking Question.Class", err}
+ }
+ p.off = off
+ p.index++
+ return Question{name, typ, class}, nil
+}
+
+// AllQuestions parses all Questions.
+func (p *Parser) AllQuestions() ([]Question, error) {
+ qs := make([]Question, 0, p.header.questions)
+ for {
+ q, err := p.Question()
+ if err == ErrSectionDone {
+ return qs, nil
+ }
+ if err != nil {
+ return nil, err
+ }
+ qs = append(qs, q)
+ }
+}
+
+// SkipQuestion skips a single Question.
+func (p *Parser) SkipQuestion() error {
+ if err := p.checkAdvance(sectionQuestions); err != nil {
+ return err
+ }
+ off, err := skipName(p.msg, p.off)
+ if err != nil {
+ return &nestedError{"skipping Question Name", err}
+ }
+ if off, err = skipType(p.msg, off); err != nil {
+ return &nestedError{"skipping Question Type", err}
+ }
+ if off, err = skipClass(p.msg, off); err != nil {
+ return &nestedError{"skipping Question Class", err}
+ }
+ p.off = off
+ p.index++
+ return nil
+}
+
+// SkipAllQuestions skips all Questions.
+func (p *Parser) SkipAllQuestions() error {
+ for {
+ if err := p.SkipQuestion(); err == ErrSectionDone {
+ return nil
+ } else if err != nil {
+ return err
+ }
+ }
+}
+
+// AnswerHeader parses a single Answer ResourceHeader.
+func (p *Parser) AnswerHeader() (ResourceHeader, error) {
+ return p.resourceHeader(sectionAnswers)
+}
+
+// Answer parses a single Answer Resource.
+func (p *Parser) Answer() (Resource, error) {
+ return p.resource(sectionAnswers)
+}
+
+// AllAnswers parses all Answer Resources.
+func (p *Parser) AllAnswers() ([]Resource, error) {
+ as := make([]Resource, 0, p.header.answers)
+ for {
+ a, err := p.Answer()
+ if err == ErrSectionDone {
+ return as, nil
+ }
+ if err != nil {
+ return nil, err
+ }
+ as = append(as, a)
+ }
+}
+
+// SkipAnswer skips a single Answer Resource.
+func (p *Parser) SkipAnswer() error {
+ return p.skipResource(sectionAnswers)
+}
+
+// SkipAllAnswers skips all Answer Resources.
+func (p *Parser) SkipAllAnswers() error {
+ for {
+ if err := p.SkipAnswer(); err == ErrSectionDone {
+ return nil
+ } else if err != nil {
+ return err
+ }
+ }
+}
+
+// AuthorityHeader parses a single Authority ResourceHeader.
+func (p *Parser) AuthorityHeader() (ResourceHeader, error) {
+ return p.resourceHeader(sectionAuthorities)
+}
+
+// Authority parses a single Authority Resource.
+func (p *Parser) Authority() (Resource, error) {
+ return p.resource(sectionAuthorities)
+}
+
+// AllAuthorities parses all Authority Resources.
+func (p *Parser) AllAuthorities() ([]Resource, error) {
+ as := make([]Resource, 0, p.header.authorities)
+ for {
+ a, err := p.Authority()
+ if err == ErrSectionDone {
+ return as, nil
+ }
+ if err != nil {
+ return nil, err
+ }
+ as = append(as, a)
+ }
+}
+
+// SkipAuthority skips a single Authority Resource.
+func (p *Parser) SkipAuthority() error {
+ return p.skipResource(sectionAuthorities)
+}
+
+// SkipAllAuthorities skips all Authority Resources.
+func (p *Parser) SkipAllAuthorities() error {
+ for {
+ if err := p.SkipAuthority(); err == ErrSectionDone {
+ return nil
+ } else if err != nil {
+ return err
+ }
+ }
+}
+
+// AdditionalHeader parses a single Additional ResourceHeader.
+func (p *Parser) AdditionalHeader() (ResourceHeader, error) {
+ return p.resourceHeader(sectionAdditionals)
+}
+
+// Additional parses a single Additional Resource.
+func (p *Parser) Additional() (Resource, error) {
+ return p.resource(sectionAdditionals)
+}
+
+// AllAdditionals parses all Additional Resources.
+func (p *Parser) AllAdditionals() ([]Resource, error) {
+ as := make([]Resource, 0, p.header.additionals)
+ for {
+ a, err := p.Additional()
+ if err == ErrSectionDone {
+ return as, nil
+ }
+ if err != nil {
+ return nil, err
+ }
+ as = append(as, a)
+ }
+}
+
+// SkipAdditional skips a single Additional Resource.
+func (p *Parser) SkipAdditional() error {
+ return p.skipResource(sectionAdditionals)
+}
+
+// SkipAllAdditionals skips all Additional Resources.
+func (p *Parser) SkipAllAdditionals() error {
+ for {
+ if err := p.SkipAdditional(); err == ErrSectionDone {
+ return nil
+ } else if err != nil {
+ return err
+ }
+ }
+}
+
+// Unpack parses a full Message.
+func (m *Message) Unpack(msg []byte) error {
+ var p Parser
+ var err error
+ if m.Header, err = p.Start(msg); err != nil {
+ return err
+ }
+ if m.Questions, err = p.AllQuestions(); err != nil {
+ return err
+ }
+ if m.Answers, err = p.AllAnswers(); err != nil {
+ return err
+ }
+ if m.Authorities, err = p.AllAuthorities(); err != nil {
+ return err
+ }
+ if m.Additionals, err = p.AllAdditionals(); err != nil {
+ return err
+ }
+ return nil
+}
+
+// Pack packs a full Message.
+func (m *Message) Pack() ([]byte, error) {
+ // Validate the lengths. It is very unlikely that anyone will try to
+ // pack more than 65535 of any particular type, but it is possible and
+ // we should fail gracefully.
+ if len(m.Questions) > int(^uint16(0)) {
+ return nil, errTooManyQuestions
+ }
+ if len(m.Answers) > int(^uint16(0)) {
+ return nil, errTooManyAnswers
+ }
+ if len(m.Authorities) > int(^uint16(0)) {
+ return nil, errTooManyAuthorities
+ }
+ if len(m.Additionals) > int(^uint16(0)) {
+ return nil, errTooManyAdditionals
+ }
+
+ var h header
+ h.id, h.bits = m.Header.pack()
+
+ h.questions = uint16(len(m.Questions))
+ h.answers = uint16(len(m.Answers))
+ h.authorities = uint16(len(m.Authorities))
+ h.additionals = uint16(len(m.Additionals))
+
+ // The starting capacity doesn't matter too much, but most DNS responses
+ // Will be <= 512 bytes as it is the limit for DNS over UDP.
+ msg := make([]byte, 0, 512)
+
+ msg = h.pack(msg)
+
+ // RFC 1035 allows (but does not require) compression for packing. RFC
+ // 1035 requires unpacking implementations to support compression, so
+ // unconditionally enabling it is fine.
+ //
+ // DNS lookups are typically done over UDP, and RFC 1035 states that UDP
+ // DNS packets can be a maximum of 512 bytes long. Without compression,
+ // many DNS response packets are over this limit, so enabling
+ // compression will help ensure compliance.
+ compression := map[string]int{}
+
+ for _, q := range m.Questions {
+ var err error
+ msg, err = q.pack(msg, compression)
+ if err != nil {
+ return nil, &nestedError{"packing Question", err}
+ }
+ }
+ for _, a := range m.Answers {
+ var err error
+ msg, err = packResource(msg, a, compression)
+ if err != nil {
+ return nil, &nestedError{"packing Answer", err}
+ }
+ }
+ for _, a := range m.Authorities {
+ var err error
+ msg, err = packResource(msg, a, compression)
+ if err != nil {
+ return nil, &nestedError{"packing Authority", err}
+ }
+ }
+ for _, a := range m.Additionals {
+ var err error
+ msg, err = packResource(msg, a, compression)
+ if err != nil {
+ return nil, &nestedError{"packing Additional", err}
+ }
+ }
+
+ return msg, nil
+}
+
+// An ResourceHeader is the header of a DNS resource record. There are
+// many types of DNS resource records, but they all share the same header.
+type ResourceHeader struct {
+ // Name is the domain name for which this resource record pertains.
+ Name string
+
+ // Type is the type of DNS resource record.
+ //
+ // This field will be set automatically during packing.
+ Type Type
+
+ // Class is the class of network to which this DNS resource record
+ // pertains.
+ Class Class
+
+ // TTL is the length of time (measured in seconds) which this resource
+ // record is valid for (time to live). All Resources in a set should
+ // have the same TTL (RFC 2181 Section 5.2).
+ TTL uint32
+
+ // Length is the length of data in the resource record after the header.
+ //
+ // This field will be set automatically during packing.
+ Length uint16
+}
+
+// Header implements Resource.Header.
+func (h *ResourceHeader) Header() *ResourceHeader {
+ return h
+}
+
+// pack packs all of the fields in a ResourceHeader except for the length. The
+// length bytes are returned as a slice so they can be filled in after the rest
+// of the Resource has been packed.
+func (h *ResourceHeader) pack(oldMsg []byte, compression map[string]int) (msg []byte, length []byte, err error) {
+ msg = oldMsg
+ if msg, err = packName(msg, h.Name, compression); err != nil {
+ return oldMsg, nil, &nestedError{"Name", err}
+ }
+ msg = packType(msg, h.Type)
+ msg = packClass(msg, h.Class)
+ msg = packUint32(msg, h.TTL)
+ lenBegin := len(msg)
+ msg = packUint16(msg, h.Length)
+ return msg, msg[lenBegin:], nil
+}
+
+func (h *ResourceHeader) unpack(msg []byte, off int) (int, error) {
+ newOff := off
+ var err error
+ if h.Name, newOff, err = unpackName(msg, newOff); err != nil {
+ return off, &nestedError{"Name", err}
+ }
+ if h.Type, newOff, err = unpackType(msg, newOff); err != nil {
+ return off, &nestedError{"Type", err}
+ }
+ if h.Class, newOff, err = unpackClass(msg, newOff); err != nil {
+ return off, &nestedError{"Class", err}
+ }
+ if h.TTL, newOff, err = unpackUint32(msg, newOff); err != nil {
+ return off, &nestedError{"TTL", err}
+ }
+ if h.Length, newOff, err = unpackUint16(msg, newOff); err != nil {
+ return off, &nestedError{"Length", err}
+ }
+ return newOff, nil
+}
+
+func skipResource(msg []byte, off int) (int, error) {
+ newOff, err := skipName(msg, off)
+ if err != nil {
+ return off, &nestedError{"Name", err}
+ }
+ if newOff, err = skipType(msg, newOff); err != nil {
+ return off, &nestedError{"Type", err}
+ }
+ if newOff, err = skipClass(msg, newOff); err != nil {
+ return off, &nestedError{"Class", err}
+ }
+ if newOff, err = skipUint32(msg, newOff); err != nil {
+ return off, &nestedError{"TTL", err}
+ }
+ length, newOff, err := unpackUint16(msg, newOff)
+ if err != nil {
+ return off, &nestedError{"Length", err}
+ }
+ if newOff += int(length); newOff > len(msg) {
+ return off, errResourceLen
+ }
+ return newOff, nil
+}
+
+func packUint16(msg []byte, field uint16) []byte {
+ return append(msg, byte(field>>8), byte(field))
+}
+
+func unpackUint16(msg []byte, off int) (uint16, int, error) {
+ if off+2 > len(msg) {
+ return 0, off, errBaseLen
+ }
+ return uint16(msg[off])<<8 | uint16(msg[off+1]), off + 2, nil
+}
+
+func skipUint16(msg []byte, off int) (int, error) {
+ if off+2 > len(msg) {
+ return off, errBaseLen
+ }
+ return off + 2, nil
+}
+
+func packType(msg []byte, field Type) []byte {
+ return packUint16(msg, uint16(field))
+}
+
+func unpackType(msg []byte, off int) (Type, int, error) {
+ t, o, err := unpackUint16(msg, off)
+ return Type(t), o, err
+}
+
+func skipType(msg []byte, off int) (int, error) {
+ return skipUint16(msg, off)
+}
+
+func packClass(msg []byte, field Class) []byte {
+ return packUint16(msg, uint16(field))
+}
+
+func unpackClass(msg []byte, off int) (Class, int, error) {
+ c, o, err := unpackUint16(msg, off)
+ return Class(c), o, err
+}
+
+func skipClass(msg []byte, off int) (int, error) {
+ return skipUint16(msg, off)
+}
+
+func packUint32(msg []byte, field uint32) []byte {
+ return append(
+ msg,
+ byte(field>>24),
+ byte(field>>16),
+ byte(field>>8),
+ byte(field),
+ )
+}
+
+func unpackUint32(msg []byte, off int) (uint32, int, error) {
+ if off+4 > len(msg) {
+ return 0, off, errBaseLen
+ }
+ v := uint32(msg[off])<<24 | uint32(msg[off+1])<<16 | uint32(msg[off+2])<<8 | uint32(msg[off+3])
+ return v, off + 4, nil
+}
+
+func skipUint32(msg []byte, off int) (int, error) {
+ if off+4 > len(msg) {
+ return off, errBaseLen
+ }
+ return off + 4, nil
+}
+
+func packText(msg []byte, field string) []byte {
+ for len(field) > 0 {
+ l := len(field)
+ if l > 255 {
+ l = 255
+ }
+ msg = append(msg, byte(l))
+ msg = append(msg, field[:l]...)
+ field = field[l:]
+ }
+ return msg
+}
+
+func unpackText(msg []byte, off int) (string, int, error) {
+ if off >= len(msg) {
+ return "", off, errBaseLen
+ }
+ beginOff := off + 1
+ endOff := beginOff + int(msg[off])
+ if endOff > len(msg) {
+ return "", off, errCalcLen
+ }
+ return string(msg[beginOff:endOff]), endOff, nil
+}
+
+func skipText(msg []byte, off int) (int, error) {
+ if off >= len(msg) {
+ return off, errBaseLen
+ }
+ endOff := off + 1 + int(msg[off])
+ if endOff > len(msg) {
+ return off, errCalcLen
+ }
+ return endOff, nil
+}
+
+func packBytes(msg []byte, field []byte) []byte {
+ return append(msg, field...)
+}
+
+func unpackBytes(msg []byte, off int, field []byte) (int, error) {
+ newOff := off + len(field)
+ if newOff > len(msg) {
+ return off, errBaseLen
+ }
+ copy(field, msg[off:newOff])
+ return newOff, nil
+}
+
+func skipBytes(msg []byte, off int, field []byte) (int, error) {
+ newOff := off + len(field)
+ if newOff > len(msg) {
+ return off, errBaseLen
+ }
+ return newOff, nil
+}
+
+// packName packs a domain name.
+//
+// Domain names are a sequence of counted strings split at the dots. They end
+// with a zero-length string. Compression can be used to reuse domain suffixes.
+//
+// The compression map will be updated with new domain suffixes. If compression
+// is nil, compression will not be used.
+func packName(msg []byte, name string, compression map[string]int) ([]byte, error) {
+ oldMsg := msg
+
+ // Add a trailing dot to canonicalize name.
+ if n := len(name); n == 0 || name[n-1] != '.' {
+ name += "."
+ }
+
+ // Allow root domain.
+ if name == "." {
+ return append(msg, 0), nil
+ }
+
+ // Emit sequence of counted strings, chopping at dots.
+ for i, begin := 0, 0; i < len(name); i++ {
+ // Check for the end of the segment.
+ if name[i] == '.' {
+ // The two most significant bits have special meaning.
+ // It isn't allowed for segments to be long enough to
+ // need them.
+ if i-begin >= 1<<6 {
+ return oldMsg, errSegTooLong
+ }
+
+ // Segments must have a non-zero length.
+ if i-begin == 0 {
+ return oldMsg, errZeroSegLen
+ }
+
+ msg = append(msg, byte(i-begin))
+
+ for j := begin; j < i; j++ {
+ msg = append(msg, name[j])
+ }
+
+ begin = i + 1
+ continue
+ }
+
+ // We can only compress domain suffixes starting with a new
+ // segment. A pointer is two bytes with the two most significant
+ // bits set to 1 to indicate that it is a pointer.
+ if (i == 0 || name[i-1] == '.') && compression != nil {
+ if ptr, ok := compression[name[i:]]; ok {
+ // Hit. Emit a pointer instead of the rest of
+ // the domain.
+ return append(msg, byte(ptr>>8|0xC0), byte(ptr)), nil
+ }
+
+ // Miss. Add the suffix to the compression table if the
+ // offset can be stored in the available 14 bytes.
+ if len(msg) <= int(^uint16(0)>>2) {
+ compression[name[i:]] = len(msg)
+ }
+ }
+ }
+ return append(msg, 0), nil
+}
+
+// unpackName unpacks a domain name.
+func unpackName(msg []byte, off int) (string, int, error) {
+ // currOff is the current working offset.
+ currOff := off
+
+ // newOff is the offset where the next record will start. Pointers lead
+ // to data that belongs to other names and thus doesn't count towards to
+ // the usage of this name.
+ newOff := off
+
+ // name is the domain name being unpacked.
+ name := make([]byte, 0, 255)
+
+ // ptr is the number of pointers followed.
+ var ptr int
+Loop:
+ for {
+ if currOff >= len(msg) {
+ return "", off, errBaseLen
+ }
+ c := int(msg[currOff])
+ currOff++
+ switch c & 0xC0 {
+ case 0x00: // String segment
+ if c == 0x00 {
+ // A zero length signals the end of the name.
+ break Loop
+ }
+ endOff := currOff + c
+ if endOff > len(msg) {
+ return "", off, errCalcLen
+ }
+ name = append(name, msg[currOff:endOff]...)
+ name = append(name, '.')
+ currOff = endOff
+ case 0xC0: // Pointer
+ if currOff >= len(msg) {
+ return "", off, errInvalidPtr
+ }
+ c1 := msg[currOff]
+ currOff++
+ if ptr == 0 {
+ newOff = currOff
+ }
+ // Don't follow too many pointers, maybe there's a loop.
+ if ptr++; ptr > 10 {
+ return "", off, errTooManyPtr
+ }
+ currOff = (c^0xC0)<<8 | int(c1)
+ default:
+ // Prefixes 0x80 and 0x40 are reserved.
+ return "", off, errReserved
+ }
+ }
+ if len(name) == 0 {
+ name = append(name, '.')
+ }
+ if ptr == 0 {
+ newOff = currOff
+ }
+ return string(name), newOff, nil
+}
+
+func skipName(msg []byte, off int) (int, error) {
+ // newOff is the offset where the next record will start. Pointers lead
+ // to data that belongs to other names and thus doesn't count towards to
+ // the usage of this name.
+ newOff := off
+
+Loop:
+ for {
+ if newOff >= len(msg) {
+ return off, errBaseLen
+ }
+ c := int(msg[newOff])
+ newOff++
+ switch c & 0xC0 {
+ case 0x00:
+ if c == 0x00 {
+ // A zero length signals the end of the name.
+ break Loop
+ }
+ // literal string
+ newOff += c
+ if newOff > len(msg) {
+ return off, errCalcLen
+ }
+ case 0xC0:
+ // Pointer to somewhere else in msg.
+
+ // Pointers are two bytes.
+ newOff++
+
+ // Don't follow the pointer as the data here has ended.
+ break Loop
+ default:
+ // Prefixes 0x80 and 0x40 are reserved.
+ return off, errReserved
+ }
+ }
+
+ return newOff, nil
+}
+
+// A Question is a DNS query.
+type Question struct {
+ Name string
+ Type Type
+ Class Class
+}
+
+func (q *Question) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ msg, err := packName(msg, q.Name, compression)
+ if err != nil {
+ return msg, &nestedError{"Name", err}
+ }
+ msg = packType(msg, q.Type)
+ return packClass(msg, q.Class), nil
+}
+
+func unpackResource(msg []byte, off int, hdr ResourceHeader) (Resource, int, error) {
+ var (
+ r Resource
+ err error
+ name string
+ )
+ switch hdr.Type {
+ case TypeA:
+ r, err = unpackAResource(hdr, msg, off)
+ name = "A"
+ case TypeNS:
+ r, err = unpackNSResource(hdr, msg, off)
+ name = "NS"
+ case TypeCNAME:
+ r, err = unpackCNAMEResource(hdr, msg, off)
+ name = "CNAME"
+ case TypeSOA:
+ r, err = unpackSOAResource(hdr, msg, off)
+ name = "SOA"
+ case TypePTR:
+ r, err = unpackPTRResource(hdr, msg, off)
+ name = "PTR"
+ case TypeMX:
+ r, err = unpackMXResource(hdr, msg, off)
+ name = "MX"
+ case TypeTXT:
+ r, err = unpackTXTResource(hdr, msg, off)
+ name = "TXT"
+ case TypeAAAA:
+ r, err = unpackAAAAResource(hdr, msg, off)
+ name = "AAAA"
+ case TypeSRV:
+ r, err = unpackSRVResource(hdr, msg, off)
+ name = "SRV"
+ }
+ if err != nil {
+ return nil, off, &nestedError{name + " record", err}
+ }
+ if r != nil {
+ return r, off + int(hdr.Length), nil
+ }
+ return nil, off, errors.New("invalid resource type: " + string(hdr.Type+'0'))
+}
+
+// A CNAMEResource is a CNAME Resource record.
+type CNAMEResource struct {
+ ResourceHeader
+
+ CNAME string
+}
+
+func (r *CNAMEResource) realType() Type {
+ return TypeCNAME
+}
+
+func (r *CNAMEResource) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ return packName(msg, r.CNAME, compression)
+}
+
+func unpackCNAMEResource(hdr ResourceHeader, msg []byte, off int) (*CNAMEResource, error) {
+ cname, _, err := unpackName(msg, off)
+ if err != nil {
+ return nil, err
+ }
+ return &CNAMEResource{hdr, cname}, nil
+}
+
+// An MXResource is an MX Resource record.
+type MXResource struct {
+ ResourceHeader
+
+ Pref uint16
+ MX string
+}
+
+func (r *MXResource) realType() Type {
+ return TypeMX
+}
+
+func (r *MXResource) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ oldMsg := msg
+ msg = packUint16(msg, r.Pref)
+ msg, err := packName(msg, r.MX, compression)
+ if err != nil {
+ return oldMsg, &nestedError{"MXResource.MX", err}
+ }
+ return msg, nil
+}
+
+func unpackMXResource(hdr ResourceHeader, msg []byte, off int) (*MXResource, error) {
+ pref, off, err := unpackUint16(msg, off)
+ if err != nil {
+ return nil, &nestedError{"Pref", err}
+ }
+ mx, _, err := unpackName(msg, off)
+ if err != nil {
+ return nil, &nestedError{"MX", err}
+ }
+ return &MXResource{hdr, pref, mx}, nil
+}
+
+// An NSResource is an NS Resource record.
+type NSResource struct {
+ ResourceHeader
+
+ NS string
+}
+
+func (r *NSResource) realType() Type {
+ return TypeNS
+}
+
+func (r *NSResource) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ return packName(msg, r.NS, compression)
+}
+
+func unpackNSResource(hdr ResourceHeader, msg []byte, off int) (*NSResource, error) {
+ ns, _, err := unpackName(msg, off)
+ if err != nil {
+ return nil, err
+ }
+ return &NSResource{hdr, ns}, nil
+}
+
+// A PTRResource is a PTR Resource record.
+type PTRResource struct {
+ ResourceHeader
+
+ PTR string
+}
+
+func (r *PTRResource) realType() Type {
+ return TypePTR
+}
+
+func (r *PTRResource) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ return packName(msg, r.PTR, compression)
+}
+
+func unpackPTRResource(hdr ResourceHeader, msg []byte, off int) (*PTRResource, error) {
+ ptr, _, err := unpackName(msg, off)
+ if err != nil {
+ return nil, err
+ }
+ return &PTRResource{hdr, ptr}, nil
+}
+
+// An SOAResource is an SOA Resource record.
+type SOAResource struct {
+ ResourceHeader
+
+ NS string
+ MBox string
+ Serial uint32
+ Refresh uint32
+ Retry uint32
+ Expire uint32
+
+ // MinTTL the is the default TTL of Resources records which did not
+ // contain a TTL value and the TTL of negative responses. (RFC 2308
+ // Section 4)
+ MinTTL uint32
+}
+
+func (r *SOAResource) realType() Type {
+ return TypeSOA
+}
+
+func (r *SOAResource) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ oldMsg := msg
+ msg, err := packName(msg, r.NS, compression)
+ if err != nil {
+ return oldMsg, &nestedError{"SOAResource.NS", err}
+ }
+ msg, err = packName(msg, r.MBox, compression)
+ if err != nil {
+ return oldMsg, &nestedError{"SOAResource.MBox", err}
+ }
+ msg = packUint32(msg, r.Serial)
+ msg = packUint32(msg, r.Refresh)
+ msg = packUint32(msg, r.Retry)
+ msg = packUint32(msg, r.Expire)
+ return packUint32(msg, r.MinTTL), nil
+}
+
+func unpackSOAResource(hdr ResourceHeader, msg []byte, off int) (*SOAResource, error) {
+ ns, off, err := unpackName(msg, off)
+ if err != nil {
+ return nil, &nestedError{"NS", err}
+ }
+ mbox, off, err := unpackName(msg, off)
+ if err != nil {
+ return nil, &nestedError{"MBox", err}
+ }
+ serial, off, err := unpackUint32(msg, off)
+ if err != nil {
+ return nil, &nestedError{"Serial", err}
+ }
+ refresh, off, err := unpackUint32(msg, off)
+ if err != nil {
+ return nil, &nestedError{"Refresh", err}
+ }
+ retry, off, err := unpackUint32(msg, off)
+ if err != nil {
+ return nil, &nestedError{"Retry", err}
+ }
+ expire, off, err := unpackUint32(msg, off)
+ if err != nil {
+ return nil, &nestedError{"Expire", err}
+ }
+ minTTL, _, err := unpackUint32(msg, off)
+ if err != nil {
+ return nil, &nestedError{"MinTTL", err}
+ }
+ return &SOAResource{hdr, ns, mbox, serial, refresh, retry, expire, minTTL}, nil
+}
+
+// A TXTResource is a TXT Resource record.
+type TXTResource struct {
+ ResourceHeader
+
+ Txt string // Not a domain name.
+}
+
+func (r *TXTResource) realType() Type {
+ return TypeTXT
+}
+
+func (r *TXTResource) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ return packText(msg, r.Txt), nil
+}
+
+func unpackTXTResource(hdr ResourceHeader, msg []byte, off int) (*TXTResource, error) {
+ var txt string
+ for n := uint16(0); n < hdr.Length; {
+ var t string
+ var err error
+ if t, off, err = unpackText(msg, off); err != nil {
+ return nil, &nestedError{"text", err}
+ }
+ // Check if we got too many bytes.
+ if hdr.Length-n < uint16(len(t))+1 {
+ return nil, errCalcLen
+ }
+ n += uint16(len(t)) + 1
+ txt += t
+ }
+ return &TXTResource{hdr, txt}, nil
+}
+
+// An SRVResource is an SRV Resource record.
+type SRVResource struct {
+ ResourceHeader
+
+ Priority uint16
+ Weight uint16
+ Port uint16
+ Target string // Not compressed as per RFC 2782.
+}
+
+func (r *SRVResource) realType() Type {
+ return TypeSRV
+}
+
+func (r *SRVResource) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ oldMsg := msg
+ msg = packUint16(msg, r.Priority)
+ msg = packUint16(msg, r.Weight)
+ msg = packUint16(msg, r.Port)
+ msg, err := packName(msg, r.Target, nil)
+ if err != nil {
+ return oldMsg, &nestedError{"SRVResource.Target", err}
+ }
+ return msg, nil
+}
+
+func unpackSRVResource(hdr ResourceHeader, msg []byte, off int) (*SRVResource, error) {
+ priority, off, err := unpackUint16(msg, off)
+ if err != nil {
+ return nil, &nestedError{"Priority", err}
+ }
+ weight, off, err := unpackUint16(msg, off)
+ if err != nil {
+ return nil, &nestedError{"Weight", err}
+ }
+ port, off, err := unpackUint16(msg, off)
+ if err != nil {
+ return nil, &nestedError{"Port", err}
+ }
+ target, _, err := unpackName(msg, off)
+ if err != nil {
+ return nil, &nestedError{"Target", err}
+ }
+ return &SRVResource{hdr, priority, weight, port, target}, nil
+}
+
+// An AResource is an A Resource record.
+type AResource struct {
+ ResourceHeader
+
+ A [4]byte
+}
+
+func (r *AResource) realType() Type {
+ return TypeA
+}
+
+func (r *AResource) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ return packBytes(msg, r.A[:]), nil
+}
+
+func unpackAResource(hdr ResourceHeader, msg []byte, off int) (*AResource, error) {
+ var a [4]byte
+ if _, err := unpackBytes(msg, off, a[:]); err != nil {
+ return nil, err
+ }
+ return &AResource{hdr, a}, nil
+}
+
+// An AAAAResource is an AAAA Resource record.
+type AAAAResource struct {
+ ResourceHeader
+
+ AAAA [16]byte
+}
+
+func (r *AAAAResource) realType() Type {
+ return TypeAAAA
+}
+
+func (r *AAAAResource) pack(msg []byte, compression map[string]int) ([]byte, error) {
+ return packBytes(msg, r.AAAA[:]), nil
+}
+
+func unpackAAAAResource(hdr ResourceHeader, msg []byte, off int) (*AAAAResource, error) {
+ var aaaa [16]byte
+ if _, err := unpackBytes(msg, off, aaaa[:]); err != nil {
+ return nil, err
+ }
+ return &AAAAResource{hdr, aaaa}, nil
+}
diff --git a/vendor/golang.org/x/net/dns/dnsmessage/message_test.go b/vendor/golang.org/x/net/dns/dnsmessage/message_test.go
new file mode 100644
index 0000000..46edd72
--- /dev/null
+++ b/vendor/golang.org/x/net/dns/dnsmessage/message_test.go
@@ -0,0 +1,575 @@
+// 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 dnsmessage
+
+import (
+ "fmt"
+ "net"
+ "reflect"
+ "strings"
+ "testing"
+)
+
+func (m *Message) String() string {
+ s := fmt.Sprintf("Message: %#v\n", &m.Header)
+ if len(m.Questions) > 0 {
+ s += "-- Questions\n"
+ for _, q := range m.Questions {
+ s += fmt.Sprintf("%#v\n", q)
+ }
+ }
+ if len(m.Answers) > 0 {
+ s += "-- Answers\n"
+ for _, a := range m.Answers {
+ s += fmt.Sprintf("%#v\n", a)
+ }
+ }
+ if len(m.Authorities) > 0 {
+ s += "-- Authorities\n"
+ for _, ns := range m.Authorities {
+ s += fmt.Sprintf("%#v\n", ns)
+ }
+ }
+ if len(m.Additionals) > 0 {
+ s += "-- Additionals\n"
+ for _, e := range m.Additionals {
+ s += fmt.Sprintf("%#v\n", e)
+ }
+ }
+ return s
+}
+
+func TestQuestionPackUnpack(t *testing.T) {
+ want := Question{
+ Name: ".",
+ Type: TypeA,
+ Class: ClassINET,
+ }
+ buf, err := want.pack(make([]byte, 1, 50), map[string]int{})
+ if err != nil {
+ t.Fatal("Packing failed:", err)
+ }
+ var p Parser
+ p.msg = buf
+ p.header.questions = 1
+ p.section = sectionQuestions
+ p.off = 1
+ got, err := p.Question()
+ if err != nil {
+ t.Fatalf("Unpacking failed: %v\n%s", err, string(buf[1:]))
+ }
+ if p.off != len(buf) {
+ t.Errorf("Unpacked different amount than packed: got n = %d, want = %d", p.off, len(buf))
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("Got = %+v, want = %+v", got, want)
+ }
+}
+
+func TestNamePackUnpack(t *testing.T) {
+ tests := []struct {
+ in string
+ want string
+ err error
+ }{
+ {"", ".", nil},
+ {".", ".", nil},
+ {"google..com", "", errZeroSegLen},
+ {"google.com", "google.com.", nil},
+ {"google..com.", "", errZeroSegLen},
+ {"google.com.", "google.com.", nil},
+ {".google.com.", "", errZeroSegLen},
+ {"www..google.com.", "", errZeroSegLen},
+ {"www.google.com.", "www.google.com.", nil},
+ }
+
+ for _, test := range tests {
+ buf, err := packName(make([]byte, 0, 30), test.in, map[string]int{})
+ if err != test.err {
+ t.Errorf("Packing of %s: got err = %v, want err = %v", test.in, err, test.err)
+ continue
+ }
+ if test.err != nil {
+ continue
+ }
+ got, n, err := unpackName(buf, 0)
+ if err != nil {
+ t.Errorf("Unpacking for %s failed: %v", test.in, err)
+ continue
+ }
+ if n != len(buf) {
+ t.Errorf(
+ "Unpacked different amount than packed for %s: got n = %d, want = %d",
+ test.in,
+ n,
+ len(buf),
+ )
+ }
+ if got != test.want {
+ t.Errorf("Unpacking packing of %s: got = %s, want = %s", test.in, got, test.want)
+ }
+ }
+}
+
+func TestDNSPackUnpack(t *testing.T) {
+ wants := []Message{
+ {
+ Questions: []Question{
+ {
+ Name: ".",
+ Type: TypeAAAA,
+ Class: ClassINET,
+ },
+ },
+ Answers: []Resource{},
+ Authorities: []Resource{},
+ Additionals: []Resource{},
+ },
+ largeTestMsg(),
+ }
+ for i, want := range wants {
+ b, err := want.Pack()
+ if err != nil {
+ t.Fatalf("%d: packing failed: %v", i, err)
+ }
+ var got Message
+ err = got.Unpack(b)
+ if err != nil {
+ t.Fatalf("%d: unpacking failed: %v", i, err)
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("%d: got = %+v, want = %+v", i, &got, &want)
+ }
+ }
+}
+
+func TestSkipAll(t *testing.T) {
+ msg := largeTestMsg()
+ buf, err := msg.Pack()
+ if err != nil {
+ t.Fatal("Packing large test message:", err)
+ }
+ var p Parser
+ if _, err := p.Start(buf); err != nil {
+ t.Fatal(err)
+ }
+
+ tests := []struct {
+ name string
+ f func() error
+ }{
+ {"SkipAllQuestions", p.SkipAllQuestions},
+ {"SkipAllAnswers", p.SkipAllAnswers},
+ {"SkipAllAuthorities", p.SkipAllAuthorities},
+ {"SkipAllAdditionals", p.SkipAllAdditionals},
+ }
+ for _, test := range tests {
+ for i := 1; i <= 3; i++ {
+ if err := test.f(); err != nil {
+ t.Errorf("Call #%d to %s(): %v", i, test.name, err)
+ }
+ }
+ }
+}
+
+func TestSkipNotStarted(t *testing.T) {
+ var p Parser
+
+ tests := []struct {
+ name string
+ f func() error
+ }{
+ {"SkipAllQuestions", p.SkipAllQuestions},
+ {"SkipAllAnswers", p.SkipAllAnswers},
+ {"SkipAllAuthorities", p.SkipAllAuthorities},
+ {"SkipAllAdditionals", p.SkipAllAdditionals},
+ }
+ for _, test := range tests {
+ if err := test.f(); err != ErrNotStarted {
+ t.Errorf("Got %s() = %v, want = %v", test.name, err, ErrNotStarted)
+ }
+ }
+}
+
+func TestTooManyRecords(t *testing.T) {
+ const recs = int(^uint16(0)) + 1
+ tests := []struct {
+ name string
+ msg Message
+ want error
+ }{
+ {
+ "Questions",
+ Message{
+ Questions: make([]Question, recs),
+ },
+ errTooManyQuestions,
+ },
+ {
+ "Answers",
+ Message{
+ Answers: make([]Resource, recs),
+ },
+ errTooManyAnswers,
+ },
+ {
+ "Authorities",
+ Message{
+ Authorities: make([]Resource, recs),
+ },
+ errTooManyAuthorities,
+ },
+ {
+ "Additionals",
+ Message{
+ Additionals: make([]Resource, recs),
+ },
+ errTooManyAdditionals,
+ },
+ }
+
+ for _, test := range tests {
+ if _, got := test.msg.Pack(); got != test.want {
+ t.Errorf("Packing %d %s: got = %v, want = %v", recs, test.name, got, test.want)
+ }
+ }
+}
+
+func TestVeryLongTxt(t *testing.T) {
+ want := &TXTResource{
+ ResourceHeader: ResourceHeader{
+ Name: "foo.bar.example.com.",
+ Type: TypeTXT,
+ Class: ClassINET,
+ },
+ Txt: loremIpsum,
+ }
+ buf, err := packResource(make([]byte, 0, 8000), want, map[string]int{})
+ if err != nil {
+ t.Fatal("Packing failed:", err)
+ }
+ var hdr ResourceHeader
+ off, err := hdr.unpack(buf, 0)
+ if err != nil {
+ t.Fatal("Unpacking ResourceHeader failed:", err)
+ }
+ got, n, err := unpackResource(buf, off, hdr)
+ if err != nil {
+ t.Fatal("Unpacking failed:", err)
+ }
+ if n != len(buf) {
+ t.Errorf("Unpacked different amount than packed: got n = %d, want = %d", n, len(buf))
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("Got = %+v, want = %+v", got, want)
+ }
+}
+
+func ExampleHeaderSearch() {
+ msg := Message{
+ Header: Header{Response: true, Authoritative: true},
+ Questions: []Question{
+ {
+ Name: "foo.bar.example.com.",
+ Type: TypeA,
+ Class: ClassINET,
+ },
+ {
+ Name: "bar.example.com.",
+ Type: TypeA,
+ Class: ClassINET,
+ },
+ },
+ Answers: []Resource{
+ &AResource{
+ ResourceHeader: ResourceHeader{
+ Name: "foo.bar.example.com.",
+ Type: TypeA,
+ Class: ClassINET,
+ },
+ A: [4]byte{127, 0, 0, 1},
+ },
+ &AResource{
+ ResourceHeader: ResourceHeader{
+ Name: "bar.example.com.",
+ Type: TypeA,
+ Class: ClassINET,
+ },
+ A: [4]byte{127, 0, 0, 2},
+ },
+ },
+ }
+
+ buf, err := msg.Pack()
+ if err != nil {
+ panic(err)
+ }
+
+ wantName := "bar.example.com."
+
+ var p Parser
+ if _, err := p.Start(buf); err != nil {
+ panic(err)
+ }
+
+ for {
+ q, err := p.Question()
+ if err == ErrSectionDone {
+ break
+ }
+ if err != nil {
+ panic(err)
+ }
+
+ if q.Name != wantName {
+ continue
+ }
+
+ fmt.Println("Found question for name", wantName)
+ if err := p.SkipAllQuestions(); err != nil {
+ panic(err)
+ }
+ break
+ }
+
+ var gotIPs []net.IP
+ for {
+ h, err := p.AnswerHeader()
+ if err == ErrSectionDone {
+ break
+ }
+ if err != nil {
+ panic(err)
+ }
+
+ if (h.Type != TypeA && h.Type != TypeAAAA) || h.Class != ClassINET {
+ continue
+ }
+
+ if !strings.EqualFold(h.Name, wantName) {
+ if err := p.SkipAnswer(); err != nil {
+ panic(err)
+ }
+ continue
+ }
+ a, err := p.Answer()
+ if err != nil {
+ panic(err)
+ }
+
+ switch r := a.(type) {
+ default:
+ panic(fmt.Sprintf("unknown type: %T", r))
+ case *AResource:
+ gotIPs = append(gotIPs, r.A[:])
+ case *AAAAResource:
+ gotIPs = append(gotIPs, r.AAAA[:])
+ }
+ }
+
+ fmt.Printf("Found A/AAAA records for name %s: %v\n", wantName, gotIPs)
+
+ // Output:
+ // Found question for name bar.example.com.
+ // Found A/AAAA records for name bar.example.com.: [127.0.0.2]
+}
+
+func largeTestMsg() Message {
+ return Message{
+ Header: Header{Response: true, Authoritative: true},
+ Questions: []Question{
+ {
+ Name: "foo.bar.example.com.",
+ Type: TypeA,
+ Class: ClassINET,
+ },
+ },
+ Answers: []Resource{
+ &AResource{
+ ResourceHeader: ResourceHeader{
+ Name: "foo.bar.example.com.",
+ Type: TypeA,
+ Class: ClassINET,
+ },
+ A: [4]byte{127, 0, 0, 1},
+ },
+ &AResource{
+ ResourceHeader: ResourceHeader{
+ Name: "foo.bar.example.com.",
+ Type: TypeA,
+ Class: ClassINET,
+ },
+ A: [4]byte{127, 0, 0, 2},
+ },
+ },
+ Authorities: []Resource{
+ &NSResource{
+ ResourceHeader: ResourceHeader{
+ Name: "foo.bar.example.com.",
+ Type: TypeNS,
+ Class: ClassINET,
+ },
+ NS: "ns1.example.com.",
+ },
+ &NSResource{
+ ResourceHeader: ResourceHeader{
+ Name: "foo.bar.example.com.",
+ Type: TypeNS,
+ Class: ClassINET,
+ },
+ NS: "ns2.example.com.",
+ },
+ },
+ Additionals: []Resource{
+ &TXTResource{
+ ResourceHeader: ResourceHeader{
+ Name: "foo.bar.example.com.",
+ Type: TypeTXT,
+ Class: ClassINET,
+ },
+ Txt: "So Long, and Thanks for All the Fish",
+ },
+ &TXTResource{
+ ResourceHeader: ResourceHeader{
+ Name: "foo.bar.example.com.",
+ Type: TypeTXT,
+ Class: ClassINET,
+ },
+ Txt: "Hamster Huey and the Gooey Kablooie",
+ },
+ },
+ }
+}
+
+const loremIpsum = `
+Lorem ipsum dolor sit amet, nec enim antiopam id, an ullum choro
+nonumes qui, pro eu debet honestatis mediocritatem. No alia enim eos,
+magna signiferumque ex vis. Mei no aperiri dissentias, cu vel quas
+regione. Malorum quaeque vim ut, eum cu semper aliquid invidunt, ei
+nam ipsum assentior.
+
+Nostrum appellantur usu no, vis ex probatus adipiscing. Cu usu illum
+facilis eleifend. Iusto conceptam complectitur vim id. Tale omnesque
+no usu, ei oblique sadipscing vim. At nullam voluptua usu, mei laudem
+reformidans et. Qui ei eros porro reformidans, ius suas veritus
+torquatos ex. Mea te facer alterum consequat.
+
+Soleat torquatos democritum sed et, no mea congue appareat, facer
+aliquam nec in. Has te ipsum tritani. At justo dicta option nec, movet
+phaedrum ad nam. Ea detracto verterem liberavisse has, delectus
+suscipiantur in mei. Ex nam meliore complectitur. Ut nam omnis
+honestatis quaerendum, ea mea nihil affert detracto, ad vix rebum
+mollis.
+
+Ut epicurei praesent neglegentur pri, prima fuisset intellegebat ad
+vim. An habemus comprehensam usu, at enim dignissim pro. Eam reque
+vivendum adipisci ea. Vel ne odio choro minimum. Sea admodum
+dissentiet ex. Mundi tamquam evertitur ius cu. Homero postea iisque ut
+pro, vel ne saepe senserit consetetur.
+
+Nulla utamur facilisis ius ea, in viderer diceret pertinax eum. Mei no
+enim quodsi facilisi, ex sed aeterno appareat mediocritatem, eum
+sententiae deterruisset ut. At suas timeam euismod cum, offendit
+appareat interpretaris ne vix. Vel ea civibus albucius, ex vim quidam
+accusata intellegebat, noluisse instructior sea id. Nec te nonumes
+habemus appellantur, quis dignissim vituperata eu nam.
+
+At vix apeirian patrioque vituperatoribus, an usu agam assum. Debet
+iisque an mea. Per eu dicant ponderum accommodare. Pri alienum
+placerat senserit an, ne eum ferri abhorreant vituperatoribus. Ut mea
+eligendi disputationi. Ius no tation everti impedit, ei magna quidam
+mediocritatem pri.
+
+Legendos perpetua iracundia ne usu, no ius ullum epicurei intellegam,
+ad modus epicuri lucilius eam. In unum quaerendum usu. Ne diam paulo
+has, ea veri virtute sed. Alia honestatis conclusionemque mea eu, ut
+iudico albucius his.
+
+Usu essent probatus eu, sed omnis dolor delicatissimi ex. No qui augue
+dissentias dissentiet. Laudem recteque no usu, vel an velit noluisse,
+an sed utinam eirmod appetere. Ne mea fuisset inimicus ocurreret. At
+vis dicant abhorreant, utinam forensibus nec ne, mei te docendi
+consequat. Brute inermis persecuti cum id. Ut ipsum munere propriae
+usu, dicit graeco disputando id has.
+
+Eros dolore quaerendum nam ei. Timeam ornatus inciderint pro id. Nec
+torquatos sadipscing ei, ancillae molestie per in. Malis principes duo
+ea, usu liber postulant ei.
+
+Graece timeam voluptatibus eu eam. Alia probatus quo no, ea scripta
+feugiat duo. Congue option meliore ex qui, noster invenire appellantur
+ea vel. Eu exerci legendos vel. Consetetur repudiandae vim ut. Vix an
+probo minimum, et nam illud falli tempor.
+
+Cum dico signiferumque eu. Sed ut regione maiorum, id veritus insolens
+tacimates vix. Eu mel sint tamquam lucilius, duo no oporteat
+tacimates. Atqui augue concludaturque vix ei, id mel utroque menandri.
+
+Ad oratio blandit aliquando pro. Vis et dolorum rationibus
+philosophia, ad cum nulla molestie. Hinc fuisset adversarium eum et,
+ne qui nisl verear saperet, vel te quaestio forensibus. Per odio
+option delenit an. Alii placerat has no, in pri nihil platonem
+cotidieque. Est ut elit copiosae scaevola, debet tollit maluisset sea
+an.
+
+Te sea hinc debet pericula, liber ridens fabulas cu sed, quem mutat
+accusam mea et. Elitr labitur albucius et pri, an labore feugait mel.
+Velit zril melius usu ea. Ad stet putent interpretaris qui. Mel no
+error volumus scripserit. In pro paulo iudico, quo ei dolorem
+verterem, affert fabellas dissentiet ea vix.
+
+Vis quot deserunt te. Error aliquid detraxit eu usu, vis alia eruditi
+salutatus cu. Est nostrud bonorum an, ei usu alii salutatus. Vel at
+nisl primis, eum ex aperiri noluisse reformidans. Ad veri velit
+utroque vis, ex equidem detraxit temporibus has.
+
+Inermis appareat usu ne. Eros placerat periculis mea ad, in dictas
+pericula pro. Errem postulant at usu, ea nec amet ornatus mentitum. Ad
+mazim graeco eum, vel ex percipit volutpat iudicabit, sit ne delicata
+interesset. Mel sapientem prodesset abhorreant et, oblique suscipit
+eam id.
+
+An maluisset disputando mea, vidit mnesarchum pri et. Malis insolens
+inciderint no sea. Ea persius maluisset vix, ne vim appellantur
+instructior, consul quidam definiebas pri id. Cum integre feugiat
+pericula in, ex sed persius similique, mel ne natum dicit percipitur.
+
+Primis discere ne pri, errem putent definitionem at vis. Ei mel dolore
+neglegentur, mei tincidunt percipitur ei. Pro ad simul integre
+rationibus. Eu vel alii honestatis definitiones, mea no nonumy
+reprehendunt.
+
+Dicta appareat legendos est cu. Eu vel congue dicunt omittam, no vix
+adhuc minimum constituam, quot noluisse id mel. Eu quot sale mutat
+duo, ex nisl munere invenire duo. Ne nec ullum utamur. Pro alterum
+debitis nostrum no, ut vel aliquid vivendo.
+
+Aliquip fierent praesent quo ne, id sit audiam recusabo delicatissimi.
+Usu postulant incorrupte cu. At pro dicit tibique intellegam, cibo
+dolore impedit id eam, et aeque feugait assentior has. Quando sensibus
+nec ex. Possit sensibus pri ad, unum mutat periculis cu vix.
+
+Mundi tibique vix te, duo simul partiendo qualisque id, est at vidit
+sonet tempor. No per solet aeterno deseruisse. Petentium salutandi
+definiebas pri cu. Munere vivendum est in. Ei justo congue eligendi
+vis, modus offendit omittantur te mel.
+
+Integre voluptaria in qui, sit habemus tractatos constituam no. Utinam
+melius conceptam est ne, quo in minimum apeirian delicata, ut ius
+porro recusabo. Dicant expetenda vix no, ludus scripserit sed ex, eu
+his modo nostro. Ut etiam sonet his, quodsi inciderint philosophia te
+per. Nullam lobortis eu cum, vix an sonet efficiendi repudiandae. Vis
+ad idque fabellas intellegebat.
+
+Eum commodo senserit conclusionemque ex. Sed forensibus sadipscing ut,
+mei in facer delicata periculis, sea ne hinc putent cetero. Nec ne
+alia corpora invenire, alia prima soleat te cum. Eleifend posidonium
+nam at.
+
+Dolorum indoctum cu quo, ex dolor legendos recteque eam, cu pri zril
+discere. Nec civibus officiis dissentiunt ex, est te liber ludus
+elaboraret. Cum ea fabellas invenire. Ex vim nostrud eripuit
+comprehensam, nam te inermis delectus, saepe inermis senserit.
+`
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 0000000..698860b
--- /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
+// http://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/ciphers_test.go b/vendor/golang.org/x/net/http2/ciphers_test.go
new file mode 100644
index 0000000..25aead0
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/ciphers_test.go
@@ -0,0 +1,309 @@
+// 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
+
+import "testing"
+
+func TestIsBadCipherBad(t *testing.T) {
+ for _, c := range badCiphers {
+ if !isBadCipher(c) {
+ t.Errorf("Wrong result for isBadCipher(%d), want true")
+ }
+ }
+}
+
+// verify we don't give false positives on ciphers not on blacklist
+func TestIsBadCipherGood(t *testing.T) {
+ goodCiphers := map[uint16]string{
+ cipher_TLS_DHE_RSA_WITH_AES_256_CCM: "cipher_TLS_DHE_RSA_WITH_AES_256_CCM",
+ cipher_TLS_ECDHE_ECDSA_WITH_AES_128_CCM: "cipher_TLS_ECDHE_ECDSA_WITH_AES_128_CCM",
+ cipher_TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256: "cipher_TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256",
+ }
+ for c, name := range goodCiphers {
+ if isBadCipher(c) {
+ t.Errorf("Wrong result for isBadCipher(%d) %s, want false", c, name)
+ }
+ }
+}
+
+// copied from https://http2.github.io/http2-spec/#BadCipherSuites,
+var badCiphers = []uint16{
+ 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,
+}
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 b139412..bdf5652 100644
--- a/vendor/golang.org/x/net/http2/client_conn_pool.go
+++ b/vendor/golang.org/x/net/http2/client_conn_pool.go
@@ -247,7 +247,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
index 4f720f5..b65fc6d 100644
--- a/vendor/golang.org/x/net/http2/configure_transport.go
+++ b/vendor/golang.org/x/net/http2/configure_transport.go
@@ -56,7 +56,7 @@ func configureTransport(t1 *http.Transport) (*Transport, error) {
}
// registerHTTPSProtocol calls Transport.RegisterProtocol but
-// convering panics into errors.
+// converting panics into errors.
func registerHTTPSProtocol(t *http.Transport, rt http.RoundTripper) (err error) {
defer func() {
if e := recover(); e != nil {
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 0000000..a3067f8
--- /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/databuffer_test.go b/vendor/golang.org/x/net/http2/databuffer_test.go
new file mode 100644
index 0000000..028e12e
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/databuffer_test.go
@@ -0,0 +1,157 @@
+// 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.7
+
+package http2
+
+import (
+ "bytes"
+ "fmt"
+ "reflect"
+ "testing"
+)
+
+func fmtDataChunk(chunk []byte) string {
+ out := ""
+ var last byte
+ var count int
+ for _, c := range chunk {
+ if c != last {
+ if count > 0 {
+ out += fmt.Sprintf(" x %d ", count)
+ count = 0
+ }
+ out += string([]byte{c})
+ last = c
+ }
+ count++
+ }
+ if count > 0 {
+ out += fmt.Sprintf(" x %d", count)
+ }
+ return out
+}
+
+func fmtDataChunks(chunks [][]byte) string {
+ var out string
+ for _, chunk := range chunks {
+ out += fmt.Sprintf("{%q}", fmtDataChunk(chunk))
+ }
+ return out
+}
+
+func testDataBuffer(t *testing.T, wantBytes []byte, setup func(t *testing.T) *dataBuffer) {
+ // Run setup, then read the remaining bytes from the dataBuffer and check
+ // that they match wantBytes. We use different read sizes to check corner
+ // cases in Read.
+ for _, readSize := range []int{1, 2, 1 * 1024, 32 * 1024} {
+ t.Run(fmt.Sprintf("ReadSize=%d", readSize), func(t *testing.T) {
+ b := setup(t)
+ buf := make([]byte, readSize)
+ var gotRead bytes.Buffer
+ for {
+ n, err := b.Read(buf)
+ gotRead.Write(buf[:n])
+ if err == errReadEmpty {
+ break
+ }
+ if err != nil {
+ t.Fatalf("error after %v bytes: %v", gotRead.Len(), err)
+ }
+ }
+ if got, want := gotRead.Bytes(), wantBytes; !bytes.Equal(got, want) {
+ t.Errorf("FinalRead=%q, want %q", fmtDataChunk(got), fmtDataChunk(want))
+ }
+ })
+ }
+}
+
+func TestDataBufferAllocation(t *testing.T) {
+ writes := [][]byte{
+ bytes.Repeat([]byte("a"), 1*1024-1),
+ []byte("a"),
+ bytes.Repeat([]byte("b"), 4*1024-1),
+ []byte("b"),
+ bytes.Repeat([]byte("c"), 8*1024-1),
+ []byte("c"),
+ bytes.Repeat([]byte("d"), 16*1024-1),
+ []byte("d"),
+ bytes.Repeat([]byte("e"), 32*1024),
+ }
+ var wantRead bytes.Buffer
+ for _, p := range writes {
+ wantRead.Write(p)
+ }
+
+ testDataBuffer(t, wantRead.Bytes(), func(t *testing.T) *dataBuffer {
+ b := &dataBuffer{}
+ for _, p := range writes {
+ if n, err := b.Write(p); n != len(p) || err != nil {
+ t.Fatalf("Write(%q x %d)=%v,%v want %v,nil", p[:1], len(p), n, err, len(p))
+ }
+ }
+ want := [][]byte{
+ bytes.Repeat([]byte("a"), 1*1024),
+ bytes.Repeat([]byte("b"), 4*1024),
+ bytes.Repeat([]byte("c"), 8*1024),
+ bytes.Repeat([]byte("d"), 16*1024),
+ bytes.Repeat([]byte("e"), 16*1024),
+ bytes.Repeat([]byte("e"), 16*1024),
+ }
+ if !reflect.DeepEqual(b.chunks, want) {
+ t.Errorf("dataBuffer.chunks\ngot: %s\nwant: %s", fmtDataChunks(b.chunks), fmtDataChunks(want))
+ }
+ return b
+ })
+}
+
+func TestDataBufferAllocationWithExpected(t *testing.T) {
+ writes := [][]byte{
+ bytes.Repeat([]byte("a"), 1*1024), // allocates 16KB
+ bytes.Repeat([]byte("b"), 14*1024),
+ bytes.Repeat([]byte("c"), 15*1024), // allocates 16KB more
+ bytes.Repeat([]byte("d"), 2*1024),
+ bytes.Repeat([]byte("e"), 1*1024), // overflows 32KB expectation, allocates just 1KB
+ }
+ var wantRead bytes.Buffer
+ for _, p := range writes {
+ wantRead.Write(p)
+ }
+
+ testDataBuffer(t, wantRead.Bytes(), func(t *testing.T) *dataBuffer {
+ b := &dataBuffer{expected: 32 * 1024}
+ for _, p := range writes {
+ if n, err := b.Write(p); n != len(p) || err != nil {
+ t.Fatalf("Write(%q x %d)=%v,%v want %v,nil", p[:1], len(p), n, err, len(p))
+ }
+ }
+ want := [][]byte{
+ append(bytes.Repeat([]byte("a"), 1*1024), append(bytes.Repeat([]byte("b"), 14*1024), bytes.Repeat([]byte("c"), 1*1024)...)...),
+ append(bytes.Repeat([]byte("c"), 14*1024), bytes.Repeat([]byte("d"), 2*1024)...),
+ bytes.Repeat([]byte("e"), 1*1024),
+ }
+ if !reflect.DeepEqual(b.chunks, want) {
+ t.Errorf("dataBuffer.chunks\ngot: %s\nwant: %s", fmtDataChunks(b.chunks), fmtDataChunks(want))
+ }
+ return b
+ })
+}
+
+func TestDataBufferWriteAfterPartialRead(t *testing.T) {
+ testDataBuffer(t, []byte("cdxyz"), func(t *testing.T) *dataBuffer {
+ b := &dataBuffer{}
+ if n, err := b.Write([]byte("abcd")); n != 4 || err != nil {
+ t.Fatalf("Write(\"abcd\")=%v,%v want 4,nil", n, err)
+ }
+ p := make([]byte, 2)
+ if n, err := b.Read(p); n != 2 || err != nil || !bytes.Equal(p, []byte("ab")) {
+ t.Fatalf("Read()=%q,%v,%v want \"ab\",2,nil", p, n, err)
+ }
+ if n, err := b.Write([]byte("xyz")); n != 3 || err != nil {
+ t.Fatalf("Write(\"xyz\")=%v,%v want 3,nil", n, err)
+ }
+ return b
+ })
+}
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 47da0f0..0000000
--- 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/fixed_buffer_test.go b/vendor/golang.org/x/net/http2/fixed_buffer_test.go
deleted file mode 100644
index f5432f8..0000000
--- a/vendor/golang.org/x/net/http2/fixed_buffer_test.go
+++ /dev/null
@@ -1,128 +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 (
- "reflect"
- "testing"
-)
-
-var bufferReadTests = []struct {
- buf fixedBuffer
- read, wn int
- werr error
- wp []byte
- wbuf fixedBuffer
-}{
- {
- fixedBuffer{[]byte{'a', 0}, 0, 1},
- 5, 1, nil, []byte{'a'},
- fixedBuffer{[]byte{'a', 0}, 0, 0},
- },
- {
- fixedBuffer{[]byte{0, 'a'}, 1, 2},
- 5, 1, nil, []byte{'a'},
- fixedBuffer{[]byte{0, 'a'}, 0, 0},
- },
- {
- fixedBuffer{[]byte{'a', 'b'}, 0, 2},
- 1, 1, nil, []byte{'a'},
- fixedBuffer{[]byte{'a', 'b'}, 1, 2},
- },
- {
- fixedBuffer{[]byte{}, 0, 0},
- 5, 0, errReadEmpty, []byte{},
- fixedBuffer{[]byte{}, 0, 0},
- },
-}
-
-func TestBufferRead(t *testing.T) {
- for i, tt := range bufferReadTests {
- read := make([]byte, tt.read)
- n, err := tt.buf.Read(read)
- if n != tt.wn {
- t.Errorf("#%d: wn = %d want %d", i, n, tt.wn)
- continue
- }
- if err != tt.werr {
- t.Errorf("#%d: werr = %v want %v", i, err, tt.werr)
- continue
- }
- read = read[:n]
- if !reflect.DeepEqual(read, tt.wp) {
- t.Errorf("#%d: read = %+v want %+v", i, read, tt.wp)
- }
- if !reflect.DeepEqual(tt.buf, tt.wbuf) {
- t.Errorf("#%d: buf = %+v want %+v", i, tt.buf, tt.wbuf)
- }
- }
-}
-
-var bufferWriteTests = []struct {
- buf fixedBuffer
- write, wn int
- werr error
- wbuf fixedBuffer
-}{
- {
- buf: fixedBuffer{
- buf: []byte{},
- },
- wbuf: fixedBuffer{
- buf: []byte{},
- },
- },
- {
- buf: fixedBuffer{
- buf: []byte{1, 'a'},
- },
- write: 1,
- wn: 1,
- wbuf: fixedBuffer{
- buf: []byte{0, 'a'},
- w: 1,
- },
- },
- {
- buf: fixedBuffer{
- buf: []byte{'a', 1},
- r: 1,
- w: 1,
- },
- write: 2,
- wn: 2,
- wbuf: fixedBuffer{
- buf: []byte{0, 0},
- w: 2,
- },
- },
- {
- buf: fixedBuffer{
- buf: []byte{},
- },
- write: 5,
- werr: errWriteFull,
- wbuf: fixedBuffer{
- buf: []byte{},
- },
- },
-}
-
-func TestBufferWrite(t *testing.T) {
- for i, tt := range bufferWriteTests {
- n, err := tt.buf.Write(make([]byte, tt.write))
- if n != tt.wn {
- t.Errorf("#%d: wrote %d bytes; want %d", i, n, tt.wn)
- continue
- }
- if err != tt.werr {
- t.Errorf("#%d: error = %v; want %v", i, err, tt.werr)
- continue
- }
- if !reflect.DeepEqual(tt.buf, tt.wbuf) {
- t.Errorf("#%d: buf = %+v; want %+v", i, tt.buf, tt.wbuf)
- }
- }
-}
diff --git a/vendor/golang.org/x/net/http2/frame.go b/vendor/golang.org/x/net/http2/frame.go
index 358833f..3b14890 100644
--- a/vendor/golang.org/x/net/http2/frame.go
+++ b/vendor/golang.org/x/net/http2/frame.go
@@ -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
@@ -762,7 +797,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 +837,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 +877,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 +888,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 +953,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 +1080,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 +1090,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 +1137,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 +1167,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 +1217,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,
}
diff --git a/vendor/golang.org/x/net/http2/frame_test.go b/vendor/golang.org/x/net/http2/frame_test.go
index 7b1933d..37266bc 100644
--- a/vendor/golang.org/x/net/http2/frame_test.go
+++ b/vendor/golang.org/x/net/http2/frame_test.go
@@ -141,7 +141,7 @@ func TestWriteDataPadded(t *testing.T) {
streamID: 1,
endStream: false,
data: []byte("foo"),
- pad: []byte("bar"),
+ pad: []byte{0, 0, 0},
wantHeader: FrameHeader{
Type: FrameData,
Flags: FlagDataPadded,
@@ -1096,6 +1096,95 @@ func TestMetaFrameHeader(t *testing.T) {
}
}
+func TestSetReuseFrames(t *testing.T) {
+ fr, buf := testFramer()
+ fr.SetReuseFrames()
+
+ // Check that DataFrames are reused. Note that
+ // SetReuseFrames only currently implements reuse of DataFrames.
+ firstDf := readAndVerifyDataFrame("ABC", 3, fr, buf, t)
+
+ for i := 0; i < 10; i++ {
+ df := readAndVerifyDataFrame("XYZ", 3, fr, buf, t)
+ if df != firstDf {
+ t.Errorf("Expected Framer to return references to the same DataFrame. Have %v and %v", &df, &firstDf)
+ }
+ }
+
+ for i := 0; i < 10; i++ {
+ df := readAndVerifyDataFrame("", 0, fr, buf, t)
+ if df != firstDf {
+ t.Errorf("Expected Framer to return references to the same DataFrame. Have %v and %v", &df, &firstDf)
+ }
+ }
+
+ for i := 0; i < 10; i++ {
+ df := readAndVerifyDataFrame("HHH", 3, fr, buf, t)
+ if df != firstDf {
+ t.Errorf("Expected Framer to return references to the same DataFrame. Have %v and %v", &df, &firstDf)
+ }
+ }
+}
+
+func TestSetReuseFramesMoreThanOnce(t *testing.T) {
+ fr, buf := testFramer()
+ fr.SetReuseFrames()
+
+ firstDf := readAndVerifyDataFrame("ABC", 3, fr, buf, t)
+ fr.SetReuseFrames()
+
+ for i := 0; i < 10; i++ {
+ df := readAndVerifyDataFrame("XYZ", 3, fr, buf, t)
+ // SetReuseFrames should be idempotent
+ fr.SetReuseFrames()
+ if df != firstDf {
+ t.Errorf("Expected Framer to return references to the same DataFrame. Have %v and %v", &df, &firstDf)
+ }
+ }
+}
+
+func TestNoSetReuseFrames(t *testing.T) {
+ fr, buf := testFramer()
+ const numNewDataFrames = 10
+ dfSoFar := make([]interface{}, numNewDataFrames)
+
+ // Check that DataFrames are not reused if SetReuseFrames wasn't called.
+ // SetReuseFrames only currently implements reuse of DataFrames.
+ for i := 0; i < numNewDataFrames; i++ {
+ df := readAndVerifyDataFrame("XYZ", 3, fr, buf, t)
+ for _, item := range dfSoFar {
+ if df == item {
+ t.Errorf("Expected Framer to return new DataFrames since SetNoReuseFrames not set.")
+ }
+ }
+ dfSoFar[i] = df
+ }
+}
+
+func readAndVerifyDataFrame(data string, length byte, fr *Framer, buf *bytes.Buffer, t *testing.T) *DataFrame {
+ var streamID uint32 = 1<<24 + 2<<16 + 3<<8 + 4
+ fr.WriteData(streamID, true, []byte(data))
+ wantEnc := "\x00\x00" + string(length) + "\x00\x01\x01\x02\x03\x04" + data
+ if buf.String() != wantEnc {
+ t.Errorf("encoded as %q; want %q", buf.Bytes(), wantEnc)
+ }
+ f, err := fr.ReadFrame()
+ if err != nil {
+ t.Fatal(err)
+ }
+ df, ok := f.(*DataFrame)
+ if !ok {
+ t.Fatalf("got %T; want *DataFrame", f)
+ }
+ if !bytes.Equal(df.Data(), []byte(data)) {
+ t.Errorf("got %q; want %q", df.Data(), []byte(data))
+ }
+ if f.Header().Flags&1 == 0 {
+ t.Errorf("didn't see END_STREAM flag")
+ }
+ return df
+}
+
func encodeHeaderRaw(t *testing.T, pairs ...string) []byte {
var he hpackEncoder
return he.encodeHeaderRaw(t, pairs...)
diff --git a/vendor/golang.org/x/net/http2/go16.go b/vendor/golang.org/x/net/http2/go16.go
index 2b72855..00b2e9e 100644
--- a/vendor/golang.org/x/net/http2/go16.go
+++ b/vendor/golang.org/x/net/http2/go16.go
@@ -7,7 +7,6 @@
package http2
import (
- "crypto/tls"
"net/http"
"time"
)
@@ -15,29 +14,3 @@ import (
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/go18.go b/vendor/golang.org/x/net/http2/go18.go
index 633202c..73cc238 100644
--- a/vendor/golang.org/x/net/http2/go18.go
+++ b/vendor/golang.org/x/net/http2/go18.go
@@ -12,7 +12,11 @@ import (
"net/http"
)
-func cloneTLSConfig(c *tls.Config) *tls.Config { return c.Clone() }
+func cloneTLSConfig(c *tls.Config) *tls.Config {
+ c2 := c.Clone()
+ c2.GetClientCertificate = c.GetClientCertificate // golang.org/issue/19264
+ return c2
+}
var _ http.Pusher = (*responseWriter)(nil)
diff --git a/vendor/golang.org/x/net/http2/go18_test.go b/vendor/golang.org/x/net/http2/go18_test.go
index 8365505..30e3b03 100644
--- a/vendor/golang.org/x/net/http2/go18_test.go
+++ b/vendor/golang.org/x/net/http2/go18_test.go
@@ -7,6 +7,7 @@
package http2
import (
+ "crypto/tls"
"net/http"
"testing"
"time"
@@ -64,3 +65,15 @@ func TestConfigureServerIdleTimeout_Go18(t *testing.T) {
}
}
}
+
+func TestCertClone(t *testing.T) {
+ c := &tls.Config{
+ GetClientCertificate: func(*tls.CertificateRequestInfo) (*tls.Certificate, error) {
+ panic("shouldn't be called")
+ },
+ }
+ c2 := cloneTLSConfig(c)
+ if c2.GetClientCertificate == nil {
+ t.Error("GetClientCertificate is nil")
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/go19.go b/vendor/golang.org/x/net/http2/go19.go
new file mode 100644
index 0000000..38124ba
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/go19.go
@@ -0,0 +1,16 @@
+// 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.9
+
+package http2
+
+import (
+ "net/http"
+)
+
+func configureServer19(s *http.Server, conf *Server) error {
+ s.RegisterOnShutdown(conf.state.startGracefulShutdown)
+ return nil
+}
diff --git a/vendor/golang.org/x/net/http2/go19_test.go b/vendor/golang.org/x/net/http2/go19_test.go
new file mode 100644
index 0000000..1675d24
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/go19_test.go
@@ -0,0 +1,60 @@
+// 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 http2
+
+import (
+ "context"
+ "net/http"
+ "reflect"
+ "testing"
+ "time"
+)
+
+func TestServerGracefulShutdown(t *testing.T) {
+ var st *serverTester
+ handlerDone := make(chan struct{})
+ st = newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ defer close(handlerDone)
+ go st.ts.Config.Shutdown(context.Background())
+
+ ga := st.wantGoAway()
+ if ga.ErrCode != ErrCodeNo {
+ t.Errorf("GOAWAY error = %v; want ErrCodeNo", ga.ErrCode)
+ }
+ if ga.LastStreamID != 1 {
+ t.Errorf("GOAWAY LastStreamID = %v; want 1", ga.LastStreamID)
+ }
+
+ w.Header().Set("x-foo", "bar")
+ })
+ defer st.Close()
+
+ st.greet()
+ st.bodylessReq1()
+
+ select {
+ case <-handlerDone:
+ case <-time.After(5 * time.Second):
+ t.Fatalf("server did not shutdown?")
+ }
+ hf := st.wantHeaders()
+ goth := st.decodeHeader(hf.HeaderBlockFragment())
+ wanth := [][2]string{
+ {":status", "200"},
+ {"x-foo", "bar"},
+ {"content-type", "text/plain; charset=utf-8"},
+ {"content-length", "0"},
+ }
+ if !reflect.DeepEqual(goth, wanth) {
+ t.Errorf("Got headers %v; want %v", goth, wanth)
+ }
+
+ n, err := st.cc.Read([]byte{0})
+ if n != 0 || err == nil {
+ t.Errorf("Read = %v, %v; want 0, non-nil", n, err)
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/h2demo/h2demo.go b/vendor/golang.org/x/net/http2/h2demo/h2demo.go
index 980b6d6..9853107 100644
--- a/vendor/golang.org/x/net/http2/h2demo/h2demo.go
+++ b/vendor/golang.org/x/net/http2/h2demo/h2demo.go
@@ -87,6 +87,7 @@ href="https://golang.org/s/http2bug">file a bug.
GET /reqinfo to dump the request + headers received
GET /clockstream streams the current time every second
GET /gophertiles to see a page with a bunch of images
+ GET /serverpush to see a page with server push
GET /file/gopher.png for a small file (does If-Modified-Since, Content-Range, etc)
GET /file/go.src.tar.gz for a larger file (~10 MB)
GET /redirect to redirect back to / (this page)
@@ -168,8 +169,11 @@ var (
// fileServer returns a file-serving handler that proxies URL.
// It lazily fetches URL on the first access and caches its contents forever.
-func fileServer(url string) http.Handler {
+func fileServer(url string, latency time.Duration) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ if latency > 0 {
+ time.Sleep(latency)
+ }
hi, err := fsGrp.Do(url, func() (interface{}, error) {
fsMu.Lock()
if h, ok := fsCache[url]; ok {
@@ -227,14 +231,18 @@ func clockStreamHandler(w http.ResponseWriter, r *http.Request) {
func registerHandlers() {
tiles := newGopherTilesHandler()
+ push := newPushHandler()
mux2 := http.NewServeMux()
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
- if r.TLS == nil {
- if r.URL.Path == "/gophertiles" {
- tiles.ServeHTTP(w, r)
- return
- }
+ switch {
+ case r.URL.Path == "/gophertiles":
+ tiles.ServeHTTP(w, r) // allow HTTP/2 + HTTP/1.x
+ return
+ case strings.HasPrefix(r.URL.Path, "/serverpush"):
+ push.ServeHTTP(w, r) // allow HTTP/2 + HTTP/1.x
+ return
+ case r.TLS == nil: // do not allow HTTP/1.x for anything else
http.Redirect(w, r, "https://"+httpsHost()+"/", http.StatusFound)
return
}
@@ -249,8 +257,8 @@ func registerHandlers() {
mux2.ServeHTTP(w, r)
})
mux2.HandleFunc("/", home)
- mux2.Handle("/file/gopher.png", fileServer("https://golang.org/doc/gopher/frontpage.png"))
- mux2.Handle("/file/go.src.tar.gz", fileServer("https://storage.googleapis.com/golang/go1.4.1.src.tar.gz"))
+ mux2.Handle("/file/gopher.png", fileServer("https://golang.org/doc/gopher/frontpage.png", 0))
+ mux2.Handle("/file/go.src.tar.gz", fileServer("https://storage.googleapis.com/golang/go1.4.1.src.tar.gz", 0))
mux2.HandleFunc("/reqinfo", reqInfoHandler)
mux2.HandleFunc("/crc32", crcHandler)
mux2.HandleFunc("/ECHO", echoCapitalHandler)
@@ -267,6 +275,46 @@ func registerHandlers() {
})
}
+var pushResources = map[string]http.Handler{
+ "/serverpush/static/jquery.min.js": fileServer("https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js", 100*time.Millisecond),
+ "/serverpush/static/godocs.js": fileServer("https://golang.org/lib/godoc/godocs.js", 100*time.Millisecond),
+ "/serverpush/static/playground.js": fileServer("https://golang.org/lib/godoc/playground.js", 100*time.Millisecond),
+ "/serverpush/static/style.css": fileServer("https://golang.org/lib/godoc/style.css", 100*time.Millisecond),
+}
+
+func newPushHandler() http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ for path, handler := range pushResources {
+ if r.URL.Path == path {
+ handler.ServeHTTP(w, r)
+ return
+ }
+ }
+
+ cacheBust := time.Now().UnixNano()
+ if pusher, ok := w.(http.Pusher); ok {
+ for path := range pushResources {
+ url := fmt.Sprintf("%s?%d", path, cacheBust)
+ if err := pusher.Push(url, nil); err != nil {
+ log.Printf("Failed to push %v: %v", path, err)
+ }
+ }
+ }
+ time.Sleep(100 * time.Millisecond) // fake network latency + parsing time
+ if err := pushTmpl.Execute(w, struct {
+ CacheBust int64
+ HTTPSHost string
+ HTTPHost string
+ }{
+ CacheBust: cacheBust,
+ HTTPSHost: httpsHost(),
+ HTTPHost: httpHost(),
+ }); err != nil {
+ log.Printf("Executing server push template: %v", err)
+ }
+ })
+}
+
func newGopherTilesHandler() http.Handler {
const gopherURL = "https://blog.golang.org/go-programming-language-turns-two_gophers.jpg"
res, err := http.Get(gopherURL)
@@ -393,7 +441,11 @@ func serveProdTLS() error {
GetCertificate: m.GetCertificate,
},
}
- http2.ConfigureServer(srv, &http2.Server{})
+ http2.ConfigureServer(srv, &http2.Server{
+ NewWriteScheduler: func() http2.WriteScheduler {
+ return http2.NewPriorityWriteScheduler(nil)
+ },
+ })
ln, err := net.Listen("tcp", ":443")
if err != nil {
return err
diff --git a/vendor/golang.org/x/net/http2/h2demo/tmpl.go b/vendor/golang.org/x/net/http2/h2demo/tmpl.go
new file mode 100644
index 0000000..504d6a7
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/h2demo/tmpl.go
@@ -0,0 +1,1991 @@
+// 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 h2demo
+
+package main
+
+import "html/template"
+
+var pushTmpl = template.Must(template.New("serverpush").Parse(`
+
+
+
+
+
+
+
+
+ HTTP/2 Server Push Demo
+
+
+
+
+
+
+
+
+
+
+Note: This page exists for demonstration purposes. For the actual cmd/go docs, go to
golang.org/cmd/go .
+
+
+
+
+
+...
+
+
+
+
+
+
+
+
+
+
+
+
+
Command go
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Go is a tool for managing Go source code.
+
+
+Usage:
+
+
go command [arguments]
+
+
+The commands are:
+
+
build compile packages and dependencies
+clean remove object files
+doc show documentation for package or symbol
+env print Go environment information
+bug start a bug report
+fix run go tool fix on packages
+fmt run gofmt on package sources
+generate generate Go files by processing source
+get download and install packages and dependencies
+install compile and install packages and dependencies
+list list packages
+run compile and run Go program
+test test packages
+tool run specified go tool
+version print Go version
+vet run go tool vet on packages
+
+
+Use "go help [command]" for more information about a command.
+
+
+Additional help topics:
+
+
c calling between Go and C
+buildmode description of build modes
+filetype file types
+gopath GOPATH environment variable
+environment environment variables
+importpath import path syntax
+packages description of package lists
+testflag description of testing flags
+testfunc description of testing functions
+
+
+Use "go help [topic]" for more information about that topic.
+
+
Compile packages and dependencies
+
+Usage:
+
+
go build [-o output] [-i] [build flags] [packages]
+
+
+Build compiles the packages named by the import paths,
+along with their dependencies, but it does not install the results.
+
+
+If the arguments to build are a list of .go files, build treats
+them as a list of source files specifying a single package.
+
+
+When compiling a single main package, build writes
+the resulting executable to an output file named after
+the first source file ('go build ed.go rx.go' writes 'ed' or 'ed.exe')
+or the source code directory ('go build unix/sam' writes 'sam' or 'sam.exe').
+The '.exe' suffix is added when writing a Windows executable.
+
+
+When compiling multiple packages or a single non-main package,
+build compiles the packages but discards the resulting object,
+serving only as a check that the packages can be built.
+
+
+When compiling packages, build ignores files that end in '_test.go'.
+
+
+The -o flag, only allowed when compiling a single package,
+forces build to write the resulting executable or object
+to the named output file, instead of the default behavior described
+in the last two paragraphs.
+
+
+The -i flag installs the packages that are dependencies of the target.
+
+
+The build flags are shared by the build, clean, get, install, list, run,
+and test commands:
+
+
-a
+ force rebuilding of packages that are already up-to-date.
+-n
+ print the commands but do not run them.
+-p n
+ the number of programs, such as build commands or
+ test binaries, that can be run in parallel.
+ The default is the number of CPUs available.
+-race
+ enable data race detection.
+ Supported only on linux/amd64, freebsd/amd64, darwin/amd64 and windows/amd64.
+-msan
+ enable interoperation with memory sanitizer.
+ Supported only on linux/amd64,
+ and only with Clang/LLVM as the host C compiler.
+-v
+ print the names of packages as they are compiled.
+-work
+ print the name of the temporary work directory and
+ do not delete it when exiting.
+-x
+ print the commands.
+
+-asmflags 'flag list'
+ arguments to pass on each go tool asm invocation.
+-buildmode mode
+ build mode to use. See 'go help buildmode' for more.
+-compiler name
+ name of compiler to use, as in runtime.Compiler (gccgo or gc).
+-gccgoflags 'arg list'
+ arguments to pass on each gccgo compiler/linker invocation.
+-gcflags 'arg list'
+ arguments to pass on each go tool compile invocation.
+-installsuffix suffix
+ a suffix to use in the name of the package installation directory,
+ in order to keep output separate from default builds.
+ If using the -race flag, the install suffix is automatically set to race
+ or, if set explicitly, has _race appended to it. Likewise for the -msan
+ flag. Using a -buildmode option that requires non-default compile flags
+ has a similar effect.
+-ldflags 'flag list'
+ arguments to pass on each go tool link invocation.
+-linkshared
+ link against shared libraries previously created with
+ -buildmode=shared.
+-pkgdir dir
+ install and load all packages from dir instead of the usual locations.
+ For example, when building with a non-standard configuration,
+ use -pkgdir to keep generated packages in a separate location.
+-tags 'tag list'
+ a list of build tags to consider satisfied during the build.
+ For more information about build tags, see the description of
+ build constraints in the documentation for the go/build package.
+-toolexec 'cmd args'
+ a program to use to invoke toolchain programs like vet and asm.
+ For example, instead of running asm, the go command will run
+ 'cmd args /path/to/asm <arguments for asm>'.
+
+
+The list flags accept a space-separated list of strings. To embed spaces
+in an element in the list, surround it with either single or double quotes.
+
+
+For more about specifying packages, see 'go help packages'.
+For more about where packages and binaries are installed,
+run 'go help gopath'.
+For more about calling between Go and C/C++, run 'go help c'.
+
+
+Note: Build adheres to certain conventions such as those described
+by 'go help gopath'. Not all projects can follow these conventions,
+however. Installations that have their own conventions or that use
+a separate software build system may choose to use lower-level
+invocations such as 'go tool compile' and 'go tool link' to avoid
+some of the overheads and design decisions of the build tool.
+
+
+See also: go install, go get, go clean.
+
+
Remove object files
+
+Usage:
+
+
go clean [-i] [-r] [-n] [-x] [build flags] [packages]
+
+
+Clean removes object files from package source directories.
+The go command builds most objects in a temporary directory,
+so go clean is mainly concerned with object files left by other
+tools or by manual invocations of go build.
+
+
+Specifically, clean removes the following files from each of the
+source directories corresponding to the import paths:
+
+
_obj/ old object directory, left from Makefiles
+_test/ old test directory, left from Makefiles
+_testmain.go old gotest file, left from Makefiles
+test.out old test log, left from Makefiles
+build.out old test log, left from Makefiles
+*.[568ao] object files, left from Makefiles
+
+DIR(.exe) from go build
+DIR.test(.exe) from go test -c
+MAINFILE(.exe) from go build MAINFILE.go
+*.so from SWIG
+
+
+In the list, DIR represents the final path element of the
+directory, and MAINFILE is the base name of any Go source
+file in the directory that is not included when building
+the package.
+
+
+The -i flag causes clean to remove the corresponding installed
+archive or binary (what 'go install' would create).
+
+
+The -n flag causes clean to print the remove commands it would execute,
+but not run them.
+
+
+The -r flag causes clean to be applied recursively to all the
+dependencies of the packages named by the import paths.
+
+
+The -x flag causes clean to print remove commands as it executes them.
+
+
+For more about build flags, see 'go help build'.
+
+
+For more about specifying packages, see 'go help packages'.
+
+
Show documentation for package or symbol
+
+Usage:
+
+
go doc [-u] [-c] [package|[package.]symbol[.method]]
+
+
+Doc prints the documentation comments associated with the item identified by its
+arguments (a package, const, func, type, var, or method) followed by a one-line
+summary of each of the first-level items "under" that item (package-level
+declarations for a package, methods for a type, etc.).
+
+
+Doc accepts zero, one, or two arguments.
+
+
+Given no arguments, that is, when run as
+
+
go doc
+
+
+it prints the package documentation for the package in the current directory.
+If the package is a command (package main), the exported symbols of the package
+are elided from the presentation unless the -cmd flag is provided.
+
+
+When run with one argument, the argument is treated as a Go-syntax-like
+representation of the item to be documented. What the argument selects depends
+on what is installed in GOROOT and GOPATH, as well as the form of the argument,
+which is schematically one of these:
+
+
go doc <pkg>
+go doc <sym>[.<method>]
+go doc [<pkg>.]<sym>[.<method>]
+go doc [<pkg>.][<sym>.]<method>
+
+
+The first item in this list matched by the argument is the one whose documentation
+is printed. (See the examples below.) However, if the argument starts with a capital
+letter it is assumed to identify a symbol or method in the current directory.
+
+
+For packages, the order of scanning is determined lexically in breadth-first order.
+That is, the package presented is the one that matches the search and is nearest
+the root and lexically first at its level of the hierarchy. The GOROOT tree is
+always scanned in its entirety before GOPATH.
+
+
+If there is no package specified or matched, the package in the current
+directory is selected, so "go doc Foo" shows the documentation for symbol Foo in
+the current package.
+
+
+The package path must be either a qualified path or a proper suffix of a
+path. The go tool's usual package mechanism does not apply: package path
+elements like . and ... are not implemented by go doc.
+
+
+When run with two arguments, the first must be a full package path (not just a
+suffix), and the second is a symbol or symbol and method; this is similar to the
+syntax accepted by godoc:
+
+
go doc <pkg> <sym>[.<method>]
+
+
+In all forms, when matching symbols, lower-case letters in the argument match
+either case but upper-case letters match exactly. This means that there may be
+multiple matches of a lower-case argument in a package if different symbols have
+different cases. If this occurs, documentation for all matches is printed.
+
+
+Examples:
+
+
go doc
+ Show documentation for current package.
+go doc Foo
+ Show documentation for Foo in the current package.
+ (Foo starts with a capital letter so it cannot match
+ a package path.)
+go doc encoding/json
+ Show documentation for the encoding/json package.
+go doc json
+ Shorthand for encoding/json.
+go doc json.Number (or go doc json.number)
+ Show documentation and method summary for json.Number.
+go doc json.Number.Int64 (or go doc json.number.int64)
+ Show documentation for json.Number's Int64 method.
+go doc cmd/doc
+ Show package docs for the doc command.
+go doc -cmd cmd/doc
+ Show package docs and exported symbols within the doc command.
+go doc template.new
+ Show documentation for html/template's New function.
+ (html/template is lexically before text/template)
+go doc text/template.new # One argument
+ Show documentation for text/template's New function.
+go doc text/template new # Two arguments
+ Show documentation for text/template's New function.
+
+At least in the current tree, these invocations all print the
+documentation for json.Decoder's Decode method:
+
+go doc json.Decoder.Decode
+go doc json.decoder.decode
+go doc json.decode
+cd go/src/encoding/json; go doc decode
+
+
+Flags:
+
+
-c
+ Respect case when matching symbols.
+-cmd
+ Treat a command (package main) like a regular package.
+ Otherwise package main's exported symbols are hidden
+ when showing the package's top-level documentation.
+-u
+ Show documentation for unexported as well as exported
+ symbols and methods.
+
+
+
+Usage:
+
+
go env [var ...]
+
+
+Env prints Go environment information.
+
+
+By default env prints information as a shell script
+(on Windows, a batch file). If one or more variable
+names is given as arguments, env prints the value of
+each named variable on its own line.
+
+
Start a bug report
+
+Usage:
+
+
go bug
+
+
+Bug opens the default browser and starts a new bug report.
+The report includes useful system information.
+
+
+
+Usage:
+
+
go fix [packages]
+
+
+Fix runs the Go fix command on the packages named by the import paths.
+
+
+For more about fix, see 'go doc cmd/fix'.
+For more about specifying packages, see 'go help packages'.
+
+
+To run fix with specific options, run 'go tool fix'.
+
+
+See also: go fmt, go vet.
+
+
Run gofmt on package sources
+
+Usage:
+
+
go fmt [-n] [-x] [packages]
+
+
+Fmt runs the command 'gofmt -l -w' on the packages named
+by the import paths. It prints the names of the files that are modified.
+
+
+For more about gofmt, see 'go doc cmd/gofmt'.
+For more about specifying packages, see 'go help packages'.
+
+
+The -n flag prints commands that would be executed.
+The -x flag prints commands as they are executed.
+
+
+To run gofmt with specific options, run gofmt itself.
+
+
+See also: go fix, go vet.
+
+
Generate Go files by processing source
+
+Usage:
+
+
go generate [-run regexp] [-n] [-v] [-x] [build flags] [file.go... | packages]
+
+
+Generate runs commands described by directives within existing
+files. Those commands can run any process but the intent is to
+create or update Go source files.
+
+
+Go generate is never run automatically by go build, go get, go test,
+and so on. It must be run explicitly.
+
+
+Go generate scans the file for directives, which are lines of
+the form,
+
+
//go:generate command argument...
+
+
+(note: no leading spaces and no space in "//go") where command
+is the generator to be run, corresponding to an executable file
+that can be run locally. It must either be in the shell path
+(gofmt), a fully qualified path (/usr/you/bin/mytool), or a
+command alias, described below.
+
+
+Note that go generate does not parse the file, so lines that look
+like directives in comments or multiline strings will be treated
+as directives.
+
+
+The arguments to the directive are space-separated tokens or
+double-quoted strings passed to the generator as individual
+arguments when it is run.
+
+
+Quoted strings use Go syntax and are evaluated before execution; a
+quoted string appears as a single argument to the generator.
+
+
+Go generate sets several variables when it runs the generator:
+
+
$GOARCH
+ The execution architecture (arm, amd64, etc.)
+$GOOS
+ The execution operating system (linux, windows, etc.)
+$GOFILE
+ The base name of the file.
+$GOLINE
+ The line number of the directive in the source file.
+$GOPACKAGE
+ The name of the package of the file containing the directive.
+$DOLLAR
+ A dollar sign.
+
+
+Other than variable substitution and quoted-string evaluation, no
+special processing such as "globbing" is performed on the command
+line.
+
+
+As a last step before running the command, any invocations of any
+environment variables with alphanumeric names, such as $GOFILE or
+$HOME, are expanded throughout the command line. The syntax for
+variable expansion is $NAME on all operating systems. Due to the
+order of evaluation, variables are expanded even inside quoted
+strings. If the variable NAME is not set, $NAME expands to the
+empty string.
+
+
+A directive of the form,
+
+
//go:generate -command xxx args...
+
+
+specifies, for the remainder of this source file only, that the
+string xxx represents the command identified by the arguments. This
+can be used to create aliases or to handle multiword generators.
+For example,
+
+
//go:generate -command foo go tool foo
+
+
+specifies that the command "foo" represents the generator
+"go tool foo".
+
+
+Generate processes packages in the order given on the command line,
+one at a time. If the command line lists .go files, they are treated
+as a single package. Within a package, generate processes the
+source files in a package in file name order, one at a time. Within
+a source file, generate runs generators in the order they appear
+in the file, one at a time.
+
+
+If any generator returns an error exit status, "go generate" skips
+all further processing for that package.
+
+
+The generator is run in the package's source directory.
+
+
+Go generate accepts one specific flag:
+
+
-run=""
+ if non-empty, specifies a regular expression to select
+ directives whose full original source text (excluding
+ any trailing spaces and final newline) matches the
+ expression.
+
+
+It also accepts the standard build flags including -v, -n, and -x.
+The -v flag prints the names of packages and files as they are
+processed.
+The -n flag prints commands that would be executed.
+The -x flag prints commands as they are executed.
+
+
+For more about build flags, see 'go help build'.
+
+
+For more about specifying packages, see 'go help packages'.
+
+
Download and install packages and dependencies
+
+Usage:
+
+
go get [-d] [-f] [-fix] [-insecure] [-t] [-u] [build flags] [packages]
+
+
+Get downloads the packages named by the import paths, along with their
+dependencies. It then installs the named packages, like 'go install'.
+
+
+The -d flag instructs get to stop after downloading the packages; that is,
+it instructs get not to install the packages.
+
+
+The -f flag, valid only when -u is set, forces get -u not to verify that
+each package has been checked out from the source control repository
+implied by its import path. This can be useful if the source is a local fork
+of the original.
+
+
+The -fix flag instructs get to run the fix tool on the downloaded packages
+before resolving dependencies or building the code.
+
+
+The -insecure flag permits fetching from repositories and resolving
+custom domains using insecure schemes such as HTTP. Use with caution.
+
+
+The -t flag instructs get to also download the packages required to build
+the tests for the specified packages.
+
+
+The -u flag instructs get to use the network to update the named packages
+and their dependencies. By default, get uses the network to check out
+missing packages but does not use it to look for updates to existing packages.
+
+
+The -v flag enables verbose progress and debug output.
+
+
+Get also accepts build flags to control the installation. See 'go help build'.
+
+
+When checking out a new package, get creates the target directory
+GOPATH/src/<import-path>. If the GOPATH contains multiple entries,
+get uses the first one. For more details see: 'go help gopath'.
+
+
+When checking out or updating a package, get looks for a branch or tag
+that matches the locally installed version of Go. The most important
+rule is that if the local installation is running version "go1", get
+searches for a branch or tag named "go1". If no such version exists it
+retrieves the most recent version of the package.
+
+
+When go get checks out or updates a Git repository,
+it also updates any git submodules referenced by the repository.
+
+
+Get never checks out or updates code stored in vendor directories.
+
+
+For more about specifying packages, see 'go help packages'.
+
+
+For more about how 'go get' finds source code to
+download, see 'go help importpath'.
+
+
+See also: go build, go install, go clean.
+
+
Compile and install packages and dependencies
+
+Usage:
+
+
go install [build flags] [packages]
+
+
+Install compiles and installs the packages named by the import paths,
+along with their dependencies.
+
+
+For more about the build flags, see 'go help build'.
+For more about specifying packages, see 'go help packages'.
+
+
+See also: go build, go get, go clean.
+
+
List packages
+
+Usage:
+
+
go list [-e] [-f format] [-json] [build flags] [packages]
+
+
+List lists the packages named by the import paths, one per line.
+
+
+The default output shows the package import path:
+
+
bytes
+encoding/json
+github.com/gorilla/mux
+golang.org/x/net/html
+
+
+The -f flag specifies an alternate format for the list, using the
+syntax of package template. The default output is equivalent to -f
+''. The struct being passed to the template is:
+
+
type Package struct {
+ Dir string // directory containing package sources
+ ImportPath string // import path of package in dir
+ ImportComment string // path in import comment on package statement
+ Name string // package name
+ Doc string // package documentation string
+ Target string // install path
+ Shlib string // the shared library that contains this package (only set when -linkshared)
+ Goroot bool // is this package in the Go root?
+ Standard bool // is this package part of the standard Go library?
+ Stale bool // would 'go install' do anything for this package?
+ StaleReason string // explanation for Stale==true
+ Root string // Go root or Go path dir containing this package
+ ConflictDir string // this directory shadows Dir in $GOPATH
+ BinaryOnly bool // binary-only package: cannot be recompiled from sources
+
+ // Source files
+ GoFiles []string // .go source files (excluding CgoFiles, TestGoFiles, XTestGoFiles)
+ CgoFiles []string // .go sources files that import "C"
+ IgnoredGoFiles []string // .go sources ignored due to build constraints
+ CFiles []string // .c source files
+ CXXFiles []string // .cc, .cxx and .cpp source files
+ MFiles []string // .m source files
+ HFiles []string // .h, .hh, .hpp and .hxx source files
+ FFiles []string // .f, .F, .for and .f90 Fortran source files
+ SFiles []string // .s source files
+ SwigFiles []string // .swig files
+ SwigCXXFiles []string // .swigcxx files
+ SysoFiles []string // .syso object files to add to archive
+ TestGoFiles []string // _test.go files in package
+ XTestGoFiles []string // _test.go files outside package
+
+ // Cgo directives
+ CgoCFLAGS []string // cgo: flags for C compiler
+ CgoCPPFLAGS []string // cgo: flags for C preprocessor
+ CgoCXXFLAGS []string // cgo: flags for C++ compiler
+ CgoFFLAGS []string // cgo: flags for Fortran compiler
+ CgoLDFLAGS []string // cgo: flags for linker
+ CgoPkgConfig []string // cgo: pkg-config names
+
+ // Dependency information
+ Imports []string // import paths used by this package
+ Deps []string // all (recursively) imported dependencies
+ TestImports []string // imports from TestGoFiles
+ XTestImports []string // imports from XTestGoFiles
+
+ // Error information
+ Incomplete bool // this package or a dependency has an error
+ Error *PackageError // error loading package
+ DepsErrors []*PackageError // errors loading dependencies
+}
+
+
+Packages stored in vendor directories report an ImportPath that includes the
+path to the vendor directory (for example, "d/vendor/p" instead of "p"),
+so that the ImportPath uniquely identifies a given copy of a package.
+The Imports, Deps, TestImports, and XTestImports lists also contain these
+expanded imports paths. See golang.org/s/go15vendor for more about vendoring.
+
+
+The error information, if any, is
+
+
type PackageError struct {
+ ImportStack []string // shortest path from package named on command line to this one
+ Pos string // position of error (if present, file:line:col)
+ Err string // the error itself
+}
+
+
+The template function "join" calls strings.Join.
+
+
+The template function "context" returns the build context, defined as:
+
+
type Context struct {
+ GOARCH string // target architecture
+ GOOS string // target operating system
+ GOROOT string // Go root
+ GOPATH string // Go path
+ CgoEnabled bool // whether cgo can be used
+ UseAllFiles bool // use files regardless of +build lines, file names
+ Compiler string // compiler to assume when computing target paths
+ BuildTags []string // build constraints to match in +build lines
+ ReleaseTags []string // releases the current release is compatible with
+ InstallSuffix string // suffix to use in the name of the install dir
+}
+
+
+For more information about the meaning of these fields see the documentation
+for the go/build package's Context type.
+
+
+The -json flag causes the package data to be printed in JSON format
+instead of using the template format.
+
+
+The -e flag changes the handling of erroneous packages, those that
+cannot be found or are malformed. By default, the list command
+prints an error to standard error for each erroneous package and
+omits the packages from consideration during the usual printing.
+With the -e flag, the list command never prints errors to standard
+error and instead processes the erroneous packages with the usual
+printing. Erroneous packages will have a non-empty ImportPath and
+a non-nil Error field; other information may or may not be missing
+(zeroed).
+
+
+For more about build flags, see 'go help build'.
+
+
+For more about specifying packages, see 'go help packages'.
+
+
Compile and run Go program
+
+Usage:
+
+
go run [build flags] [-exec xprog] gofiles... [arguments...]
+
+
+Run compiles and runs the main package comprising the named Go source files.
+A Go source file is defined to be a file ending in a literal ".go" suffix.
+
+
+By default, 'go run' runs the compiled binary directly: 'a.out arguments...'.
+If the -exec flag is given, 'go run' invokes the binary using xprog:
+
+
'xprog a.out arguments...'.
+
+
+If the -exec flag is not given, GOOS or GOARCH is different from the system
+default, and a program named go_$GOOS_$GOARCH_exec can be found
+on the current search path, 'go run' invokes the binary using that program,
+for example 'go_nacl_386_exec a.out arguments...'. This allows execution of
+cross-compiled programs when a simulator or other execution method is
+available.
+
+
+For more about build flags, see 'go help build'.
+
+
+See also: go build.
+
+
Test packages
+
+Usage:
+
+
go test [build/test flags] [packages] [build/test flags & test binary flags]
+
+
+'Go test' automates testing the packages named by the import paths.
+It prints a summary of the test results in the format:
+
+
ok archive/tar 0.011s
+FAIL archive/zip 0.022s
+ok compress/gzip 0.033s
+...
+
+
+followed by detailed output for each failed package.
+
+
+'Go test' recompiles each package along with any files with names matching
+the file pattern "*_test.go".
+Files whose names begin with "_" (including "_test.go") or "." are ignored.
+These additional files can contain test functions, benchmark functions, and
+example functions. See 'go help testfunc' for more.
+Each listed package causes the execution of a separate test binary.
+
+
+Test files that declare a package with the suffix "_test" will be compiled as a
+separate package, and then linked and run with the main test binary.
+
+
+The go tool will ignore a directory named "testdata", making it available
+to hold ancillary data needed by the tests.
+
+
+By default, go test needs no arguments. It compiles and tests the package
+with source in the current directory, including tests, and runs the tests.
+
+
+The package is built in a temporary directory so it does not interfere with the
+non-test installation.
+
+
+In addition to the build flags, the flags handled by 'go test' itself are:
+
+
-args
+ Pass the remainder of the command line (everything after -args)
+ to the test binary, uninterpreted and unchanged.
+ Because this flag consumes the remainder of the command line,
+ the package list (if present) must appear before this flag.
+
+-c
+ Compile the test binary to pkg.test but do not run it
+ (where pkg is the last element of the package's import path).
+ The file name can be changed with the -o flag.
+
+-exec xprog
+ Run the test binary using xprog. The behavior is the same as
+ in 'go run'. See 'go help run' for details.
+
+-i
+ Install packages that are dependencies of the test.
+ Do not run the test.
+
+-o file
+ Compile the test binary to the named file.
+ The test still runs (unless -c or -i is specified).
+
+
+The test binary also accepts flags that control execution of the test; these
+flags are also accessible by 'go test'. See 'go help testflag' for details.
+
+
+For more about build flags, see 'go help build'.
+For more about specifying packages, see 'go help packages'.
+
+
+See also: go build, go vet.
+
+
+
+Usage:
+
+
go tool [-n] command [args...]
+
+
+Tool runs the go tool command identified by the arguments.
+With no arguments it prints the list of known tools.
+
+
+The -n flag causes tool to print the command that would be
+executed but not execute it.
+
+
+For more about each tool command, see 'go tool command -h'.
+
+
Print Go version
+
+Usage:
+
+
go version
+
+
+Version prints the Go version, as reported by runtime.Version.
+
+
+
+Usage:
+
+
go vet [-n] [-x] [build flags] [packages]
+
+
+Vet runs the Go vet command on the packages named by the import paths.
+
+
+For more about vet, see 'go doc cmd/vet'.
+For more about specifying packages, see 'go help packages'.
+
+
+To run the vet tool with specific options, run 'go tool vet'.
+
+
+The -n flag prints commands that would be executed.
+The -x flag prints commands as they are executed.
+
+
+For more about build flags, see 'go help build'.
+
+
+See also: go fmt, go fix.
+
+
Calling between Go and C
+
+There are two different ways to call between Go and C/C++ code.
+
+
+The first is the cgo tool, which is part of the Go distribution. For
+information on how to use it see the cgo documentation (go doc cmd/cgo).
+
+
+The second is the SWIG program, which is a general tool for
+interfacing between languages. For information on SWIG see
+http://swig.org/ . When running go build, any file with a .swig
+extension will be passed to SWIG. Any file with a .swigcxx extension
+will be passed to SWIG with the -c++ option.
+
+
+When either cgo or SWIG is used, go build will pass any .c, .m, .s,
+or .S files to the C compiler, and any .cc, .cpp, .cxx files to the C++
+compiler. The CC or CXX environment variables may be set to determine
+the C or C++ compiler, respectively, to use.
+
+
Description of build modes
+
+The 'go build' and 'go install' commands take a -buildmode argument which
+indicates which kind of object file is to be built. Currently supported values
+are:
+
+
-buildmode=archive
+ Build the listed non-main packages into .a files. Packages named
+ main are ignored.
+
+-buildmode=c-archive
+ Build the listed main package, plus all packages it imports,
+ into a C archive file. The only callable symbols will be those
+ functions exported using a cgo //export comment. Requires
+ exactly one main package to be listed.
+
+-buildmode=c-shared
+ Build the listed main packages, plus all packages that they
+ import, into C shared libraries. The only callable symbols will
+ be those functions exported using a cgo //export comment.
+ Non-main packages are ignored.
+
+-buildmode=default
+ Listed main packages are built into executables and listed
+ non-main packages are built into .a files (the default
+ behavior).
+
+-buildmode=shared
+ Combine all the listed non-main packages into a single shared
+ library that will be used when building with the -linkshared
+ option. Packages named main are ignored.
+
+-buildmode=exe
+ Build the listed main packages and everything they import into
+ executables. Packages not named main are ignored.
+
+-buildmode=pie
+ Build the listed main packages and everything they import into
+ position independent executables (PIE). Packages not named
+ main are ignored.
+
+-buildmode=plugin
+ Build the listed main packages, plus all packages that they
+ import, into a Go plugin. Packages not named main are ignored.
+
+
File types
+
+The go command examines the contents of a restricted set of files
+in each directory. It identifies which files to examine based on
+the extension of the file name. These extensions are:
+
+
.go
+ Go source files.
+.c, .h
+ C source files.
+ If the package uses cgo or SWIG, these will be compiled with the
+ OS-native compiler (typically gcc); otherwise they will
+ trigger an error.
+.cc, .cpp, .cxx, .hh, .hpp, .hxx
+ C++ source files. Only useful with cgo or SWIG, and always
+ compiled with the OS-native compiler.
+.m
+ Objective-C source files. Only useful with cgo, and always
+ compiled with the OS-native compiler.
+.s, .S
+ Assembler source files.
+ If the package uses cgo or SWIG, these will be assembled with the
+ OS-native assembler (typically gcc (sic)); otherwise they
+ will be assembled with the Go assembler.
+.swig, .swigcxx
+ SWIG definition files.
+.syso
+ System object files.
+
+
+Files of each of these types except .syso may contain build
+constraints, but the go command stops scanning for build constraints
+at the first item in the file that is not a blank line or //-style
+line comment. See the go/build package documentation for
+more details.
+
+
+Non-test Go source files can also include a //go:binary-only-package
+comment, indicating that the package sources are included
+for documentation only and must not be used to build the
+package binary. This enables distribution of Go packages in
+their compiled form alone. See the go/build package documentation
+for more details.
+
+
GOPATH environment variable
+
+The Go path is used to resolve import statements.
+It is implemented by and documented in the go/build package.
+
+
+The GOPATH environment variable lists places to look for Go code.
+On Unix, the value is a colon-separated string.
+On Windows, the value is a semicolon-separated string.
+On Plan 9, the value is a list.
+
+
+If the environment variable is unset, GOPATH defaults
+to a subdirectory named "go" in the user's home directory
+($HOME/go on Unix, %USERPROFILE%\go on Windows),
+unless that directory holds a Go distribution.
+Run "go env GOPATH" to see the current GOPATH.
+
+
+See https://golang.org/wiki/SettingGOPATH to set a custom GOPATH.
+
+
+Each directory listed in GOPATH must have a prescribed structure:
+
+
+The src directory holds source code. The path below src
+determines the import path or executable name.
+
+
+The pkg directory holds installed package objects.
+As in the Go tree, each target operating system and
+architecture pair has its own subdirectory of pkg
+(pkg/GOOS_GOARCH).
+
+
+If DIR is a directory listed in the GOPATH, a package with
+source in DIR/src/foo/bar can be imported as "foo/bar" and
+has its compiled form installed to "DIR/pkg/GOOS_GOARCH/foo/bar.a".
+
+
+The bin directory holds compiled commands.
+Each command is named for its source directory, but only
+the final element, not the entire path. That is, the
+command with source in DIR/src/foo/quux is installed into
+DIR/bin/quux, not DIR/bin/foo/quux. The "foo/" prefix is stripped
+so that you can add DIR/bin to your PATH to get at the
+installed commands. If the GOBIN environment variable is
+set, commands are installed to the directory it names instead
+of DIR/bin. GOBIN must be an absolute path.
+
+
+Here's an example directory layout:
+
+
GOPATH=/home/user/go
+
+/home/user/go/
+ src/
+ foo/
+ bar/ (go code in package bar)
+ x.go
+ quux/ (go code in package main)
+ y.go
+ bin/
+ quux (installed command)
+ pkg/
+ linux_amd64/
+ foo/
+ bar.a (installed package object)
+
+
+Go searches each directory listed in GOPATH to find source code,
+but new packages are always downloaded into the first directory
+in the list.
+
+
+See https://golang.org/doc/code.html for an example.
+
+
Internal Directories
+
+Code in or below a directory named "internal" is importable only
+by code in the directory tree rooted at the parent of "internal".
+Here's an extended version of the directory layout above:
+
+
/home/user/go/
+ src/
+ crash/
+ bang/ (go code in package bang)
+ b.go
+ foo/ (go code in package foo)
+ f.go
+ bar/ (go code in package bar)
+ x.go
+ internal/
+ baz/ (go code in package baz)
+ z.go
+ quux/ (go code in package main)
+ y.go
+
+
+The code in z.go is imported as "foo/internal/baz", but that
+import statement can only appear in source files in the subtree
+rooted at foo. The source files foo/f.go, foo/bar/x.go, and
+foo/quux/y.go can all import "foo/internal/baz", but the source file
+crash/bang/b.go cannot.
+
+
+See https://golang.org/s/go14internal for details.
+
+
Vendor Directories
+
+Go 1.6 includes support for using local copies of external dependencies
+to satisfy imports of those dependencies, often referred to as vendoring.
+
+
+Code below a directory named "vendor" is importable only
+by code in the directory tree rooted at the parent of "vendor",
+and only using an import path that omits the prefix up to and
+including the vendor element.
+
+
+Here's the example from the previous section,
+but with the "internal" directory renamed to "vendor"
+and a new foo/vendor/crash/bang directory added:
+
+
/home/user/go/
+ src/
+ crash/
+ bang/ (go code in package bang)
+ b.go
+ foo/ (go code in package foo)
+ f.go
+ bar/ (go code in package bar)
+ x.go
+ vendor/
+ crash/
+ bang/ (go code in package bang)
+ b.go
+ baz/ (go code in package baz)
+ z.go
+ quux/ (go code in package main)
+ y.go
+
+
+The same visibility rules apply as for internal, but the code
+in z.go is imported as "baz", not as "foo/vendor/baz".
+
+
+Code in vendor directories deeper in the source tree shadows
+code in higher directories. Within the subtree rooted at foo, an import
+of "crash/bang" resolves to "foo/vendor/crash/bang", not the
+top-level "crash/bang".
+
+
+Code in vendor directories is not subject to import path
+checking (see 'go help importpath').
+
+
+When 'go get' checks out or updates a git repository, it now also
+updates submodules.
+
+
+Vendor directories do not affect the placement of new repositories
+being checked out for the first time by 'go get': those are always
+placed in the main GOPATH, never in a vendor subtree.
+
+
+See https://golang.org/s/go15vendor for details.
+
+
Environment variables
+
+The go command, and the tools it invokes, examine a few different
+environment variables. For many of these, you can see the default
+value of on your system by running 'go env NAME', where NAME is the
+name of the variable.
+
+
+General-purpose environment variables:
+
+
GCCGO
+ The gccgo command to run for 'go build -compiler=gccgo'.
+GOARCH
+ The architecture, or processor, for which to compile code.
+ Examples are amd64, 386, arm, ppc64.
+GOBIN
+ The directory where 'go install' will install a command.
+GOOS
+ The operating system for which to compile code.
+ Examples are linux, darwin, windows, netbsd.
+GOPATH
+ For more details see: 'go help gopath'.
+GORACE
+ Options for the race detector.
+ See https://golang.org/doc/articles/race_detector.html .
+GOROOT
+ The root of the go tree.
+
+
+Environment variables for use with cgo:
+
+
CC
+ The command to use to compile C code.
+CGO_ENABLED
+ Whether the cgo command is supported. Either 0 or 1.
+CGO_CFLAGS
+ Flags that cgo will pass to the compiler when compiling
+ C code.
+CGO_CPPFLAGS
+ Flags that cgo will pass to the compiler when compiling
+ C or C++ code.
+CGO_CXXFLAGS
+ Flags that cgo will pass to the compiler when compiling
+ C++ code.
+CGO_FFLAGS
+ Flags that cgo will pass to the compiler when compiling
+ Fortran code.
+CGO_LDFLAGS
+ Flags that cgo will pass to the compiler when linking.
+CXX
+ The command to use to compile C++ code.
+PKG_CONFIG
+ Path to pkg-config tool.
+
+
+Architecture-specific environment variables:
+
+
GOARM
+ For GOARCH=arm, the ARM architecture for which to compile.
+ Valid values are 5, 6, 7.
+GO386
+ For GOARCH=386, the floating point instruction set.
+ Valid values are 387, sse2.
+
+
+Special-purpose environment variables:
+
+
GOROOT_FINAL
+ The root of the installed Go tree, when it is
+ installed in a location other than where it is built.
+ File names in stack traces are rewritten from GOROOT to
+ GOROOT_FINAL.
+GO_EXTLINK_ENABLED
+ Whether the linker should use external linking mode
+ when using -linkmode=auto with code that uses cgo.
+ Set to 0 to disable external linking mode, 1 to enable it.
+GIT_ALLOW_PROTOCOL
+ Defined by Git. A colon-separated list of schemes that are allowed to be used
+ with git fetch/clone. If set, any scheme not explicitly mentioned will be
+ considered insecure by 'go get'.
+
+
Import path syntax
+
+An import path (see 'go help packages') denotes a package stored in the local
+file system. In general, an import path denotes either a standard package (such
+as "unicode/utf8") or a package found in one of the work spaces (For more
+details see: 'go help gopath').
+
+
Relative import paths
+
+An import path beginning with ./ or ../ is called a relative path.
+The toolchain supports relative import paths as a shortcut in two ways.
+
+
+First, a relative path can be used as a shorthand on the command line.
+If you are working in the directory containing the code imported as
+"unicode" and want to run the tests for "unicode/utf8", you can type
+"go test ./utf8" instead of needing to specify the full path.
+Similarly, in the reverse situation, "go test .." will test "unicode" from
+the "unicode/utf8" directory. Relative patterns are also allowed, like
+"go test ./..." to test all subdirectories. See 'go help packages' for details
+on the pattern syntax.
+
+
+Second, if you are compiling a Go program not in a work space,
+you can use a relative path in an import statement in that program
+to refer to nearby code also not in a work space.
+This makes it easy to experiment with small multipackage programs
+outside of the usual work spaces, but such programs cannot be
+installed with "go install" (there is no work space in which to install them),
+so they are rebuilt from scratch each time they are built.
+To avoid ambiguity, Go programs cannot use relative import paths
+within a work space.
+
+
Remote import paths
+
+Certain import paths also
+describe how to obtain the source code for the package using
+a revision control system.
+
+
+A few common code hosting sites have special syntax:
+
+
Bitbucket (Git, Mercurial)
+
+ import "bitbucket.org/user/project"
+ import "bitbucket.org/user/project/sub/directory"
+
+GitHub (Git)
+
+ import "github.com/user/project"
+ import "github.com/user/project/sub/directory"
+
+Launchpad (Bazaar)
+
+ import "launchpad.net/project"
+ import "launchpad.net/project/series"
+ import "launchpad.net/project/series/sub/directory"
+
+ import "launchpad.net/~user/project/branch"
+ import "launchpad.net/~user/project/branch/sub/directory"
+
+IBM DevOps Services (Git)
+
+ import "hub.jazz.net/git/user/project"
+ import "hub.jazz.net/git/user/project/sub/directory"
+
+
+For code hosted on other servers, import paths may either be qualified
+with the version control type, or the go tool can dynamically fetch
+the import path over https/http and discover where the code resides
+from a <meta> tag in the HTML.
+
+
+To declare the code location, an import path of the form
+
+
repository.vcs/path
+
+
+specifies the given repository, with or without the .vcs suffix,
+using the named version control system, and then the path inside
+that repository. The supported version control systems are:
+
+
Bazaar .bzr
+Git .git
+Mercurial .hg
+Subversion .svn
+
+
+For example,
+
+
import "example.org/user/foo.hg"
+
+
+denotes the root directory of the Mercurial repository at
+example.org/user/foo or foo.hg, and
+
+
import "example.org/repo.git/foo/bar"
+
+
+denotes the foo/bar directory of the Git repository at
+example.org/repo or repo.git.
+
+
+When a version control system supports multiple protocols,
+each is tried in turn when downloading. For example, a Git
+download tries https://, then git+ssh://.
+
+
+By default, downloads are restricted to known secure protocols
+(e.g. https, ssh). To override this setting for Git downloads, the
+GIT_ALLOW_PROTOCOL environment variable can be set (For more details see:
+'go help environment').
+
+
+If the import path is not a known code hosting site and also lacks a
+version control qualifier, the go tool attempts to fetch the import
+over https/http and looks for a <meta> tag in the document's HTML
+<head>.
+
+
+The meta tag has the form:
+
+
<meta name="go-import" content="import-prefix vcs repo-root">
+
+
+The import-prefix is the import path corresponding to the repository
+root. It must be a prefix or an exact match of the package being
+fetched with "go get". If it's not an exact match, another http
+request is made at the prefix to verify the <meta> tags match.
+
+
+The meta tag should appear as early in the file as possible.
+In particular, it should appear before any raw JavaScript or CSS,
+to avoid confusing the go command's restricted parser.
+
+
+The vcs is one of "git", "hg", "svn", etc,
+
+
+The repo-root is the root of the version control system
+containing a scheme and not containing a .vcs qualifier.
+
+
+For example,
+
+
import "example.org/pkg/foo"
+
+
+will result in the following requests:
+
+
https://example.org/pkg/foo?go-get=1 (preferred)
+http://example.org/pkg/foo?go-get=1 (fallback, only with -insecure)
+
+
+If that page contains the meta tag
+
+
<meta name="go-import" content="example.org git https://code.org/r/p/exproj ">
+
+
+the go tool will verify that https://example.org/?go-get=1 contains the
+same meta tag and then git clone https://code.org/r/p/exproj into
+GOPATH/src/example.org.
+
+
+New downloaded packages are written to the first directory listed in the GOPATH
+environment variable (For more details see: 'go help gopath').
+
+
+The go command attempts to download the version of the
+package appropriate for the Go release being used.
+Run 'go help get' for more.
+
+
Import path checking
+
+When the custom import path feature described above redirects to a
+known code hosting site, each of the resulting packages has two possible
+import paths, using the custom domain or the known hosting site.
+
+
+A package statement is said to have an "import comment" if it is immediately
+followed (before the next newline) by a comment of one of these two forms:
+
+
package math // import "path"
+package math /* import "path" */
+
+
+The go command will refuse to install a package with an import comment
+unless it is being referred to by that import path. In this way, import comments
+let package authors make sure the custom import path is used and not a
+direct path to the underlying code hosting site.
+
+
+Import path checking is disabled for code found within vendor trees.
+This makes it possible to copy code into alternate locations in vendor trees
+without needing to update import comments.
+
+
+See https://golang.org/s/go14customimport for details.
+
+
Description of package lists
+
+Many commands apply to a set of packages:
+
+
go action [packages]
+
+
+Usually, [packages] is a list of import paths.
+
+
+An import path that is a rooted path or that begins with
+a . or .. element is interpreted as a file system path and
+denotes the package in that directory.
+
+
+Otherwise, the import path P denotes the package found in
+the directory DIR/src/P for some DIR listed in the GOPATH
+environment variable (For more details see: 'go help gopath').
+
+
+If no import paths are given, the action applies to the
+package in the current directory.
+
+
+There are four reserved names for paths that should not be used
+for packages to be built with the go tool:
+
+
+- "main" denotes the top-level package in a stand-alone executable.
+
+
+- "all" expands to all package directories found in all the GOPATH
+trees. For example, 'go list all' lists all the packages on the local
+system.
+
+
+- "std" is like all but expands to just the packages in the standard
+Go library.
+
+
+- "cmd" expands to the Go repository's commands and their
+internal libraries.
+
+
+Import paths beginning with "cmd/" only match source code in
+the Go repository.
+
+
+An import path is a pattern if it includes one or more "..." wildcards,
+each of which can match any string, including the empty string and
+strings containing slashes. Such a pattern expands to all package
+directories found in the GOPATH trees with names matching the
+patterns. As a special case, x/... matches x as well as x's subdirectories.
+For example, net/... expands to net and packages in its subdirectories.
+
+
+An import path can also name a package to be downloaded from
+a remote repository. Run 'go help importpath' for details.
+
+
+Every package in a program must have a unique import path.
+By convention, this is arranged by starting each path with a
+unique prefix that belongs to you. For example, paths used
+internally at Google all begin with 'google', and paths
+denoting remote repositories begin with the path to the code,
+such as 'github.com/user/repo'.
+
+
+Packages in a program need not have unique package names,
+but there are two reserved package names with special meaning.
+The name main indicates a command, not a library.
+Commands are built into binaries and cannot be imported.
+The name documentation indicates documentation for
+a non-Go program in the directory. Files in package documentation
+are ignored by the go command.
+
+
+As a special case, if the package list is a list of .go files from a
+single directory, the command is applied to a single synthesized
+package made up of exactly those files, ignoring any build constraints
+in those files and ignoring any other files in the directory.
+
+
+Directory and file names that begin with "." or "_" are ignored
+by the go tool, as are directories named "testdata".
+
+
Description of testing flags
+
+The 'go test' command takes both flags that apply to 'go test' itself
+and flags that apply to the resulting test binary.
+
+
+Several of the flags control profiling and write an execution profile
+suitable for "go tool pprof"; run "go tool pprof -h" for more
+information. The --alloc_space, --alloc_objects, and --show_bytes
+options of pprof control how the information is presented.
+
+
+The following flags are recognized by the 'go test' command and
+control the execution of any test:
+
+
-bench regexp
+ Run (sub)benchmarks matching a regular expression.
+ The given regular expression is split into smaller ones by
+ top-level '/', where each must match the corresponding part of a
+ benchmark's identifier.
+ By default, no benchmarks run. To run all benchmarks,
+ use '-bench .' or '-bench=.'.
+
+-benchtime t
+ Run enough iterations of each benchmark to take t, specified
+ as a time.Duration (for example, -benchtime 1h30s).
+ The default is 1 second (1s).
+
+-count n
+ Run each test and benchmark n times (default 1).
+ If -cpu is set, run n times for each GOMAXPROCS value.
+ Examples are always run once.
+
+-cover
+ Enable coverage analysis.
+
+-covermode set,count,atomic
+ Set the mode for coverage analysis for the package[s]
+ being tested. The default is "set" unless -race is enabled,
+ in which case it is "atomic".
+ The values:
+ set: bool: does this statement run?
+ count: int: how many times does this statement run?
+ atomic: int: count, but correct in multithreaded tests;
+ significantly more expensive.
+ Sets -cover.
+
+-coverpkg pkg1,pkg2,pkg3
+ Apply coverage analysis in each test to the given list of packages.
+ The default is for each test to analyze only the package being tested.
+ Packages are specified as import paths.
+ Sets -cover.
+
+-cpu 1,2,4
+ Specify a list of GOMAXPROCS values for which the tests or
+ benchmarks should be executed. The default is the current value
+ of GOMAXPROCS.
+
+-parallel n
+ Allow parallel execution of test functions that call t.Parallel.
+ The value of this flag is the maximum number of tests to run
+ simultaneously; by default, it is set to the value of GOMAXPROCS.
+ Note that -parallel only applies within a single test binary.
+ The 'go test' command may run tests for different packages
+ in parallel as well, according to the setting of the -p flag
+ (see 'go help build').
+
+-run regexp
+ Run only those tests and examples matching the regular expression.
+ For tests the regular expression is split into smaller ones by
+ top-level '/', where each must match the corresponding part of a
+ test's identifier.
+
+-short
+ Tell long-running tests to shorten their run time.
+ It is off by default but set during all.bash so that installing
+ the Go tree can run a sanity check but not spend time running
+ exhaustive tests.
+
+-timeout t
+ If a test runs longer than t, panic.
+ The default is 10 minutes (10m).
+
+-v
+ Verbose output: log all tests as they are run. Also print all
+ text from Log and Logf calls even if the test succeeds.
+
+
+The following flags are also recognized by 'go test' and can be used to
+profile the tests during execution:
+
+
-benchmem
+ Print memory allocation statistics for benchmarks.
+
+-blockprofile block.out
+ Write a goroutine blocking profile to the specified file
+ when all tests are complete.
+ Writes test binary as -c would.
+
+-blockprofilerate n
+ Control the detail provided in goroutine blocking profiles by
+ calling runtime.SetBlockProfileRate with n.
+ See 'go doc runtime.SetBlockProfileRate'.
+ The profiler aims to sample, on average, one blocking event every
+ n nanoseconds the program spends blocked. By default,
+ if -test.blockprofile is set without this flag, all blocking events
+ are recorded, equivalent to -test.blockprofilerate=1.
+
+-coverprofile cover.out
+ Write a coverage profile to the file after all tests have passed.
+ Sets -cover.
+
+-cpuprofile cpu.out
+ Write a CPU profile to the specified file before exiting.
+ Writes test binary as -c would.
+
+-memprofile mem.out
+ Write a memory profile to the file after all tests have passed.
+ Writes test binary as -c would.
+
+-memprofilerate n
+ Enable more precise (and expensive) memory profiles by setting
+ runtime.MemProfileRate. See 'go doc runtime.MemProfileRate'.
+ To profile all memory allocations, use -test.memprofilerate=1
+ and pass --alloc_space flag to the pprof tool.
+
+-mutexprofile mutex.out
+ Write a mutex contention profile to the specified file
+ when all tests are complete.
+ Writes test binary as -c would.
+
+-mutexprofilefraction n
+ Sample 1 in n stack traces of goroutines holding a
+ contended mutex.
+
+-outputdir directory
+ Place output files from profiling in the specified directory,
+ by default the directory in which "go test" is running.
+
+-trace trace.out
+ Write an execution trace to the specified file before exiting.
+
+
+Each of these flags is also recognized with an optional 'test.' prefix,
+as in -test.v. When invoking the generated test binary (the result of
+'go test -c') directly, however, the prefix is mandatory.
+
+
+The 'go test' command rewrites or removes recognized flags,
+as appropriate, both before and after the optional package list,
+before invoking the test binary.
+
+
+For instance, the command
+
+
go test -v -myflag testdata -cpuprofile=prof.out -x
+
+
+will compile the test binary and then run it as
+
+
pkg.test -test.v -myflag testdata -test.cpuprofile=prof.out
+
+
+(The -x flag is removed because it applies only to the go command's
+execution, not to the test itself.)
+
+
+The test flags that generate profiles (other than for coverage) also
+leave the test binary in pkg.test for use when analyzing the profiles.
+
+
+When 'go test' runs a test binary, it does so from within the
+corresponding package's source code directory. Depending on the test,
+it may be necessary to do the same when invoking a generated test
+binary directly.
+
+
+The command-line package list, if present, must appear before any
+flag not known to the go test command. Continuing the example above,
+the package list would have to appear before -myflag, but could appear
+on either side of -v.
+
+
+To keep an argument for a test binary from being interpreted as a
+known flag or a package name, use -args (see 'go help test') which
+passes the remainder of the command line through to the test binary
+uninterpreted and unaltered.
+
+
+For instance, the command
+
+
go test -v -args -x -v
+
+
+will compile the test binary and then run it as
+
+
pkg.test -test.v -x -v
+
+
+Similarly,
+
+
go test -args math
+
+
+will compile the test binary and then run it as
+
+
pkg.test math
+
+
+In the first example, the -x and the second -v are passed through to the
+test binary unchanged and with no effect on the go command itself.
+In the second example, the argument math is passed through to the test
+binary, instead of being interpreted as the package list.
+
+
Description of testing functions
+
+The 'go test' command expects to find test, benchmark, and example functions
+in the "*_test.go" files corresponding to the package under test.
+
+
+A test function is one named TestXXX (where XXX is any alphanumeric string
+not starting with a lower case letter) and should have the signature,
+
+
func TestXXX(t *testing.T) { ... }
+
+
+A benchmark function is one named BenchmarkXXX and should have the signature,
+
+
func BenchmarkXXX(b *testing.B) { ... }
+
+
+An example function is similar to a test function but, instead of using
+*testing.T to report success or failure, prints output to os.Stdout.
+If the last comment in the function starts with "Output:" then the output
+is compared exactly against the comment (see examples below). If the last
+comment begins with "Unordered output:" then the output is compared to the
+comment, however the order of the lines is ignored. An example with no such
+comment is compiled but not executed. An example with no text after
+"Output:" is compiled, executed, and expected to produce no output.
+
+
+Godoc displays the body of ExampleXXX to demonstrate the use
+of the function, constant, or variable XXX. An example of a method M with
+receiver type T or *T is named ExampleT_M. There may be multiple examples
+for a given function, constant, or variable, distinguished by a trailing _xxx,
+where xxx is a suffix not beginning with an upper case letter.
+
+
+Here is an example of an example:
+
+
func ExamplePrintln() {
+ Println("The output of\nthis example.")
+ // Output: The output of
+ // this example.
+}
+
+
+Here is another example where the ordering of the output is ignored:
+
+
func ExamplePerm() {
+ for _, value := range Perm(4) {
+ fmt.Println(value)
+ }
+
+ // Unordered output: 4
+ // 2
+ // 1
+ // 3
+ // 0
+}
+
+
+The entire test file is presented as the example when it contains a single
+example function, at least one other function, type, variable, or constant
+declaration, and no test or benchmark functions.
+
+
+See the documentation of the testing package for more information.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`))
diff --git a/vendor/golang.org/x/net/http2/h2i/h2i.go b/vendor/golang.org/x/net/http2/h2i/h2i.go
index 228edf8..76c7787 100644
--- a/vendor/golang.org/x/net/http2/h2i/h2i.go
+++ b/vendor/golang.org/x/net/http2/h2i/h2i.go
@@ -88,6 +88,14 @@ func withPort(host string) string {
return host
}
+// withoutPort strips the port from addr if present.
+func withoutPort(addr string) string {
+ if h, _, err := net.SplitHostPort(addr); err == nil {
+ return h
+ }
+ return addr
+}
+
// h2i is the app's state.
type h2i struct {
host string
@@ -134,7 +142,7 @@ func main() {
func (app *h2i) Main() error {
cfg := &tls.Config{
- ServerName: app.host,
+ ServerName: withoutPort(app.host),
NextProtos: strings.Split(*flagNextProto, ","),
InsecureSkipVerify: *flagInsecure,
}
@@ -473,7 +481,7 @@ func (app *h2i) encodeHeaders(req *http.Request) []byte {
host = req.URL.Host
}
- path := req.URL.Path
+ path := req.RequestURI
if path == "" {
path = "/"
}
diff --git a/vendor/golang.org/x/net/http2/hpack/encode.go b/vendor/golang.org/x/net/http2/hpack/encode.go
index f9bb033..54726c2 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.
diff --git a/vendor/golang.org/x/net/http2/hpack/encode_test.go b/vendor/golang.org/x/net/http2/hpack/encode_test.go
index 92286f3..05f12db 100644
--- a/vendor/golang.org/x/net/http2/hpack/encode_test.go
+++ b/vendor/golang.org/x/net/http2/hpack/encode_test.go
@@ -7,6 +7,8 @@ package hpack
import (
"bytes"
"encoding/hex"
+ "fmt"
+ "math/rand"
"reflect"
"strings"
"testing"
@@ -101,17 +103,20 @@ func TestEncoderSearchTable(t *testing.T) {
wantMatch bool
}{
// Name and Value match
- {pair("foo", "bar"), uint64(len(staticTable) + 3), true},
- {pair("blake", "miz"), uint64(len(staticTable) + 2), true},
+ {pair("foo", "bar"), uint64(staticTable.len()) + 3, true},
+ {pair("blake", "miz"), uint64(staticTable.len()) + 2, true},
{pair(":method", "GET"), 2, true},
- // Only name match because Sensitive == true
- {HeaderField{":method", "GET", true}, 2, false},
+ // Only name match because Sensitive == true. This is allowed to match
+ // any ":method" entry. The current implementation uses the last entry
+ // added in newStaticTable.
+ {HeaderField{":method", "GET", true}, 3, false},
// Only Name matches
- {pair("foo", "..."), uint64(len(staticTable) + 3), false},
- {pair("blake", "..."), uint64(len(staticTable) + 2), false},
- {pair(":method", "..."), 2, false},
+ {pair("foo", "..."), uint64(staticTable.len()) + 3, false},
+ {pair("blake", "..."), uint64(staticTable.len()) + 2, false},
+ // As before, this is allowed to match any ":method" entry.
+ {pair(":method", "..."), 3, false},
// None match
{pair("foo-", "bar"), 0, false},
@@ -328,3 +333,54 @@ func TestEncoderSetMaxDynamicTableSizeLimit(t *testing.T) {
func removeSpace(s string) string {
return strings.Replace(s, " ", "", -1)
}
+
+func BenchmarkEncoderSearchTable(b *testing.B) {
+ e := NewEncoder(nil)
+
+ // A sample of possible header fields.
+ // This is not based on any actual data from HTTP/2 traces.
+ var possible []HeaderField
+ for _, f := range staticTable.ents {
+ if f.Value == "" {
+ possible = append(possible, f)
+ continue
+ }
+ // Generate 5 random values, except for cookie and set-cookie,
+ // which we know can have many values in practice.
+ num := 5
+ if f.Name == "cookie" || f.Name == "set-cookie" {
+ num = 25
+ }
+ for i := 0; i < num; i++ {
+ f.Value = fmt.Sprintf("%s-%d", f.Name, i)
+ possible = append(possible, f)
+ }
+ }
+ for k := 0; k < 10; k++ {
+ f := HeaderField{
+ Name: fmt.Sprintf("x-header-%d", k),
+ Sensitive: rand.Int()%2 == 0,
+ }
+ for i := 0; i < 5; i++ {
+ f.Value = fmt.Sprintf("%s-%d", f.Name, i)
+ possible = append(possible, f)
+ }
+ }
+
+ // Add a random sample to the dynamic table. This very loosely simulates
+ // a history of 100 requests with 20 header fields per request.
+ for r := 0; r < 100*20; r++ {
+ f := possible[rand.Int31n(int32(len(possible)))]
+ // Skip if this is in the staticTable verbatim.
+ if _, has := staticTable.search(f); !has {
+ e.dynTab.add(f)
+ }
+ }
+
+ b.ResetTimer()
+ for n := 0; n < b.N; n++ {
+ for _, f := range possible {
+ e.searchTable(f)
+ }
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/hpack/hpack.go b/vendor/golang.org/x/net/http2/hpack/hpack.go
index 135b9f6..176644a 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
@@ -102,6 +102,7 @@ func NewDecoder(maxDynamicTableSize uint32, emitFunc func(f HeaderField)) *Decod
emit: emitFunc,
emitEnabled: true,
}
+ d.dynTab.table.init()
d.dynTab.allowedMaxSize = maxDynamicTableSize
d.dynTab.setMaxSize(maxDynamicTableSize)
return d
@@ -154,12 +155,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 +167,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:]
+ var n int
+ for dt.size > dt.maxSize && n < dt.table.len() {
+ dt.size -= dt.table.ents[n].Size()
+ n++
}
-
- // 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]
- }
-
- 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.
@@ -307,7 +255,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.
diff --git a/vendor/golang.org/x/net/http2/hpack/hpack_test.go b/vendor/golang.org/x/net/http2/hpack/hpack_test.go
index 4c7b17b..bc7f476 100644
--- a/vendor/golang.org/x/net/http2/hpack/hpack_test.go
+++ b/vendor/golang.org/x/net/http2/hpack/hpack_test.go
@@ -5,117 +5,16 @@
package hpack
import (
- "bufio"
"bytes"
"encoding/hex"
"fmt"
"math/rand"
"reflect"
- "regexp"
- "strconv"
"strings"
"testing"
"time"
)
-func TestStaticTable(t *testing.T) {
- fromSpec := `
- +-------+-----------------------------+---------------+
- | 1 | :authority | |
- | 2 | :method | GET |
- | 3 | :method | POST |
- | 4 | :path | / |
- | 5 | :path | /index.html |
- | 6 | :scheme | http |
- | 7 | :scheme | https |
- | 8 | :status | 200 |
- | 9 | :status | 204 |
- | 10 | :status | 206 |
- | 11 | :status | 304 |
- | 12 | :status | 400 |
- | 13 | :status | 404 |
- | 14 | :status | 500 |
- | 15 | accept-charset | |
- | 16 | accept-encoding | gzip, deflate |
- | 17 | accept-language | |
- | 18 | accept-ranges | |
- | 19 | accept | |
- | 20 | access-control-allow-origin | |
- | 21 | age | |
- | 22 | allow | |
- | 23 | authorization | |
- | 24 | cache-control | |
- | 25 | content-disposition | |
- | 26 | content-encoding | |
- | 27 | content-language | |
- | 28 | content-length | |
- | 29 | content-location | |
- | 30 | content-range | |
- | 31 | content-type | |
- | 32 | cookie | |
- | 33 | date | |
- | 34 | etag | |
- | 35 | expect | |
- | 36 | expires | |
- | 37 | from | |
- | 38 | host | |
- | 39 | if-match | |
- | 40 | if-modified-since | |
- | 41 | if-none-match | |
- | 42 | if-range | |
- | 43 | if-unmodified-since | |
- | 44 | last-modified | |
- | 45 | link | |
- | 46 | location | |
- | 47 | max-forwards | |
- | 48 | proxy-authenticate | |
- | 49 | proxy-authorization | |
- | 50 | range | |
- | 51 | referer | |
- | 52 | refresh | |
- | 53 | retry-after | |
- | 54 | server | |
- | 55 | set-cookie | |
- | 56 | strict-transport-security | |
- | 57 | transfer-encoding | |
- | 58 | user-agent | |
- | 59 | vary | |
- | 60 | via | |
- | 61 | www-authenticate | |
- +-------+-----------------------------+---------------+
-`
- bs := bufio.NewScanner(strings.NewReader(fromSpec))
- re := regexp.MustCompile(`\| (\d+)\s+\| (\S+)\s*\| (\S(.*\S)?)?\s+\|`)
- for bs.Scan() {
- l := bs.Text()
- if !strings.Contains(l, "|") {
- continue
- }
- m := re.FindStringSubmatch(l)
- if m == nil {
- continue
- }
- i, err := strconv.Atoi(m[1])
- if err != nil {
- t.Errorf("Bogus integer on line %q", l)
- continue
- }
- if i < 1 || i > len(staticTable) {
- t.Errorf("Bogus index %d on line %q", i, l)
- continue
- }
- if got, want := staticTable[i-1].Name, m[2]; got != want {
- t.Errorf("header index %d name = %q; want %q", i, got, want)
- }
- if got, want := staticTable[i-1].Value, m[3]; got != want {
- t.Errorf("header index %d value = %q; want %q", i, got, want)
- }
- }
- if err := bs.Err(); err != nil {
- t.Error(err)
- }
-}
-
func (d *Decoder) mustAt(idx int) HeaderField {
if hf, ok := d.at(uint64(idx)); !ok {
panic(fmt.Sprintf("bogus index %d", idx))
@@ -132,10 +31,10 @@ func TestDynamicTableAt(t *testing.T) {
}
d.dynTab.add(pair("foo", "bar"))
d.dynTab.add(pair("blake", "miz"))
- if got, want := at(len(staticTable)+1), (pair("blake", "miz")); got != want {
+ if got, want := at(staticTable.len()+1), (pair("blake", "miz")); got != want {
t.Errorf("at(dyn 1) = %v; want %v", got, want)
}
- if got, want := at(len(staticTable)+2), (pair("foo", "bar")); got != want {
+ if got, want := at(staticTable.len()+2), (pair("foo", "bar")); got != want {
t.Errorf("at(dyn 2) = %v; want %v", got, want)
}
if got, want := at(3), (pair(":method", "POST")); got != want {
@@ -143,41 +42,6 @@ func TestDynamicTableAt(t *testing.T) {
}
}
-func TestDynamicTableSearch(t *testing.T) {
- dt := dynamicTable{}
- dt.setMaxSize(4096)
-
- dt.add(pair("foo", "bar"))
- dt.add(pair("blake", "miz"))
- dt.add(pair(":method", "GET"))
-
- tests := []struct {
- hf HeaderField
- wantI uint64
- wantMatch bool
- }{
- // Name and Value match
- {pair("foo", "bar"), 3, true},
- {pair(":method", "GET"), 1, true},
-
- // Only name match because of Sensitive == true
- {HeaderField{"blake", "miz", true}, 2, false},
-
- // Only Name matches
- {pair("foo", "..."), 3, false},
- {pair("blake", "..."), 2, false},
- {pair(":method", "..."), 1, false},
-
- // None match
- {pair("foo-", "bar"), 0, false},
- }
- for _, tt := range tests {
- if gotI, gotMatch := dt.search(tt.hf); gotI != tt.wantI || gotMatch != tt.wantMatch {
- t.Errorf("d.search(%+v) = %v, %v; want %v, %v", tt.hf, gotI, gotMatch, tt.wantI, tt.wantMatch)
- }
- }
-}
-
func TestDynamicTableSizeEvict(t *testing.T) {
d := NewDecoder(4096, nil)
if want := uint32(0); d.dynTab.size != want {
@@ -196,7 +60,7 @@ func TestDynamicTableSizeEvict(t *testing.T) {
if want := uint32(6 + 32); d.dynTab.size != want {
t.Fatalf("after setMaxSize, size = %d; want %d", d.dynTab.size, want)
}
- if got, want := d.mustAt(len(staticTable)+1), (pair("foo", "bar")); got != want {
+ if got, want := d.mustAt(staticTable.len()+1), (pair("foo", "bar")); got != want {
t.Errorf("at(dyn 1) = %v; want %v", got, want)
}
add(pair("long", strings.Repeat("x", 500)))
@@ -255,9 +119,9 @@ func TestDecoderDecode(t *testing.T) {
}
func (dt *dynamicTable) reverseCopy() (hf []HeaderField) {
- hf = make([]HeaderField, len(dt.ents))
+ hf = make([]HeaderField, len(dt.table.ents))
for i := range hf {
- hf[i] = dt.ents[len(dt.ents)-1-i]
+ hf[i] = dt.table.ents[len(dt.table.ents)-1-i]
}
return
}
@@ -784,6 +648,10 @@ func TestHuffmanFuzzCrash(t *testing.T) {
}
}
+func pair(name, value string) HeaderField {
+ return HeaderField{Name: name, Value: value}
+}
+
func dehex(s string) []byte {
s = strings.Replace(s, " ", "", -1)
s = strings.Replace(s, "\n", "", -1)
diff --git a/vendor/golang.org/x/net/http2/hpack/tables.go b/vendor/golang.org/x/net/http2/hpack/tables.go
index b9283a0..a66cfbe 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/hpack/tables_test.go b/vendor/golang.org/x/net/http2/hpack/tables_test.go
new file mode 100644
index 0000000..d963f36
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/hpack/tables_test.go
@@ -0,0 +1,214 @@
+// 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 hpack
+
+import (
+ "bufio"
+ "regexp"
+ "strconv"
+ "strings"
+ "testing"
+)
+
+func TestHeaderFieldTable(t *testing.T) {
+ table := &headerFieldTable{}
+ table.init()
+ table.addEntry(pair("key1", "value1-1"))
+ table.addEntry(pair("key2", "value2-1"))
+ table.addEntry(pair("key1", "value1-2"))
+ table.addEntry(pair("key3", "value3-1"))
+ table.addEntry(pair("key4", "value4-1"))
+ table.addEntry(pair("key2", "value2-2"))
+
+ // Tests will be run twice: once before evicting anything, and
+ // again after evicting the three oldest entries.
+ tests := []struct {
+ f HeaderField
+ beforeWantStaticI uint64
+ beforeWantMatch bool
+ afterWantStaticI uint64
+ afterWantMatch bool
+ }{
+ {HeaderField{"key1", "value1-1", false}, 1, true, 0, false},
+ {HeaderField{"key1", "value1-2", false}, 3, true, 0, false},
+ {HeaderField{"key1", "value1-3", false}, 3, false, 0, false},
+ {HeaderField{"key2", "value2-1", false}, 2, true, 3, false},
+ {HeaderField{"key2", "value2-2", false}, 6, true, 3, true},
+ {HeaderField{"key2", "value2-3", false}, 6, false, 3, false},
+ {HeaderField{"key4", "value4-1", false}, 5, true, 2, true},
+ // Name match only, because sensitive.
+ {HeaderField{"key4", "value4-1", true}, 5, false, 2, false},
+ // Key not found.
+ {HeaderField{"key5", "value5-x", false}, 0, false, 0, false},
+ }
+
+ staticToDynamic := func(i uint64) uint64 {
+ if i == 0 {
+ return 0
+ }
+ return uint64(table.len()) - i + 1 // dynamic is the reversed table
+ }
+
+ searchStatic := func(f HeaderField) (uint64, bool) {
+ old := staticTable
+ staticTable = table
+ defer func() { staticTable = old }()
+ return staticTable.search(f)
+ }
+
+ searchDynamic := func(f HeaderField) (uint64, bool) {
+ return table.search(f)
+ }
+
+ for _, test := range tests {
+ gotI, gotMatch := searchStatic(test.f)
+ if wantI, wantMatch := test.beforeWantStaticI, test.beforeWantMatch; gotI != wantI || gotMatch != wantMatch {
+ t.Errorf("before evictions: searchStatic(%+v)=%v,%v want %v,%v", test.f, gotI, gotMatch, wantI, wantMatch)
+ }
+ gotI, gotMatch = searchDynamic(test.f)
+ wantDynamicI := staticToDynamic(test.beforeWantStaticI)
+ if wantI, wantMatch := wantDynamicI, test.beforeWantMatch; gotI != wantI || gotMatch != wantMatch {
+ t.Errorf("before evictions: searchDynamic(%+v)=%v,%v want %v,%v", test.f, gotI, gotMatch, wantI, wantMatch)
+ }
+ }
+
+ table.evictOldest(3)
+
+ for _, test := range tests {
+ gotI, gotMatch := searchStatic(test.f)
+ if wantI, wantMatch := test.afterWantStaticI, test.afterWantMatch; gotI != wantI || gotMatch != wantMatch {
+ t.Errorf("after evictions: searchStatic(%+v)=%v,%v want %v,%v", test.f, gotI, gotMatch, wantI, wantMatch)
+ }
+ gotI, gotMatch = searchDynamic(test.f)
+ wantDynamicI := staticToDynamic(test.afterWantStaticI)
+ if wantI, wantMatch := wantDynamicI, test.afterWantMatch; gotI != wantI || gotMatch != wantMatch {
+ t.Errorf("after evictions: searchDynamic(%+v)=%v,%v want %v,%v", test.f, gotI, gotMatch, wantI, wantMatch)
+ }
+ }
+}
+
+func TestHeaderFieldTable_LookupMapEviction(t *testing.T) {
+ table := &headerFieldTable{}
+ table.init()
+ table.addEntry(pair("key1", "value1-1"))
+ table.addEntry(pair("key2", "value2-1"))
+ table.addEntry(pair("key1", "value1-2"))
+ table.addEntry(pair("key3", "value3-1"))
+ table.addEntry(pair("key4", "value4-1"))
+ table.addEntry(pair("key2", "value2-2"))
+
+ // evict all pairs
+ table.evictOldest(table.len())
+
+ if l := table.len(); l > 0 {
+ t.Errorf("table.len() = %d, want 0", l)
+ }
+
+ if l := len(table.byName); l > 0 {
+ t.Errorf("len(table.byName) = %d, want 0", l)
+ }
+
+ if l := len(table.byNameValue); l > 0 {
+ t.Errorf("len(table.byNameValue) = %d, want 0", l)
+ }
+}
+
+func TestStaticTable(t *testing.T) {
+ fromSpec := `
+ +-------+-----------------------------+---------------+
+ | 1 | :authority | |
+ | 2 | :method | GET |
+ | 3 | :method | POST |
+ | 4 | :path | / |
+ | 5 | :path | /index.html |
+ | 6 | :scheme | http |
+ | 7 | :scheme | https |
+ | 8 | :status | 200 |
+ | 9 | :status | 204 |
+ | 10 | :status | 206 |
+ | 11 | :status | 304 |
+ | 12 | :status | 400 |
+ | 13 | :status | 404 |
+ | 14 | :status | 500 |
+ | 15 | accept-charset | |
+ | 16 | accept-encoding | gzip, deflate |
+ | 17 | accept-language | |
+ | 18 | accept-ranges | |
+ | 19 | accept | |
+ | 20 | access-control-allow-origin | |
+ | 21 | age | |
+ | 22 | allow | |
+ | 23 | authorization | |
+ | 24 | cache-control | |
+ | 25 | content-disposition | |
+ | 26 | content-encoding | |
+ | 27 | content-language | |
+ | 28 | content-length | |
+ | 29 | content-location | |
+ | 30 | content-range | |
+ | 31 | content-type | |
+ | 32 | cookie | |
+ | 33 | date | |
+ | 34 | etag | |
+ | 35 | expect | |
+ | 36 | expires | |
+ | 37 | from | |
+ | 38 | host | |
+ | 39 | if-match | |
+ | 40 | if-modified-since | |
+ | 41 | if-none-match | |
+ | 42 | if-range | |
+ | 43 | if-unmodified-since | |
+ | 44 | last-modified | |
+ | 45 | link | |
+ | 46 | location | |
+ | 47 | max-forwards | |
+ | 48 | proxy-authenticate | |
+ | 49 | proxy-authorization | |
+ | 50 | range | |
+ | 51 | referer | |
+ | 52 | refresh | |
+ | 53 | retry-after | |
+ | 54 | server | |
+ | 55 | set-cookie | |
+ | 56 | strict-transport-security | |
+ | 57 | transfer-encoding | |
+ | 58 | user-agent | |
+ | 59 | vary | |
+ | 60 | via | |
+ | 61 | www-authenticate | |
+ +-------+-----------------------------+---------------+
+`
+ bs := bufio.NewScanner(strings.NewReader(fromSpec))
+ re := regexp.MustCompile(`\| (\d+)\s+\| (\S+)\s*\| (\S(.*\S)?)?\s+\|`)
+ for bs.Scan() {
+ l := bs.Text()
+ if !strings.Contains(l, "|") {
+ continue
+ }
+ m := re.FindStringSubmatch(l)
+ if m == nil {
+ continue
+ }
+ i, err := strconv.Atoi(m[1])
+ if err != nil {
+ t.Errorf("Bogus integer on line %q", l)
+ continue
+ }
+ if i < 1 || i > staticTable.len() {
+ t.Errorf("Bogus index %d on line %q", i, l)
+ continue
+ }
+ if got, want := staticTable.ents[i-1].Name, m[2]; got != want {
+ t.Errorf("header index %d name = %q; want %q", i, got, want)
+ }
+ if got, want := staticTable.ents[i-1].Value, m[3]; got != want {
+ t.Errorf("header index %d value = %q; want %q", i, got, want)
+ }
+ }
+ if err := bs.Err(); err != nil {
+ t.Error(err)
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/not_go16.go b/vendor/golang.org/x/net/http2/not_go16.go
index efd2e12..508cebc 100644
--- a/vendor/golang.org/x/net/http2/not_go16.go
+++ b/vendor/golang.org/x/net/http2/not_go16.go
@@ -7,7 +7,6 @@
package http2
import (
- "crypto/tls"
"net/http"
"time"
)
@@ -20,27 +19,3 @@ 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_go19.go b/vendor/golang.org/x/net/http2/not_go19.go
new file mode 100644
index 0000000..5ae0772
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/not_go19.go
@@ -0,0 +1,16 @@
+// 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.9
+
+package http2
+
+import (
+ "net/http"
+)
+
+func configureServer19(s *http.Server, conf *Server) error {
+ // not supported prior to go1.9
+ return nil
+}
diff --git a/vendor/golang.org/x/net/http2/pipe.go b/vendor/golang.org/x/net/http2/pipe.go
index 53b7a1d..a614009 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/pipe_test.go b/vendor/golang.org/x/net/http2/pipe_test.go
index 7632299..1bf351f 100644
--- a/vendor/golang.org/x/net/http2/pipe_test.go
+++ b/vendor/golang.org/x/net/http2/pipe_test.go
@@ -92,6 +92,13 @@ func TestPipeCloseWithError(t *testing.T) {
if err != a {
t.Logf("read error = %v, %v", err, a)
}
+ // Read and Write should fail.
+ if n, err := p.Write([]byte("abc")); err != errClosedPipeWrite || n != 0 {
+ t.Errorf("Write(abc) after close\ngot %v, %v\nwant 0, %v", n, err, errClosedPipeWrite)
+ }
+ if n, err := p.Read(make([]byte, 1)); err == nil || n != 0 {
+ t.Errorf("Read() after close\ngot %v, nil\nwant 0, %v", n, errClosedPipeWrite)
+ }
}
func TestPipeBreakWithError(t *testing.T) {
@@ -106,4 +113,18 @@ func TestPipeBreakWithError(t *testing.T) {
if err != a {
t.Logf("read error = %v, %v", err, a)
}
+ if p.b != nil {
+ t.Errorf("buffer should be nil after BreakWithError")
+ }
+ // Write should succeed silently.
+ if n, err := p.Write([]byte("abc")); err != nil || n != 3 {
+ t.Errorf("Write(abc) after break\ngot %v, %v\nwant 0, nil", n, err)
+ }
+ if p.b != nil {
+ t.Errorf("buffer should be nil after Write")
+ }
+ // Read should fail.
+ if n, err := p.Read(make([]byte, 1)); err == nil || n != 0 {
+ t.Errorf("Read() after close\ngot %v, nil\nwant 0, not nil", n)
+ }
}
diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go
index 0431ab0..7367b31 100644
--- a/vendor/golang.org/x/net/http2/server.go
+++ b/vendor/golang.org/x/net/http2/server.go
@@ -110,9 +110,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 +161,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,9 +207,13 @@ func ConfigureServer(s *http.Server, conf *Server) error {
if conf == nil {
conf = new(Server)
}
+ conf.state = &serverInternalState{activeConns: make(map[*serverConn]struct{})}
if err := configureServer18(s, conf); err != nil {
return err
}
+ if err := configureServer19(s, conf); err != nil {
+ return err
+ }
if s.TLSConfig == nil {
s.TLSConfig = new(tls.Config)
@@ -255,27 +325,39 @@ 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.
+ // 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{})
}
if s.NewWriteScheduler != nil {
@@ -284,6 +366,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)
@@ -366,10 +451,9 @@ type serverConn struct {
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
@@ -377,38 +461,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 {
@@ -453,10 +538,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
@@ -686,48 +771,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:
@@ -735,26 +820,37 @@ 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 {
@@ -763,6 +859,36 @@ func (sc *serverConn) serve() {
}
}
+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:
+ }
+}
+
// readPreface reads the ClientPreface greeting from the peer
// or returns an error on timeout or an invalid greeting.
func (sc *serverConn) readPreface() error {
@@ -1004,7 +1130,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)
}
@@ -1076,10 +1206,19 @@ 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.serveG.checkNotOn() // NOT
+ sc.shutdownOnce.Do(func() { sc.sendServeMsg(gracefulShutdownMsg) })
+}
+
+func (sc *serverConn) startGracefulShutdownInternal() {
sc.goAwayIn(ErrCodeNo, 0)
}
@@ -1111,8 +1250,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) {
@@ -1295,6 +1433,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 {
@@ -1307,7 +1448,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 {
@@ -1385,9 +1526,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
@@ -1494,7 +1635,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
@@ -1533,6 +1674,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
@@ -1709,9 +1856,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})
@@ -1775,16 +1925,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
}
@@ -1880,24 +2028,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
@@ -1993,12 +2123,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) {
@@ -2093,8 +2217,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
@@ -2268,7 +2392,7 @@ const TrailerPrefix = "Trailer:"
// 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),
@@ -2504,7 +2628,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,
@@ -2517,7 +2641,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 {
@@ -2539,7 +2663,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.
@@ -2578,7 +2702,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
@@ -2703,31 +2827,6 @@ var badTrailer = map[string]bool{
"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/server_push_test.go b/vendor/golang.org/x/net/http2/server_push_test.go
index fd550d2..918fd30 100644
--- a/vendor/golang.org/x/net/http2/server_push_test.go
+++ b/vendor/golang.org/x/net/http2/server_push_test.go
@@ -430,18 +430,20 @@ func TestServer_Push_RejectForbiddenHeader(t *testing.T) {
func TestServer_Push_StateTransitions(t *testing.T) {
const body = "foo"
- startedPromise := make(chan bool)
+ gotPromise := make(chan bool)
finishedPush := make(chan bool)
+
st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
switch r.URL.RequestURI() {
case "/":
if err := w.(http.Pusher).Push("/pushed", nil); err != nil {
t.Errorf("Push error: %v", err)
}
- close(startedPromise)
// Don't finish this request until the push finishes so we don't
// nondeterministically interleave output frames with the push.
<-finishedPush
+ case "/pushed":
+ <-gotPromise
}
w.Header().Set("Content-Type", "text/html")
w.Header().Set("Content-Length", strconv.Itoa(len(body)))
@@ -458,11 +460,16 @@ func TestServer_Push_StateTransitions(t *testing.T) {
t.Fatalf("streamState(2)=%v, want %v", got, want)
}
getSlash(st)
- <-startedPromise
+ // After the PUSH_PROMISE is sent, the stream should be stateHalfClosedRemote.
+ st.wantPushPromise()
if got, want := st.streamState(2), stateHalfClosedRemote; got != want {
t.Fatalf("streamState(2)=%v, want %v", got, want)
}
- st.wantPushPromise()
+ // We stall the HTTP handler for "/pushed" until the above check. If we don't
+ // stall the handler, then the handler might write HEADERS and DATA and finish
+ // the stream before we check st.streamState(2) -- should that happen, we'll
+ // see stateClosed and fail the above check.
+ close(gotPromise)
st.wantHeaders()
if df := st.wantData(); !df.StreamEnded() {
t.Fatal("expected END_STREAM flag on DATA")
@@ -501,7 +508,7 @@ func TestServer_Push_RejectAfterGoAway(t *testing.T) {
return
default:
}
- st.sc.testHookCh <- func(loopNum int) {
+ st.sc.serveMsgCh <- func(loopNum int) {
if !st.sc.pushEnabled {
readyOnce.Do(func() { close(ready) })
}
diff --git a/vendor/golang.org/x/net/http2/server_test.go b/vendor/golang.org/x/net/http2/server_test.go
index dfa4cff..638d2a4 100644
--- a/vendor/golang.org/x/net/http2/server_test.go
+++ b/vendor/golang.org/x/net/http2/server_test.go
@@ -80,6 +80,7 @@ type serverTesterOpt string
var optOnlyServer = serverTesterOpt("only_server")
var optQuiet = serverTesterOpt("quiet_logging")
+var optFramerReuseFrames = serverTesterOpt("frame_reuse_frames")
func newServerTester(t testing.TB, handler http.HandlerFunc, opts ...interface{}) *serverTester {
resetHooks()
@@ -91,7 +92,7 @@ func newServerTester(t testing.TB, handler http.HandlerFunc, opts ...interface{}
NextProtos: []string{NextProtoTLS},
}
- var onlyServer, quiet bool
+ var onlyServer, quiet, framerReuseFrames bool
h2server := new(Server)
for _, opt := range opts {
switch v := opt.(type) {
@@ -107,6 +108,8 @@ func newServerTester(t testing.TB, handler http.HandlerFunc, opts ...interface{}
onlyServer = true
case optQuiet:
quiet = true
+ case optFramerReuseFrames:
+ framerReuseFrames = true
}
case func(net.Conn, http.ConnState):
ts.Config.ConnState = v
@@ -139,7 +142,6 @@ func newServerTester(t testing.TB, handler http.HandlerFunc, opts ...interface{}
st.scMu.Lock()
defer st.scMu.Unlock()
st.sc = v
- st.sc.testHookCh = make(chan func(int))
}
log.SetOutput(io.MultiWriter(stderrv(), twriter{t: t, st: st}))
if !onlyServer {
@@ -149,6 +151,9 @@ func newServerTester(t testing.TB, handler http.HandlerFunc, opts ...interface{}
}
st.cc = cc
st.fr = NewFramer(cc, cc)
+ if framerReuseFrames {
+ st.fr.SetReuseFrames()
+ }
if !logFrameReads && !logFrameWrites {
st.fr.debugReadLoggerf = func(m string, v ...interface{}) {
m = time.Now().Format("2006-01-02 15:04:05.999999999 ") + strings.TrimPrefix(m, "http2: ") + "\n"
@@ -181,7 +186,7 @@ func (st *serverTester) addLogFilter(phrase string) {
func (st *serverTester) stream(id uint32) *stream {
ch := make(chan *stream, 1)
- st.sc.testHookCh <- func(int) {
+ st.sc.serveMsgCh <- func(int) {
ch <- st.sc.streams[id]
}
return <-ch
@@ -189,7 +194,7 @@ func (st *serverTester) stream(id uint32) *stream {
func (st *serverTester) streamState(id uint32) streamState {
ch := make(chan streamState, 1)
- st.sc.testHookCh <- func(int) {
+ st.sc.serveMsgCh <- func(int) {
state, _ := st.sc.state(id)
ch <- state
}
@@ -199,7 +204,7 @@ func (st *serverTester) streamState(id uint32) streamState {
// loopNum reports how many times this conn's select loop has gone around.
func (st *serverTester) loopNum() int {
lastc := make(chan int, 1)
- st.sc.testHookCh <- func(loopNum int) {
+ st.sc.serveMsgCh <- func(loopNum int) {
lastc <- loopNum
}
return <-lastc
@@ -254,11 +259,52 @@ func (st *serverTester) Close() {
// greet initiates the client's HTTP/2 connection into a state where
// frames may be sent.
func (st *serverTester) greet() {
+ st.greetAndCheckSettings(func(Setting) error { return nil })
+}
+
+func (st *serverTester) greetAndCheckSettings(checkSetting func(s Setting) error) {
st.writePreface()
st.writeInitialSettings()
- st.wantSettings()
+ st.wantSettings().ForeachSetting(checkSetting)
st.writeSettingsAck()
- st.wantSettingsAck()
+
+ // The initial WINDOW_UPDATE and SETTINGS ACK can come in any order.
+ var gotSettingsAck bool
+ var gotWindowUpdate bool
+
+ for i := 0; i < 2; i++ {
+ f, err := st.readFrame()
+ if err != nil {
+ st.t.Fatal(err)
+ }
+ switch f := f.(type) {
+ case *SettingsFrame:
+ if !f.Header().Flags.Has(FlagSettingsAck) {
+ st.t.Fatal("Settings Frame didn't have ACK set")
+ }
+ gotSettingsAck = true
+
+ case *WindowUpdateFrame:
+ if f.FrameHeader.StreamID != 0 {
+ st.t.Fatalf("WindowUpdate StreamID = %d; want 0", f.FrameHeader.StreamID, 0)
+ }
+ incr := uint32((&Server{}).initialConnRecvWindowSize() - initialWindowSize)
+ if f.Increment != incr {
+ st.t.Fatalf("WindowUpdate increment = %d; want %d", f.Increment, incr)
+ }
+ gotWindowUpdate = true
+
+ default:
+ st.t.Fatalf("Wanting a settings ACK or window update, received a %T", f)
+ }
+ }
+
+ if !gotSettingsAck {
+ st.t.Fatalf("Didn't get a settings ACK")
+ }
+ if !gotWindowUpdate {
+ st.t.Fatalf("Didn't get a window update")
+ }
}
func (st *serverTester) writePreface() {
@@ -318,7 +364,7 @@ func (st *serverTester) encodeHeaderRaw(headers ...string) []byte {
}
// encodeHeader encodes headers and returns their HPACK bytes. headers
-// must contain an even number of key/value pairs. There may be
+// must contain an even number of key/value pairs. There may be
// multiple pairs for keys (e.g. "cookie"). The :method, :path, and
// :scheme headers default to GET, / and https. The :authority header
// defaults to st.ts.Listener.Addr().
@@ -578,12 +624,7 @@ func TestServer(t *testing.T) {
server sends in the HTTP/2 connection.
`)
- st.writePreface()
- st.writeInitialSettings()
- st.wantSettings()
- st.writeSettingsAck()
- st.wantSettingsAck()
-
+ st.greet()
st.writeHeaders(HeadersFrameParam{
StreamID: 1, // clients send odd numbers
BlockFragment: st.encodeHeader(),
@@ -656,7 +697,7 @@ func TestServer_Request_Get_PathSlashes(t *testing.T) {
}
// TODO: add a test with EndStream=true on the HEADERS but setting a
-// Content-Length anyway. Should we just omit it and force it to
+// Content-Length anyway. Should we just omit it and force it to
// zero?
func TestServer_Request_Post_NoContentLength_EndStream(t *testing.T) {
@@ -1192,7 +1233,7 @@ func TestServer_Handler_Sends_WindowUpdate_Padding(t *testing.T) {
EndStream: false,
EndHeaders: true,
})
- st.writeDataPadded(1, false, []byte("abcdef"), []byte("1234"))
+ st.writeDataPadded(1, false, []byte("abcdef"), []byte{0, 0, 0, 0})
// Expect to immediately get our 5 bytes of padding back for
// both the connection and stream (4 bytes of padding + 1 byte of length)
@@ -2310,7 +2351,7 @@ func TestServer_NoCrash_HandlerClose_Then_ClientClose(t *testing.T) {
// Sent when the a Handler closes while a client has
// indicated it's still sending DATA:
- st.wantRSTStream(1, ErrCodeCancel)
+ st.wantRSTStream(1, ErrCodeNo)
// Now the handler has ended, so it's ended its
// stream, but the client hasn't closed its side
@@ -2390,6 +2431,7 @@ func TestServer_Rejects_TLSBadCipher(t *testing.T) {
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,
+ cipher_TLS_RSA_WITH_AES_128_CBC_SHA256,
}
})
defer st.Close()
@@ -2595,11 +2637,9 @@ func TestServerDoS_MaxHeaderListSize(t *testing.T) {
defer st.Close()
// shake hands
- st.writePreface()
- st.writeInitialSettings()
frameSize := defaultMaxReadFrameSize
var advHeaderListSize *uint32
- st.wantSettings().ForeachSetting(func(s Setting) error {
+ st.greetAndCheckSettings(func(s Setting) error {
switch s.ID {
case SettingMaxFrameSize:
if s.Val < minMaxFrameSize {
@@ -2614,8 +2654,6 @@ func TestServerDoS_MaxHeaderListSize(t *testing.T) {
}
return nil
})
- st.writeSettingsAck()
- st.wantSettingsAck()
if advHeaderListSize == nil {
t.Errorf("server didn't advertise a max header list size")
@@ -2994,6 +3032,89 @@ func BenchmarkServerPosts(b *testing.B) {
}
}
+// Send a stream of messages from server to client in separate data frames.
+// Brings up performance issues seen in long streams.
+// Created to show problem in go issue #18502
+func BenchmarkServerToClientStreamDefaultOptions(b *testing.B) {
+ benchmarkServerToClientStream(b)
+}
+
+// Justification for Change-Id: Iad93420ef6c3918f54249d867098f1dadfa324d8
+// Expect to see memory/alloc reduction by opting in to Frame reuse with the Framer.
+func BenchmarkServerToClientStreamReuseFrames(b *testing.B) {
+ benchmarkServerToClientStream(b, optFramerReuseFrames)
+}
+
+func benchmarkServerToClientStream(b *testing.B, newServerOpts ...interface{}) {
+ defer disableGoroutineTracking()()
+ b.ReportAllocs()
+ const msgLen = 1
+ // default window size
+ const windowSize = 1<<16 - 1
+
+ // next message to send from the server and for the client to expect
+ nextMsg := func(i int) []byte {
+ msg := make([]byte, msgLen)
+ msg[0] = byte(i)
+ if len(msg) != msgLen {
+ panic("invalid test setup msg length")
+ }
+ return msg
+ }
+
+ st := newServerTester(b, func(w http.ResponseWriter, r *http.Request) {
+ // Consume the (empty) body from th peer before replying, otherwise
+ // the server will sometimes (depending on scheduling) send the peer a
+ // a RST_STREAM with the CANCEL error code.
+ if n, err := io.Copy(ioutil.Discard, r.Body); n != 0 || err != nil {
+ b.Errorf("Copy error; got %v, %v; want 0, nil", n, err)
+ }
+ for i := 0; i < b.N; i += 1 {
+ w.Write(nextMsg(i))
+ w.(http.Flusher).Flush()
+ }
+ }, newServerOpts...)
+ defer st.Close()
+ st.greet()
+
+ const id = uint32(1)
+
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: id,
+ BlockFragment: st.encodeHeader(":method", "POST"),
+ EndStream: false,
+ EndHeaders: true,
+ })
+
+ st.writeData(id, true, nil)
+ st.wantHeaders()
+
+ var pendingWindowUpdate = uint32(0)
+
+ for i := 0; i < b.N; i += 1 {
+ expected := nextMsg(i)
+ df := st.wantData()
+ if bytes.Compare(expected, df.data) != 0 {
+ b.Fatalf("Bad message received; want %v; got %v", expected, df.data)
+ }
+ // try to send infrequent but large window updates so they don't overwhelm the test
+ pendingWindowUpdate += uint32(len(df.data))
+ if pendingWindowUpdate >= windowSize/2 {
+ if err := st.fr.WriteWindowUpdate(0, pendingWindowUpdate); err != nil {
+ b.Fatal(err)
+ }
+ if err := st.fr.WriteWindowUpdate(id, pendingWindowUpdate); err != nil {
+ b.Fatal(err)
+ }
+ pendingWindowUpdate = 0
+ }
+ }
+ df := st.wantData()
+ if !df.StreamEnded() {
+ b.Fatalf("DATA didn't have END_STREAM; got %v", df)
+ }
+}
+
// go-fuzz bug, originally reported at https://github.com/bradfitz/http2/issues/53
// Verify we don't hang.
func TestIssue53(t *testing.T) {
@@ -3293,8 +3414,9 @@ func TestServerHandleCustomConn(t *testing.T) {
}()
const testString = "my custom ConnectionState"
fakeConnState := tls.ConnectionState{
- ServerName: testString,
- Version: tls.VersionTLS12,
+ ServerName: testString,
+ Version: tls.VersionTLS12,
+ CipherSuite: cipher_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
}
go s.ServeConn(connStateConn{c1, fakeConnState}, &ServeConnOpts{
BaseConfig: &http.Server{
@@ -3563,48 +3685,3 @@ func TestRequestBodyReadCloseRace(t *testing.T) {
<-done
}
}
-
-func TestServerGracefulShutdown(t *testing.T) {
- shutdownCh := make(chan struct{})
- defer func() { testh1ServerShutdownChan = nil }()
- testh1ServerShutdownChan = func(*http.Server) <-chan struct{} { return shutdownCh }
-
- var st *serverTester
- handlerDone := make(chan struct{})
- st = newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
- defer close(handlerDone)
- close(shutdownCh)
-
- ga := st.wantGoAway()
- if ga.ErrCode != ErrCodeNo {
- t.Errorf("GOAWAY error = %v; want ErrCodeNo", ga.ErrCode)
- }
- if ga.LastStreamID != 1 {
- t.Errorf("GOAWAY LastStreamID = %v; want 1", ga.LastStreamID)
- }
-
- w.Header().Set("x-foo", "bar")
- })
- defer st.Close()
-
- st.greet()
- st.bodylessReq1()
-
- <-handlerDone
- hf := st.wantHeaders()
- goth := st.decodeHeader(hf.HeaderBlockFragment())
- wanth := [][2]string{
- {":status", "200"},
- {"x-foo", "bar"},
- {"content-type", "text/plain; charset=utf-8"},
- {"content-length", "0"},
- }
- if !reflect.DeepEqual(goth, wanth) {
- t.Errorf("Got headers %v; want %v", goth, wanth)
- }
-
- n, err := st.cc.Read([]byte{0})
- if n != 0 || err == nil {
- t.Errorf("Read = %v, %v; want 0, non-nil", n, err)
- }
-}
diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go
index 9f60c29..3a85f25 100644
--- a/vendor/golang.org/x/net/http2/transport.go
+++ b/vendor/golang.org/x/net/http2/transport.go
@@ -575,7 +575,7 @@ func (cc *ClientConn) canTakeNewRequestLocked() bool {
cc.nextStreamID < math.MaxInt32
}
-// 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
@@ -658,8 +658,6 @@ func commaSeparatedTrailers(req *http.Request) (string, error) {
}
if len(keys) > 0 {
sort.Strings(keys)
- // TODO: could do better allocation-wise here, but trailers are rare,
- // so being lazy for now.
return strings.Join(keys, ","), nil
}
return "", nil
@@ -811,8 +809,8 @@ 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)
@@ -1530,8 +1528,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)
@@ -1658,6 +1655,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 {
@@ -1705,12 +1703,6 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error {
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)
- }
-
// Check connection-level flow control.
cc.mu.Lock()
if cs.inflow.available() >= int32(f.Length) {
diff --git a/vendor/golang.org/x/net/http2/transport_test.go b/vendor/golang.org/x/net/http2/transport_test.go
index 8ef4f33..128ed0d 100644
--- a/vendor/golang.org/x/net/http2/transport_test.go
+++ b/vendor/golang.org/x/net/http2/transport_test.go
@@ -65,7 +65,8 @@ type fakeTLSConn struct {
func (c *fakeTLSConn) ConnectionState() tls.ConnectionState {
return tls.ConnectionState{
- Version: tls.VersionTLS12,
+ Version: tls.VersionTLS12,
+ CipherSuite: cipher_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
}
}
@@ -2406,7 +2407,7 @@ func TestTransportReturnsDataPaddingFlowControl(t *testing.T) {
EndStream: false,
BlockFragment: buf.Bytes(),
})
- pad := []byte("12345")
+ pad := make([]byte, 5)
ct.fr.WriteDataPadded(hf.StreamID, false, make([]byte, 5000), pad) // without ending stream
f, err := ct.readNonSettingsFrame()
@@ -2914,3 +2915,57 @@ func TestAuthorityAddr(t *testing.T) {
}
}
}
+
+// Issue 20448: stop allocating for DATA frames' payload after
+// Response.Body.Close is called.
+func TestTransportAllocationsAfterResponseBodyClose(t *testing.T) {
+ megabyteZero := make([]byte, 1<<20)
+
+ writeErr := make(chan error, 1)
+
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ w.(http.Flusher).Flush()
+ var sum int64
+ for i := 0; i < 100; i++ {
+ n, err := w.Write(megabyteZero)
+ sum += int64(n)
+ if err != nil {
+ writeErr <- err
+ return
+ }
+ }
+ t.Logf("wrote all %d bytes", sum)
+ writeErr <- nil
+ }, optOnlyServer)
+ defer st.Close()
+
+ tr := &Transport{TLSClientConfig: tlsConfigInsecure}
+ defer tr.CloseIdleConnections()
+ c := &http.Client{Transport: tr}
+ res, err := c.Get(st.ts.URL)
+ if err != nil {
+ t.Fatal(err)
+ }
+ var buf [1]byte
+ if _, err := res.Body.Read(buf[:]); err != nil {
+ t.Error(err)
+ }
+ if err := res.Body.Close(); err != nil {
+ t.Error(err)
+ }
+
+ trb, ok := res.Body.(transportResponseBody)
+ if !ok {
+ t.Fatalf("res.Body = %T; want transportResponseBody", res.Body)
+ }
+ if trb.cs.bufPipe.b != nil {
+ t.Errorf("response body pipe is still open")
+ }
+
+ gotErr := <-writeErr
+ if gotErr == nil {
+ t.Errorf("Handler unexpectedly managed to write its entire response without getting an error")
+ } else if gotErr != errStreamClosed {
+ t.Errorf("Handler Write err = %v; want errStreamClosed", gotErr)
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/writesched_priority.go b/vendor/golang.org/x/net/http2/writesched_priority.go
index 0113272..848fed6 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/http2/writesched_priority_test.go b/vendor/golang.org/x/net/http2/writesched_priority_test.go
index 2b23204..f2b535a 100644
--- a/vendor/golang.org/x/net/http2/writesched_priority_test.go
+++ b/vendor/golang.org/x/net/http2/writesched_priority_test.go
@@ -434,7 +434,7 @@ func TestPriorityFlowControl(t *testing.T) {
t.Fatalf("Pop(%d)=false, want true", i)
}
if got, want := wr.DataSize(), 8; got != want {
- t.Fatalf("Pop(%d)=%d bytes, want %d bytes", got, want)
+ t.Fatalf("Pop(%d)=%d bytes, want %d bytes", i, got, want)
}
}
}
diff --git a/vendor/golang.org/x/net/http2/writesched_random_test.go b/vendor/golang.org/x/net/http2/writesched_random_test.go
index 97b0bcd..3bf4aa3 100644
--- a/vendor/golang.org/x/net/http2/writesched_random_test.go
+++ b/vendor/golang.org/x/net/http2/writesched_random_test.go
@@ -30,7 +30,7 @@ func TestRandomScheduler(t *testing.T) {
t.Fatalf("got %d frames, expected 6", len(order))
}
if order[0].StreamID() != 0 || order[1].StreamID() != 0 {
- t.Fatalf("expected non-stream frames first", order[0], order[1])
+ t.Fatal("expected non-stream frames first", order[0], order[1])
}
got := make(map[uint32]bool)
for _, wr := range order[2:] {
diff --git a/vendor/golang.org/x/net/idna/example_test.go b/vendor/golang.org/x/net/idna/example_test.go
new file mode 100644
index 0000000..941e707
--- /dev/null
+++ b/vendor/golang.org/x/net/idna/example_test.go
@@ -0,0 +1,65 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+// 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 idna_test
+
+import (
+ "fmt"
+
+ "golang.org/x/net/idna"
+)
+
+func ExampleProfile() {
+ // Raw Punycode has no restrictions and does no mappings.
+ fmt.Println(idna.ToASCII(""))
+ fmt.Println(idna.ToASCII("*.faß.com"))
+ fmt.Println(idna.Punycode.ToASCII("*.faß.com"))
+
+ // Rewrite IDN for lookup. This (currently) uses transitional mappings to
+ // find a balance between IDNA2003 and IDNA2008 compatibility.
+ fmt.Println(idna.Lookup.ToASCII(""))
+ fmt.Println(idna.Lookup.ToASCII("www.faß.com"))
+
+ // Convert an IDN to ASCII for registration purposes. This changes the
+ // encoding, but reports an error if the input was illformed.
+ fmt.Println(idna.Registration.ToASCII(""))
+ fmt.Println(idna.Registration.ToASCII("www.faß.com"))
+
+ // Output:
+ //
+ // *.xn--fa-hia.com
+ // *.xn--fa-hia.com
+ //
+ // www.fass.com
+ // idna: invalid label ""
+ // www.xn--fa-hia.com
+}
+
+func ExampleNew() {
+ var p *idna.Profile
+
+ // Raw Punycode has no restrictions and does no mappings.
+ p = idna.New()
+ fmt.Println(p.ToASCII("*.faß.com"))
+
+ // Do mappings. Note that star is not allowed in a DNS lookup.
+ p = idna.New(
+ idna.MapForLookup(),
+ idna.Transitional(true)) // Map ß -> ss
+ fmt.Println(p.ToASCII("*.faß.com"))
+
+ // Set up a profile maps for lookup, but allows wild cards.
+ p = idna.New(
+ idna.MapForLookup(),
+ idna.Transitional(true), // Map ß -> ss
+ idna.StrictDomainName(false)) // Set more permissive ASCII rules.
+ fmt.Println(p.ToASCII("*.faß.com"))
+
+ // Output:
+ // *.xn--fa-hia.com
+ // *.fass.com idna: disallowed rune U+002E
+ // *.fass.com
+}
diff --git a/vendor/golang.org/x/net/idna/idna.go b/vendor/golang.org/x/net/idna/idna.go
index 3daa897..ee2dbda 100644
--- a/vendor/golang.org/x/net/idna/idna.go
+++ b/vendor/golang.org/x/net/idna/idna.go
@@ -1,61 +1,661 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// Package idna implements IDNA2008 (Internationalized Domain Names for
-// Applications), defined in RFC 5890, RFC 5891, RFC 5892, RFC 5893 and
-// RFC 5894.
+// Package idna implements IDNA2008 using the compatibility processing
+// defined by UTS (Unicode Technical Standard) #46, which defines a standard to
+// deal with the transition from IDNA2003.
+//
+// IDNA2008 (Internationalized Domain Names for Applications), is defined in RFC
+// 5890, RFC 5891, RFC 5892, RFC 5893 and RFC 5894.
+// UTS #46 is defined in http://www.unicode.org/reports/tr46.
+// See http://unicode.org/cldr/utility/idna.jsp for a visualization of the
+// differences between these two standards.
package idna // import "golang.org/x/net/idna"
import (
+ "fmt"
"strings"
"unicode/utf8"
+
+ "golang.org/x/text/secure/bidirule"
+ "golang.org/x/text/unicode/norm"
)
-// TODO(nigeltao): specify when errors occur. For example, is ToASCII(".") or
-// ToASCII("foo\x00") an error? See also http://www.unicode.org/faq/idn.html#11
+// NOTE: Unlike common practice in Go APIs, the functions will return a
+// sanitized domain name in case of errors. Browsers sometimes use a partially
+// evaluated string as lookup.
+// TODO: the current error handling is, in my opinion, the least opinionated.
+// Other strategies are also viable, though:
+// Option 1) Return an empty string in case of error, but allow the user to
+// specify explicitly which errors to ignore.
+// Option 2) Return the partially evaluated string if it is itself a valid
+// string, otherwise return the empty string in case of error.
+// Option 3) Option 1 and 2.
+// Option 4) Always return an empty string for now and implement Option 1 as
+// needed, and document that the return string may not be empty in case of
+// error in the future.
+// I think Option 1 is best, but it is quite opinionated.
-// acePrefix is the ASCII Compatible Encoding prefix.
-const acePrefix = "xn--"
+// ToASCII is a wrapper for Punycode.ToASCII.
+func ToASCII(s string) (string, error) {
+ return Punycode.process(s, true)
+}
+
+// ToUnicode is a wrapper for Punycode.ToUnicode.
+func ToUnicode(s string) (string, error) {
+ return Punycode.process(s, false)
+}
+
+// An Option configures a Profile at creation time.
+type Option func(*options)
+
+// Transitional sets a Profile to use the Transitional mapping as defined in UTS
+// #46. This will cause, for example, "ß" to be mapped to "ss". Using the
+// transitional mapping provides a compromise between IDNA2003 and IDNA2008
+// compatibility. It is used by most browsers when resolving domain names. This
+// option is only meaningful if combined with MapForLookup.
+func Transitional(transitional bool) Option {
+ return func(o *options) { o.transitional = true }
+}
+
+// VerifyDNSLength sets whether a Profile should fail if any of the IDN parts
+// are longer than allowed by the RFC.
+func VerifyDNSLength(verify bool) Option {
+ return func(o *options) { o.verifyDNSLength = verify }
+}
+
+// ValidateLabels sets whether to check the mandatory label validation criteria
+// as defined in Section 5.4 of RFC 5891. This includes testing for correct use
+// of hyphens ('-'), normalization, validity of runes, and the context rules.
+func ValidateLabels(enable bool) Option {
+ return func(o *options) {
+ // Don't override existing mappings, but set one that at least checks
+ // normalization if it is not set.
+ if o.mapping == nil && enable {
+ o.mapping = normalize
+ }
+ o.trie = trie
+ o.validateLabels = enable
+ o.fromPuny = validateFromPunycode
+ }
+}
+
+// StrictDomainName limits the set of permissable ASCII characters to those
+// allowed in domain names as defined in RFC 1034 (A-Z, a-z, 0-9 and the
+// hyphen). This is set by default for MapForLookup and ValidateForRegistration.
+//
+// This option is useful, for instance, for browsers that allow characters
+// outside this range, for example a '_' (U+005F LOW LINE). See
+// http://www.rfc-editor.org/std/std3.txt for more details This option
+// corresponds to the UseSTD3ASCIIRules option in UTS #46.
+func StrictDomainName(use bool) Option {
+ return func(o *options) {
+ o.trie = trie
+ o.useSTD3Rules = use
+ o.fromPuny = validateFromPunycode
+ }
+}
+
+// NOTE: the following options pull in tables. The tables should not be linked
+// in as long as the options are not used.
+
+// BidiRule enables the Bidi rule as defined in RFC 5893. Any application
+// that relies on proper validation of labels should include this rule.
+func BidiRule() Option {
+ return func(o *options) { o.bidirule = bidirule.ValidString }
+}
+
+// ValidateForRegistration sets validation options to verify that a given IDN is
+// properly formatted for registration as defined by Section 4 of RFC 5891.
+func ValidateForRegistration() Option {
+ return func(o *options) {
+ o.mapping = validateRegistration
+ StrictDomainName(true)(o)
+ ValidateLabels(true)(o)
+ VerifyDNSLength(true)(o)
+ BidiRule()(o)
+ }
+}
+
+// MapForLookup sets validation and mapping options such that a given IDN is
+// transformed for domain name lookup according to the requirements set out in
+// Section 5 of RFC 5891. The mappings follow the recommendations of RFC 5894,
+// RFC 5895 and UTS 46. It does not add the Bidi Rule. Use the BidiRule option
+// to add this check.
+//
+// The mappings include normalization and mapping case, width and other
+// compatibility mappings.
+func MapForLookup() Option {
+ return func(o *options) {
+ o.mapping = validateAndMap
+ StrictDomainName(true)(o)
+ ValidateLabels(true)(o)
+ }
+}
+
+type options struct {
+ transitional bool
+ useSTD3Rules bool
+ validateLabels bool
+ verifyDNSLength bool
+
+ trie *idnaTrie
+
+ // fromPuny calls validation rules when converting A-labels to U-labels.
+ fromPuny func(p *Profile, s string) error
+
+ // mapping implements a validation and mapping step as defined in RFC 5895
+ // or UTS 46, tailored to, for example, domain registration or lookup.
+ mapping func(p *Profile, s string) (string, error)
+
+ // bidirule, if specified, checks whether s conforms to the Bidi Rule
+ // defined in RFC 5893.
+ bidirule func(s string) bool
+}
+
+// A Profile defines the configuration of a IDNA mapper.
+type Profile struct {
+ options
+}
+
+func apply(o *options, opts []Option) {
+ for _, f := range opts {
+ f(o)
+ }
+}
+
+// New creates a new Profile.
+//
+// With no options, the returned Profile is the most permissive and equals the
+// Punycode Profile. Options can be passed to further restrict the Profile. The
+// MapForLookup and ValidateForRegistration options set a collection of options,
+// for lookup and registration purposes respectively, which can be tailored by
+// adding more fine-grained options, where later options override earlier
+// options.
+func New(o ...Option) *Profile {
+ p := &Profile{}
+ apply(&p.options, o)
+ return p
+}
// ToASCII converts a domain or domain label to its ASCII form. For example,
// ToASCII("bücher.example.com") is "xn--bcher-kva.example.com", and
-// ToASCII("golang") is "golang".
-func ToASCII(s string) (string, error) {
- if ascii(s) {
- return s, nil
- }
- labels := strings.Split(s, ".")
- for i, label := range labels {
- if !ascii(label) {
- a, err := encode(acePrefix, label)
- if err != nil {
- return "", err
- }
- labels[i] = a
- }
- }
- return strings.Join(labels, "."), nil
+// ToASCII("golang") is "golang". If an error is encountered it will return
+// an error and a (partially) processed result.
+func (p *Profile) ToASCII(s string) (string, error) {
+ return p.process(s, true)
}
// ToUnicode converts a domain or domain label to its Unicode form. For example,
// ToUnicode("xn--bcher-kva.example.com") is "bücher.example.com", and
-// ToUnicode("golang") is "golang".
-func ToUnicode(s string) (string, error) {
- if !strings.Contains(s, acePrefix) {
- return s, nil
+// ToUnicode("golang") is "golang". If an error is encountered it will return
+// an error and a (partially) processed result.
+func (p *Profile) ToUnicode(s string) (string, error) {
+ pp := *p
+ pp.transitional = false
+ return pp.process(s, false)
+}
+
+// String reports a string with a description of the profile for debugging
+// purposes. The string format may change with different versions.
+func (p *Profile) String() string {
+ s := ""
+ if p.transitional {
+ s = "Transitional"
+ } else {
+ s = "NonTransitional"
}
- labels := strings.Split(s, ".")
- for i, label := range labels {
- if strings.HasPrefix(label, acePrefix) {
- u, err := decode(label[len(acePrefix):])
- if err != nil {
- return "", err
+ if p.useSTD3Rules {
+ s += ":UseSTD3Rules"
+ }
+ if p.validateLabels {
+ s += ":ValidateLabels"
+ }
+ if p.verifyDNSLength {
+ s += ":VerifyDNSLength"
+ }
+ return s
+}
+
+var (
+ // Punycode is a Profile that does raw punycode processing with a minimum
+ // of validation.
+ Punycode *Profile = punycode
+
+ // Lookup is the recommended profile for looking up domain names, according
+ // to Section 5 of RFC 5891. The exact configuration of this profile may
+ // change over time.
+ Lookup *Profile = lookup
+
+ // Display is the recommended profile for displaying domain names.
+ // The configuration of this profile may change over time.
+ Display *Profile = display
+
+ // Registration is the recommended profile for checking whether a given
+ // IDN is valid for registration, according to Section 4 of RFC 5891.
+ Registration *Profile = registration
+
+ punycode = &Profile{}
+ lookup = &Profile{options{
+ transitional: true,
+ useSTD3Rules: true,
+ validateLabels: true,
+ 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
+ // Register: recommended for approving domain names: don't do any mappings
+ // but rather reject on invalid input. Bundle or block deviation characters.
+)
+
+type labelError struct{ label, code_ string }
+
+func (e labelError) code() string { return e.code_ }
+func (e labelError) Error() string {
+ return fmt.Sprintf("idna: invalid label %q", e.label)
+}
+
+type runeError rune
+
+func (e runeError) code() string { return "P1" }
+func (e runeError) Error() string {
+ return fmt.Sprintf("idna: disallowed rune %U", e)
+}
+
+// process implements the algorithm described in section 4 of UTS #46,
+// see http://www.unicode.org/reports/tr46.
+func (p *Profile) process(s string, toASCII bool) (string, error) {
+ var err error
+ if p.mapping != nil {
+ s, err = p.mapping(p, s)
+ }
+ // Remove leading empty labels.
+ for ; len(s) > 0 && s[0] == '.'; s = s[1:] {
+ }
+ // It seems like we should only create this error on ToASCII, but the
+ // UTS 46 conformance tests suggests we should always check this.
+ if err == nil && p.verifyDNSLength && s == "" {
+ err = &labelError{s, "A4"}
+ }
+ labels := labelIter{orig: s}
+ for ; !labels.done(); labels.next() {
+ label := labels.label()
+ if label == "" {
+ // Empty labels are not okay. The label iterator skips the last
+ // label if it is empty.
+ if err == nil && p.verifyDNSLength {
+ err = &labelError{s, "A4"}
}
- labels[i] = u
+ continue
+ }
+ if strings.HasPrefix(label, acePrefix) {
+ u, err2 := decode(label[len(acePrefix):])
+ if err2 != nil {
+ if err == nil {
+ err = err2
+ }
+ // Spec says keep the old label.
+ continue
+ }
+ labels.set(u)
+ if err == nil && p.validateLabels {
+ err = p.fromPuny(p, u)
+ }
+ if err == nil {
+ // This should be called on NonTransitional, according to the
+ // spec, but that currently does not have any effect. Use the
+ // original profile to preserve options.
+ err = p.validateLabel(u)
+ }
+ } else if err == nil {
+ err = p.validateLabel(label)
}
}
- return strings.Join(labels, "."), nil
+ if toASCII {
+ for labels.reset(); !labels.done(); labels.next() {
+ label := labels.label()
+ if !ascii(label) {
+ a, err2 := encode(acePrefix, label)
+ if err == nil {
+ err = err2
+ }
+ label = a
+ labels.set(a)
+ }
+ n := len(label)
+ if p.verifyDNSLength && err == nil && (n == 0 || n > 63) {
+ err = &labelError{label, "A4"}
+ }
+ }
+ }
+ s = labels.result()
+ if toASCII && p.verifyDNSLength && err == nil {
+ // Compute the length of the domain name minus the root label and its dot.
+ n := len(s)
+ if n > 0 && s[n-1] == '.' {
+ n--
+ }
+ if len(s) < 1 || n > 253 {
+ err = &labelError{s, "A4"}
+ }
+ }
+ return s, err
+}
+
+func normalize(p *Profile, s string) (string, error) {
+ return norm.NFC.String(s), nil
+}
+
+func validateRegistration(p *Profile, s string) (string, error) {
+ if !norm.NFC.IsNormalString(s) {
+ return s, &labelError{s, "V1"}
+ }
+ var err error
+ for i := 0; i < len(s); {
+ v, sz := trie.lookupString(s[i:])
+ i += sz
+ // 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:
+ if err == nil {
+ r, _ := utf8.DecodeRuneInString(s[i:])
+ err = runeError(r)
+ }
+ }
+ }
+ return s, err
+}
+
+func validateAndMap(p *Profile, s string) (string, error) {
+ var (
+ err error
+ b []byte
+ k int
+ )
+ for i := 0; i < len(s); {
+ v, sz := trie.lookupString(s[i:])
+ start := i
+ i += sz
+ // Copy bytes not copied so far.
+ switch p.simplify(info(v).category()) {
+ case valid:
+ continue
+ case disallowed:
+ if err == nil {
+ r, _ := utf8.DecodeRuneInString(s[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
+ }
+ if k == 0 {
+ // No changes so far.
+ s = norm.NFC.String(s)
+ } else {
+ b = append(b, s[k:]...)
+ if norm.NFC.QuickSpan(b) != len(b) {
+ b = norm.NFC.Bytes(b)
+ }
+ // TODO: the punycode converters require strings as input.
+ s = string(b)
+ }
+ return s, err
+}
+
+// A labelIter allows iterating over domain name labels.
+type labelIter struct {
+ orig string
+ slice []string
+ curStart int
+ curEnd int
+ i int
+}
+
+func (l *labelIter) reset() {
+ l.curStart = 0
+ l.curEnd = 0
+ l.i = 0
+}
+
+func (l *labelIter) done() bool {
+ return l.curStart >= len(l.orig)
+}
+
+func (l *labelIter) result() string {
+ if l.slice != nil {
+ return strings.Join(l.slice, ".")
+ }
+ return l.orig
+}
+
+func (l *labelIter) label() string {
+ if l.slice != nil {
+ return l.slice[l.i]
+ }
+ p := strings.IndexByte(l.orig[l.curStart:], '.')
+ l.curEnd = l.curStart + p
+ if p == -1 {
+ l.curEnd = len(l.orig)
+ }
+ return l.orig[l.curStart:l.curEnd]
+}
+
+// next sets the value to the next label. It skips the last label if it is empty.
+func (l *labelIter) next() {
+ l.i++
+ if l.slice != nil {
+ if l.i >= len(l.slice) || l.i == len(l.slice)-1 && l.slice[l.i] == "" {
+ l.curStart = len(l.orig)
+ }
+ } else {
+ l.curStart = l.curEnd + 1
+ if l.curStart == len(l.orig)-1 && l.orig[l.curStart] == '.' {
+ l.curStart = len(l.orig)
+ }
+ }
+}
+
+func (l *labelIter) set(s string) {
+ if l.slice == nil {
+ l.slice = strings.Split(l.orig, ".")
+ }
+ l.slice[l.i] = s
+}
+
+// acePrefix is the ASCII Compatible Encoding prefix.
+const acePrefix = "xn--"
+
+func (p *Profile) simplify(cat category) category {
+ switch cat {
+ case disallowedSTD3Mapped:
+ if p.useSTD3Rules {
+ cat = disallowed
+ } else {
+ cat = mapped
+ }
+ case disallowedSTD3Valid:
+ if p.useSTD3Rules {
+ cat = disallowed
+ } else {
+ cat = valid
+ }
+ case deviation:
+ if !p.transitional {
+ cat = valid
+ }
+ case validNV8, validXV8:
+ // TODO: handle V2008
+ cat = valid
+ }
+ return cat
+}
+
+func validateFromPunycode(p *Profile, s string) error {
+ if !norm.NFC.IsNormalString(s) {
+ return &labelError{s, "V1"}
+ }
+ for i := 0; i < len(s); {
+ v, sz := trie.lookupString(s[i:])
+ if c := p.simplify(info(v).category()); c != valid && c != deviation {
+ return &labelError{s, "V6"}
+ }
+ i += sz
+ }
+ return nil
+}
+
+const (
+ zwnj = "\u200c"
+ zwj = "\u200d"
+)
+
+type joinState int8
+
+const (
+ stateStart joinState = iota
+ stateVirama
+ stateBefore
+ stateBeforeVirama
+ stateAfter
+ stateFAIL
+)
+
+var joinStates = [][numJoinTypes]joinState{
+ stateStart: {
+ joiningL: stateBefore,
+ joiningD: stateBefore,
+ joinZWNJ: stateFAIL,
+ joinZWJ: stateFAIL,
+ joinVirama: stateVirama,
+ },
+ stateVirama: {
+ joiningL: stateBefore,
+ joiningD: stateBefore,
+ },
+ stateBefore: {
+ joiningL: stateBefore,
+ joiningD: stateBefore,
+ joiningT: stateBefore,
+ joinZWNJ: stateAfter,
+ joinZWJ: stateFAIL,
+ joinVirama: stateBeforeVirama,
+ },
+ stateBeforeVirama: {
+ joiningL: stateBefore,
+ joiningD: stateBefore,
+ joiningT: stateBefore,
+ },
+ stateAfter: {
+ joiningL: stateFAIL,
+ joiningD: stateBefore,
+ joiningT: stateAfter,
+ joiningR: stateStart,
+ joinZWNJ: stateFAIL,
+ joinZWJ: stateFAIL,
+ joinVirama: stateAfter, // no-op as we can't accept joiners here
+ },
+ stateFAIL: {
+ 0: stateFAIL,
+ joiningL: stateFAIL,
+ joiningD: stateFAIL,
+ joiningT: stateFAIL,
+ joiningR: stateFAIL,
+ joinZWNJ: stateFAIL,
+ joinZWJ: stateFAIL,
+ joinVirama: stateFAIL,
+ },
+}
+
+// validateLabel validates the criteria from Section 4.1. Item 1, 4, and 6 are
+// already implicitly satisfied by the overall implementation.
+func (p *Profile) validateLabel(s string) error {
+ if s == "" {
+ if p.verifyDNSLength {
+ return &labelError{s, "A4"}
+ }
+ return nil
+ }
+ if p.bidirule != nil && !p.bidirule(s) {
+ return &labelError{s, "B"}
+ }
+ if !p.validateLabels {
+ return nil
+ }
+ trie := p.trie // p.validateLabels is only set if trie is set.
+ if len(s) > 4 && s[2] == '-' && s[3] == '-' {
+ return &labelError{s, "V2"}
+ }
+ if s[0] == '-' || s[len(s)-1] == '-' {
+ return &labelError{s, "V3"}
+ }
+ // TODO: merge the use of this in the trie.
+ v, sz := trie.lookupString(s)
+ x := info(v)
+ if x.isModifier() {
+ return &labelError{s, "V5"}
+ }
+ // Quickly return in the absence of zero-width (non) joiners.
+ if strings.Index(s, zwj) == -1 && strings.Index(s, zwnj) == -1 {
+ return nil
+ }
+ st := stateStart
+ for i := 0; ; {
+ jt := x.joinType()
+ if s[i:i+sz] == zwj {
+ jt = joinZWJ
+ } else if s[i:i+sz] == zwnj {
+ jt = joinZWNJ
+ }
+ st = joinStates[st][jt]
+ if x.isViramaModifier() {
+ st = joinStates[st][joinVirama]
+ }
+ if i += sz; i == len(s) {
+ break
+ }
+ v, sz = trie.lookupString(s[i:])
+ x = info(v)
+ }
+ if st == stateFAIL || st == stateAfter {
+ return &labelError{s, "C"}
+ }
+ return nil
}
func ascii(s string) bool {
diff --git a/vendor/golang.org/x/net/idna/punycode.go b/vendor/golang.org/x/net/idna/punycode.go
index 92e733f..02c7d59 100644
--- a/vendor/golang.org/x/net/idna/punycode.go
+++ b/vendor/golang.org/x/net/idna/punycode.go
@@ -1,4 +1,6 @@
-// Copyright 2012 The Go Authors. All rights reserved.
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -7,7 +9,6 @@ package idna
// This file implements the Punycode algorithm from RFC 3492.
import (
- "fmt"
"math"
"strings"
"unicode/utf8"
@@ -27,6 +28,8 @@ const (
tmin int32 = 1
)
+func punyError(s string) error { return &labelError{s, "A3"} }
+
// decode decodes a string as specified in section 6.2.
func decode(encoded string) (string, error) {
if encoded == "" {
@@ -34,7 +37,7 @@ func decode(encoded string) (string, error) {
}
pos := 1 + strings.LastIndex(encoded, "-")
if pos == 1 {
- return "", fmt.Errorf("idna: invalid label %q", encoded)
+ return "", punyError(encoded)
}
if pos == len(encoded) {
return encoded[:len(encoded)-1], nil
@@ -50,16 +53,16 @@ func decode(encoded string) (string, error) {
oldI, w := i, int32(1)
for k := base; ; k += base {
if pos == len(encoded) {
- return "", fmt.Errorf("idna: invalid label %q", encoded)
+ return "", punyError(encoded)
}
digit, ok := decodeDigit(encoded[pos])
if !ok {
- return "", fmt.Errorf("idna: invalid label %q", encoded)
+ return "", punyError(encoded)
}
pos++
i += digit * w
if i < 0 {
- return "", fmt.Errorf("idna: invalid label %q", encoded)
+ return "", punyError(encoded)
}
t := k - bias
if t < tmin {
@@ -72,7 +75,7 @@ func decode(encoded string) (string, error) {
}
w *= base - t
if w >= math.MaxInt32/base {
- return "", fmt.Errorf("idna: invalid label %q", encoded)
+ return "", punyError(encoded)
}
}
x := int32(len(output) + 1)
@@ -80,7 +83,7 @@ func decode(encoded string) (string, error) {
n += i / x
i %= x
if n > utf8.MaxRune || len(output) >= 1024 {
- return "", fmt.Errorf("idna: invalid label %q", encoded)
+ return "", punyError(encoded)
}
output = append(output, 0)
copy(output[i+1:], output[i:])
@@ -121,14 +124,14 @@ func encode(prefix, s string) (string, error) {
}
delta += (m - n) * (h + 1)
if delta < 0 {
- return "", fmt.Errorf("idna: invalid label %q", s)
+ return "", punyError(s)
}
n = m
for _, r := range s {
if r < n {
delta++
if delta < 0 {
- return "", fmt.Errorf("idna: invalid label %q", s)
+ return "", punyError(s)
}
continue
}
diff --git a/vendor/golang.org/x/net/idna/tables.go b/vendor/golang.org/x/net/idna/tables.go
new file mode 100644
index 0000000..d281934
--- /dev/null
+++ b/vendor/golang.org/x/net/idna/tables.go
@@ -0,0 +1,4477 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package idna
+
+// UnicodeVersion is the Unicode version from which the tables in this package are derived.
+const UnicodeVersion = "9.0.0"
+
+var mappings string = "" + // Size: 8176 bytes
+ "\x00\x01 \x03 ̈\x01a\x03 ̄\x012\x013\x03 ́\x03 ̧\x011\x01o\x051⁄4\x051⁄2" +
+ "\x053⁄4\x03i̇\x03l·\x03ʼn\x01s\x03dž\x03ⱥ\x03ⱦ\x01h\x01j\x01r\x01w\x01y" +
+ "\x03 ̆\x03 ̇\x03 ̊\x03 ̨\x03 ̃\x03 ̋\x01l\x01x\x04̈́\x03 ι\x01;\x05 ̈́" +
+ "\x04եւ\x04اٴ\x04وٴ\x04ۇٴ\x04يٴ\x06क़\x06ख़\x06ग़\x06ज़\x06ड़\x06ढ़\x06फ़" +
+ "\x06य़\x06ড়\x06ঢ়\x06য়\x06ਲ਼\x06ਸ਼\x06ਖ਼\x06ਗ਼\x06ਜ਼\x06ਫ਼\x06ଡ଼\x06ଢ଼" +
+ "\x06ํา\x06ໍາ\x06ຫນ\x06ຫມ\x06གྷ\x06ཌྷ\x06དྷ\x06བྷ\x06ཛྷ\x06ཀྵ\x06ཱི\x06ཱུ" +
+ "\x06ྲྀ\x09ྲཱྀ\x06ླྀ\x09ླཱྀ\x06ཱྀ\x06ྒྷ\x06ྜྷ\x06ྡྷ\x06ྦྷ\x06ྫྷ\x06ྐྵ\x02" +
+ "в\x02д\x02о\x02с\x02т\x02ъ\x02ѣ\x02æ\x01b\x01d\x01e\x02ǝ\x01g\x01i\x01k" +
+ "\x01m\x01n\x02ȣ\x01p\x01t\x01u\x02ɐ\x02ɑ\x02ə\x02ɛ\x02ɜ\x02ŋ\x02ɔ\x02ɯ" +
+ "\x01v\x02β\x02γ\x02δ\x02φ\x02χ\x02ρ\x02н\x02ɒ\x01c\x02ɕ\x02ð\x01f\x02ɟ" +
+ "\x02ɡ\x02ɥ\x02ɨ\x02ɩ\x02ɪ\x02ʝ\x02ɭ\x02ʟ\x02ɱ\x02ɰ\x02ɲ\x02ɳ\x02ɴ\x02ɵ" +
+ "\x02ɸ\x02ʂ\x02ʃ\x02ƫ\x02ʉ\x02ʊ\x02ʋ\x02ʌ\x01z\x02ʐ\x02ʑ\x02ʒ\x02θ\x02ss" +
+ "\x02ά\x02έ\x02ή\x02ί\x02ό\x02ύ\x02ώ\x05ἀι\x05ἁι\x05ἂι\x05ἃι\x05ἄι\x05ἅι" +
+ "\x05ἆι\x05ἇι\x05ἠι\x05ἡι\x05ἢι\x05ἣι\x05ἤι\x05ἥι\x05ἦι\x05ἧι\x05ὠι\x05ὡι" +
+ "\x05ὢι\x05ὣι\x05ὤι\x05ὥι\x05ὦι\x05ὧι\x05ὰι\x04αι\x04άι\x05ᾶι\x02ι\x05 ̈͂" +
+ "\x05ὴι\x04ηι\x04ήι\x05ῆι\x05 ̓̀\x05 ̓́\x05 ̓͂\x02ΐ\x05 ̔̀\x05 ̔́\x05 ̔͂" +
+ "\x02ΰ\x05 ̈̀\x01`\x05ὼι\x04ωι\x04ώι\x05ῶι\x06′′\x09′′′\x06‵‵\x09‵‵‵\x02!" +
+ "!\x02??\x02?!\x02!?\x0c′′′′\x010\x014\x015\x016\x017\x018\x019\x01+\x01=" +
+ "\x01(\x01)\x02rs\x02ħ\x02no\x01q\x02sm\x02tm\x02ω\x02å\x02א\x02ב\x02ג" +
+ "\x02ד\x02π\x051⁄7\x051⁄9\x061⁄10\x051⁄3\x052⁄3\x051⁄5\x052⁄5\x053⁄5\x054" +
+ "⁄5\x051⁄6\x055⁄6\x051⁄8\x053⁄8\x055⁄8\x057⁄8\x041⁄\x02ii\x02iv\x02vi" +
+ "\x04viii\x02ix\x02xi\x050⁄3\x06∫∫\x09∫∫∫\x06∮∮\x09∮∮∮\x0210\x0211\x0212" +
+ "\x0213\x0214\x0215\x0216\x0217\x0218\x0219\x0220\x04(10)\x04(11)\x04(12)" +
+ "\x04(13)\x04(14)\x04(15)\x04(16)\x04(17)\x04(18)\x04(19)\x04(20)\x0c∫∫∫∫" +
+ "\x02==\x05⫝̸\x02ɫ\x02ɽ\x02ȿ\x02ɀ\x01.\x04 ゙\x04 ゚\x06より\x06コト\x05(ᄀ)\x05" +
+ "(ᄂ)\x05(ᄃ)\x05(ᄅ)\x05(ᄆ)\x05(ᄇ)\x05(ᄉ)\x05(ᄋ)\x05(ᄌ)\x05(ᄎ)\x05(ᄏ)\x05(ᄐ" +
+ ")\x05(ᄑ)\x05(ᄒ)\x05(가)\x05(나)\x05(다)\x05(라)\x05(마)\x05(바)\x05(사)\x05(아)" +
+ "\x05(자)\x05(차)\x05(카)\x05(타)\x05(파)\x05(하)\x05(주)\x08(오전)\x08(오후)\x05(一)" +
+ "\x05(二)\x05(三)\x05(四)\x05(五)\x05(六)\x05(七)\x05(八)\x05(九)\x05(十)\x05(月)" +
+ "\x05(火)\x05(水)\x05(木)\x05(金)\x05(土)\x05(日)\x05(株)\x05(有)\x05(社)\x05(名)" +
+ "\x05(特)\x05(財)\x05(祝)\x05(労)\x05(代)\x05(呼)\x05(学)\x05(監)\x05(企)\x05(資)" +
+ "\x05(協)\x05(祭)\x05(休)\x05(自)\x05(至)\x0221\x0222\x0223\x0224\x0225\x0226" +
+ "\x0227\x0228\x0229\x0230\x0231\x0232\x0233\x0234\x0235\x06참고\x06주의\x0236" +
+ "\x0237\x0238\x0239\x0240\x0241\x0242\x0243\x0244\x0245\x0246\x0247\x0248" +
+ "\x0249\x0250\x041月\x042月\x043月\x044月\x045月\x046月\x047月\x048月\x049月\x0510" +
+ "月\x0511月\x0512月\x02hg\x02ev\x0cアパート\x0cアルファ\x0cアンペア\x09アール\x0cイニング\x09" +
+ "インチ\x09ウォン\x0fエスクード\x0cエーカー\x09オンス\x09オーム\x09カイリ\x0cカラット\x0cカロリー\x09ガロ" +
+ "ン\x09ガンマ\x06ギガ\x09ギニー\x0cキュリー\x0cギルダー\x06キロ\x0fキログラム\x12キロメートル\x0fキロワッ" +
+ "ト\x09グラム\x0fグラムトン\x0fクルゼイロ\x0cクローネ\x09ケース\x09コルナ\x09コーポ\x0cサイクル\x0fサンチ" +
+ "ーム\x0cシリング\x09センチ\x09セント\x09ダース\x06デシ\x06ドル\x06トン\x06ナノ\x09ノット\x09ハイツ" +
+ "\x0fパーセント\x09パーツ\x0cバーレル\x0fピアストル\x09ピクル\x06ピコ\x06ビル\x0fファラッド\x0cフィート" +
+ "\x0fブッシェル\x09フラン\x0fヘクタール\x06ペソ\x09ペニヒ\x09ヘルツ\x09ペンス\x09ページ\x09ベータ\x0cポイ" +
+ "ント\x09ボルト\x06ホン\x09ポンド\x09ホール\x09ホーン\x0cマイクロ\x09マイル\x09マッハ\x09マルク\x0fマ" +
+ "ンション\x0cミクロン\x06ミリ\x0fミリバール\x06メガ\x0cメガトン\x0cメートル\x09ヤード\x09ヤール\x09ユアン" +
+ "\x0cリットル\x06リラ\x09ルピー\x0cルーブル\x06レム\x0fレントゲン\x09ワット\x040点\x041点\x042点" +
+ "\x043点\x044点\x045点\x046点\x047点\x048点\x049点\x0510点\x0511点\x0512点\x0513点" +
+ "\x0514点\x0515点\x0516点\x0517点\x0518点\x0519点\x0520点\x0521点\x0522点\x0523点" +
+ "\x0524点\x02da\x02au\x02ov\x02pc\x02dm\x02iu\x06平成\x06昭和\x06大正\x06明治\x0c株" +
+ "式会社\x02pa\x02na\x02ma\x02ka\x02kb\x02mb\x02gb\x04kcal\x02pf\x02nf\x02m" +
+ "g\x02kg\x02hz\x02ml\x02dl\x02kl\x02fm\x02nm\x02mm\x02cm\x02km\x02m2\x02m" +
+ "3\x05m∕s\x06m∕s2\x07rad∕s\x08rad∕s2\x02ps\x02ns\x02ms\x02pv\x02nv\x02mv" +
+ "\x02kv\x02pw\x02nw\x02mw\x02kw\x02bq\x02cc\x02cd\x06c∕kg\x02db\x02gy\x02" +
+ "ha\x02hp\x02in\x02kk\x02kt\x02lm\x02ln\x02lx\x02ph\x02pr\x02sr\x02sv\x02" +
+ "wb\x05v∕m\x05a∕m\x041日\x042日\x043日\x044日\x045日\x046日\x047日\x048日\x049日" +
+ "\x0510日\x0511日\x0512日\x0513日\x0514日\x0515日\x0516日\x0517日\x0518日\x0519日" +
+ "\x0520日\x0521日\x0522日\x0523日\x0524日\x0525日\x0526日\x0527日\x0528日\x0529日" +
+ "\x0530日\x0531日\x02ь\x02ɦ\x02ɬ\x02ʞ\x02ʇ\x02œ\x04𤋮\x04𢡊\x04𢡄\x04𣏕\x04𥉉" +
+ "\x04𥳐\x04𧻓\x02ff\x02fi\x02fl\x02st\x04մն\x04մե\x04մի\x04վն\x04մխ\x04יִ" +
+ "\x04ײַ\x02ע\x02ה\x02כ\x02ל\x02ם\x02ר\x02ת\x04שׁ\x04שׂ\x06שּׁ\x06שּׂ\x04א" +
+ "ַ\x04אָ\x04אּ\x04בּ\x04גּ\x04דּ\x04הּ\x04וּ\x04זּ\x04טּ\x04יּ\x04ךּ\x04" +
+ "כּ\x04לּ\x04מּ\x04נּ\x04סּ\x04ףּ\x04פּ\x04צּ\x04קּ\x04רּ\x04שּ\x04תּ" +
+ "\x04וֹ\x04בֿ\x04כֿ\x04פֿ\x04אל\x02ٱ\x02ٻ\x02پ\x02ڀ\x02ٺ\x02ٿ\x02ٹ\x02ڤ" +
+ "\x02ڦ\x02ڄ\x02ڃ\x02چ\x02ڇ\x02ڍ\x02ڌ\x02ڎ\x02ڈ\x02ژ\x02ڑ\x02ک\x02گ\x02ڳ" +
+ "\x02ڱ\x02ں\x02ڻ\x02ۀ\x02ہ\x02ھ\x02ے\x02ۓ\x02ڭ\x02ۇ\x02ۆ\x02ۈ\x02ۋ\x02ۅ" +
+ "\x02ۉ\x02ې\x02ى\x04ئا\x04ئە\x04ئو\x04ئۇ\x04ئۆ\x04ئۈ\x04ئې\x04ئى\x02ی\x04" +
+ "ئج\x04ئح\x04ئم\x04ئي\x04بج\x04بح\x04بخ\x04بم\x04بى\x04بي\x04تج\x04تح" +
+ "\x04تخ\x04تم\x04تى\x04تي\x04ثج\x04ثم\x04ثى\x04ثي\x04جح\x04جم\x04حج\x04حم" +
+ "\x04خج\x04خح\x04خم\x04سج\x04سح\x04سخ\x04سم\x04صح\x04صم\x04ضج\x04ضح\x04ضخ" +
+ "\x04ضم\x04طح\x04طم\x04ظم\x04عج\x04عم\x04غج\x04غم\x04فج\x04فح\x04فخ\x04فم" +
+ "\x04فى\x04في\x04قح\x04قم\x04قى\x04قي\x04كا\x04كج\x04كح\x04كخ\x04كل\x04كم" +
+ "\x04كى\x04كي\x04لج\x04لح\x04لخ\x04لم\x04لى\x04لي\x04مج\x04مح\x04مخ\x04مم" +
+ "\x04مى\x04مي\x04نج\x04نح\x04نخ\x04نم\x04نى\x04ني\x04هج\x04هم\x04هى\x04هي" +
+ "\x04يج\x04يح\x04يخ\x04يم\x04يى\x04يي\x04ذٰ\x04رٰ\x04ىٰ\x05 ٌّ\x05 ٍّ\x05" +
+ " َّ\x05 ُّ\x05 ِّ\x05 ّٰ\x04ئر\x04ئز\x04ئن\x04بر\x04بز\x04بن\x04تر\x04تز" +
+ "\x04تن\x04ثر\x04ثز\x04ثن\x04ما\x04نر\x04نز\x04نن\x04ير\x04يز\x04ين\x04ئخ" +
+ "\x04ئه\x04به\x04ته\x04صخ\x04له\x04نه\x04هٰ\x04يه\x04ثه\x04سه\x04شم\x04شه" +
+ "\x06ـَّ\x06ـُّ\x06ـِّ\x04طى\x04طي\x04عى\x04عي\x04غى\x04غي\x04سى\x04سي" +
+ "\x04شى\x04شي\x04حى\x04حي\x04جى\x04جي\x04خى\x04خي\x04صى\x04صي\x04ضى\x04ضي" +
+ "\x04شج\x04شح\x04شخ\x04شر\x04سر\x04صر\x04ضر\x04اً\x06تجم\x06تحج\x06تحم" +
+ "\x06تخم\x06تمج\x06تمح\x06تمخ\x06جمح\x06حمي\x06حمى\x06سحج\x06سجح\x06سجى" +
+ "\x06سمح\x06سمج\x06سمم\x06صحح\x06صمم\x06شحم\x06شجي\x06شمخ\x06شمم\x06ضحى" +
+ "\x06ضخم\x06طمح\x06طمم\x06طمي\x06عجم\x06عمم\x06عمى\x06غمم\x06غمي\x06غمى" +
+ "\x06فخم\x06قمح\x06قمم\x06لحم\x06لحي\x06لحى\x06لجج\x06لخم\x06لمح\x06محج" +
+ "\x06محم\x06محي\x06مجح\x06مجم\x06مخج\x06مخم\x06مجخ\x06همج\x06همم\x06نحم" +
+ "\x06نحى\x06نجم\x06نجى\x06نمي\x06نمى\x06يمم\x06بخي\x06تجي\x06تجى\x06تخي" +
+ "\x06تخى\x06تمي\x06تمى\x06جمي\x06جحى\x06جمى\x06سخى\x06صحي\x06شحي\x06ضحي" +
+ "\x06لجي\x06لمي\x06يحي\x06يجي\x06يمي\x06ممي\x06قمي\x06نحي\x06عمي\x06كمي" +
+ "\x06نجح\x06مخي\x06لجم\x06كمم\x06جحي\x06حجي\x06مجي\x06فمي\x06بحي\x06سخي" +
+ "\x06نجي\x06صلے\x06قلے\x08الله\x08اكبر\x08محمد\x08صلعم\x08رسول\x08عليه" +
+ "\x08وسلم\x06صلى!صلى الله عليه وسلم\x0fجل جلاله\x08ریال\x01,\x01:\x01!" +
+ "\x01?\x01_\x01{\x01}\x01[\x01]\x01#\x01&\x01*\x01-\x01<\x01>\x01\\\x01$" +
+ "\x01%\x01@\x04ـً\x04ـَ\x04ـُ\x04ـِ\x04ـّ\x04ـْ\x02ء\x02آ\x02أ\x02ؤ\x02إ" +
+ "\x02ئ\x02ا\x02ب\x02ة\x02ت\x02ث\x02ج\x02ح\x02خ\x02د\x02ذ\x02ر\x02ز\x02س" +
+ "\x02ش\x02ص\x02ض\x02ط\x02ظ\x02ع\x02غ\x02ف\x02ق\x02ك\x02ل\x02م\x02ن\x02ه" +
+ "\x02و\x02ي\x04لآ\x04لأ\x04لإ\x04لا\x01\x22\x01'\x01/\x01^\x01|\x01~\x02¢" +
+ "\x02£\x02¬\x02¦\x02¥\x08𝅗𝅥\x08𝅘𝅥\x0c𝅘𝅥𝅮\x0c𝅘𝅥𝅯\x0c𝅘𝅥𝅰\x0c𝅘𝅥𝅱\x0c𝅘𝅥𝅲\x08𝆹" +
+ "𝅥\x08𝆺𝅥\x0c𝆹𝅥𝅮\x0c𝆺𝅥𝅮\x0c𝆹𝅥𝅯\x0c𝆺𝅥𝅯\x02ı\x02ȷ\x02α\x02ε\x02ζ\x02η\x02" +
+ "κ\x02λ\x02μ\x02ν\x02ξ\x02ο\x02σ\x02τ\x02υ\x02ψ\x03∇\x03∂\x02ϝ\x02ٮ\x02ڡ" +
+ "\x02ٯ\x020,\x021,\x022,\x023,\x024,\x025,\x026,\x027,\x028,\x029,\x03(a)" +
+ "\x03(b)\x03(c)\x03(d)\x03(e)\x03(f)\x03(g)\x03(h)\x03(i)\x03(j)\x03(k)" +
+ "\x03(l)\x03(m)\x03(n)\x03(o)\x03(p)\x03(q)\x03(r)\x03(s)\x03(t)\x03(u)" +
+ "\x03(v)\x03(w)\x03(x)\x03(y)\x03(z)\x07〔s〕\x02wz\x02hv\x02sd\x03ppv\x02w" +
+ "c\x02mc\x02md\x02dj\x06ほか\x06ココ\x03サ\x03手\x03字\x03双\x03デ\x03二\x03多\x03解" +
+ "\x03天\x03交\x03映\x03無\x03料\x03前\x03後\x03再\x03新\x03初\x03終\x03生\x03販\x03声" +
+ "\x03吹\x03演\x03投\x03捕\x03一\x03三\x03遊\x03左\x03中\x03右\x03指\x03走\x03打\x03禁" +
+ "\x03空\x03合\x03満\x03有\x03月\x03申\x03割\x03営\x03配\x09〔本〕\x09〔三〕\x09〔二〕\x09〔安" +
+ "〕\x09〔点〕\x09〔打〕\x09〔盗〕\x09〔勝〕\x09〔敗〕\x03得\x03可\x03丽\x03丸\x03乁\x03你\x03" +
+ "侮\x03侻\x03倂\x03偺\x03備\x03僧\x03像\x03㒞\x03免\x03兔\x03兤\x03具\x03㒹\x03內\x03" +
+ "冗\x03冤\x03仌\x03冬\x03况\x03凵\x03刃\x03㓟\x03刻\x03剆\x03剷\x03㔕\x03勇\x03勉\x03" +
+ "勤\x03勺\x03包\x03匆\x03北\x03卉\x03卑\x03博\x03即\x03卽\x03卿\x03灰\x03及\x03叟\x03" +
+ "叫\x03叱\x03吆\x03咞\x03吸\x03呈\x03周\x03咢\x03哶\x03唐\x03啓\x03啣\x03善\x03喙\x03" +
+ "喫\x03喳\x03嗂\x03圖\x03嘆\x03圗\x03噑\x03噴\x03切\x03壮\x03城\x03埴\x03堍\x03型\x03" +
+ "堲\x03報\x03墬\x03売\x03壷\x03夆\x03夢\x03奢\x03姬\x03娛\x03娧\x03姘\x03婦\x03㛮\x03" +
+ "嬈\x03嬾\x03寃\x03寘\x03寧\x03寳\x03寿\x03将\x03尢\x03㞁\x03屠\x03屮\x03峀\x03岍\x03" +
+ "嵃\x03嵮\x03嵫\x03嵼\x03巡\x03巢\x03㠯\x03巽\x03帨\x03帽\x03幩\x03㡢\x03㡼\x03庰\x03" +
+ "庳\x03庶\x03廊\x03廾\x03舁\x03弢\x03㣇\x03形\x03彫\x03㣣\x03徚\x03忍\x03志\x03忹\x03" +
+ "悁\x03㤺\x03㤜\x03悔\x03惇\x03慈\x03慌\x03慎\x03慺\x03憎\x03憲\x03憤\x03憯\x03懞\x03" +
+ "懲\x03懶\x03成\x03戛\x03扝\x03抱\x03拔\x03捐\x03挽\x03拼\x03捨\x03掃\x03揤\x03搢\x03" +
+ "揅\x03掩\x03㨮\x03摩\x03摾\x03撝\x03摷\x03㩬\x03敏\x03敬\x03旣\x03書\x03晉\x03㬙\x03" +
+ "暑\x03㬈\x03㫤\x03冒\x03冕\x03最\x03暜\x03肭\x03䏙\x03朗\x03望\x03朡\x03杞\x03杓\x03" +
+ "㭉\x03柺\x03枅\x03桒\x03梅\x03梎\x03栟\x03椔\x03㮝\x03楂\x03榣\x03槪\x03檨\x03櫛\x03" +
+ "㰘\x03次\x03歔\x03㱎\x03歲\x03殟\x03殺\x03殻\x03汎\x03沿\x03泍\x03汧\x03洖\x03派\x03" +
+ "海\x03流\x03浩\x03浸\x03涅\x03洴\x03港\x03湮\x03㴳\x03滋\x03滇\x03淹\x03潮\x03濆\x03" +
+ "瀹\x03瀞\x03瀛\x03㶖\x03灊\x03災\x03灷\x03炭\x03煅\x03熜\x03爨\x03爵\x03牐\x03犀\x03" +
+ "犕\x03獺\x03王\x03㺬\x03玥\x03㺸\x03瑇\x03瑜\x03瑱\x03璅\x03瓊\x03㼛\x03甤\x03甾\x03" +
+ "異\x03瘐\x03㿼\x03䀈\x03直\x03眞\x03真\x03睊\x03䀹\x03瞋\x03䁆\x03䂖\x03硎\x03碌\x03" +
+ "磌\x03䃣\x03祖\x03福\x03秫\x03䄯\x03穀\x03穊\x03穏\x03䈂\x03篆\x03築\x03䈧\x03糒\x03" +
+ "䊠\x03糨\x03糣\x03紀\x03絣\x03䌁\x03緇\x03縂\x03繅\x03䌴\x03䍙\x03罺\x03羕\x03翺\x03" +
+ "者\x03聠\x03聰\x03䏕\x03育\x03脃\x03䐋\x03脾\x03媵\x03舄\x03辞\x03䑫\x03芑\x03芋\x03" +
+ "芝\x03劳\x03花\x03芳\x03芽\x03苦\x03若\x03茝\x03荣\x03莭\x03茣\x03莽\x03菧\x03著\x03" +
+ "荓\x03菊\x03菌\x03菜\x03䔫\x03蓱\x03蓳\x03蔖\x03蕤\x03䕝\x03䕡\x03䕫\x03虐\x03虜\x03" +
+ "虧\x03虩\x03蚩\x03蚈\x03蜎\x03蛢\x03蝹\x03蜨\x03蝫\x03螆\x03蟡\x03蠁\x03䗹\x03衠\x03" +
+ "衣\x03裗\x03裞\x03䘵\x03裺\x03㒻\x03䚾\x03䛇\x03誠\x03諭\x03變\x03豕\x03貫\x03賁\x03" +
+ "贛\x03起\x03跋\x03趼\x03跰\x03軔\x03輸\x03邔\x03郱\x03鄑\x03鄛\x03鈸\x03鋗\x03鋘\x03" +
+ "鉼\x03鏹\x03鐕\x03開\x03䦕\x03閷\x03䧦\x03雃\x03嶲\x03霣\x03䩮\x03䩶\x03韠\x03䪲\x03" +
+ "頋\x03頩\x03飢\x03䬳\x03餩\x03馧\x03駂\x03駾\x03䯎\x03鬒\x03鱀\x03鳽\x03䳎\x03䳭\x03" +
+ "鵧\x03䳸\x03麻\x03䵖\x03黹\x03黾\x03鼅\x03鼏\x03鼖\x03鼻"
+
+var xorData string = "" + // Size: 4855 bytes
+ "\x02\x0c\x09\x02\xb0\xec\x02\xad\xd8\x02\xad\xd9\x02\x06\x07\x02\x0f\x12" +
+ "\x02\x0f\x1f\x02\x0f\x1d\x02\x01\x13\x02\x0f\x16\x02\x0f\x0b\x02\x0f3" +
+ "\x02\x0f7\x02\x0f?\x02\x0f/\x02\x0f*\x02\x0c&\x02\x0c*\x02\x0c;\x02\x0c9" +
+ "\x02\x0c%\x02\xab\xed\x02\xab\xe2\x02\xab\xe3\x02\xa9\xe0\x02\xa9\xe1" +
+ "\x02\xa9\xe6\x02\xa3\xcb\x02\xa3\xc8\x02\xa3\xc9\x02\x01#\x02\x01\x08" +
+ "\x02\x0e>\x02\x0e'\x02\x0f\x03\x02\x03\x0d\x02\x03\x09\x02\x03\x17\x02" +
+ "\x03\x0e\x02\x02\x03\x02\x011\x02\x01\x00\x02\x01\x10\x02\x03<\x02\x07" +
+ "\x0d\x02\x02\x0c\x02\x0c0\x02\x01\x03\x02\x01\x01\x02\x01 \x02\x01\x22" +
+ "\x02\x01)\x02\x01\x0a\x02\x01\x0c\x02\x02\x06\x02\x02\x02\x02\x03\x10" +
+ "\x03\x037 \x03\x0b+\x03\x02\x01\x04\x02\x01\x02\x02\x019\x02\x03\x1c\x02" +
+ "\x02$\x03\x80p$\x02\x03:\x02\x03\x0a\x03\xc1r.\x03\xc1r,\x03\xc1r\x02" +
+ "\x02\x02:\x02\x02>\x02\x02,\x02\x02\x10\x02\x02\x00\x03\xc1s<\x03\xc1s*" +
+ "\x03\xc2L$\x03\xc2L;\x02\x09)\x02\x0a\x19\x03\x83\xab\xe3\x03\x83\xab" +
+ "\xf2\x03 4\xe0\x03\x81\xab\xea\x03\x81\xab\xf3\x03 4\xef\x03\x96\xe1\xcd" +
+ "\x03\x84\xe5\xc3\x02\x0d\x11\x03\x8b\xec\xcb\x03\x94\xec\xcf\x03\x9a\xec" +
+ "\xc2\x03\x8b\xec\xdb\x03\x94\xec\xdf\x03\x9a\xec\xd2\x03\x01\x0c!\x03" +
+ "\x01\x0c#\x03ʠ\x9d\x03ʣ\x9c\x03ʢ\x9f\x03ʥ\x9e\x03ʤ\x91\x03ʧ\x90\x03ʦ\x93" +
+ "\x03ʩ\x92\x03ʨ\x95\x03\xca\xf3\xb5\x03\xca\xf0\xb4\x03\xca\xf1\xb7\x03" +
+ "\xca\xf6\xb6\x03\xca\xf7\x89\x03\xca\xf4\x88\x03\xca\xf5\x8b\x03\xca\xfa" +
+ "\x8a\x03\xca\xfb\x8d\x03\xca\xf8\x8c\x03\xca\xf9\x8f\x03\xca\xfe\x8e\x03" +
+ "\xca\xff\x81\x03\xca\xfc\x80\x03\xca\xfd\x83\x03\xca\xe2\x82\x03\xca\xe3" +
+ "\x85\x03\xca\xe0\x84\x03\xca\xe1\x87\x03\xca\xe6\x86\x03\xca\xe7\x99\x03" +
+ "\xca\xe4\x98\x03\xca\xe5\x9b\x03\xca\xea\x9a\x03\xca\xeb\x9d\x03\xca\xe8" +
+ "\x9c\x03ؓ\x89\x03ߔ\x8b\x02\x010\x03\x03\x04\x1e\x03\x04\x15\x12\x03\x0b" +
+ "\x05,\x03\x06\x04\x00\x03\x06\x04)\x03\x06\x044\x03\x06\x04<\x03\x06\x05" +
+ "\x1d\x03\x06\x06\x00\x03\x06\x06\x0a\x03\x06\x06'\x03\x06\x062\x03\x0786" +
+ "\x03\x079/\x03\x079 \x03\x07:\x0e\x03\x07:\x1b\x03\x07:%\x03\x07;/\x03" +
+ "\x07;%\x03\x074\x11\x03\x076\x09\x03\x077*\x03\x070\x01\x03\x070\x0f\x03" +
+ "\x070.\x03\x071\x16\x03\x071\x04\x03\x0710\x03\x072\x18\x03\x072-\x03" +
+ "\x073\x14\x03\x073>\x03\x07'\x09\x03\x07 \x00\x03\x07\x1f\x0b\x03\x07" +
+ "\x18#\x03\x07\x18(\x03\x07\x186\x03\x07\x18\x03\x03\x07\x19\x16\x03\x07" +
+ "\x116\x03\x07\x12'\x03\x07\x13\x10\x03\x07\x0c&\x03\x07\x0c\x08\x03\x07" +
+ "\x0c\x13\x03\x07\x0d\x02\x03\x07\x0d\x1c\x03\x07\x0b5\x03\x07\x0b\x0a" +
+ "\x03\x07\x0b\x01\x03\x07\x0b\x0f\x03\x07\x05\x00\x03\x07\x05\x09\x03\x07" +
+ "\x05\x0b\x03\x07\x07\x01\x03\x07\x07\x08\x03\x07\x00<\x03\x07\x00+\x03" +
+ "\x07\x01)\x03\x07\x01\x1b\x03\x07\x01\x08\x03\x07\x03?\x03\x0445\x03\x04" +
+ "4\x08\x03\x0454\x03\x04)/\x03\x04)5\x03\x04+\x05\x03\x04+\x14\x03\x04+ " +
+ "\x03\x04+<\x03\x04*&\x03\x04*\x22\x03\x04&8\x03\x04!\x01\x03\x04!\x22" +
+ "\x03\x04\x11+\x03\x04\x10.\x03\x04\x104\x03\x04\x13=\x03\x04\x12\x04\x03" +
+ "\x04\x12\x0a\x03\x04\x0d\x1d\x03\x04\x0d\x07\x03\x04\x0d \x03\x05<>\x03" +
+ "\x055<\x03\x055!\x03\x055#\x03\x055&\x03\x054\x1d\x03\x054\x02\x03\x054" +
+ "\x07\x03\x0571\x03\x053\x1a\x03\x053\x16\x03\x05.<\x03\x05.\x07\x03\x05)" +
+ ":\x03\x05)<\x03\x05)\x0c\x03\x05)\x15\x03\x05+-\x03\x05+5\x03\x05$\x1e" +
+ "\x03\x05$\x14\x03\x05'\x04\x03\x05'\x14\x03\x05&\x02\x03\x05\x226\x03" +
+ "\x05\x22\x0c\x03\x05\x22\x1c\x03\x05\x19\x0a\x03\x05\x1b\x09\x03\x05\x1b" +
+ "\x0c\x03\x05\x14\x07\x03\x05\x16?\x03\x05\x16\x0c\x03\x05\x0c\x05\x03" +
+ "\x05\x0e\x0f\x03\x05\x01\x0e\x03\x05\x00(\x03\x05\x030\x03\x05\x03\x06" +
+ "\x03\x0a==\x03\x0a=1\x03\x0a=,\x03\x0a=\x0c\x03\x0a??\x03\x0a<\x08\x03" +
+ "\x0a9!\x03\x0a9)\x03\x0a97\x03\x0a99\x03\x0a6\x0a\x03\x0a6\x1c\x03\x0a6" +
+ "\x17\x03\x0a7'\x03\x0a78\x03\x0a73\x03\x0a'\x01\x03\x0a'&\x03\x0a\x1f" +
+ "\x0e\x03\x0a\x1f\x03\x03\x0a\x1f3\x03\x0a\x1b/\x03\x0a\x18\x19\x03\x0a" +
+ "\x19\x01\x03\x0a\x16\x14\x03\x0a\x0e\x22\x03\x0a\x0f\x10\x03\x0a\x0f\x02" +
+ "\x03\x0a\x0f \x03\x0a\x0c\x04\x03\x0a\x0b>\x03\x0a\x0b+\x03\x0a\x08/\x03" +
+ "\x0a\x046\x03\x0a\x05\x14\x03\x0a\x00\x04\x03\x0a\x00\x10\x03\x0a\x00" +
+ "\x14\x03\x0b<3\x03\x0b;*\x03\x0b9\x22\x03\x0b9)\x03\x0b97\x03\x0b+\x10" +
+ "\x03\x0b((\x03\x0b&5\x03\x0b$\x1c\x03\x0b$\x12\x03\x0b%\x04\x03\x0b#<" +
+ "\x03\x0b#0\x03\x0b#\x0d\x03\x0b#\x19\x03\x0b!:\x03\x0b!\x1f\x03\x0b!\x00" +
+ "\x03\x0b\x1e5\x03\x0b\x1c\x1d\x03\x0b\x1d-\x03\x0b\x1d(\x03\x0b\x18.\x03" +
+ "\x0b\x18 \x03\x0b\x18\x16\x03\x0b\x14\x13\x03\x0b\x15$\x03\x0b\x15\x22" +
+ "\x03\x0b\x12\x1b\x03\x0b\x12\x10\x03\x0b\x132\x03\x0b\x13=\x03\x0b\x12" +
+ "\x18\x03\x0b\x0c&\x03\x0b\x061\x03\x0b\x06:\x03\x0b\x05#\x03\x0b\x05<" +
+ "\x03\x0b\x04\x0b\x03\x0b\x04\x04\x03\x0b\x04\x1b\x03\x0b\x042\x03\x0b" +
+ "\x041\x03\x0b\x03\x03\x03\x0b\x03\x1d\x03\x0b\x03/\x03\x0b\x03+\x03\x0b" +
+ "\x02\x1b\x03\x0b\x02\x00\x03\x0b\x01\x1e\x03\x0b\x01\x08\x03\x0b\x015" +
+ "\x03\x06\x0d9\x03\x06\x0d=\x03\x06\x0d?\x03\x02\x001\x03\x02\x003\x03" +
+ "\x02\x02\x19\x03\x02\x006\x03\x02\x02\x1b\x03\x02\x004\x03\x02\x00<\x03" +
+ "\x02\x02\x0a\x03\x02\x02\x0e\x03\x02\x01\x1a\x03\x02\x01\x07\x03\x02\x01" +
+ "\x05\x03\x02\x01\x0b\x03\x02\x01%\x03\x02\x01\x0c\x03\x02\x01\x04\x03" +
+ "\x02\x01\x1c\x03\x02\x00.\x03\x02\x002\x03\x02\x00>\x03\x02\x00\x12\x03" +
+ "\x02\x00\x16\x03\x02\x011\x03\x02\x013\x03\x02\x02 \x03\x02\x02%\x03\x02" +
+ "\x02$\x03\x02\x028\x03\x02\x02;\x03\x02\x024\x03\x02\x012\x03\x02\x022" +
+ "\x03\x02\x02/\x03\x02\x01,\x03\x02\x01\x13\x03\x02\x01\x16\x03\x02\x01" +
+ "\x11\x03\x02\x01\x1e\x03\x02\x01\x15\x03\x02\x01\x17\x03\x02\x01\x0f\x03" +
+ "\x02\x01\x08\x03\x02\x00?\x03\x02\x03\x07\x03\x02\x03\x0d\x03\x02\x03" +
+ "\x13\x03\x02\x03\x1d\x03\x02\x03\x1f\x03\x02\x00\x03\x03\x02\x00\x0d\x03" +
+ "\x02\x00\x01\x03\x02\x00\x1b\x03\x02\x00\x19\x03\x02\x00\x18\x03\x02\x00" +
+ "\x13\x03\x02\x00/\x03\x07>\x12\x03\x07<\x1f\x03\x07>\x1d\x03\x06\x1d\x0e" +
+ "\x03\x07>\x1c\x03\x07>:\x03\x07>\x13\x03\x04\x12+\x03\x07?\x03\x03\x07>" +
+ "\x02\x03\x06\x224\x03\x06\x1a.\x03\x07<%\x03\x06\x1c\x0b\x03\x0609\x03" +
+ "\x05\x1f\x01\x03\x04'\x08\x03\x93\xfd\xf5\x03\x02\x0d \x03\x02\x0d#\x03" +
+ "\x02\x0d!\x03\x02\x0d&\x03\x02\x0d\x22\x03\x02\x0d/\x03\x02\x0d,\x03\x02" +
+ "\x0d$\x03\x02\x0d'\x03\x02\x0d%\x03\x02\x0d;\x03\x02\x0d=\x03\x02\x0d?" +
+ "\x03\x099.\x03\x08\x0b7\x03\x08\x02\x14\x03\x08\x14\x0d\x03\x08.:\x03" +
+ "\x089'\x03\x0f\x0b\x18\x03\x0f\x1c1\x03\x0f\x17&\x03\x0f9\x1f\x03\x0f0" +
+ "\x0c\x03\x0e\x0a9\x03\x0e\x056\x03\x0e\x1c#\x03\x0f\x13\x0e\x03\x072\x00" +
+ "\x03\x070\x0d\x03\x072\x0b\x03\x06\x11\x18\x03\x070\x10\x03\x06\x0f(\x03" +
+ "\x072\x05\x03\x06\x0f,\x03\x073\x15\x03\x06\x07\x08\x03\x05\x16\x02\x03" +
+ "\x04\x0b \x03\x05:8\x03\x05\x16%\x03\x0a\x0d\x1f\x03\x06\x16\x10\x03\x05" +
+ "\x1d5\x03\x05*;\x03\x05\x16\x1b\x03\x04.-\x03\x06\x1a\x19\x03\x04\x03," +
+ "\x03\x0b87\x03\x04/\x0a\x03\x06\x00,\x03\x04-\x01\x03\x04\x1e-\x03\x06/(" +
+ "\x03\x0a\x0b5\x03\x06\x0e7\x03\x06\x07.\x03\x0597\x03\x0a*%\x03\x0760" +
+ "\x03\x06\x0c;\x03\x05'\x00\x03\x072.\x03\x072\x08\x03\x06=\x01\x03\x06" +
+ "\x05\x1b\x03\x06\x06\x12\x03\x06$=\x03\x06'\x0d\x03\x04\x11\x0f\x03\x076" +
+ ",\x03\x06\x07;\x03\x06.,\x03\x86\xf9\xea\x03\x8f\xff\xeb\x02\x092\x02" +
+ "\x095\x02\x094\x02\x09;\x02\x09>\x02\x098\x02\x09*\x02\x09/\x02\x09,\x02" +
+ "\x09%\x02\x09&\x02\x09#\x02\x09 \x02\x08!\x02\x08%\x02\x08$\x02\x08+\x02" +
+ "\x08.\x02\x08*\x02\x08&\x02\x088\x02\x08>\x02\x084\x02\x086\x02\x080\x02" +
+ "\x08\x10\x02\x08\x17\x02\x08\x12\x02\x08\x1d\x02\x08\x1f\x02\x08\x13\x02" +
+ "\x08\x15\x02\x08\x14\x02\x08\x0c\x03\x8b\xfd\xd0\x03\x81\xec\xc6\x03\x87" +
+ "\xe0\x8a\x03-2\xe3\x03\x80\xef\xe4\x03-2\xea\x03\x88\xe6\xeb\x03\x8e\xe6" +
+ "\xe8\x03\x84\xe6\xe9\x03\x97\xe6\xee\x03-2\xf9\x03-2\xf6\x03\x8e\xe3\xad" +
+ "\x03\x80\xe3\x92\x03\x88\xe3\x90\x03\x8e\xe3\x90\x03\x80\xe3\x97\x03\x88" +
+ "\xe3\x95\x03\x88\xfe\xcb\x03\x8e\xfe\xca\x03\x84\xfe\xcd\x03\x91\xef\xc9" +
+ "\x03-2\xc1\x03-2\xc0\x03-2\xcb\x03\x88@\x09\x03\x8e@\x08\x03\x8f\xe0\xf5" +
+ "\x03\x8e\xe6\xf9\x03\x8e\xe0\xfa\x03\x93\xff\xf4\x03\x84\xee\xd3\x03\x0b" +
+ "(\x04\x023 \x021;\x02\x01*\x03\x0b#\x10\x03\x0b 0\x03\x0b!\x10\x03\x0b!0" +
+ "\x03\x07\x15\x08\x03\x09?5\x03\x07\x1f\x08\x03\x07\x17\x0b\x03\x09\x1f" +
+ "\x15\x03\x0b\x1c7\x03\x0a+#\x03\x06\x1a\x1b\x03\x06\x1a\x14\x03\x0a\x01" +
+ "\x18\x03\x06#\x1b\x03\x0a2\x0c\x03\x0a\x01\x04\x03\x09#;\x03\x08='\x03" +
+ "\x08\x1a\x0a\x03\x07\x03\x07:+\x03\x07\x07*\x03\x06&\x1c\x03\x09\x0c" +
+ "\x16\x03\x09\x10\x0e\x03\x08'\x0f\x03\x08+\x09\x03\x074%\x03\x06!3\x03" +
+ "\x06\x03+\x03\x0b\x1e\x19\x03\x0a))\x03\x09\x08\x19\x03\x08,\x05\x03\x07" +
+ "<2\x03\x06\x1c>\x03\x0a\x111\x03\x09\x1b\x09\x03\x073.\x03\x07\x01\x00" +
+ "\x03\x09/,\x03\x07#>\x03\x07\x048\x03\x0a\x1f\x22\x03\x098>\x03\x09\x11" +
+ "\x00\x03\x08/\x17\x03\x06'\x22\x03\x0b\x1a+\x03\x0a\x22\x19\x03\x0a/1" +
+ "\x03\x0974\x03\x09\x0f\x22\x03\x08,\x22\x03\x08?\x14\x03\x07$5\x03\x07<3" +
+ "\x03\x07=*\x03\x07\x13\x18\x03\x068\x0a\x03\x06\x09\x16\x03\x06\x13\x00" +
+ "\x03\x08\x067\x03\x08\x01\x03\x03\x08\x12\x1d\x03\x07+7\x03\x06(;\x03" +
+ "\x06\x1c?\x03\x07\x0e\x17\x03\x0a\x06\x1d\x03\x0a\x19\x07\x03\x08\x14$" +
+ "\x03\x07$;\x03\x08,$\x03\x08\x06\x0d\x03\x07\x16\x0a\x03\x06>>\x03\x0a" +
+ "\x06\x12\x03\x0a\x14)\x03\x09\x0d\x1f\x03\x09\x12\x17\x03\x09\x19\x01" +
+ "\x03\x08\x11 \x03\x08\x1d'\x03\x06<\x1a\x03\x0a.\x00\x03\x07'\x18\x03" +
+ "\x0a\x22\x08\x03\x08\x0d\x0a\x03\x08\x13)\x03\x07*)\x03\x06<,\x03\x07" +
+ "\x0b\x1a\x03\x09.\x14\x03\x09\x0d\x1e\x03\x07\x0e#\x03\x0b\x1d'\x03\x0a" +
+ "\x0a8\x03\x09%2\x03\x08+&\x03\x080\x12\x03\x0a)4\x03\x08\x06\x1f\x03\x0b" +
+ "\x1b\x1a\x03\x0a\x1b\x0f\x03\x0b\x1d*\x03\x09\x16$\x03\x090\x11\x03\x08" +
+ "\x11\x08\x03\x0a*(\x03\x0a\x042\x03\x089,\x03\x074'\x03\x07\x0f\x05\x03" +
+ "\x09\x0b\x0a\x03\x07\x1b\x01\x03\x09\x17:\x03\x09.\x0d\x03\x07.\x11\x03" +
+ "\x09+\x15\x03\x080\x13\x03\x0b\x1f\x19\x03\x0a \x11\x03\x0a\x220\x03\x09" +
+ "\x07;\x03\x08\x16\x1c\x03\x07,\x13\x03\x07\x0e/\x03\x06\x221\x03\x0a." +
+ "\x0a\x03\x0a7\x02\x03\x0a\x032\x03\x0a\x1d.\x03\x091\x06\x03\x09\x19:" +
+ "\x03\x08\x02/\x03\x060+\x03\x06\x0f-\x03\x06\x1c\x1f\x03\x06\x1d\x07\x03" +
+ "\x0a,\x11\x03\x09=\x0d\x03\x09\x0b;\x03\x07\x1b/\x03\x0a\x1f:\x03\x09 " +
+ "\x1f\x03\x09.\x10\x03\x094\x0b\x03\x09\x1a1\x03\x08#\x1a\x03\x084\x1d" +
+ "\x03\x08\x01\x1f\x03\x08\x11\x22\x03\x07'8\x03\x07\x1a>\x03\x0757\x03" +
+ "\x06&9\x03\x06+\x11\x03\x0a.\x0b\x03\x0a,>\x03\x0a4#\x03\x08%\x17\x03" +
+ "\x07\x05\x22\x03\x07\x0c\x0b\x03\x0a\x1d+\x03\x0a\x19\x16\x03\x09+\x1f" +
+ "\x03\x09\x08\x0b\x03\x08\x16\x18\x03\x08+\x12\x03\x0b\x1d\x0c\x03\x0a=" +
+ "\x10\x03\x0a\x09\x0d\x03\x0a\x10\x11\x03\x09&0\x03\x08(\x1f\x03\x087\x07" +
+ "\x03\x08\x185\x03\x07'6\x03\x06.\x05\x03\x06=\x04\x03\x06;;\x03\x06\x06," +
+ "\x03\x0b\x18>\x03\x08\x00\x18\x03\x06 \x03\x03\x06<\x00\x03\x09%\x18\x03" +
+ "\x0b\x1c<\x03\x0a%!\x03\x0a\x09\x12\x03\x0a\x16\x02\x03\x090'\x03\x09" +
+ "\x0e=\x03\x08 \x0e\x03\x08>\x03\x03\x074>\x03\x06&?\x03\x06\x19\x09\x03" +
+ "\x06?(\x03\x0a-\x0e\x03\x09:3\x03\x098:\x03\x09\x12\x0b\x03\x09\x1d\x17" +
+ "\x03\x087\x05\x03\x082\x14\x03\x08\x06%\x03\x08\x13\x1f\x03\x06\x06\x0e" +
+ "\x03\x0a\x22<\x03\x09/<\x03\x06>+\x03\x0a'?\x03\x0a\x13\x0c\x03\x09\x10<" +
+ "\x03\x07\x1b=\x03\x0a\x19\x13\x03\x09\x22\x1d\x03\x09\x07\x0d\x03\x08)" +
+ "\x1c\x03\x06=\x1a\x03\x0a/4\x03\x0a7\x11\x03\x0a\x16:\x03\x09?3\x03\x09:" +
+ "/\x03\x09\x05\x0a\x03\x09\x14\x06\x03\x087\x22\x03\x080\x07\x03\x08\x1a" +
+ "\x1f\x03\x07\x04(\x03\x07\x04\x09\x03\x06 %\x03\x06<\x08\x03\x0a+\x14" +
+ "\x03\x09\x1d\x16\x03\x0a70\x03\x08 >\x03\x0857\x03\x070\x0a\x03\x06=\x12" +
+ "\x03\x06\x16%\x03\x06\x1d,\x03\x099#\x03\x09\x10>\x03\x07 \x1e\x03\x08" +
+ "\x0c<\x03\x08\x0b\x18\x03\x08\x15+\x03\x08,:\x03\x08%\x22\x03\x07\x0a$" +
+ "\x03\x0b\x1c=\x03\x07+\x08\x03\x0a/\x05\x03\x0a \x07\x03\x0a\x12'\x03" +
+ "\x09#\x11\x03\x08\x1b\x15\x03\x0a\x06\x01\x03\x09\x1c\x1b\x03\x0922\x03" +
+ "\x07\x14<\x03\x07\x09\x04\x03\x061\x04\x03\x07\x0e\x01\x03\x0a\x13\x18" +
+ "\x03\x0a-\x0c\x03\x0a?\x0d\x03\x0a\x09\x0a\x03\x091&\x03\x0a/\x0b\x03" +
+ "\x08$<\x03\x083\x1d\x03\x08\x0c$\x03\x08\x0d\x07\x03\x08\x0d?\x03\x08" +
+ "\x0e\x14\x03\x065\x0a\x03\x08\x1a#\x03\x08\x16#\x03\x0702\x03\x07\x03" +
+ "\x1a\x03\x06(\x1d\x03\x06+\x1b\x03\x06\x0b\x05\x03\x06\x0b\x17\x03\x06" +
+ "\x0c\x04\x03\x06\x1e\x19\x03\x06+0\x03\x062\x18\x03\x0b\x16\x1e\x03\x0a+" +
+ "\x16\x03\x0a-?\x03\x0a#:\x03\x0a#\x10\x03\x0a%$\x03\x0a>+\x03\x0a01\x03" +
+ "\x0a1\x10\x03\x0a\x099\x03\x0a\x0a\x12\x03\x0a\x19\x1f\x03\x0a\x19\x12" +
+ "\x03\x09*)\x03\x09-\x16\x03\x09.1\x03\x09.2\x03\x09<\x0e\x03\x09> \x03" +
+ "\x093\x12\x03\x09\x0b\x01\x03\x09\x1c2\x03\x09\x11\x1c\x03\x09\x15%\x03" +
+ "\x08,&\x03\x08!\x22\x03\x089(\x03\x08\x0b\x1a\x03\x08\x0d2\x03\x08\x0c" +
+ "\x04\x03\x08\x0c\x06\x03\x08\x0c\x1f\x03\x08\x0c\x0c\x03\x08\x0f\x1f\x03" +
+ "\x08\x0f\x1d\x03\x08\x00\x14\x03\x08\x03\x14\x03\x08\x06\x16\x03\x08\x1e" +
+ "#\x03\x08\x11\x11\x03\x08\x10\x18\x03\x08\x14(\x03\x07)\x1e\x03\x07.1" +
+ "\x03\x07 $\x03\x07 '\x03\x078\x08\x03\x07\x0d0\x03\x07\x0f7\x03\x07\x05#" +
+ "\x03\x07\x05\x1a\x03\x07\x1a7\x03\x07\x1d-\x03\x07\x17\x10\x03\x06)\x1f" +
+ "\x03\x062\x0b\x03\x066\x16\x03\x06\x09\x11\x03\x09(\x1e\x03\x07!5\x03" +
+ "\x0b\x11\x16\x03\x0a/\x04\x03\x0a,\x1a\x03\x0b\x173\x03\x0a,1\x03\x0a/5" +
+ "\x03\x0a\x221\x03\x0a\x22\x0d\x03\x0a?%\x03\x0a<,\x03\x0a?#\x03\x0a>\x19" +
+ "\x03\x0a\x08&\x03\x0a\x0b\x0e\x03\x0a\x0c:\x03\x0a\x0c+\x03\x0a\x03\x22" +
+ "\x03\x0a\x06)\x03\x0a\x11\x10\x03\x0a\x11\x1a\x03\x0a\x17-\x03\x0a\x14(" +
+ "\x03\x09)\x1e\x03\x09/\x09\x03\x09.\x00\x03\x09,\x07\x03\x09/*\x03\x09-9" +
+ "\x03\x09\x228\x03\x09%\x09\x03\x09:\x12\x03\x09;\x1d\x03\x09?\x06\x03" +
+ "\x093%\x03\x096\x05\x03\x096\x08\x03\x097\x02\x03\x09\x07,\x03\x09\x04," +
+ "\x03\x09\x1f\x16\x03\x09\x11\x03\x03\x09\x11\x12\x03\x09\x168\x03\x08*" +
+ "\x05\x03\x08/2\x03\x084:\x03\x08\x22+\x03\x08 0\x03\x08&\x0a\x03\x08;" +
+ "\x10\x03\x08>$\x03\x08>\x18\x03\x0829\x03\x082:\x03\x081,\x03\x081<\x03" +
+ "\x081\x1c\x03\x087#\x03\x087*\x03\x08\x09'\x03\x08\x00\x1d\x03\x08\x05-" +
+ "\x03\x08\x1f4\x03\x08\x1d\x04\x03\x08\x16\x0f\x03\x07*7\x03\x07'!\x03" +
+ "\x07%\x1b\x03\x077\x0c\x03\x07\x0c1\x03\x07\x0c.\x03\x07\x00\x06\x03\x07" +
+ "\x01\x02\x03\x07\x010\x03\x07\x06=\x03\x07\x01\x03\x03\x07\x01\x13\x03" +
+ "\x07\x06\x06\x03\x07\x05\x0a\x03\x07\x1f\x09\x03\x07\x17:\x03\x06*1\x03" +
+ "\x06-\x1d\x03\x06\x223\x03\x062:\x03\x060$\x03\x066\x1e\x03\x064\x12\x03" +
+ "\x0645\x03\x06\x0b\x00\x03\x06\x0b7\x03\x06\x07\x1f\x03\x06\x15\x12\x03" +
+ "\x0c\x05\x0f\x03\x0b+\x0b\x03\x0b+-\x03\x06\x16\x1b\x03\x06\x15\x17\x03" +
+ "\x89\xca\xea\x03\x89\xca\xe8\x03\x0c8\x10\x03\x0c8\x01\x03\x0c8\x0f\x03" +
+ "\x0d8%\x03\x0d8!\x03\x0c8-\x03\x0c8/\x03\x0c8+\x03\x0c87\x03\x0c85\x03" +
+ "\x0c9\x09\x03\x0c9\x0d\x03\x0c9\x0f\x03\x0c9\x0b\x03\xcfu\x0c\x03\xcfu" +
+ "\x0f\x03\xcfu\x0e\x03\xcfu\x09\x03\x0c9\x10\x03\x0d9\x0c\x03\xcf`;\x03" +
+ "\xcf`>\x03\xcf`9\x03\xcf`8\x03\xcf`7\x03\xcf`*\x03\xcf`-\x03\xcf`,\x03" +
+ "\x0d\x1b\x1a\x03\x0d\x1b&\x03\x0c=.\x03\x0c=%\x03\x0c>\x1e\x03\x0c>\x14" +
+ "\x03\x0c?\x06\x03\x0c?\x0b\x03\x0c?\x0c\x03\x0c?\x0d\x03\x0c?\x02\x03" +
+ "\x0c>\x0f\x03\x0c>\x08\x03\x0c>\x09\x03\x0c>,\x03\x0c>\x0c\x03\x0c?\x13" +
+ "\x03\x0c?\x16\x03\x0c?\x15\x03\x0c?\x1c\x03\x0c?\x1f\x03\x0c?\x1d\x03" +
+ "\x0c?\x1a\x03\x0c?\x17\x03\x0c?\x08\x03\x0c?\x09\x03\x0c?\x0e\x03\x0c?" +
+ "\x04\x03\x0c?\x05\x03\x0c\x03\x0c=\x00\x03\x0c=\x06\x03\x0c=\x05\x03" +
+ "\x0c=\x0c\x03\x0c=\x0f\x03\x0c=\x0d\x03\x0c=\x0b\x03\x0c=\x07\x03\x0c=" +
+ "\x19\x03\x0c=\x15\x03\x0c=\x11\x03\x0c=1\x03\x0c=3\x03\x0c=0\x03\x0c=>" +
+ "\x03\x0c=2\x03\x0c=6\x03\x0c<\x07\x03\x0c<\x05\x03\x0e:!\x03\x0e:#\x03" +
+ "\x0e8\x09\x03\x0e:&\x03\x0e8\x0b\x03\x0e:$\x03\x0e:,\x03\x0e8\x1a\x03" +
+ "\x0e8\x1e\x03\x0e:*\x03\x0e:7\x03\x0e:5\x03\x0e:;\x03\x0e:\x15\x03\x0e:<" +
+ "\x03\x0e:4\x03\x0e:'\x03\x0e:-\x03\x0e:%\x03\x0e:?\x03\x0e:=\x03\x0e:)" +
+ "\x03\x0e:/\x03\xcfs'\x03\x0d=\x0f\x03\x0d+*\x03\x0d99\x03\x0d9;\x03\x0d9" +
+ "?\x03\x0d)\x0d\x03\x0d(%\x02\x01\x18\x02\x01(\x02\x01\x1e\x03\x0f$!\x03" +
+ "\x0f87\x03\x0f4\x0e\x03\x0f5\x1d\x03\x06'\x03\x03\x0f\x08\x18\x03\x0f" +
+ "\x0d\x1b\x03\x0e2=\x03\x0e;\x08\x03\x0e:\x0b\x03\x0e\x06$\x03\x0e\x0d)" +
+ "\x03\x0e\x16\x1f\x03\x0e\x16\x1b\x03\x0d$\x0a\x03\x05,\x1d\x03\x0d. \x03" +
+ "\x0d.#\x03\x0c(/\x03\x09%\x02\x03\x0d90\x03\x0d\x0e4\x03\x0d\x0d\x0f\x03" +
+ "\x0c#\x00\x03\x0c,\x1e\x03\x0c2\x0e\x03\x0c\x01\x17\x03\x0c\x09:\x03\x0e" +
+ "\x173\x03\x0c\x08\x03\x03\x0c\x11\x07\x03\x0c\x10\x18\x03\x0c\x1f\x1c" +
+ "\x03\x0c\x19\x0e\x03\x0c\x1a\x1f\x03\x0f0>\x03\x0b->\x03\x0b<+\x03\x0b8" +
+ "\x13\x03\x0b\x043\x03\x0b\x14\x03\x03\x0b\x16%\x03\x0d\x22&\x03\x0b\x1a" +
+ "\x1a\x03\x0b\x1a\x04\x03\x0a%9\x03\x0a&2\x03\x0a&0\x03\x0a!\x1a\x03\x0a!" +
+ "7\x03\x0a5\x10\x03\x0a=4\x03\x0a?\x0e\x03\x0a>\x10\x03\x0a\x00 \x03\x0a" +
+ "\x0f:\x03\x0a\x0f9\x03\x0a\x0b\x0a\x03\x0a\x17%\x03\x0a\x1b-\x03\x09-" +
+ "\x1a\x03\x09,4\x03\x09.,\x03\x09)\x09\x03\x096!\x03\x091\x1f\x03\x093" +
+ "\x16\x03\x0c+\x1f\x03\x098 \x03\x098=\x03\x0c(\x1a\x03\x0c(\x16\x03\x09" +
+ "\x0a+\x03\x09\x16\x12\x03\x09\x13\x0e\x03\x09\x153\x03\x08)!\x03\x09\x1a" +
+ "\x01\x03\x09\x18\x01\x03\x08%#\x03\x08>\x22\x03\x08\x05%\x03\x08\x02*" +
+ "\x03\x08\x15;\x03\x08\x1b7\x03\x0f\x07\x1d\x03\x0f\x04\x03\x03\x070\x0c" +
+ "\x03\x07;\x0b\x03\x07\x08\x17\x03\x07\x12\x06\x03\x06/-\x03\x0671\x03" +
+ "\x065+\x03\x06>7\x03\x06\x049\x03\x05+\x1e\x03\x05,\x17\x03\x05 \x1d\x03" +
+ "\x05\x22\x05\x03\x050\x1d"
+
+// lookup returns the trie value for the first UTF-8 encoding in s and
+// the width in bytes of this encoding. The size will be 0 if s does not
+// hold enough bytes to complete the encoding. len(s) must be greater than 0.
+func (t *idnaTrie) lookup(s []byte) (v uint16, sz int) {
+ c0 := s[0]
+ switch {
+ case c0 < 0x80: // is ASCII
+ return idnaValues[c0], 1
+ case c0 < 0xC2:
+ return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+ case c0 < 0xE0: // 2-byte UTF-8
+ if len(s) < 2 {
+ return 0, 0
+ }
+ i := idnaIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c1), 2
+ case c0 < 0xF0: // 3-byte UTF-8
+ if len(s) < 3 {
+ return 0, 0
+ }
+ i := idnaIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ o := uint32(i)<<6 + uint32(c1)
+ i = idnaIndex[o]
+ c2 := s[2]
+ if c2 < 0x80 || 0xC0 <= c2 {
+ return 0, 2 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c2), 3
+ case c0 < 0xF8: // 4-byte UTF-8
+ if len(s) < 4 {
+ return 0, 0
+ }
+ i := idnaIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ o := uint32(i)<<6 + uint32(c1)
+ i = idnaIndex[o]
+ c2 := s[2]
+ if c2 < 0x80 || 0xC0 <= c2 {
+ return 0, 2 // Illegal UTF-8: not a continuation byte.
+ }
+ o = uint32(i)<<6 + uint32(c2)
+ i = idnaIndex[o]
+ c3 := s[3]
+ if c3 < 0x80 || 0xC0 <= c3 {
+ return 0, 3 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c3), 4
+ }
+ // Illegal rune
+ return 0, 1
+}
+
+// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
+// s must start with a full and valid UTF-8 encoded rune.
+func (t *idnaTrie) lookupUnsafe(s []byte) uint16 {
+ c0 := s[0]
+ if c0 < 0x80 { // is ASCII
+ return idnaValues[c0]
+ }
+ i := idnaIndex[c0]
+ if c0 < 0xE0 { // 2-byte UTF-8
+ return t.lookupValue(uint32(i), s[1])
+ }
+ i = idnaIndex[uint32(i)<<6+uint32(s[1])]
+ if c0 < 0xF0 { // 3-byte UTF-8
+ return t.lookupValue(uint32(i), s[2])
+ }
+ i = idnaIndex[uint32(i)<<6+uint32(s[2])]
+ if c0 < 0xF8 { // 4-byte UTF-8
+ return t.lookupValue(uint32(i), s[3])
+ }
+ return 0
+}
+
+// lookupString returns the trie value for the first UTF-8 encoding in s and
+// the width in bytes of this encoding. The size will be 0 if s does not
+// hold enough bytes to complete the encoding. len(s) must be greater than 0.
+func (t *idnaTrie) lookupString(s string) (v uint16, sz int) {
+ c0 := s[0]
+ switch {
+ case c0 < 0x80: // is ASCII
+ return idnaValues[c0], 1
+ case c0 < 0xC2:
+ return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+ case c0 < 0xE0: // 2-byte UTF-8
+ if len(s) < 2 {
+ return 0, 0
+ }
+ i := idnaIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c1), 2
+ case c0 < 0xF0: // 3-byte UTF-8
+ if len(s) < 3 {
+ return 0, 0
+ }
+ i := idnaIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ o := uint32(i)<<6 + uint32(c1)
+ i = idnaIndex[o]
+ c2 := s[2]
+ if c2 < 0x80 || 0xC0 <= c2 {
+ return 0, 2 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c2), 3
+ case c0 < 0xF8: // 4-byte UTF-8
+ if len(s) < 4 {
+ return 0, 0
+ }
+ i := idnaIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ o := uint32(i)<<6 + uint32(c1)
+ i = idnaIndex[o]
+ c2 := s[2]
+ if c2 < 0x80 || 0xC0 <= c2 {
+ return 0, 2 // Illegal UTF-8: not a continuation byte.
+ }
+ o = uint32(i)<<6 + uint32(c2)
+ i = idnaIndex[o]
+ c3 := s[3]
+ if c3 < 0x80 || 0xC0 <= c3 {
+ return 0, 3 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c3), 4
+ }
+ // Illegal rune
+ return 0, 1
+}
+
+// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
+// s must start with a full and valid UTF-8 encoded rune.
+func (t *idnaTrie) lookupStringUnsafe(s string) uint16 {
+ c0 := s[0]
+ if c0 < 0x80 { // is ASCII
+ return idnaValues[c0]
+ }
+ i := idnaIndex[c0]
+ if c0 < 0xE0 { // 2-byte UTF-8
+ return t.lookupValue(uint32(i), s[1])
+ }
+ i = idnaIndex[uint32(i)<<6+uint32(s[1])]
+ if c0 < 0xF0 { // 3-byte UTF-8
+ return t.lookupValue(uint32(i), s[2])
+ }
+ i = idnaIndex[uint32(i)<<6+uint32(s[2])]
+ if c0 < 0xF8 { // 4-byte UTF-8
+ return t.lookupValue(uint32(i), s[3])
+ }
+ return 0
+}
+
+// idnaTrie. Total size: 28496 bytes (27.83 KiB). Checksum: 43288b883596640e.
+type idnaTrie struct{}
+
+func newIdnaTrie(i int) *idnaTrie {
+ return &idnaTrie{}
+}
+
+// lookupValue determines the type of block n and looks up the value for b.
+func (t *idnaTrie) lookupValue(n uint32, b byte) uint16 {
+ switch {
+ case n < 123:
+ return uint16(idnaValues[n<<6+uint32(b)])
+ default:
+ n -= 123
+ return uint16(idnaSparse.lookup(n, b))
+ }
+}
+
+// idnaValues: 125 blocks, 8000 entries, 16000 bytes
+// The third block is the zero block.
+var idnaValues = [8000]uint16{
+ // Block 0x0, offset 0x0
+ 0x00: 0x0080, 0x01: 0x0080, 0x02: 0x0080, 0x03: 0x0080, 0x04: 0x0080, 0x05: 0x0080,
+ 0x06: 0x0080, 0x07: 0x0080, 0x08: 0x0080, 0x09: 0x0080, 0x0a: 0x0080, 0x0b: 0x0080,
+ 0x0c: 0x0080, 0x0d: 0x0080, 0x0e: 0x0080, 0x0f: 0x0080, 0x10: 0x0080, 0x11: 0x0080,
+ 0x12: 0x0080, 0x13: 0x0080, 0x14: 0x0080, 0x15: 0x0080, 0x16: 0x0080, 0x17: 0x0080,
+ 0x18: 0x0080, 0x19: 0x0080, 0x1a: 0x0080, 0x1b: 0x0080, 0x1c: 0x0080, 0x1d: 0x0080,
+ 0x1e: 0x0080, 0x1f: 0x0080, 0x20: 0x0080, 0x21: 0x0080, 0x22: 0x0080, 0x23: 0x0080,
+ 0x24: 0x0080, 0x25: 0x0080, 0x26: 0x0080, 0x27: 0x0080, 0x28: 0x0080, 0x29: 0x0080,
+ 0x2a: 0x0080, 0x2b: 0x0080, 0x2c: 0x0080, 0x2d: 0x0008, 0x2e: 0x0008, 0x2f: 0x0080,
+ 0x30: 0x0008, 0x31: 0x0008, 0x32: 0x0008, 0x33: 0x0008, 0x34: 0x0008, 0x35: 0x0008,
+ 0x36: 0x0008, 0x37: 0x0008, 0x38: 0x0008, 0x39: 0x0008, 0x3a: 0x0080, 0x3b: 0x0080,
+ 0x3c: 0x0080, 0x3d: 0x0080, 0x3e: 0x0080, 0x3f: 0x0080,
+ // Block 0x1, offset 0x40
+ 0x40: 0x0080, 0x41: 0xe105, 0x42: 0xe105, 0x43: 0xe105, 0x44: 0xe105, 0x45: 0xe105,
+ 0x46: 0xe105, 0x47: 0xe105, 0x48: 0xe105, 0x49: 0xe105, 0x4a: 0xe105, 0x4b: 0xe105,
+ 0x4c: 0xe105, 0x4d: 0xe105, 0x4e: 0xe105, 0x4f: 0xe105, 0x50: 0xe105, 0x51: 0xe105,
+ 0x52: 0xe105, 0x53: 0xe105, 0x54: 0xe105, 0x55: 0xe105, 0x56: 0xe105, 0x57: 0xe105,
+ 0x58: 0xe105, 0x59: 0xe105, 0x5a: 0xe105, 0x5b: 0x0080, 0x5c: 0x0080, 0x5d: 0x0080,
+ 0x5e: 0x0080, 0x5f: 0x0080, 0x60: 0x0080, 0x61: 0x0008, 0x62: 0x0008, 0x63: 0x0008,
+ 0x64: 0x0008, 0x65: 0x0008, 0x66: 0x0008, 0x67: 0x0008, 0x68: 0x0008, 0x69: 0x0008,
+ 0x6a: 0x0008, 0x6b: 0x0008, 0x6c: 0x0008, 0x6d: 0x0008, 0x6e: 0x0008, 0x6f: 0x0008,
+ 0x70: 0x0008, 0x71: 0x0008, 0x72: 0x0008, 0x73: 0x0008, 0x74: 0x0008, 0x75: 0x0008,
+ 0x76: 0x0008, 0x77: 0x0008, 0x78: 0x0008, 0x79: 0x0008, 0x7a: 0x0008, 0x7b: 0x0080,
+ 0x7c: 0x0080, 0x7d: 0x0080, 0x7e: 0x0080, 0x7f: 0x0080,
+ // Block 0x2, offset 0x80
+ // Block 0x3, offset 0xc0
+ 0xc0: 0x0040, 0xc1: 0x0040, 0xc2: 0x0040, 0xc3: 0x0040, 0xc4: 0x0040, 0xc5: 0x0040,
+ 0xc6: 0x0040, 0xc7: 0x0040, 0xc8: 0x0040, 0xc9: 0x0040, 0xca: 0x0040, 0xcb: 0x0040,
+ 0xcc: 0x0040, 0xcd: 0x0040, 0xce: 0x0040, 0xcf: 0x0040, 0xd0: 0x0040, 0xd1: 0x0040,
+ 0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040,
+ 0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040,
+ 0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x000a, 0xe1: 0x0018, 0xe2: 0x0018, 0xe3: 0x0018,
+ 0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x001a, 0xe9: 0x0018,
+ 0xea: 0x0039, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x004a,
+ 0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0069, 0xf3: 0x0079, 0xf4: 0x008a, 0xf5: 0x0005,
+ 0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x00aa, 0xf9: 0x00c9, 0xfa: 0x00d9, 0xfb: 0x0018,
+ 0xfc: 0x00e9, 0xfd: 0x0119, 0xfe: 0x0149, 0xff: 0x0018,
+ // Block 0x4, offset 0x100
+ 0x100: 0xe00d, 0x101: 0x0008, 0x102: 0xe00d, 0x103: 0x0008, 0x104: 0xe00d, 0x105: 0x0008,
+ 0x106: 0xe00d, 0x107: 0x0008, 0x108: 0xe00d, 0x109: 0x0008, 0x10a: 0xe00d, 0x10b: 0x0008,
+ 0x10c: 0xe00d, 0x10d: 0x0008, 0x10e: 0xe00d, 0x10f: 0x0008, 0x110: 0xe00d, 0x111: 0x0008,
+ 0x112: 0xe00d, 0x113: 0x0008, 0x114: 0xe00d, 0x115: 0x0008, 0x116: 0xe00d, 0x117: 0x0008,
+ 0x118: 0xe00d, 0x119: 0x0008, 0x11a: 0xe00d, 0x11b: 0x0008, 0x11c: 0xe00d, 0x11d: 0x0008,
+ 0x11e: 0xe00d, 0x11f: 0x0008, 0x120: 0xe00d, 0x121: 0x0008, 0x122: 0xe00d, 0x123: 0x0008,
+ 0x124: 0xe00d, 0x125: 0x0008, 0x126: 0xe00d, 0x127: 0x0008, 0x128: 0xe00d, 0x129: 0x0008,
+ 0x12a: 0xe00d, 0x12b: 0x0008, 0x12c: 0xe00d, 0x12d: 0x0008, 0x12e: 0xe00d, 0x12f: 0x0008,
+ 0x130: 0x0179, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008,
+ 0x136: 0xe00d, 0x137: 0x0008, 0x138: 0x0008, 0x139: 0xe01d, 0x13a: 0x0008, 0x13b: 0xe03d,
+ 0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0199,
+ // Block 0x5, offset 0x140
+ 0x140: 0x0199, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d,
+ 0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x01b9, 0x14a: 0xe00d, 0x14b: 0x0008,
+ 0x14c: 0xe00d, 0x14d: 0x0008, 0x14e: 0xe00d, 0x14f: 0x0008, 0x150: 0xe00d, 0x151: 0x0008,
+ 0x152: 0xe00d, 0x153: 0x0008, 0x154: 0xe00d, 0x155: 0x0008, 0x156: 0xe00d, 0x157: 0x0008,
+ 0x158: 0xe00d, 0x159: 0x0008, 0x15a: 0xe00d, 0x15b: 0x0008, 0x15c: 0xe00d, 0x15d: 0x0008,
+ 0x15e: 0xe00d, 0x15f: 0x0008, 0x160: 0xe00d, 0x161: 0x0008, 0x162: 0xe00d, 0x163: 0x0008,
+ 0x164: 0xe00d, 0x165: 0x0008, 0x166: 0xe00d, 0x167: 0x0008, 0x168: 0xe00d, 0x169: 0x0008,
+ 0x16a: 0xe00d, 0x16b: 0x0008, 0x16c: 0xe00d, 0x16d: 0x0008, 0x16e: 0xe00d, 0x16f: 0x0008,
+ 0x170: 0xe00d, 0x171: 0x0008, 0x172: 0xe00d, 0x173: 0x0008, 0x174: 0xe00d, 0x175: 0x0008,
+ 0x176: 0xe00d, 0x177: 0x0008, 0x178: 0x0065, 0x179: 0xe01d, 0x17a: 0x0008, 0x17b: 0xe03d,
+ 0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x01d9,
+ // Block 0x6, offset 0x180
+ 0x180: 0x0008, 0x181: 0x007d, 0x182: 0xe00d, 0x183: 0x0008, 0x184: 0xe00d, 0x185: 0x0008,
+ 0x186: 0x007d, 0x187: 0xe07d, 0x188: 0x0008, 0x189: 0x0095, 0x18a: 0x00ad, 0x18b: 0xe03d,
+ 0x18c: 0x0008, 0x18d: 0x0008, 0x18e: 0x00c5, 0x18f: 0x00dd, 0x190: 0x00f5, 0x191: 0xe01d,
+ 0x192: 0x0008, 0x193: 0x010d, 0x194: 0x0125, 0x195: 0x0008, 0x196: 0x013d, 0x197: 0x013d,
+ 0x198: 0xe00d, 0x199: 0x0008, 0x19a: 0x0008, 0x19b: 0x0008, 0x19c: 0x010d, 0x19d: 0x0155,
+ 0x19e: 0x0008, 0x19f: 0x016d, 0x1a0: 0xe00d, 0x1a1: 0x0008, 0x1a2: 0xe00d, 0x1a3: 0x0008,
+ 0x1a4: 0xe00d, 0x1a5: 0x0008, 0x1a6: 0x0185, 0x1a7: 0xe07d, 0x1a8: 0x0008, 0x1a9: 0x019d,
+ 0x1aa: 0x0008, 0x1ab: 0x0008, 0x1ac: 0xe00d, 0x1ad: 0x0008, 0x1ae: 0x0185, 0x1af: 0xe0fd,
+ 0x1b0: 0x0008, 0x1b1: 0x01b5, 0x1b2: 0x01cd, 0x1b3: 0xe03d, 0x1b4: 0x0008, 0x1b5: 0xe01d,
+ 0x1b6: 0x0008, 0x1b7: 0x01e5, 0x1b8: 0xe00d, 0x1b9: 0x0008, 0x1ba: 0x0008, 0x1bb: 0x0008,
+ 0x1bc: 0xe00d, 0x1bd: 0x0008, 0x1be: 0x0008, 0x1bf: 0x0008,
+ // Block 0x7, offset 0x1c0
+ 0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x01e9, 0x1c5: 0x01e9,
+ 0x1c6: 0x01e9, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d,
+ 0x1cc: 0x0275, 0x1cd: 0xe01d, 0x1ce: 0x0008, 0x1cf: 0xe0fd, 0x1d0: 0x0008, 0x1d1: 0xe01d,
+ 0x1d2: 0x0008, 0x1d3: 0xe03d, 0x1d4: 0x0008, 0x1d5: 0xe01d, 0x1d6: 0x0008, 0x1d7: 0xe07d,
+ 0x1d8: 0x0008, 0x1d9: 0xe01d, 0x1da: 0x0008, 0x1db: 0xe03d, 0x1dc: 0x0008, 0x1dd: 0x0008,
+ 0x1de: 0xe00d, 0x1df: 0x0008, 0x1e0: 0xe00d, 0x1e1: 0x0008, 0x1e2: 0xe00d, 0x1e3: 0x0008,
+ 0x1e4: 0xe00d, 0x1e5: 0x0008, 0x1e6: 0xe00d, 0x1e7: 0x0008, 0x1e8: 0xe00d, 0x1e9: 0x0008,
+ 0x1ea: 0xe00d, 0x1eb: 0x0008, 0x1ec: 0xe00d, 0x1ed: 0x0008, 0x1ee: 0xe00d, 0x1ef: 0x0008,
+ 0x1f0: 0x0008, 0x1f1: 0x028d, 0x1f2: 0x02a5, 0x1f3: 0x02bd, 0x1f4: 0xe00d, 0x1f5: 0x0008,
+ 0x1f6: 0x02d5, 0x1f7: 0x02ed, 0x1f8: 0xe00d, 0x1f9: 0x0008, 0x1fa: 0xe00d, 0x1fb: 0x0008,
+ 0x1fc: 0xe00d, 0x1fd: 0x0008, 0x1fe: 0xe00d, 0x1ff: 0x0008,
+ // Block 0x8, offset 0x200
+ 0x200: 0xe00d, 0x201: 0x0008, 0x202: 0xe00d, 0x203: 0x0008, 0x204: 0xe00d, 0x205: 0x0008,
+ 0x206: 0xe00d, 0x207: 0x0008, 0x208: 0xe00d, 0x209: 0x0008, 0x20a: 0xe00d, 0x20b: 0x0008,
+ 0x20c: 0xe00d, 0x20d: 0x0008, 0x20e: 0xe00d, 0x20f: 0x0008, 0x210: 0xe00d, 0x211: 0x0008,
+ 0x212: 0xe00d, 0x213: 0x0008, 0x214: 0xe00d, 0x215: 0x0008, 0x216: 0xe00d, 0x217: 0x0008,
+ 0x218: 0xe00d, 0x219: 0x0008, 0x21a: 0xe00d, 0x21b: 0x0008, 0x21c: 0xe00d, 0x21d: 0x0008,
+ 0x21e: 0xe00d, 0x21f: 0x0008, 0x220: 0x0305, 0x221: 0x0008, 0x222: 0xe00d, 0x223: 0x0008,
+ 0x224: 0xe00d, 0x225: 0x0008, 0x226: 0xe00d, 0x227: 0x0008, 0x228: 0xe00d, 0x229: 0x0008,
+ 0x22a: 0xe00d, 0x22b: 0x0008, 0x22c: 0xe00d, 0x22d: 0x0008, 0x22e: 0xe00d, 0x22f: 0x0008,
+ 0x230: 0xe00d, 0x231: 0x0008, 0x232: 0xe00d, 0x233: 0x0008, 0x234: 0x0008, 0x235: 0x0008,
+ 0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0209, 0x23b: 0xe03d,
+ 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x0229, 0x23f: 0x0008,
+ // Block 0x9, offset 0x240
+ 0x240: 0x0008, 0x241: 0x0008, 0x242: 0x0018, 0x243: 0x0018, 0x244: 0x0018, 0x245: 0x0018,
+ 0x246: 0x0008, 0x247: 0x0008, 0x248: 0x0008, 0x249: 0x0008, 0x24a: 0x0008, 0x24b: 0x0008,
+ 0x24c: 0x0008, 0x24d: 0x0008, 0x24e: 0x0008, 0x24f: 0x0008, 0x250: 0x0008, 0x251: 0x0008,
+ 0x252: 0x0018, 0x253: 0x0018, 0x254: 0x0018, 0x255: 0x0018, 0x256: 0x0018, 0x257: 0x0018,
+ 0x258: 0x029a, 0x259: 0x02ba, 0x25a: 0x02da, 0x25b: 0x02fa, 0x25c: 0x031a, 0x25d: 0x033a,
+ 0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0359, 0x262: 0x01d9, 0x263: 0x0369,
+ 0x264: 0x03c5, 0x265: 0x0018, 0x266: 0x0018, 0x267: 0x0018, 0x268: 0x0018, 0x269: 0x0018,
+ 0x26a: 0x0018, 0x26b: 0x0018, 0x26c: 0x0008, 0x26d: 0x0018, 0x26e: 0x0008, 0x26f: 0x0018,
+ 0x270: 0x0018, 0x271: 0x0018, 0x272: 0x0018, 0x273: 0x0018, 0x274: 0x0018, 0x275: 0x0018,
+ 0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018,
+ 0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018,
+ // Block 0xa, offset 0x280
+ 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x1308, 0x283: 0x03f5, 0x284: 0x0379, 0x285: 0x040d,
+ 0x286: 0x1308, 0x287: 0x1308, 0x288: 0x1308, 0x289: 0x1308, 0x28a: 0x1308, 0x28b: 0x1308,
+ 0x28c: 0x1308, 0x28d: 0x1308, 0x28e: 0x1308, 0x28f: 0x13c0, 0x290: 0x1308, 0x291: 0x1308,
+ 0x292: 0x1308, 0x293: 0x1308, 0x294: 0x1308, 0x295: 0x1308, 0x296: 0x1308, 0x297: 0x1308,
+ 0x298: 0x1308, 0x299: 0x1308, 0x29a: 0x1308, 0x29b: 0x1308, 0x29c: 0x1308, 0x29d: 0x1308,
+ 0x29e: 0x1308, 0x29f: 0x1308, 0x2a0: 0x1308, 0x2a1: 0x1308, 0x2a2: 0x1308, 0x2a3: 0x1308,
+ 0x2a4: 0x1308, 0x2a5: 0x1308, 0x2a6: 0x1308, 0x2a7: 0x1308, 0x2a8: 0x1308, 0x2a9: 0x1308,
+ 0x2aa: 0x1308, 0x2ab: 0x1308, 0x2ac: 0x1308, 0x2ad: 0x1308, 0x2ae: 0x1308, 0x2af: 0x1308,
+ 0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008,
+ 0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x03a2, 0x2bb: 0x0008,
+ 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d,
+ // Block 0xb, offset 0x2c0
+ 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x008a, 0x2c5: 0x03d2,
+ 0x2c6: 0xe155, 0x2c7: 0x0455, 0x2c8: 0xe12d, 0x2c9: 0xe13d, 0x2ca: 0xe12d, 0x2cb: 0x0040,
+ 0x2cc: 0x03dd, 0x2cd: 0x0040, 0x2ce: 0x046d, 0x2cf: 0x0485, 0x2d0: 0x0008, 0x2d1: 0xe105,
+ 0x2d2: 0xe105, 0x2d3: 0xe105, 0x2d4: 0xe105, 0x2d5: 0xe105, 0x2d6: 0xe105, 0x2d7: 0xe105,
+ 0x2d8: 0xe105, 0x2d9: 0xe105, 0x2da: 0xe105, 0x2db: 0xe105, 0x2dc: 0xe105, 0x2dd: 0xe105,
+ 0x2de: 0xe105, 0x2df: 0xe105, 0x2e0: 0x049d, 0x2e1: 0x049d, 0x2e2: 0x0040, 0x2e3: 0x049d,
+ 0x2e4: 0x049d, 0x2e5: 0x049d, 0x2e6: 0x049d, 0x2e7: 0x049d, 0x2e8: 0x049d, 0x2e9: 0x049d,
+ 0x2ea: 0x049d, 0x2eb: 0x049d, 0x2ec: 0x0008, 0x2ed: 0x0008, 0x2ee: 0x0008, 0x2ef: 0x0008,
+ 0x2f0: 0x0008, 0x2f1: 0x0008, 0x2f2: 0x0008, 0x2f3: 0x0008, 0x2f4: 0x0008, 0x2f5: 0x0008,
+ 0x2f6: 0x0008, 0x2f7: 0x0008, 0x2f8: 0x0008, 0x2f9: 0x0008, 0x2fa: 0x0008, 0x2fb: 0x0008,
+ 0x2fc: 0x0008, 0x2fd: 0x0008, 0x2fe: 0x0008, 0x2ff: 0x0008,
+ // Block 0xc, offset 0x300
+ 0x300: 0x0008, 0x301: 0x0008, 0x302: 0xe00f, 0x303: 0x0008, 0x304: 0x0008, 0x305: 0x0008,
+ 0x306: 0x0008, 0x307: 0x0008, 0x308: 0x0008, 0x309: 0x0008, 0x30a: 0x0008, 0x30b: 0x0008,
+ 0x30c: 0x0008, 0x30d: 0x0008, 0x30e: 0x0008, 0x30f: 0xe0c5, 0x310: 0x04b5, 0x311: 0x04cd,
+ 0x312: 0xe0bd, 0x313: 0xe0f5, 0x314: 0xe0fd, 0x315: 0xe09d, 0x316: 0xe0b5, 0x317: 0x0008,
+ 0x318: 0xe00d, 0x319: 0x0008, 0x31a: 0xe00d, 0x31b: 0x0008, 0x31c: 0xe00d, 0x31d: 0x0008,
+ 0x31e: 0xe00d, 0x31f: 0x0008, 0x320: 0xe00d, 0x321: 0x0008, 0x322: 0xe00d, 0x323: 0x0008,
+ 0x324: 0xe00d, 0x325: 0x0008, 0x326: 0xe00d, 0x327: 0x0008, 0x328: 0xe00d, 0x329: 0x0008,
+ 0x32a: 0xe00d, 0x32b: 0x0008, 0x32c: 0xe00d, 0x32d: 0x0008, 0x32e: 0xe00d, 0x32f: 0x0008,
+ 0x330: 0x04e5, 0x331: 0xe185, 0x332: 0xe18d, 0x333: 0x0008, 0x334: 0x04fd, 0x335: 0x03dd,
+ 0x336: 0x0018, 0x337: 0xe07d, 0x338: 0x0008, 0x339: 0xe1d5, 0x33a: 0xe00d, 0x33b: 0x0008,
+ 0x33c: 0x0008, 0x33d: 0x0515, 0x33e: 0x052d, 0x33f: 0x052d,
+ // Block 0xd, offset 0x340
+ 0x340: 0x0008, 0x341: 0x0008, 0x342: 0x0008, 0x343: 0x0008, 0x344: 0x0008, 0x345: 0x0008,
+ 0x346: 0x0008, 0x347: 0x0008, 0x348: 0x0008, 0x349: 0x0008, 0x34a: 0x0008, 0x34b: 0x0008,
+ 0x34c: 0x0008, 0x34d: 0x0008, 0x34e: 0x0008, 0x34f: 0x0008, 0x350: 0x0008, 0x351: 0x0008,
+ 0x352: 0x0008, 0x353: 0x0008, 0x354: 0x0008, 0x355: 0x0008, 0x356: 0x0008, 0x357: 0x0008,
+ 0x358: 0x0008, 0x359: 0x0008, 0x35a: 0x0008, 0x35b: 0x0008, 0x35c: 0x0008, 0x35d: 0x0008,
+ 0x35e: 0x0008, 0x35f: 0x0008, 0x360: 0xe00d, 0x361: 0x0008, 0x362: 0xe00d, 0x363: 0x0008,
+ 0x364: 0xe00d, 0x365: 0x0008, 0x366: 0xe00d, 0x367: 0x0008, 0x368: 0xe00d, 0x369: 0x0008,
+ 0x36a: 0xe00d, 0x36b: 0x0008, 0x36c: 0xe00d, 0x36d: 0x0008, 0x36e: 0xe00d, 0x36f: 0x0008,
+ 0x370: 0xe00d, 0x371: 0x0008, 0x372: 0xe00d, 0x373: 0x0008, 0x374: 0xe00d, 0x375: 0x0008,
+ 0x376: 0xe00d, 0x377: 0x0008, 0x378: 0xe00d, 0x379: 0x0008, 0x37a: 0xe00d, 0x37b: 0x0008,
+ 0x37c: 0xe00d, 0x37d: 0x0008, 0x37e: 0xe00d, 0x37f: 0x0008,
+ // Block 0xe, offset 0x380
+ 0x380: 0xe00d, 0x381: 0x0008, 0x382: 0x0018, 0x383: 0x1308, 0x384: 0x1308, 0x385: 0x1308,
+ 0x386: 0x1308, 0x387: 0x1308, 0x388: 0x1318, 0x389: 0x1318, 0x38a: 0xe00d, 0x38b: 0x0008,
+ 0x38c: 0xe00d, 0x38d: 0x0008, 0x38e: 0xe00d, 0x38f: 0x0008, 0x390: 0xe00d, 0x391: 0x0008,
+ 0x392: 0xe00d, 0x393: 0x0008, 0x394: 0xe00d, 0x395: 0x0008, 0x396: 0xe00d, 0x397: 0x0008,
+ 0x398: 0xe00d, 0x399: 0x0008, 0x39a: 0xe00d, 0x39b: 0x0008, 0x39c: 0xe00d, 0x39d: 0x0008,
+ 0x39e: 0xe00d, 0x39f: 0x0008, 0x3a0: 0xe00d, 0x3a1: 0x0008, 0x3a2: 0xe00d, 0x3a3: 0x0008,
+ 0x3a4: 0xe00d, 0x3a5: 0x0008, 0x3a6: 0xe00d, 0x3a7: 0x0008, 0x3a8: 0xe00d, 0x3a9: 0x0008,
+ 0x3aa: 0xe00d, 0x3ab: 0x0008, 0x3ac: 0xe00d, 0x3ad: 0x0008, 0x3ae: 0xe00d, 0x3af: 0x0008,
+ 0x3b0: 0xe00d, 0x3b1: 0x0008, 0x3b2: 0xe00d, 0x3b3: 0x0008, 0x3b4: 0xe00d, 0x3b5: 0x0008,
+ 0x3b6: 0xe00d, 0x3b7: 0x0008, 0x3b8: 0xe00d, 0x3b9: 0x0008, 0x3ba: 0xe00d, 0x3bb: 0x0008,
+ 0x3bc: 0xe00d, 0x3bd: 0x0008, 0x3be: 0xe00d, 0x3bf: 0x0008,
+ // Block 0xf, offset 0x3c0
+ 0x3c0: 0x0040, 0x3c1: 0xe01d, 0x3c2: 0x0008, 0x3c3: 0xe03d, 0x3c4: 0x0008, 0x3c5: 0xe01d,
+ 0x3c6: 0x0008, 0x3c7: 0xe07d, 0x3c8: 0x0008, 0x3c9: 0xe01d, 0x3ca: 0x0008, 0x3cb: 0xe03d,
+ 0x3cc: 0x0008, 0x3cd: 0xe01d, 0x3ce: 0x0008, 0x3cf: 0x0008, 0x3d0: 0xe00d, 0x3d1: 0x0008,
+ 0x3d2: 0xe00d, 0x3d3: 0x0008, 0x3d4: 0xe00d, 0x3d5: 0x0008, 0x3d6: 0xe00d, 0x3d7: 0x0008,
+ 0x3d8: 0xe00d, 0x3d9: 0x0008, 0x3da: 0xe00d, 0x3db: 0x0008, 0x3dc: 0xe00d, 0x3dd: 0x0008,
+ 0x3de: 0xe00d, 0x3df: 0x0008, 0x3e0: 0xe00d, 0x3e1: 0x0008, 0x3e2: 0xe00d, 0x3e3: 0x0008,
+ 0x3e4: 0xe00d, 0x3e5: 0x0008, 0x3e6: 0xe00d, 0x3e7: 0x0008, 0x3e8: 0xe00d, 0x3e9: 0x0008,
+ 0x3ea: 0xe00d, 0x3eb: 0x0008, 0x3ec: 0xe00d, 0x3ed: 0x0008, 0x3ee: 0xe00d, 0x3ef: 0x0008,
+ 0x3f0: 0xe00d, 0x3f1: 0x0008, 0x3f2: 0xe00d, 0x3f3: 0x0008, 0x3f4: 0xe00d, 0x3f5: 0x0008,
+ 0x3f6: 0xe00d, 0x3f7: 0x0008, 0x3f8: 0xe00d, 0x3f9: 0x0008, 0x3fa: 0xe00d, 0x3fb: 0x0008,
+ 0x3fc: 0xe00d, 0x3fd: 0x0008, 0x3fe: 0xe00d, 0x3ff: 0x0008,
+ // Block 0x10, offset 0x400
+ 0x400: 0xe00d, 0x401: 0x0008, 0x402: 0xe00d, 0x403: 0x0008, 0x404: 0xe00d, 0x405: 0x0008,
+ 0x406: 0xe00d, 0x407: 0x0008, 0x408: 0xe00d, 0x409: 0x0008, 0x40a: 0xe00d, 0x40b: 0x0008,
+ 0x40c: 0xe00d, 0x40d: 0x0008, 0x40e: 0xe00d, 0x40f: 0x0008, 0x410: 0xe00d, 0x411: 0x0008,
+ 0x412: 0xe00d, 0x413: 0x0008, 0x414: 0xe00d, 0x415: 0x0008, 0x416: 0xe00d, 0x417: 0x0008,
+ 0x418: 0xe00d, 0x419: 0x0008, 0x41a: 0xe00d, 0x41b: 0x0008, 0x41c: 0xe00d, 0x41d: 0x0008,
+ 0x41e: 0xe00d, 0x41f: 0x0008, 0x420: 0xe00d, 0x421: 0x0008, 0x422: 0xe00d, 0x423: 0x0008,
+ 0x424: 0xe00d, 0x425: 0x0008, 0x426: 0xe00d, 0x427: 0x0008, 0x428: 0xe00d, 0x429: 0x0008,
+ 0x42a: 0xe00d, 0x42b: 0x0008, 0x42c: 0xe00d, 0x42d: 0x0008, 0x42e: 0xe00d, 0x42f: 0x0008,
+ 0x430: 0x0040, 0x431: 0x03f5, 0x432: 0x03f5, 0x433: 0x03f5, 0x434: 0x03f5, 0x435: 0x03f5,
+ 0x436: 0x03f5, 0x437: 0x03f5, 0x438: 0x03f5, 0x439: 0x03f5, 0x43a: 0x03f5, 0x43b: 0x03f5,
+ 0x43c: 0x03f5, 0x43d: 0x03f5, 0x43e: 0x03f5, 0x43f: 0x03f5,
+ // Block 0x11, offset 0x440
+ 0x440: 0x0040, 0x441: 0x0040, 0x442: 0x0040, 0x443: 0x0040, 0x444: 0x0040, 0x445: 0x0040,
+ 0x446: 0x0018, 0x447: 0x0018, 0x448: 0x0018, 0x449: 0x0018, 0x44a: 0x0018, 0x44b: 0x0018,
+ 0x44c: 0x0018, 0x44d: 0x0018, 0x44e: 0x0018, 0x44f: 0x0018, 0x450: 0x1308, 0x451: 0x1308,
+ 0x452: 0x1308, 0x453: 0x1308, 0x454: 0x1308, 0x455: 0x1308, 0x456: 0x1308, 0x457: 0x1308,
+ 0x458: 0x1308, 0x459: 0x1308, 0x45a: 0x1308, 0x45b: 0x0018, 0x45c: 0x0340, 0x45d: 0x0040,
+ 0x45e: 0x0018, 0x45f: 0x0018, 0x460: 0x0208, 0x461: 0x0008, 0x462: 0x0408, 0x463: 0x0408,
+ 0x464: 0x0408, 0x465: 0x0408, 0x466: 0x0208, 0x467: 0x0408, 0x468: 0x0208, 0x469: 0x0408,
+ 0x46a: 0x0208, 0x46b: 0x0208, 0x46c: 0x0208, 0x46d: 0x0208, 0x46e: 0x0208, 0x46f: 0x0408,
+ 0x470: 0x0408, 0x471: 0x0408, 0x472: 0x0408, 0x473: 0x0208, 0x474: 0x0208, 0x475: 0x0208,
+ 0x476: 0x0208, 0x477: 0x0208, 0x478: 0x0208, 0x479: 0x0208, 0x47a: 0x0208, 0x47b: 0x0208,
+ 0x47c: 0x0208, 0x47d: 0x0208, 0x47e: 0x0208, 0x47f: 0x0208,
+ // Block 0x12, offset 0x480
+ 0x480: 0x0408, 0x481: 0x0208, 0x482: 0x0208, 0x483: 0x0408, 0x484: 0x0408, 0x485: 0x0408,
+ 0x486: 0x0408, 0x487: 0x0408, 0x488: 0x0408, 0x489: 0x0408, 0x48a: 0x0408, 0x48b: 0x0408,
+ 0x48c: 0x0208, 0x48d: 0x0408, 0x48e: 0x0208, 0x48f: 0x0408, 0x490: 0x0208, 0x491: 0x0208,
+ 0x492: 0x0408, 0x493: 0x0408, 0x494: 0x0018, 0x495: 0x0408, 0x496: 0x1308, 0x497: 0x1308,
+ 0x498: 0x1308, 0x499: 0x1308, 0x49a: 0x1308, 0x49b: 0x1308, 0x49c: 0x1308, 0x49d: 0x0040,
+ 0x49e: 0x0018, 0x49f: 0x1308, 0x4a0: 0x1308, 0x4a1: 0x1308, 0x4a2: 0x1308, 0x4a3: 0x1308,
+ 0x4a4: 0x1308, 0x4a5: 0x0008, 0x4a6: 0x0008, 0x4a7: 0x1308, 0x4a8: 0x1308, 0x4a9: 0x0018,
+ 0x4aa: 0x1308, 0x4ab: 0x1308, 0x4ac: 0x1308, 0x4ad: 0x1308, 0x4ae: 0x0408, 0x4af: 0x0408,
+ 0x4b0: 0x0008, 0x4b1: 0x0008, 0x4b2: 0x0008, 0x4b3: 0x0008, 0x4b4: 0x0008, 0x4b5: 0x0008,
+ 0x4b6: 0x0008, 0x4b7: 0x0008, 0x4b8: 0x0008, 0x4b9: 0x0008, 0x4ba: 0x0208, 0x4bb: 0x0208,
+ 0x4bc: 0x0208, 0x4bd: 0x0008, 0x4be: 0x0008, 0x4bf: 0x0208,
+ // Block 0x13, offset 0x4c0
+ 0x4c0: 0x0018, 0x4c1: 0x0018, 0x4c2: 0x0018, 0x4c3: 0x0018, 0x4c4: 0x0018, 0x4c5: 0x0018,
+ 0x4c6: 0x0018, 0x4c7: 0x0018, 0x4c8: 0x0018, 0x4c9: 0x0018, 0x4ca: 0x0018, 0x4cb: 0x0018,
+ 0x4cc: 0x0018, 0x4cd: 0x0018, 0x4ce: 0x0040, 0x4cf: 0x0340, 0x4d0: 0x0408, 0x4d1: 0x1308,
+ 0x4d2: 0x0208, 0x4d3: 0x0208, 0x4d4: 0x0208, 0x4d5: 0x0408, 0x4d6: 0x0408, 0x4d7: 0x0408,
+ 0x4d8: 0x0408, 0x4d9: 0x0408, 0x4da: 0x0208, 0x4db: 0x0208, 0x4dc: 0x0208, 0x4dd: 0x0208,
+ 0x4de: 0x0408, 0x4df: 0x0208, 0x4e0: 0x0208, 0x4e1: 0x0208, 0x4e2: 0x0208, 0x4e3: 0x0208,
+ 0x4e4: 0x0208, 0x4e5: 0x0208, 0x4e6: 0x0208, 0x4e7: 0x0208, 0x4e8: 0x0408, 0x4e9: 0x0208,
+ 0x4ea: 0x0408, 0x4eb: 0x0208, 0x4ec: 0x0408, 0x4ed: 0x0208, 0x4ee: 0x0208, 0x4ef: 0x0408,
+ 0x4f0: 0x1308, 0x4f1: 0x1308, 0x4f2: 0x1308, 0x4f3: 0x1308, 0x4f4: 0x1308, 0x4f5: 0x1308,
+ 0x4f6: 0x1308, 0x4f7: 0x1308, 0x4f8: 0x1308, 0x4f9: 0x1308, 0x4fa: 0x1308, 0x4fb: 0x1308,
+ 0x4fc: 0x1308, 0x4fd: 0x1308, 0x4fe: 0x1308, 0x4ff: 0x1308,
+ // Block 0x14, offset 0x500
+ 0x500: 0x1008, 0x501: 0x1308, 0x502: 0x1308, 0x503: 0x1308, 0x504: 0x1308, 0x505: 0x1308,
+ 0x506: 0x1308, 0x507: 0x1308, 0x508: 0x1308, 0x509: 0x1008, 0x50a: 0x1008, 0x50b: 0x1008,
+ 0x50c: 0x1008, 0x50d: 0x1b08, 0x50e: 0x1008, 0x50f: 0x1008, 0x510: 0x0008, 0x511: 0x1308,
+ 0x512: 0x1308, 0x513: 0x1308, 0x514: 0x1308, 0x515: 0x1308, 0x516: 0x1308, 0x517: 0x1308,
+ 0x518: 0x04c9, 0x519: 0x0501, 0x51a: 0x0539, 0x51b: 0x0571, 0x51c: 0x05a9, 0x51d: 0x05e1,
+ 0x51e: 0x0619, 0x51f: 0x0651, 0x520: 0x0008, 0x521: 0x0008, 0x522: 0x1308, 0x523: 0x1308,
+ 0x524: 0x0018, 0x525: 0x0018, 0x526: 0x0008, 0x527: 0x0008, 0x528: 0x0008, 0x529: 0x0008,
+ 0x52a: 0x0008, 0x52b: 0x0008, 0x52c: 0x0008, 0x52d: 0x0008, 0x52e: 0x0008, 0x52f: 0x0008,
+ 0x530: 0x0018, 0x531: 0x0008, 0x532: 0x0008, 0x533: 0x0008, 0x534: 0x0008, 0x535: 0x0008,
+ 0x536: 0x0008, 0x537: 0x0008, 0x538: 0x0008, 0x539: 0x0008, 0x53a: 0x0008, 0x53b: 0x0008,
+ 0x53c: 0x0008, 0x53d: 0x0008, 0x53e: 0x0008, 0x53f: 0x0008,
+ // Block 0x15, offset 0x540
+ 0x540: 0x0008, 0x541: 0x1308, 0x542: 0x1008, 0x543: 0x1008, 0x544: 0x0040, 0x545: 0x0008,
+ 0x546: 0x0008, 0x547: 0x0008, 0x548: 0x0008, 0x549: 0x0008, 0x54a: 0x0008, 0x54b: 0x0008,
+ 0x54c: 0x0008, 0x54d: 0x0040, 0x54e: 0x0040, 0x54f: 0x0008, 0x550: 0x0008, 0x551: 0x0040,
+ 0x552: 0x0040, 0x553: 0x0008, 0x554: 0x0008, 0x555: 0x0008, 0x556: 0x0008, 0x557: 0x0008,
+ 0x558: 0x0008, 0x559: 0x0008, 0x55a: 0x0008, 0x55b: 0x0008, 0x55c: 0x0008, 0x55d: 0x0008,
+ 0x55e: 0x0008, 0x55f: 0x0008, 0x560: 0x0008, 0x561: 0x0008, 0x562: 0x0008, 0x563: 0x0008,
+ 0x564: 0x0008, 0x565: 0x0008, 0x566: 0x0008, 0x567: 0x0008, 0x568: 0x0008, 0x569: 0x0040,
+ 0x56a: 0x0008, 0x56b: 0x0008, 0x56c: 0x0008, 0x56d: 0x0008, 0x56e: 0x0008, 0x56f: 0x0008,
+ 0x570: 0x0008, 0x571: 0x0040, 0x572: 0x0008, 0x573: 0x0040, 0x574: 0x0040, 0x575: 0x0040,
+ 0x576: 0x0008, 0x577: 0x0008, 0x578: 0x0008, 0x579: 0x0008, 0x57a: 0x0040, 0x57b: 0x0040,
+ 0x57c: 0x1308, 0x57d: 0x0008, 0x57e: 0x1008, 0x57f: 0x1008,
+ // Block 0x16, offset 0x580
+ 0x580: 0x1008, 0x581: 0x1308, 0x582: 0x1308, 0x583: 0x1308, 0x584: 0x1308, 0x585: 0x0040,
+ 0x586: 0x0040, 0x587: 0x1008, 0x588: 0x1008, 0x589: 0x0040, 0x58a: 0x0040, 0x58b: 0x1008,
+ 0x58c: 0x1008, 0x58d: 0x1b08, 0x58e: 0x0008, 0x58f: 0x0040, 0x590: 0x0040, 0x591: 0x0040,
+ 0x592: 0x0040, 0x593: 0x0040, 0x594: 0x0040, 0x595: 0x0040, 0x596: 0x0040, 0x597: 0x1008,
+ 0x598: 0x0040, 0x599: 0x0040, 0x59a: 0x0040, 0x59b: 0x0040, 0x59c: 0x0689, 0x59d: 0x06c1,
+ 0x59e: 0x0040, 0x59f: 0x06f9, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x1308, 0x5a3: 0x1308,
+ 0x5a4: 0x0040, 0x5a5: 0x0040, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0008,
+ 0x5aa: 0x0008, 0x5ab: 0x0008, 0x5ac: 0x0008, 0x5ad: 0x0008, 0x5ae: 0x0008, 0x5af: 0x0008,
+ 0x5b0: 0x0008, 0x5b1: 0x0008, 0x5b2: 0x0018, 0x5b3: 0x0018, 0x5b4: 0x0018, 0x5b5: 0x0018,
+ 0x5b6: 0x0018, 0x5b7: 0x0018, 0x5b8: 0x0018, 0x5b9: 0x0018, 0x5ba: 0x0018, 0x5bb: 0x0018,
+ 0x5bc: 0x0040, 0x5bd: 0x0040, 0x5be: 0x0040, 0x5bf: 0x0040,
+ // Block 0x17, offset 0x5c0
+ 0x5c0: 0x0040, 0x5c1: 0x1308, 0x5c2: 0x1308, 0x5c3: 0x1008, 0x5c4: 0x0040, 0x5c5: 0x0008,
+ 0x5c6: 0x0008, 0x5c7: 0x0008, 0x5c8: 0x0008, 0x5c9: 0x0008, 0x5ca: 0x0008, 0x5cb: 0x0040,
+ 0x5cc: 0x0040, 0x5cd: 0x0040, 0x5ce: 0x0040, 0x5cf: 0x0008, 0x5d0: 0x0008, 0x5d1: 0x0040,
+ 0x5d2: 0x0040, 0x5d3: 0x0008, 0x5d4: 0x0008, 0x5d5: 0x0008, 0x5d6: 0x0008, 0x5d7: 0x0008,
+ 0x5d8: 0x0008, 0x5d9: 0x0008, 0x5da: 0x0008, 0x5db: 0x0008, 0x5dc: 0x0008, 0x5dd: 0x0008,
+ 0x5de: 0x0008, 0x5df: 0x0008, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x0008, 0x5e3: 0x0008,
+ 0x5e4: 0x0008, 0x5e5: 0x0008, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0040,
+ 0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008,
+ 0x5f0: 0x0008, 0x5f1: 0x0040, 0x5f2: 0x0008, 0x5f3: 0x0731, 0x5f4: 0x0040, 0x5f5: 0x0008,
+ 0x5f6: 0x0769, 0x5f7: 0x0040, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0040, 0x5fb: 0x0040,
+ 0x5fc: 0x1308, 0x5fd: 0x0040, 0x5fe: 0x1008, 0x5ff: 0x1008,
+ // Block 0x18, offset 0x600
+ 0x600: 0x1008, 0x601: 0x1308, 0x602: 0x1308, 0x603: 0x0040, 0x604: 0x0040, 0x605: 0x0040,
+ 0x606: 0x0040, 0x607: 0x1308, 0x608: 0x1308, 0x609: 0x0040, 0x60a: 0x0040, 0x60b: 0x1308,
+ 0x60c: 0x1308, 0x60d: 0x1b08, 0x60e: 0x0040, 0x60f: 0x0040, 0x610: 0x0040, 0x611: 0x1308,
+ 0x612: 0x0040, 0x613: 0x0040, 0x614: 0x0040, 0x615: 0x0040, 0x616: 0x0040, 0x617: 0x0040,
+ 0x618: 0x0040, 0x619: 0x07a1, 0x61a: 0x07d9, 0x61b: 0x0811, 0x61c: 0x0008, 0x61d: 0x0040,
+ 0x61e: 0x0849, 0x61f: 0x0040, 0x620: 0x0040, 0x621: 0x0040, 0x622: 0x0040, 0x623: 0x0040,
+ 0x624: 0x0040, 0x625: 0x0040, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0008,
+ 0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008,
+ 0x630: 0x1308, 0x631: 0x1308, 0x632: 0x0008, 0x633: 0x0008, 0x634: 0x0008, 0x635: 0x1308,
+ 0x636: 0x0040, 0x637: 0x0040, 0x638: 0x0040, 0x639: 0x0040, 0x63a: 0x0040, 0x63b: 0x0040,
+ 0x63c: 0x0040, 0x63d: 0x0040, 0x63e: 0x0040, 0x63f: 0x0040,
+ // Block 0x19, offset 0x640
+ 0x640: 0x0040, 0x641: 0x1308, 0x642: 0x1308, 0x643: 0x1008, 0x644: 0x0040, 0x645: 0x0008,
+ 0x646: 0x0008, 0x647: 0x0008, 0x648: 0x0008, 0x649: 0x0008, 0x64a: 0x0008, 0x64b: 0x0008,
+ 0x64c: 0x0008, 0x64d: 0x0008, 0x64e: 0x0040, 0x64f: 0x0008, 0x650: 0x0008, 0x651: 0x0008,
+ 0x652: 0x0040, 0x653: 0x0008, 0x654: 0x0008, 0x655: 0x0008, 0x656: 0x0008, 0x657: 0x0008,
+ 0x658: 0x0008, 0x659: 0x0008, 0x65a: 0x0008, 0x65b: 0x0008, 0x65c: 0x0008, 0x65d: 0x0008,
+ 0x65e: 0x0008, 0x65f: 0x0008, 0x660: 0x0008, 0x661: 0x0008, 0x662: 0x0008, 0x663: 0x0008,
+ 0x664: 0x0008, 0x665: 0x0008, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0040,
+ 0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008,
+ 0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x0008, 0x674: 0x0040, 0x675: 0x0008,
+ 0x676: 0x0008, 0x677: 0x0008, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040,
+ 0x67c: 0x1308, 0x67d: 0x0008, 0x67e: 0x1008, 0x67f: 0x1008,
+ // Block 0x1a, offset 0x680
+ 0x680: 0x1008, 0x681: 0x1308, 0x682: 0x1308, 0x683: 0x1308, 0x684: 0x1308, 0x685: 0x1308,
+ 0x686: 0x0040, 0x687: 0x1308, 0x688: 0x1308, 0x689: 0x1008, 0x68a: 0x0040, 0x68b: 0x1008,
+ 0x68c: 0x1008, 0x68d: 0x1b08, 0x68e: 0x0040, 0x68f: 0x0040, 0x690: 0x0008, 0x691: 0x0040,
+ 0x692: 0x0040, 0x693: 0x0040, 0x694: 0x0040, 0x695: 0x0040, 0x696: 0x0040, 0x697: 0x0040,
+ 0x698: 0x0040, 0x699: 0x0040, 0x69a: 0x0040, 0x69b: 0x0040, 0x69c: 0x0040, 0x69d: 0x0040,
+ 0x69e: 0x0040, 0x69f: 0x0040, 0x6a0: 0x0008, 0x6a1: 0x0008, 0x6a2: 0x1308, 0x6a3: 0x1308,
+ 0x6a4: 0x0040, 0x6a5: 0x0040, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0008,
+ 0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008,
+ 0x6b0: 0x0018, 0x6b1: 0x0018, 0x6b2: 0x0040, 0x6b3: 0x0040, 0x6b4: 0x0040, 0x6b5: 0x0040,
+ 0x6b6: 0x0040, 0x6b7: 0x0040, 0x6b8: 0x0040, 0x6b9: 0x0008, 0x6ba: 0x0040, 0x6bb: 0x0040,
+ 0x6bc: 0x0040, 0x6bd: 0x0040, 0x6be: 0x0040, 0x6bf: 0x0040,
+ // Block 0x1b, offset 0x6c0
+ 0x6c0: 0x0040, 0x6c1: 0x1308, 0x6c2: 0x1008, 0x6c3: 0x1008, 0x6c4: 0x0040, 0x6c5: 0x0008,
+ 0x6c6: 0x0008, 0x6c7: 0x0008, 0x6c8: 0x0008, 0x6c9: 0x0008, 0x6ca: 0x0008, 0x6cb: 0x0008,
+ 0x6cc: 0x0008, 0x6cd: 0x0040, 0x6ce: 0x0040, 0x6cf: 0x0008, 0x6d0: 0x0008, 0x6d1: 0x0040,
+ 0x6d2: 0x0040, 0x6d3: 0x0008, 0x6d4: 0x0008, 0x6d5: 0x0008, 0x6d6: 0x0008, 0x6d7: 0x0008,
+ 0x6d8: 0x0008, 0x6d9: 0x0008, 0x6da: 0x0008, 0x6db: 0x0008, 0x6dc: 0x0008, 0x6dd: 0x0008,
+ 0x6de: 0x0008, 0x6df: 0x0008, 0x6e0: 0x0008, 0x6e1: 0x0008, 0x6e2: 0x0008, 0x6e3: 0x0008,
+ 0x6e4: 0x0008, 0x6e5: 0x0008, 0x6e6: 0x0008, 0x6e7: 0x0008, 0x6e8: 0x0008, 0x6e9: 0x0040,
+ 0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008,
+ 0x6f0: 0x0008, 0x6f1: 0x0040, 0x6f2: 0x0008, 0x6f3: 0x0008, 0x6f4: 0x0040, 0x6f5: 0x0008,
+ 0x6f6: 0x0008, 0x6f7: 0x0008, 0x6f8: 0x0008, 0x6f9: 0x0008, 0x6fa: 0x0040, 0x6fb: 0x0040,
+ 0x6fc: 0x1308, 0x6fd: 0x0008, 0x6fe: 0x1008, 0x6ff: 0x1308,
+ // Block 0x1c, offset 0x700
+ 0x700: 0x1008, 0x701: 0x1308, 0x702: 0x1308, 0x703: 0x1308, 0x704: 0x1308, 0x705: 0x0040,
+ 0x706: 0x0040, 0x707: 0x1008, 0x708: 0x1008, 0x709: 0x0040, 0x70a: 0x0040, 0x70b: 0x1008,
+ 0x70c: 0x1008, 0x70d: 0x1b08, 0x70e: 0x0040, 0x70f: 0x0040, 0x710: 0x0040, 0x711: 0x0040,
+ 0x712: 0x0040, 0x713: 0x0040, 0x714: 0x0040, 0x715: 0x0040, 0x716: 0x1308, 0x717: 0x1008,
+ 0x718: 0x0040, 0x719: 0x0040, 0x71a: 0x0040, 0x71b: 0x0040, 0x71c: 0x0881, 0x71d: 0x08b9,
+ 0x71e: 0x0040, 0x71f: 0x0008, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x1308, 0x723: 0x1308,
+ 0x724: 0x0040, 0x725: 0x0040, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0008,
+ 0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008,
+ 0x730: 0x0018, 0x731: 0x0008, 0x732: 0x0018, 0x733: 0x0018, 0x734: 0x0018, 0x735: 0x0018,
+ 0x736: 0x0018, 0x737: 0x0018, 0x738: 0x0040, 0x739: 0x0040, 0x73a: 0x0040, 0x73b: 0x0040,
+ 0x73c: 0x0040, 0x73d: 0x0040, 0x73e: 0x0040, 0x73f: 0x0040,
+ // Block 0x1d, offset 0x740
+ 0x740: 0x0040, 0x741: 0x0040, 0x742: 0x1308, 0x743: 0x0008, 0x744: 0x0040, 0x745: 0x0008,
+ 0x746: 0x0008, 0x747: 0x0008, 0x748: 0x0008, 0x749: 0x0008, 0x74a: 0x0008, 0x74b: 0x0040,
+ 0x74c: 0x0040, 0x74d: 0x0040, 0x74e: 0x0008, 0x74f: 0x0008, 0x750: 0x0008, 0x751: 0x0040,
+ 0x752: 0x0008, 0x753: 0x0008, 0x754: 0x0008, 0x755: 0x0008, 0x756: 0x0040, 0x757: 0x0040,
+ 0x758: 0x0040, 0x759: 0x0008, 0x75a: 0x0008, 0x75b: 0x0040, 0x75c: 0x0008, 0x75d: 0x0040,
+ 0x75e: 0x0008, 0x75f: 0x0008, 0x760: 0x0040, 0x761: 0x0040, 0x762: 0x0040, 0x763: 0x0008,
+ 0x764: 0x0008, 0x765: 0x0040, 0x766: 0x0040, 0x767: 0x0040, 0x768: 0x0008, 0x769: 0x0008,
+ 0x76a: 0x0008, 0x76b: 0x0040, 0x76c: 0x0040, 0x76d: 0x0040, 0x76e: 0x0008, 0x76f: 0x0008,
+ 0x770: 0x0008, 0x771: 0x0008, 0x772: 0x0008, 0x773: 0x0008, 0x774: 0x0008, 0x775: 0x0008,
+ 0x776: 0x0008, 0x777: 0x0008, 0x778: 0x0008, 0x779: 0x0008, 0x77a: 0x0040, 0x77b: 0x0040,
+ 0x77c: 0x0040, 0x77d: 0x0040, 0x77e: 0x1008, 0x77f: 0x1008,
+ // Block 0x1e, offset 0x780
+ 0x780: 0x1308, 0x781: 0x1008, 0x782: 0x1008, 0x783: 0x1008, 0x784: 0x1008, 0x785: 0x0040,
+ 0x786: 0x1308, 0x787: 0x1308, 0x788: 0x1308, 0x789: 0x0040, 0x78a: 0x1308, 0x78b: 0x1308,
+ 0x78c: 0x1308, 0x78d: 0x1b08, 0x78e: 0x0040, 0x78f: 0x0040, 0x790: 0x0040, 0x791: 0x0040,
+ 0x792: 0x0040, 0x793: 0x0040, 0x794: 0x0040, 0x795: 0x1308, 0x796: 0x1308, 0x797: 0x0040,
+ 0x798: 0x0008, 0x799: 0x0008, 0x79a: 0x0008, 0x79b: 0x0040, 0x79c: 0x0040, 0x79d: 0x0040,
+ 0x79e: 0x0040, 0x79f: 0x0040, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x1308, 0x7a3: 0x1308,
+ 0x7a4: 0x0040, 0x7a5: 0x0040, 0x7a6: 0x0008, 0x7a7: 0x0008, 0x7a8: 0x0008, 0x7a9: 0x0008,
+ 0x7aa: 0x0008, 0x7ab: 0x0008, 0x7ac: 0x0008, 0x7ad: 0x0008, 0x7ae: 0x0008, 0x7af: 0x0008,
+ 0x7b0: 0x0040, 0x7b1: 0x0040, 0x7b2: 0x0040, 0x7b3: 0x0040, 0x7b4: 0x0040, 0x7b5: 0x0040,
+ 0x7b6: 0x0040, 0x7b7: 0x0040, 0x7b8: 0x0018, 0x7b9: 0x0018, 0x7ba: 0x0018, 0x7bb: 0x0018,
+ 0x7bc: 0x0018, 0x7bd: 0x0018, 0x7be: 0x0018, 0x7bf: 0x0018,
+ // Block 0x1f, offset 0x7c0
+ 0x7c0: 0x0008, 0x7c1: 0x1308, 0x7c2: 0x1008, 0x7c3: 0x1008, 0x7c4: 0x0040, 0x7c5: 0x0008,
+ 0x7c6: 0x0008, 0x7c7: 0x0008, 0x7c8: 0x0008, 0x7c9: 0x0008, 0x7ca: 0x0008, 0x7cb: 0x0008,
+ 0x7cc: 0x0008, 0x7cd: 0x0040, 0x7ce: 0x0008, 0x7cf: 0x0008, 0x7d0: 0x0008, 0x7d1: 0x0040,
+ 0x7d2: 0x0008, 0x7d3: 0x0008, 0x7d4: 0x0008, 0x7d5: 0x0008, 0x7d6: 0x0008, 0x7d7: 0x0008,
+ 0x7d8: 0x0008, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0008, 0x7dc: 0x0008, 0x7dd: 0x0008,
+ 0x7de: 0x0008, 0x7df: 0x0008, 0x7e0: 0x0008, 0x7e1: 0x0008, 0x7e2: 0x0008, 0x7e3: 0x0008,
+ 0x7e4: 0x0008, 0x7e5: 0x0008, 0x7e6: 0x0008, 0x7e7: 0x0008, 0x7e8: 0x0008, 0x7e9: 0x0040,
+ 0x7ea: 0x0008, 0x7eb: 0x0008, 0x7ec: 0x0008, 0x7ed: 0x0008, 0x7ee: 0x0008, 0x7ef: 0x0008,
+ 0x7f0: 0x0008, 0x7f1: 0x0008, 0x7f2: 0x0008, 0x7f3: 0x0008, 0x7f4: 0x0040, 0x7f5: 0x0008,
+ 0x7f6: 0x0008, 0x7f7: 0x0008, 0x7f8: 0x0008, 0x7f9: 0x0008, 0x7fa: 0x0040, 0x7fb: 0x0040,
+ 0x7fc: 0x1308, 0x7fd: 0x0008, 0x7fe: 0x1008, 0x7ff: 0x1308,
+ // Block 0x20, offset 0x800
+ 0x800: 0x1008, 0x801: 0x1008, 0x802: 0x1008, 0x803: 0x1008, 0x804: 0x1008, 0x805: 0x0040,
+ 0x806: 0x1308, 0x807: 0x1008, 0x808: 0x1008, 0x809: 0x0040, 0x80a: 0x1008, 0x80b: 0x1008,
+ 0x80c: 0x1308, 0x80d: 0x1b08, 0x80e: 0x0040, 0x80f: 0x0040, 0x810: 0x0040, 0x811: 0x0040,
+ 0x812: 0x0040, 0x813: 0x0040, 0x814: 0x0040, 0x815: 0x1008, 0x816: 0x1008, 0x817: 0x0040,
+ 0x818: 0x0040, 0x819: 0x0040, 0x81a: 0x0040, 0x81b: 0x0040, 0x81c: 0x0040, 0x81d: 0x0040,
+ 0x81e: 0x0008, 0x81f: 0x0040, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x1308, 0x823: 0x1308,
+ 0x824: 0x0040, 0x825: 0x0040, 0x826: 0x0008, 0x827: 0x0008, 0x828: 0x0008, 0x829: 0x0008,
+ 0x82a: 0x0008, 0x82b: 0x0008, 0x82c: 0x0008, 0x82d: 0x0008, 0x82e: 0x0008, 0x82f: 0x0008,
+ 0x830: 0x0040, 0x831: 0x0008, 0x832: 0x0008, 0x833: 0x0040, 0x834: 0x0040, 0x835: 0x0040,
+ 0x836: 0x0040, 0x837: 0x0040, 0x838: 0x0040, 0x839: 0x0040, 0x83a: 0x0040, 0x83b: 0x0040,
+ 0x83c: 0x0040, 0x83d: 0x0040, 0x83e: 0x0040, 0x83f: 0x0040,
+ // Block 0x21, offset 0x840
+ 0x840: 0x1008, 0x841: 0x1308, 0x842: 0x1308, 0x843: 0x1308, 0x844: 0x1308, 0x845: 0x0040,
+ 0x846: 0x1008, 0x847: 0x1008, 0x848: 0x1008, 0x849: 0x0040, 0x84a: 0x1008, 0x84b: 0x1008,
+ 0x84c: 0x1008, 0x84d: 0x1b08, 0x84e: 0x0008, 0x84f: 0x0018, 0x850: 0x0040, 0x851: 0x0040,
+ 0x852: 0x0040, 0x853: 0x0040, 0x854: 0x0008, 0x855: 0x0008, 0x856: 0x0008, 0x857: 0x1008,
+ 0x858: 0x0018, 0x859: 0x0018, 0x85a: 0x0018, 0x85b: 0x0018, 0x85c: 0x0018, 0x85d: 0x0018,
+ 0x85e: 0x0018, 0x85f: 0x0008, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x1308, 0x863: 0x1308,
+ 0x864: 0x0040, 0x865: 0x0040, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0008,
+ 0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008,
+ 0x870: 0x0018, 0x871: 0x0018, 0x872: 0x0018, 0x873: 0x0018, 0x874: 0x0018, 0x875: 0x0018,
+ 0x876: 0x0018, 0x877: 0x0018, 0x878: 0x0018, 0x879: 0x0018, 0x87a: 0x0008, 0x87b: 0x0008,
+ 0x87c: 0x0008, 0x87d: 0x0008, 0x87e: 0x0008, 0x87f: 0x0008,
+ // Block 0x22, offset 0x880
+ 0x880: 0x0040, 0x881: 0x0008, 0x882: 0x0008, 0x883: 0x0040, 0x884: 0x0008, 0x885: 0x0040,
+ 0x886: 0x0040, 0x887: 0x0008, 0x888: 0x0008, 0x889: 0x0040, 0x88a: 0x0008, 0x88b: 0x0040,
+ 0x88c: 0x0040, 0x88d: 0x0008, 0x88e: 0x0040, 0x88f: 0x0040, 0x890: 0x0040, 0x891: 0x0040,
+ 0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0008, 0x895: 0x0008, 0x896: 0x0008, 0x897: 0x0008,
+ 0x898: 0x0040, 0x899: 0x0008, 0x89a: 0x0008, 0x89b: 0x0008, 0x89c: 0x0008, 0x89d: 0x0008,
+ 0x89e: 0x0008, 0x89f: 0x0008, 0x8a0: 0x0040, 0x8a1: 0x0008, 0x8a2: 0x0008, 0x8a3: 0x0008,
+ 0x8a4: 0x0040, 0x8a5: 0x0008, 0x8a6: 0x0040, 0x8a7: 0x0008, 0x8a8: 0x0040, 0x8a9: 0x0040,
+ 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0040, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008,
+ 0x8b0: 0x0008, 0x8b1: 0x1308, 0x8b2: 0x0008, 0x8b3: 0x0929, 0x8b4: 0x1308, 0x8b5: 0x1308,
+ 0x8b6: 0x1308, 0x8b7: 0x1308, 0x8b8: 0x1308, 0x8b9: 0x1308, 0x8ba: 0x0040, 0x8bb: 0x1308,
+ 0x8bc: 0x1308, 0x8bd: 0x0008, 0x8be: 0x0040, 0x8bf: 0x0040,
+ // Block 0x23, offset 0x8c0
+ 0x8c0: 0x0008, 0x8c1: 0x0008, 0x8c2: 0x0008, 0x8c3: 0x09d1, 0x8c4: 0x0008, 0x8c5: 0x0008,
+ 0x8c6: 0x0008, 0x8c7: 0x0008, 0x8c8: 0x0040, 0x8c9: 0x0008, 0x8ca: 0x0008, 0x8cb: 0x0008,
+ 0x8cc: 0x0008, 0x8cd: 0x0a09, 0x8ce: 0x0008, 0x8cf: 0x0008, 0x8d0: 0x0008, 0x8d1: 0x0008,
+ 0x8d2: 0x0a41, 0x8d3: 0x0008, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x0a79,
+ 0x8d8: 0x0008, 0x8d9: 0x0008, 0x8da: 0x0008, 0x8db: 0x0008, 0x8dc: 0x0ab1, 0x8dd: 0x0008,
+ 0x8de: 0x0008, 0x8df: 0x0008, 0x8e0: 0x0008, 0x8e1: 0x0008, 0x8e2: 0x0008, 0x8e3: 0x0008,
+ 0x8e4: 0x0008, 0x8e5: 0x0008, 0x8e6: 0x0008, 0x8e7: 0x0008, 0x8e8: 0x0008, 0x8e9: 0x0ae9,
+ 0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0008, 0x8ed: 0x0040, 0x8ee: 0x0040, 0x8ef: 0x0040,
+ 0x8f0: 0x0040, 0x8f1: 0x1308, 0x8f2: 0x1308, 0x8f3: 0x0b21, 0x8f4: 0x1308, 0x8f5: 0x0b59,
+ 0x8f6: 0x0b91, 0x8f7: 0x0bc9, 0x8f8: 0x0c19, 0x8f9: 0x0c51, 0x8fa: 0x1308, 0x8fb: 0x1308,
+ 0x8fc: 0x1308, 0x8fd: 0x1308, 0x8fe: 0x1308, 0x8ff: 0x1008,
+ // Block 0x24, offset 0x900
+ 0x900: 0x1308, 0x901: 0x0ca1, 0x902: 0x1308, 0x903: 0x1308, 0x904: 0x1b08, 0x905: 0x0018,
+ 0x906: 0x1308, 0x907: 0x1308, 0x908: 0x0008, 0x909: 0x0008, 0x90a: 0x0008, 0x90b: 0x0008,
+ 0x90c: 0x0008, 0x90d: 0x1308, 0x90e: 0x1308, 0x90f: 0x1308, 0x910: 0x1308, 0x911: 0x1308,
+ 0x912: 0x1308, 0x913: 0x0cd9, 0x914: 0x1308, 0x915: 0x1308, 0x916: 0x1308, 0x917: 0x1308,
+ 0x918: 0x0040, 0x919: 0x1308, 0x91a: 0x1308, 0x91b: 0x1308, 0x91c: 0x1308, 0x91d: 0x0d11,
+ 0x91e: 0x1308, 0x91f: 0x1308, 0x920: 0x1308, 0x921: 0x1308, 0x922: 0x0d49, 0x923: 0x1308,
+ 0x924: 0x1308, 0x925: 0x1308, 0x926: 0x1308, 0x927: 0x0d81, 0x928: 0x1308, 0x929: 0x1308,
+ 0x92a: 0x1308, 0x92b: 0x1308, 0x92c: 0x0db9, 0x92d: 0x1308, 0x92e: 0x1308, 0x92f: 0x1308,
+ 0x930: 0x1308, 0x931: 0x1308, 0x932: 0x1308, 0x933: 0x1308, 0x934: 0x1308, 0x935: 0x1308,
+ 0x936: 0x1308, 0x937: 0x1308, 0x938: 0x1308, 0x939: 0x0df1, 0x93a: 0x1308, 0x93b: 0x1308,
+ 0x93c: 0x1308, 0x93d: 0x0040, 0x93e: 0x0018, 0x93f: 0x0018,
+ // Block 0x25, offset 0x940
+ 0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x0008, 0x944: 0x0008, 0x945: 0x0008,
+ 0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0008, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008,
+ 0x94c: 0x0008, 0x94d: 0x0008, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008,
+ 0x952: 0x0008, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0008,
+ 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0008, 0x95d: 0x0008,
+ 0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008,
+ 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0008,
+ 0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0039, 0x96d: 0x0ed1, 0x96e: 0x0ee9, 0x96f: 0x0008,
+ 0x970: 0x0ef9, 0x971: 0x0f09, 0x972: 0x0f19, 0x973: 0x0f31, 0x974: 0x0249, 0x975: 0x0f41,
+ 0x976: 0x0259, 0x977: 0x0f51, 0x978: 0x0359, 0x979: 0x0f61, 0x97a: 0x0f71, 0x97b: 0x0008,
+ 0x97c: 0x00d9, 0x97d: 0x0f81, 0x97e: 0x0f99, 0x97f: 0x0269,
+ // Block 0x26, offset 0x980
+ 0x980: 0x0fa9, 0x981: 0x0fb9, 0x982: 0x0279, 0x983: 0x0039, 0x984: 0x0fc9, 0x985: 0x0fe1,
+ 0x986: 0x059d, 0x987: 0x0ee9, 0x988: 0x0ef9, 0x989: 0x0f09, 0x98a: 0x0ff9, 0x98b: 0x1011,
+ 0x98c: 0x1029, 0x98d: 0x0f31, 0x98e: 0x0008, 0x98f: 0x0f51, 0x990: 0x0f61, 0x991: 0x1041,
+ 0x992: 0x00d9, 0x993: 0x1059, 0x994: 0x05b5, 0x995: 0x05b5, 0x996: 0x0f99, 0x997: 0x0fa9,
+ 0x998: 0x0fb9, 0x999: 0x059d, 0x99a: 0x1071, 0x99b: 0x1089, 0x99c: 0x05cd, 0x99d: 0x1099,
+ 0x99e: 0x10b1, 0x99f: 0x10c9, 0x9a0: 0x10e1, 0x9a1: 0x10f9, 0x9a2: 0x0f41, 0x9a3: 0x0269,
+ 0x9a4: 0x0fb9, 0x9a5: 0x1089, 0x9a6: 0x1099, 0x9a7: 0x10b1, 0x9a8: 0x1111, 0x9a9: 0x10e1,
+ 0x9aa: 0x10f9, 0x9ab: 0x0008, 0x9ac: 0x0008, 0x9ad: 0x0008, 0x9ae: 0x0008, 0x9af: 0x0008,
+ 0x9b0: 0x0008, 0x9b1: 0x0008, 0x9b2: 0x0008, 0x9b3: 0x0008, 0x9b4: 0x0008, 0x9b5: 0x0008,
+ 0x9b6: 0x0008, 0x9b7: 0x0008, 0x9b8: 0x1129, 0x9b9: 0x0008, 0x9ba: 0x0008, 0x9bb: 0x0008,
+ 0x9bc: 0x0008, 0x9bd: 0x0008, 0x9be: 0x0008, 0x9bf: 0x0008,
+ // Block 0x27, offset 0x9c0
+ 0x9c0: 0x0008, 0x9c1: 0x0008, 0x9c2: 0x0008, 0x9c3: 0x0008, 0x9c4: 0x0008, 0x9c5: 0x0008,
+ 0x9c6: 0x0008, 0x9c7: 0x0008, 0x9c8: 0x0008, 0x9c9: 0x0008, 0x9ca: 0x0008, 0x9cb: 0x0008,
+ 0x9cc: 0x0008, 0x9cd: 0x0008, 0x9ce: 0x0008, 0x9cf: 0x0008, 0x9d0: 0x0008, 0x9d1: 0x0008,
+ 0x9d2: 0x0008, 0x9d3: 0x0008, 0x9d4: 0x0008, 0x9d5: 0x0008, 0x9d6: 0x0008, 0x9d7: 0x0008,
+ 0x9d8: 0x0008, 0x9d9: 0x0008, 0x9da: 0x0008, 0x9db: 0x1141, 0x9dc: 0x1159, 0x9dd: 0x1169,
+ 0x9de: 0x1181, 0x9df: 0x1029, 0x9e0: 0x1199, 0x9e1: 0x11a9, 0x9e2: 0x11c1, 0x9e3: 0x11d9,
+ 0x9e4: 0x11f1, 0x9e5: 0x1209, 0x9e6: 0x1221, 0x9e7: 0x05e5, 0x9e8: 0x1239, 0x9e9: 0x1251,
+ 0x9ea: 0xe17d, 0x9eb: 0x1269, 0x9ec: 0x1281, 0x9ed: 0x1299, 0x9ee: 0x12b1, 0x9ef: 0x12c9,
+ 0x9f0: 0x12e1, 0x9f1: 0x12f9, 0x9f2: 0x1311, 0x9f3: 0x1329, 0x9f4: 0x1341, 0x9f5: 0x1359,
+ 0x9f6: 0x1371, 0x9f7: 0x1389, 0x9f8: 0x05fd, 0x9f9: 0x13a1, 0x9fa: 0x13b9, 0x9fb: 0x13d1,
+ 0x9fc: 0x13e1, 0x9fd: 0x13f9, 0x9fe: 0x1411, 0x9ff: 0x1429,
+ // Block 0x28, offset 0xa00
+ 0xa00: 0xe00d, 0xa01: 0x0008, 0xa02: 0xe00d, 0xa03: 0x0008, 0xa04: 0xe00d, 0xa05: 0x0008,
+ 0xa06: 0xe00d, 0xa07: 0x0008, 0xa08: 0xe00d, 0xa09: 0x0008, 0xa0a: 0xe00d, 0xa0b: 0x0008,
+ 0xa0c: 0xe00d, 0xa0d: 0x0008, 0xa0e: 0xe00d, 0xa0f: 0x0008, 0xa10: 0xe00d, 0xa11: 0x0008,
+ 0xa12: 0xe00d, 0xa13: 0x0008, 0xa14: 0xe00d, 0xa15: 0x0008, 0xa16: 0xe00d, 0xa17: 0x0008,
+ 0xa18: 0xe00d, 0xa19: 0x0008, 0xa1a: 0xe00d, 0xa1b: 0x0008, 0xa1c: 0xe00d, 0xa1d: 0x0008,
+ 0xa1e: 0xe00d, 0xa1f: 0x0008, 0xa20: 0xe00d, 0xa21: 0x0008, 0xa22: 0xe00d, 0xa23: 0x0008,
+ 0xa24: 0xe00d, 0xa25: 0x0008, 0xa26: 0xe00d, 0xa27: 0x0008, 0xa28: 0xe00d, 0xa29: 0x0008,
+ 0xa2a: 0xe00d, 0xa2b: 0x0008, 0xa2c: 0xe00d, 0xa2d: 0x0008, 0xa2e: 0xe00d, 0xa2f: 0x0008,
+ 0xa30: 0xe00d, 0xa31: 0x0008, 0xa32: 0xe00d, 0xa33: 0x0008, 0xa34: 0xe00d, 0xa35: 0x0008,
+ 0xa36: 0xe00d, 0xa37: 0x0008, 0xa38: 0xe00d, 0xa39: 0x0008, 0xa3a: 0xe00d, 0xa3b: 0x0008,
+ 0xa3c: 0xe00d, 0xa3d: 0x0008, 0xa3e: 0xe00d, 0xa3f: 0x0008,
+ // Block 0x29, offset 0xa40
+ 0xa40: 0xe00d, 0xa41: 0x0008, 0xa42: 0xe00d, 0xa43: 0x0008, 0xa44: 0xe00d, 0xa45: 0x0008,
+ 0xa46: 0xe00d, 0xa47: 0x0008, 0xa48: 0xe00d, 0xa49: 0x0008, 0xa4a: 0xe00d, 0xa4b: 0x0008,
+ 0xa4c: 0xe00d, 0xa4d: 0x0008, 0xa4e: 0xe00d, 0xa4f: 0x0008, 0xa50: 0xe00d, 0xa51: 0x0008,
+ 0xa52: 0xe00d, 0xa53: 0x0008, 0xa54: 0xe00d, 0xa55: 0x0008, 0xa56: 0x0008, 0xa57: 0x0008,
+ 0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0615, 0xa5b: 0x0635, 0xa5c: 0x0008, 0xa5d: 0x0008,
+ 0xa5e: 0x1441, 0xa5f: 0x0008, 0xa60: 0xe00d, 0xa61: 0x0008, 0xa62: 0xe00d, 0xa63: 0x0008,
+ 0xa64: 0xe00d, 0xa65: 0x0008, 0xa66: 0xe00d, 0xa67: 0x0008, 0xa68: 0xe00d, 0xa69: 0x0008,
+ 0xa6a: 0xe00d, 0xa6b: 0x0008, 0xa6c: 0xe00d, 0xa6d: 0x0008, 0xa6e: 0xe00d, 0xa6f: 0x0008,
+ 0xa70: 0xe00d, 0xa71: 0x0008, 0xa72: 0xe00d, 0xa73: 0x0008, 0xa74: 0xe00d, 0xa75: 0x0008,
+ 0xa76: 0xe00d, 0xa77: 0x0008, 0xa78: 0xe00d, 0xa79: 0x0008, 0xa7a: 0xe00d, 0xa7b: 0x0008,
+ 0xa7c: 0xe00d, 0xa7d: 0x0008, 0xa7e: 0xe00d, 0xa7f: 0x0008,
+ // Block 0x2a, offset 0xa80
+ 0xa80: 0x0008, 0xa81: 0x0008, 0xa82: 0x0008, 0xa83: 0x0008, 0xa84: 0x0008, 0xa85: 0x0008,
+ 0xa86: 0x0040, 0xa87: 0x0040, 0xa88: 0xe045, 0xa89: 0xe045, 0xa8a: 0xe045, 0xa8b: 0xe045,
+ 0xa8c: 0xe045, 0xa8d: 0xe045, 0xa8e: 0x0040, 0xa8f: 0x0040, 0xa90: 0x0008, 0xa91: 0x0008,
+ 0xa92: 0x0008, 0xa93: 0x0008, 0xa94: 0x0008, 0xa95: 0x0008, 0xa96: 0x0008, 0xa97: 0x0008,
+ 0xa98: 0x0040, 0xa99: 0xe045, 0xa9a: 0x0040, 0xa9b: 0xe045, 0xa9c: 0x0040, 0xa9d: 0xe045,
+ 0xa9e: 0x0040, 0xa9f: 0xe045, 0xaa0: 0x0008, 0xaa1: 0x0008, 0xaa2: 0x0008, 0xaa3: 0x0008,
+ 0xaa4: 0x0008, 0xaa5: 0x0008, 0xaa6: 0x0008, 0xaa7: 0x0008, 0xaa8: 0xe045, 0xaa9: 0xe045,
+ 0xaaa: 0xe045, 0xaab: 0xe045, 0xaac: 0xe045, 0xaad: 0xe045, 0xaae: 0xe045, 0xaaf: 0xe045,
+ 0xab0: 0x0008, 0xab1: 0x1459, 0xab2: 0x0008, 0xab3: 0x1471, 0xab4: 0x0008, 0xab5: 0x1489,
+ 0xab6: 0x0008, 0xab7: 0x14a1, 0xab8: 0x0008, 0xab9: 0x14b9, 0xaba: 0x0008, 0xabb: 0x14d1,
+ 0xabc: 0x0008, 0xabd: 0x14e9, 0xabe: 0x0040, 0xabf: 0x0040,
+ // Block 0x2b, offset 0xac0
+ 0xac0: 0x1501, 0xac1: 0x1531, 0xac2: 0x1561, 0xac3: 0x1591, 0xac4: 0x15c1, 0xac5: 0x15f1,
+ 0xac6: 0x1621, 0xac7: 0x1651, 0xac8: 0x1501, 0xac9: 0x1531, 0xaca: 0x1561, 0xacb: 0x1591,
+ 0xacc: 0x15c1, 0xacd: 0x15f1, 0xace: 0x1621, 0xacf: 0x1651, 0xad0: 0x1681, 0xad1: 0x16b1,
+ 0xad2: 0x16e1, 0xad3: 0x1711, 0xad4: 0x1741, 0xad5: 0x1771, 0xad6: 0x17a1, 0xad7: 0x17d1,
+ 0xad8: 0x1681, 0xad9: 0x16b1, 0xada: 0x16e1, 0xadb: 0x1711, 0xadc: 0x1741, 0xadd: 0x1771,
+ 0xade: 0x17a1, 0xadf: 0x17d1, 0xae0: 0x1801, 0xae1: 0x1831, 0xae2: 0x1861, 0xae3: 0x1891,
+ 0xae4: 0x18c1, 0xae5: 0x18f1, 0xae6: 0x1921, 0xae7: 0x1951, 0xae8: 0x1801, 0xae9: 0x1831,
+ 0xaea: 0x1861, 0xaeb: 0x1891, 0xaec: 0x18c1, 0xaed: 0x18f1, 0xaee: 0x1921, 0xaef: 0x1951,
+ 0xaf0: 0x0008, 0xaf1: 0x0008, 0xaf2: 0x1981, 0xaf3: 0x19b1, 0xaf4: 0x19d9, 0xaf5: 0x0040,
+ 0xaf6: 0x0008, 0xaf7: 0x1a01, 0xaf8: 0xe045, 0xaf9: 0xe045, 0xafa: 0x064d, 0xafb: 0x1459,
+ 0xafc: 0x19b1, 0xafd: 0x0666, 0xafe: 0x1a31, 0xaff: 0x0686,
+ // Block 0x2c, offset 0xb00
+ 0xb00: 0x06a6, 0xb01: 0x1a4a, 0xb02: 0x1a79, 0xb03: 0x1aa9, 0xb04: 0x1ad1, 0xb05: 0x0040,
+ 0xb06: 0x0008, 0xb07: 0x1af9, 0xb08: 0x06c5, 0xb09: 0x1471, 0xb0a: 0x06dd, 0xb0b: 0x1489,
+ 0xb0c: 0x1aa9, 0xb0d: 0x1b2a, 0xb0e: 0x1b5a, 0xb0f: 0x1b8a, 0xb10: 0x0008, 0xb11: 0x0008,
+ 0xb12: 0x0008, 0xb13: 0x1bb9, 0xb14: 0x0040, 0xb15: 0x0040, 0xb16: 0x0008, 0xb17: 0x0008,
+ 0xb18: 0xe045, 0xb19: 0xe045, 0xb1a: 0x06f5, 0xb1b: 0x14a1, 0xb1c: 0x0040, 0xb1d: 0x1bd2,
+ 0xb1e: 0x1c02, 0xb1f: 0x1c32, 0xb20: 0x0008, 0xb21: 0x0008, 0xb22: 0x0008, 0xb23: 0x1c61,
+ 0xb24: 0x0008, 0xb25: 0x0008, 0xb26: 0x0008, 0xb27: 0x0008, 0xb28: 0xe045, 0xb29: 0xe045,
+ 0xb2a: 0x070d, 0xb2b: 0x14d1, 0xb2c: 0xe04d, 0xb2d: 0x1c7a, 0xb2e: 0x03d2, 0xb2f: 0x1caa,
+ 0xb30: 0x0040, 0xb31: 0x0040, 0xb32: 0x1cb9, 0xb33: 0x1ce9, 0xb34: 0x1d11, 0xb35: 0x0040,
+ 0xb36: 0x0008, 0xb37: 0x1d39, 0xb38: 0x0725, 0xb39: 0x14b9, 0xb3a: 0x0515, 0xb3b: 0x14e9,
+ 0xb3c: 0x1ce9, 0xb3d: 0x073e, 0xb3e: 0x075e, 0xb3f: 0x0040,
+ // Block 0x2d, offset 0xb40
+ 0xb40: 0x000a, 0xb41: 0x000a, 0xb42: 0x000a, 0xb43: 0x000a, 0xb44: 0x000a, 0xb45: 0x000a,
+ 0xb46: 0x000a, 0xb47: 0x000a, 0xb48: 0x000a, 0xb49: 0x000a, 0xb4a: 0x000a, 0xb4b: 0x03c0,
+ 0xb4c: 0x0003, 0xb4d: 0x0003, 0xb4e: 0x0340, 0xb4f: 0x0340, 0xb50: 0x0018, 0xb51: 0xe00d,
+ 0xb52: 0x0018, 0xb53: 0x0018, 0xb54: 0x0018, 0xb55: 0x0018, 0xb56: 0x0018, 0xb57: 0x077e,
+ 0xb58: 0x0018, 0xb59: 0x0018, 0xb5a: 0x0018, 0xb5b: 0x0018, 0xb5c: 0x0018, 0xb5d: 0x0018,
+ 0xb5e: 0x0018, 0xb5f: 0x0018, 0xb60: 0x0018, 0xb61: 0x0018, 0xb62: 0x0018, 0xb63: 0x0018,
+ 0xb64: 0x0040, 0xb65: 0x0040, 0xb66: 0x0040, 0xb67: 0x0018, 0xb68: 0x0040, 0xb69: 0x0040,
+ 0xb6a: 0x0340, 0xb6b: 0x0340, 0xb6c: 0x0340, 0xb6d: 0x0340, 0xb6e: 0x0340, 0xb6f: 0x000a,
+ 0xb70: 0x0018, 0xb71: 0x0018, 0xb72: 0x0018, 0xb73: 0x1d69, 0xb74: 0x1da1, 0xb75: 0x0018,
+ 0xb76: 0x1df1, 0xb77: 0x1e29, 0xb78: 0x0018, 0xb79: 0x0018, 0xb7a: 0x0018, 0xb7b: 0x0018,
+ 0xb7c: 0x1e7a, 0xb7d: 0x0018, 0xb7e: 0x079e, 0xb7f: 0x0018,
+ // Block 0x2e, offset 0xb80
+ 0xb80: 0x0018, 0xb81: 0x0018, 0xb82: 0x0018, 0xb83: 0x0018, 0xb84: 0x0018, 0xb85: 0x0018,
+ 0xb86: 0x0018, 0xb87: 0x1e92, 0xb88: 0x1eaa, 0xb89: 0x1ec2, 0xb8a: 0x0018, 0xb8b: 0x0018,
+ 0xb8c: 0x0018, 0xb8d: 0x0018, 0xb8e: 0x0018, 0xb8f: 0x0018, 0xb90: 0x0018, 0xb91: 0x0018,
+ 0xb92: 0x0018, 0xb93: 0x0018, 0xb94: 0x0018, 0xb95: 0x0018, 0xb96: 0x0018, 0xb97: 0x1ed9,
+ 0xb98: 0x0018, 0xb99: 0x0018, 0xb9a: 0x0018, 0xb9b: 0x0018, 0xb9c: 0x0018, 0xb9d: 0x0018,
+ 0xb9e: 0x0018, 0xb9f: 0x000a, 0xba0: 0x03c0, 0xba1: 0x0340, 0xba2: 0x0340, 0xba3: 0x0340,
+ 0xba4: 0x03c0, 0xba5: 0x0040, 0xba6: 0x0040, 0xba7: 0x0040, 0xba8: 0x0040, 0xba9: 0x0040,
+ 0xbaa: 0x0340, 0xbab: 0x0340, 0xbac: 0x0340, 0xbad: 0x0340, 0xbae: 0x0340, 0xbaf: 0x0340,
+ 0xbb0: 0x1f41, 0xbb1: 0x0f41, 0xbb2: 0x0040, 0xbb3: 0x0040, 0xbb4: 0x1f51, 0xbb5: 0x1f61,
+ 0xbb6: 0x1f71, 0xbb7: 0x1f81, 0xbb8: 0x1f91, 0xbb9: 0x1fa1, 0xbba: 0x1fb2, 0xbbb: 0x07bd,
+ 0xbbc: 0x1fc2, 0xbbd: 0x1fd2, 0xbbe: 0x1fe2, 0xbbf: 0x0f71,
+ // Block 0x2f, offset 0xbc0
+ 0xbc0: 0x1f41, 0xbc1: 0x00c9, 0xbc2: 0x0069, 0xbc3: 0x0079, 0xbc4: 0x1f51, 0xbc5: 0x1f61,
+ 0xbc6: 0x1f71, 0xbc7: 0x1f81, 0xbc8: 0x1f91, 0xbc9: 0x1fa1, 0xbca: 0x1fb2, 0xbcb: 0x07d5,
+ 0xbcc: 0x1fc2, 0xbcd: 0x1fd2, 0xbce: 0x1fe2, 0xbcf: 0x0040, 0xbd0: 0x0039, 0xbd1: 0x0f09,
+ 0xbd2: 0x00d9, 0xbd3: 0x0369, 0xbd4: 0x0ff9, 0xbd5: 0x0249, 0xbd6: 0x0f51, 0xbd7: 0x0359,
+ 0xbd8: 0x0f61, 0xbd9: 0x0f71, 0xbda: 0x0f99, 0xbdb: 0x01d9, 0xbdc: 0x0fa9, 0xbdd: 0x0040,
+ 0xbde: 0x0040, 0xbdf: 0x0040, 0xbe0: 0x0018, 0xbe1: 0x0018, 0xbe2: 0x0018, 0xbe3: 0x0018,
+ 0xbe4: 0x0018, 0xbe5: 0x0018, 0xbe6: 0x0018, 0xbe7: 0x0018, 0xbe8: 0x1ff1, 0xbe9: 0x0018,
+ 0xbea: 0x0018, 0xbeb: 0x0018, 0xbec: 0x0018, 0xbed: 0x0018, 0xbee: 0x0018, 0xbef: 0x0018,
+ 0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x0018, 0xbf4: 0x0018, 0xbf5: 0x0018,
+ 0xbf6: 0x0018, 0xbf7: 0x0018, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018,
+ 0xbfc: 0x0018, 0xbfd: 0x0018, 0xbfe: 0x0018, 0xbff: 0x0040,
+ // Block 0x30, offset 0xc00
+ 0xc00: 0x07ee, 0xc01: 0x080e, 0xc02: 0x1159, 0xc03: 0x082d, 0xc04: 0x0018, 0xc05: 0x084e,
+ 0xc06: 0x086e, 0xc07: 0x1011, 0xc08: 0x0018, 0xc09: 0x088d, 0xc0a: 0x0f31, 0xc0b: 0x0249,
+ 0xc0c: 0x0249, 0xc0d: 0x0249, 0xc0e: 0x0249, 0xc0f: 0x2009, 0xc10: 0x0f41, 0xc11: 0x0f41,
+ 0xc12: 0x0359, 0xc13: 0x0359, 0xc14: 0x0018, 0xc15: 0x0f71, 0xc16: 0x2021, 0xc17: 0x0018,
+ 0xc18: 0x0018, 0xc19: 0x0f99, 0xc1a: 0x2039, 0xc1b: 0x0269, 0xc1c: 0x0269, 0xc1d: 0x0269,
+ 0xc1e: 0x0018, 0xc1f: 0x0018, 0xc20: 0x2049, 0xc21: 0x08ad, 0xc22: 0x2061, 0xc23: 0x0018,
+ 0xc24: 0x13d1, 0xc25: 0x0018, 0xc26: 0x2079, 0xc27: 0x0018, 0xc28: 0x13d1, 0xc29: 0x0018,
+ 0xc2a: 0x0f51, 0xc2b: 0x2091, 0xc2c: 0x0ee9, 0xc2d: 0x1159, 0xc2e: 0x0018, 0xc2f: 0x0f09,
+ 0xc30: 0x0f09, 0xc31: 0x1199, 0xc32: 0x0040, 0xc33: 0x0f61, 0xc34: 0x00d9, 0xc35: 0x20a9,
+ 0xc36: 0x20c1, 0xc37: 0x20d9, 0xc38: 0x20f1, 0xc39: 0x0f41, 0xc3a: 0x0018, 0xc3b: 0x08cd,
+ 0xc3c: 0x2109, 0xc3d: 0x10b1, 0xc3e: 0x10b1, 0xc3f: 0x2109,
+ // Block 0x31, offset 0xc40
+ 0xc40: 0x08ed, 0xc41: 0x0018, 0xc42: 0x0018, 0xc43: 0x0018, 0xc44: 0x0018, 0xc45: 0x0ef9,
+ 0xc46: 0x0ef9, 0xc47: 0x0f09, 0xc48: 0x0f41, 0xc49: 0x0259, 0xc4a: 0x0018, 0xc4b: 0x0018,
+ 0xc4c: 0x0018, 0xc4d: 0x0018, 0xc4e: 0x0008, 0xc4f: 0x0018, 0xc50: 0x2121, 0xc51: 0x2151,
+ 0xc52: 0x2181, 0xc53: 0x21b9, 0xc54: 0x21e9, 0xc55: 0x2219, 0xc56: 0x2249, 0xc57: 0x2279,
+ 0xc58: 0x22a9, 0xc59: 0x22d9, 0xc5a: 0x2309, 0xc5b: 0x2339, 0xc5c: 0x2369, 0xc5d: 0x2399,
+ 0xc5e: 0x23c9, 0xc5f: 0x23f9, 0xc60: 0x0f41, 0xc61: 0x2421, 0xc62: 0x0905, 0xc63: 0x2439,
+ 0xc64: 0x1089, 0xc65: 0x2451, 0xc66: 0x0925, 0xc67: 0x2469, 0xc68: 0x2491, 0xc69: 0x0369,
+ 0xc6a: 0x24a9, 0xc6b: 0x0945, 0xc6c: 0x0359, 0xc6d: 0x1159, 0xc6e: 0x0ef9, 0xc6f: 0x0f61,
+ 0xc70: 0x0f41, 0xc71: 0x2421, 0xc72: 0x0965, 0xc73: 0x2439, 0xc74: 0x1089, 0xc75: 0x2451,
+ 0xc76: 0x0985, 0xc77: 0x2469, 0xc78: 0x2491, 0xc79: 0x0369, 0xc7a: 0x24a9, 0xc7b: 0x09a5,
+ 0xc7c: 0x0359, 0xc7d: 0x1159, 0xc7e: 0x0ef9, 0xc7f: 0x0f61,
+ // Block 0x32, offset 0xc80
+ 0xc80: 0x0018, 0xc81: 0x0018, 0xc82: 0x0018, 0xc83: 0x0018, 0xc84: 0x0018, 0xc85: 0x0018,
+ 0xc86: 0x0018, 0xc87: 0x0018, 0xc88: 0x0018, 0xc89: 0x0018, 0xc8a: 0x0018, 0xc8b: 0x0040,
+ 0xc8c: 0x0040, 0xc8d: 0x0040, 0xc8e: 0x0040, 0xc8f: 0x0040, 0xc90: 0x0040, 0xc91: 0x0040,
+ 0xc92: 0x0040, 0xc93: 0x0040, 0xc94: 0x0040, 0xc95: 0x0040, 0xc96: 0x0040, 0xc97: 0x0040,
+ 0xc98: 0x0040, 0xc99: 0x0040, 0xc9a: 0x0040, 0xc9b: 0x0040, 0xc9c: 0x0040, 0xc9d: 0x0040,
+ 0xc9e: 0x0040, 0xc9f: 0x0040, 0xca0: 0x00c9, 0xca1: 0x0069, 0xca2: 0x0079, 0xca3: 0x1f51,
+ 0xca4: 0x1f61, 0xca5: 0x1f71, 0xca6: 0x1f81, 0xca7: 0x1f91, 0xca8: 0x1fa1, 0xca9: 0x2601,
+ 0xcaa: 0x2619, 0xcab: 0x2631, 0xcac: 0x2649, 0xcad: 0x2661, 0xcae: 0x2679, 0xcaf: 0x2691,
+ 0xcb0: 0x26a9, 0xcb1: 0x26c1, 0xcb2: 0x26d9, 0xcb3: 0x26f1, 0xcb4: 0x0a06, 0xcb5: 0x0a26,
+ 0xcb6: 0x0a46, 0xcb7: 0x0a66, 0xcb8: 0x0a86, 0xcb9: 0x0aa6, 0xcba: 0x0ac6, 0xcbb: 0x0ae6,
+ 0xcbc: 0x0b06, 0xcbd: 0x270a, 0xcbe: 0x2732, 0xcbf: 0x275a,
+ // Block 0x33, offset 0xcc0
+ 0xcc0: 0x2782, 0xcc1: 0x27aa, 0xcc2: 0x27d2, 0xcc3: 0x27fa, 0xcc4: 0x2822, 0xcc5: 0x284a,
+ 0xcc6: 0x2872, 0xcc7: 0x289a, 0xcc8: 0x0040, 0xcc9: 0x0040, 0xcca: 0x0040, 0xccb: 0x0040,
+ 0xccc: 0x0040, 0xccd: 0x0040, 0xcce: 0x0040, 0xccf: 0x0040, 0xcd0: 0x0040, 0xcd1: 0x0040,
+ 0xcd2: 0x0040, 0xcd3: 0x0040, 0xcd4: 0x0040, 0xcd5: 0x0040, 0xcd6: 0x0040, 0xcd7: 0x0040,
+ 0xcd8: 0x0040, 0xcd9: 0x0040, 0xcda: 0x0040, 0xcdb: 0x0040, 0xcdc: 0x0b26, 0xcdd: 0x0b46,
+ 0xcde: 0x0b66, 0xcdf: 0x0b86, 0xce0: 0x0ba6, 0xce1: 0x0bc6, 0xce2: 0x0be6, 0xce3: 0x0c06,
+ 0xce4: 0x0c26, 0xce5: 0x0c46, 0xce6: 0x0c66, 0xce7: 0x0c86, 0xce8: 0x0ca6, 0xce9: 0x0cc6,
+ 0xcea: 0x0ce6, 0xceb: 0x0d06, 0xcec: 0x0d26, 0xced: 0x0d46, 0xcee: 0x0d66, 0xcef: 0x0d86,
+ 0xcf0: 0x0da6, 0xcf1: 0x0dc6, 0xcf2: 0x0de6, 0xcf3: 0x0e06, 0xcf4: 0x0e26, 0xcf5: 0x0e46,
+ 0xcf6: 0x0039, 0xcf7: 0x0ee9, 0xcf8: 0x1159, 0xcf9: 0x0ef9, 0xcfa: 0x0f09, 0xcfb: 0x1199,
+ 0xcfc: 0x0f31, 0xcfd: 0x0249, 0xcfe: 0x0f41, 0xcff: 0x0259,
+ // Block 0x34, offset 0xd00
+ 0xd00: 0x0f51, 0xd01: 0x0359, 0xd02: 0x0f61, 0xd03: 0x0f71, 0xd04: 0x00d9, 0xd05: 0x0f99,
+ 0xd06: 0x2039, 0xd07: 0x0269, 0xd08: 0x01d9, 0xd09: 0x0fa9, 0xd0a: 0x0fb9, 0xd0b: 0x1089,
+ 0xd0c: 0x0279, 0xd0d: 0x0369, 0xd0e: 0x0289, 0xd0f: 0x13d1, 0xd10: 0x0039, 0xd11: 0x0ee9,
+ 0xd12: 0x1159, 0xd13: 0x0ef9, 0xd14: 0x0f09, 0xd15: 0x1199, 0xd16: 0x0f31, 0xd17: 0x0249,
+ 0xd18: 0x0f41, 0xd19: 0x0259, 0xd1a: 0x0f51, 0xd1b: 0x0359, 0xd1c: 0x0f61, 0xd1d: 0x0f71,
+ 0xd1e: 0x00d9, 0xd1f: 0x0f99, 0xd20: 0x2039, 0xd21: 0x0269, 0xd22: 0x01d9, 0xd23: 0x0fa9,
+ 0xd24: 0x0fb9, 0xd25: 0x1089, 0xd26: 0x0279, 0xd27: 0x0369, 0xd28: 0x0289, 0xd29: 0x13d1,
+ 0xd2a: 0x1f41, 0xd2b: 0x0018, 0xd2c: 0x0018, 0xd2d: 0x0018, 0xd2e: 0x0018, 0xd2f: 0x0018,
+ 0xd30: 0x0018, 0xd31: 0x0018, 0xd32: 0x0018, 0xd33: 0x0018, 0xd34: 0x0018, 0xd35: 0x0018,
+ 0xd36: 0x0018, 0xd37: 0x0018, 0xd38: 0x0018, 0xd39: 0x0018, 0xd3a: 0x0018, 0xd3b: 0x0018,
+ 0xd3c: 0x0018, 0xd3d: 0x0018, 0xd3e: 0x0018, 0xd3f: 0x0018,
+ // Block 0x35, offset 0xd40
+ 0xd40: 0x0008, 0xd41: 0x0008, 0xd42: 0x0008, 0xd43: 0x0008, 0xd44: 0x0008, 0xd45: 0x0008,
+ 0xd46: 0x0008, 0xd47: 0x0008, 0xd48: 0x0008, 0xd49: 0x0008, 0xd4a: 0x0008, 0xd4b: 0x0008,
+ 0xd4c: 0x0008, 0xd4d: 0x0008, 0xd4e: 0x0008, 0xd4f: 0x0008, 0xd50: 0x0008, 0xd51: 0x0008,
+ 0xd52: 0x0008, 0xd53: 0x0008, 0xd54: 0x0008, 0xd55: 0x0008, 0xd56: 0x0008, 0xd57: 0x0008,
+ 0xd58: 0x0008, 0xd59: 0x0008, 0xd5a: 0x0008, 0xd5b: 0x0008, 0xd5c: 0x0008, 0xd5d: 0x0008,
+ 0xd5e: 0x0008, 0xd5f: 0x0040, 0xd60: 0xe00d, 0xd61: 0x0008, 0xd62: 0x2971, 0xd63: 0x0ebd,
+ 0xd64: 0x2989, 0xd65: 0x0008, 0xd66: 0x0008, 0xd67: 0xe07d, 0xd68: 0x0008, 0xd69: 0xe01d,
+ 0xd6a: 0x0008, 0xd6b: 0xe03d, 0xd6c: 0x0008, 0xd6d: 0x0fe1, 0xd6e: 0x1281, 0xd6f: 0x0fc9,
+ 0xd70: 0x1141, 0xd71: 0x0008, 0xd72: 0xe00d, 0xd73: 0x0008, 0xd74: 0x0008, 0xd75: 0xe01d,
+ 0xd76: 0x0008, 0xd77: 0x0008, 0xd78: 0x0008, 0xd79: 0x0008, 0xd7a: 0x0008, 0xd7b: 0x0008,
+ 0xd7c: 0x0259, 0xd7d: 0x1089, 0xd7e: 0x29a1, 0xd7f: 0x29b9,
+ // Block 0x36, offset 0xd80
+ 0xd80: 0xe00d, 0xd81: 0x0008, 0xd82: 0xe00d, 0xd83: 0x0008, 0xd84: 0xe00d, 0xd85: 0x0008,
+ 0xd86: 0xe00d, 0xd87: 0x0008, 0xd88: 0xe00d, 0xd89: 0x0008, 0xd8a: 0xe00d, 0xd8b: 0x0008,
+ 0xd8c: 0xe00d, 0xd8d: 0x0008, 0xd8e: 0xe00d, 0xd8f: 0x0008, 0xd90: 0xe00d, 0xd91: 0x0008,
+ 0xd92: 0xe00d, 0xd93: 0x0008, 0xd94: 0xe00d, 0xd95: 0x0008, 0xd96: 0xe00d, 0xd97: 0x0008,
+ 0xd98: 0xe00d, 0xd99: 0x0008, 0xd9a: 0xe00d, 0xd9b: 0x0008, 0xd9c: 0xe00d, 0xd9d: 0x0008,
+ 0xd9e: 0xe00d, 0xd9f: 0x0008, 0xda0: 0xe00d, 0xda1: 0x0008, 0xda2: 0xe00d, 0xda3: 0x0008,
+ 0xda4: 0x0008, 0xda5: 0x0018, 0xda6: 0x0018, 0xda7: 0x0018, 0xda8: 0x0018, 0xda9: 0x0018,
+ 0xdaa: 0x0018, 0xdab: 0xe03d, 0xdac: 0x0008, 0xdad: 0xe01d, 0xdae: 0x0008, 0xdaf: 0x1308,
+ 0xdb0: 0x1308, 0xdb1: 0x1308, 0xdb2: 0xe00d, 0xdb3: 0x0008, 0xdb4: 0x0040, 0xdb5: 0x0040,
+ 0xdb6: 0x0040, 0xdb7: 0x0040, 0xdb8: 0x0040, 0xdb9: 0x0018, 0xdba: 0x0018, 0xdbb: 0x0018,
+ 0xdbc: 0x0018, 0xdbd: 0x0018, 0xdbe: 0x0018, 0xdbf: 0x0018,
+ // Block 0x37, offset 0xdc0
+ 0xdc0: 0x26fd, 0xdc1: 0x271d, 0xdc2: 0x273d, 0xdc3: 0x275d, 0xdc4: 0x277d, 0xdc5: 0x279d,
+ 0xdc6: 0x27bd, 0xdc7: 0x27dd, 0xdc8: 0x27fd, 0xdc9: 0x281d, 0xdca: 0x283d, 0xdcb: 0x285d,
+ 0xdcc: 0x287d, 0xdcd: 0x289d, 0xdce: 0x28bd, 0xdcf: 0x28dd, 0xdd0: 0x28fd, 0xdd1: 0x291d,
+ 0xdd2: 0x293d, 0xdd3: 0x295d, 0xdd4: 0x297d, 0xdd5: 0x299d, 0xdd6: 0x0040, 0xdd7: 0x0040,
+ 0xdd8: 0x0040, 0xdd9: 0x0040, 0xdda: 0x0040, 0xddb: 0x0040, 0xddc: 0x0040, 0xddd: 0x0040,
+ 0xdde: 0x0040, 0xddf: 0x0040, 0xde0: 0x0040, 0xde1: 0x0040, 0xde2: 0x0040, 0xde3: 0x0040,
+ 0xde4: 0x0040, 0xde5: 0x0040, 0xde6: 0x0040, 0xde7: 0x0040, 0xde8: 0x0040, 0xde9: 0x0040,
+ 0xdea: 0x0040, 0xdeb: 0x0040, 0xdec: 0x0040, 0xded: 0x0040, 0xdee: 0x0040, 0xdef: 0x0040,
+ 0xdf0: 0x0040, 0xdf1: 0x0040, 0xdf2: 0x0040, 0xdf3: 0x0040, 0xdf4: 0x0040, 0xdf5: 0x0040,
+ 0xdf6: 0x0040, 0xdf7: 0x0040, 0xdf8: 0x0040, 0xdf9: 0x0040, 0xdfa: 0x0040, 0xdfb: 0x0040,
+ 0xdfc: 0x0040, 0xdfd: 0x0040, 0xdfe: 0x0040, 0xdff: 0x0040,
+ // Block 0x38, offset 0xe00
+ 0xe00: 0x000a, 0xe01: 0x0018, 0xe02: 0x29d1, 0xe03: 0x0018, 0xe04: 0x0018, 0xe05: 0x0008,
+ 0xe06: 0x0008, 0xe07: 0x0008, 0xe08: 0x0018, 0xe09: 0x0018, 0xe0a: 0x0018, 0xe0b: 0x0018,
+ 0xe0c: 0x0018, 0xe0d: 0x0018, 0xe0e: 0x0018, 0xe0f: 0x0018, 0xe10: 0x0018, 0xe11: 0x0018,
+ 0xe12: 0x0018, 0xe13: 0x0018, 0xe14: 0x0018, 0xe15: 0x0018, 0xe16: 0x0018, 0xe17: 0x0018,
+ 0xe18: 0x0018, 0xe19: 0x0018, 0xe1a: 0x0018, 0xe1b: 0x0018, 0xe1c: 0x0018, 0xe1d: 0x0018,
+ 0xe1e: 0x0018, 0xe1f: 0x0018, 0xe20: 0x0018, 0xe21: 0x0018, 0xe22: 0x0018, 0xe23: 0x0018,
+ 0xe24: 0x0018, 0xe25: 0x0018, 0xe26: 0x0018, 0xe27: 0x0018, 0xe28: 0x0018, 0xe29: 0x0018,
+ 0xe2a: 0x1308, 0xe2b: 0x1308, 0xe2c: 0x1308, 0xe2d: 0x1308, 0xe2e: 0x1018, 0xe2f: 0x1018,
+ 0xe30: 0x0018, 0xe31: 0x0018, 0xe32: 0x0018, 0xe33: 0x0018, 0xe34: 0x0018, 0xe35: 0x0018,
+ 0xe36: 0xe125, 0xe37: 0x0018, 0xe38: 0x29bd, 0xe39: 0x29dd, 0xe3a: 0x29fd, 0xe3b: 0x0018,
+ 0xe3c: 0x0008, 0xe3d: 0x0018, 0xe3e: 0x0018, 0xe3f: 0x0018,
+ // Block 0x39, offset 0xe40
+ 0xe40: 0x2b3d, 0xe41: 0x2b5d, 0xe42: 0x2b7d, 0xe43: 0x2b9d, 0xe44: 0x2bbd, 0xe45: 0x2bdd,
+ 0xe46: 0x2bdd, 0xe47: 0x2bdd, 0xe48: 0x2bfd, 0xe49: 0x2bfd, 0xe4a: 0x2bfd, 0xe4b: 0x2bfd,
+ 0xe4c: 0x2c1d, 0xe4d: 0x2c1d, 0xe4e: 0x2c1d, 0xe4f: 0x2c3d, 0xe50: 0x2c5d, 0xe51: 0x2c5d,
+ 0xe52: 0x2a7d, 0xe53: 0x2a7d, 0xe54: 0x2c5d, 0xe55: 0x2c5d, 0xe56: 0x2c7d, 0xe57: 0x2c7d,
+ 0xe58: 0x2c5d, 0xe59: 0x2c5d, 0xe5a: 0x2a7d, 0xe5b: 0x2a7d, 0xe5c: 0x2c5d, 0xe5d: 0x2c5d,
+ 0xe5e: 0x2c3d, 0xe5f: 0x2c3d, 0xe60: 0x2c9d, 0xe61: 0x2c9d, 0xe62: 0x2cbd, 0xe63: 0x2cbd,
+ 0xe64: 0x0040, 0xe65: 0x2cdd, 0xe66: 0x2cfd, 0xe67: 0x2d1d, 0xe68: 0x2d1d, 0xe69: 0x2d3d,
+ 0xe6a: 0x2d5d, 0xe6b: 0x2d7d, 0xe6c: 0x2d9d, 0xe6d: 0x2dbd, 0xe6e: 0x2ddd, 0xe6f: 0x2dfd,
+ 0xe70: 0x2e1d, 0xe71: 0x2e3d, 0xe72: 0x2e3d, 0xe73: 0x2e5d, 0xe74: 0x2e7d, 0xe75: 0x2e7d,
+ 0xe76: 0x2e9d, 0xe77: 0x2ebd, 0xe78: 0x2e5d, 0xe79: 0x2edd, 0xe7a: 0x2efd, 0xe7b: 0x2edd,
+ 0xe7c: 0x2e5d, 0xe7d: 0x2f1d, 0xe7e: 0x2f3d, 0xe7f: 0x2f5d,
+ // Block 0x3a, offset 0xe80
+ 0xe80: 0x2f7d, 0xe81: 0x2f9d, 0xe82: 0x2cfd, 0xe83: 0x2cdd, 0xe84: 0x2fbd, 0xe85: 0x2fdd,
+ 0xe86: 0x2ffd, 0xe87: 0x301d, 0xe88: 0x303d, 0xe89: 0x305d, 0xe8a: 0x307d, 0xe8b: 0x309d,
+ 0xe8c: 0x30bd, 0xe8d: 0x30dd, 0xe8e: 0x30fd, 0xe8f: 0x0040, 0xe90: 0x0018, 0xe91: 0x0018,
+ 0xe92: 0x311d, 0xe93: 0x313d, 0xe94: 0x315d, 0xe95: 0x317d, 0xe96: 0x319d, 0xe97: 0x31bd,
+ 0xe98: 0x31dd, 0xe99: 0x31fd, 0xe9a: 0x321d, 0xe9b: 0x323d, 0xe9c: 0x315d, 0xe9d: 0x325d,
+ 0xe9e: 0x327d, 0xe9f: 0x329d, 0xea0: 0x0008, 0xea1: 0x0008, 0xea2: 0x0008, 0xea3: 0x0008,
+ 0xea4: 0x0008, 0xea5: 0x0008, 0xea6: 0x0008, 0xea7: 0x0008, 0xea8: 0x0008, 0xea9: 0x0008,
+ 0xeaa: 0x0008, 0xeab: 0x0008, 0xeac: 0x0008, 0xead: 0x0008, 0xeae: 0x0008, 0xeaf: 0x0008,
+ 0xeb0: 0x0008, 0xeb1: 0x0008, 0xeb2: 0x0008, 0xeb3: 0x0008, 0xeb4: 0x0008, 0xeb5: 0x0008,
+ 0xeb6: 0x0008, 0xeb7: 0x0008, 0xeb8: 0x0008, 0xeb9: 0x0008, 0xeba: 0x0008, 0xebb: 0x0040,
+ 0xebc: 0x0040, 0xebd: 0x0040, 0xebe: 0x0040, 0xebf: 0x0040,
+ // Block 0x3b, offset 0xec0
+ 0xec0: 0x36a2, 0xec1: 0x36d2, 0xec2: 0x3702, 0xec3: 0x3732, 0xec4: 0x32bd, 0xec5: 0x32dd,
+ 0xec6: 0x32fd, 0xec7: 0x331d, 0xec8: 0x0018, 0xec9: 0x0018, 0xeca: 0x0018, 0xecb: 0x0018,
+ 0xecc: 0x0018, 0xecd: 0x0018, 0xece: 0x0018, 0xecf: 0x0018, 0xed0: 0x333d, 0xed1: 0x3761,
+ 0xed2: 0x3779, 0xed3: 0x3791, 0xed4: 0x37a9, 0xed5: 0x37c1, 0xed6: 0x37d9, 0xed7: 0x37f1,
+ 0xed8: 0x3809, 0xed9: 0x3821, 0xeda: 0x3839, 0xedb: 0x3851, 0xedc: 0x3869, 0xedd: 0x3881,
+ 0xede: 0x3899, 0xedf: 0x38b1, 0xee0: 0x335d, 0xee1: 0x337d, 0xee2: 0x339d, 0xee3: 0x33bd,
+ 0xee4: 0x33dd, 0xee5: 0x33dd, 0xee6: 0x33fd, 0xee7: 0x341d, 0xee8: 0x343d, 0xee9: 0x345d,
+ 0xeea: 0x347d, 0xeeb: 0x349d, 0xeec: 0x34bd, 0xeed: 0x34dd, 0xeee: 0x34fd, 0xeef: 0x351d,
+ 0xef0: 0x353d, 0xef1: 0x355d, 0xef2: 0x357d, 0xef3: 0x359d, 0xef4: 0x35bd, 0xef5: 0x35dd,
+ 0xef6: 0x35fd, 0xef7: 0x361d, 0xef8: 0x363d, 0xef9: 0x365d, 0xefa: 0x367d, 0xefb: 0x369d,
+ 0xefc: 0x38c9, 0xefd: 0x3901, 0xefe: 0x36bd, 0xeff: 0x0018,
+ // Block 0x3c, offset 0xf00
+ 0xf00: 0x36dd, 0xf01: 0x36fd, 0xf02: 0x371d, 0xf03: 0x373d, 0xf04: 0x375d, 0xf05: 0x377d,
+ 0xf06: 0x379d, 0xf07: 0x37bd, 0xf08: 0x37dd, 0xf09: 0x37fd, 0xf0a: 0x381d, 0xf0b: 0x383d,
+ 0xf0c: 0x385d, 0xf0d: 0x387d, 0xf0e: 0x389d, 0xf0f: 0x38bd, 0xf10: 0x38dd, 0xf11: 0x38fd,
+ 0xf12: 0x391d, 0xf13: 0x393d, 0xf14: 0x395d, 0xf15: 0x397d, 0xf16: 0x399d, 0xf17: 0x39bd,
+ 0xf18: 0x39dd, 0xf19: 0x39fd, 0xf1a: 0x3a1d, 0xf1b: 0x3a3d, 0xf1c: 0x3a5d, 0xf1d: 0x3a7d,
+ 0xf1e: 0x3a9d, 0xf1f: 0x3abd, 0xf20: 0x3add, 0xf21: 0x3afd, 0xf22: 0x3b1d, 0xf23: 0x3b3d,
+ 0xf24: 0x3b5d, 0xf25: 0x3b7d, 0xf26: 0x127d, 0xf27: 0x3b9d, 0xf28: 0x3bbd, 0xf29: 0x3bdd,
+ 0xf2a: 0x3bfd, 0xf2b: 0x3c1d, 0xf2c: 0x3c3d, 0xf2d: 0x3c5d, 0xf2e: 0x239d, 0xf2f: 0x3c7d,
+ 0xf30: 0x3c9d, 0xf31: 0x3939, 0xf32: 0x3951, 0xf33: 0x3969, 0xf34: 0x3981, 0xf35: 0x3999,
+ 0xf36: 0x39b1, 0xf37: 0x39c9, 0xf38: 0x39e1, 0xf39: 0x39f9, 0xf3a: 0x3a11, 0xf3b: 0x3a29,
+ 0xf3c: 0x3a41, 0xf3d: 0x3a59, 0xf3e: 0x3a71, 0xf3f: 0x3a89,
+ // Block 0x3d, offset 0xf40
+ 0xf40: 0x3aa1, 0xf41: 0x3ac9, 0xf42: 0x3af1, 0xf43: 0x3b19, 0xf44: 0x3b41, 0xf45: 0x3b69,
+ 0xf46: 0x3b91, 0xf47: 0x3bb9, 0xf48: 0x3be1, 0xf49: 0x3c09, 0xf4a: 0x3c39, 0xf4b: 0x3c69,
+ 0xf4c: 0x3c99, 0xf4d: 0x3cbd, 0xf4e: 0x3cb1, 0xf4f: 0x3cdd, 0xf50: 0x3cfd, 0xf51: 0x3d15,
+ 0xf52: 0x3d2d, 0xf53: 0x3d45, 0xf54: 0x3d5d, 0xf55: 0x3d5d, 0xf56: 0x3d45, 0xf57: 0x3d75,
+ 0xf58: 0x07bd, 0xf59: 0x3d8d, 0xf5a: 0x3da5, 0xf5b: 0x3dbd, 0xf5c: 0x3dd5, 0xf5d: 0x3ded,
+ 0xf5e: 0x3e05, 0xf5f: 0x3e1d, 0xf60: 0x3e35, 0xf61: 0x3e4d, 0xf62: 0x3e65, 0xf63: 0x3e7d,
+ 0xf64: 0x3e95, 0xf65: 0x3e95, 0xf66: 0x3ead, 0xf67: 0x3ead, 0xf68: 0x3ec5, 0xf69: 0x3ec5,
+ 0xf6a: 0x3edd, 0xf6b: 0x3ef5, 0xf6c: 0x3f0d, 0xf6d: 0x3f25, 0xf6e: 0x3f3d, 0xf6f: 0x3f3d,
+ 0xf70: 0x3f55, 0xf71: 0x3f55, 0xf72: 0x3f55, 0xf73: 0x3f6d, 0xf74: 0x3f85, 0xf75: 0x3f9d,
+ 0xf76: 0x3fb5, 0xf77: 0x3f9d, 0xf78: 0x3fcd, 0xf79: 0x3fe5, 0xf7a: 0x3f6d, 0xf7b: 0x3ffd,
+ 0xf7c: 0x4015, 0xf7d: 0x4015, 0xf7e: 0x4015, 0xf7f: 0x0040,
+ // Block 0x3e, offset 0xf80
+ 0xf80: 0x3cc9, 0xf81: 0x3d31, 0xf82: 0x3d99, 0xf83: 0x3e01, 0xf84: 0x3e51, 0xf85: 0x3eb9,
+ 0xf86: 0x3f09, 0xf87: 0x3f59, 0xf88: 0x3fd9, 0xf89: 0x4041, 0xf8a: 0x4091, 0xf8b: 0x40e1,
+ 0xf8c: 0x4131, 0xf8d: 0x4199, 0xf8e: 0x4201, 0xf8f: 0x4251, 0xf90: 0x42a1, 0xf91: 0x42d9,
+ 0xf92: 0x4329, 0xf93: 0x4391, 0xf94: 0x43f9, 0xf95: 0x4431, 0xf96: 0x44b1, 0xf97: 0x4549,
+ 0xf98: 0x45c9, 0xf99: 0x4619, 0xf9a: 0x4699, 0xf9b: 0x4719, 0xf9c: 0x4781, 0xf9d: 0x47d1,
+ 0xf9e: 0x4821, 0xf9f: 0x4871, 0xfa0: 0x48d9, 0xfa1: 0x4959, 0xfa2: 0x49c1, 0xfa3: 0x4a11,
+ 0xfa4: 0x4a61, 0xfa5: 0x4ab1, 0xfa6: 0x4ae9, 0xfa7: 0x4b21, 0xfa8: 0x4b59, 0xfa9: 0x4b91,
+ 0xfaa: 0x4be1, 0xfab: 0x4c31, 0xfac: 0x4cb1, 0xfad: 0x4d01, 0xfae: 0x4d69, 0xfaf: 0x4de9,
+ 0xfb0: 0x4e39, 0xfb1: 0x4e71, 0xfb2: 0x4ea9, 0xfb3: 0x4f29, 0xfb4: 0x4f91, 0xfb5: 0x5011,
+ 0xfb6: 0x5061, 0xfb7: 0x50e1, 0xfb8: 0x5119, 0xfb9: 0x5169, 0xfba: 0x51b9, 0xfbb: 0x5209,
+ 0xfbc: 0x5259, 0xfbd: 0x52a9, 0xfbe: 0x5311, 0xfbf: 0x5361,
+ // Block 0x3f, offset 0xfc0
+ 0xfc0: 0x5399, 0xfc1: 0x53e9, 0xfc2: 0x5439, 0xfc3: 0x5489, 0xfc4: 0x54f1, 0xfc5: 0x5541,
+ 0xfc6: 0x5591, 0xfc7: 0x55e1, 0xfc8: 0x5661, 0xfc9: 0x56c9, 0xfca: 0x5701, 0xfcb: 0x5781,
+ 0xfcc: 0x57b9, 0xfcd: 0x5821, 0xfce: 0x5889, 0xfcf: 0x58d9, 0xfd0: 0x5929, 0xfd1: 0x5979,
+ 0xfd2: 0x59e1, 0xfd3: 0x5a19, 0xfd4: 0x5a69, 0xfd5: 0x5ad1, 0xfd6: 0x5b09, 0xfd7: 0x5b89,
+ 0xfd8: 0x5bd9, 0xfd9: 0x5c01, 0xfda: 0x5c29, 0xfdb: 0x5c51, 0xfdc: 0x5c79, 0xfdd: 0x5ca1,
+ 0xfde: 0x5cc9, 0xfdf: 0x5cf1, 0xfe0: 0x5d19, 0xfe1: 0x5d41, 0xfe2: 0x5d69, 0xfe3: 0x5d99,
+ 0xfe4: 0x5dc9, 0xfe5: 0x5df9, 0xfe6: 0x5e29, 0xfe7: 0x5e59, 0xfe8: 0x5e89, 0xfe9: 0x5eb9,
+ 0xfea: 0x5ee9, 0xfeb: 0x5f19, 0xfec: 0x5f49, 0xfed: 0x5f79, 0xfee: 0x5fa9, 0xfef: 0x5fd9,
+ 0xff0: 0x6009, 0xff1: 0x402d, 0xff2: 0x6039, 0xff3: 0x6051, 0xff4: 0x404d, 0xff5: 0x6069,
+ 0xff6: 0x6081, 0xff7: 0x6099, 0xff8: 0x406d, 0xff9: 0x406d, 0xffa: 0x60b1, 0xffb: 0x60c9,
+ 0xffc: 0x6101, 0xffd: 0x6139, 0xffe: 0x6171, 0xfff: 0x61a9,
+ // Block 0x40, offset 0x1000
+ 0x1000: 0x6211, 0x1001: 0x6229, 0x1002: 0x408d, 0x1003: 0x6241, 0x1004: 0x6259, 0x1005: 0x6271,
+ 0x1006: 0x6289, 0x1007: 0x62a1, 0x1008: 0x40ad, 0x1009: 0x62b9, 0x100a: 0x62e1, 0x100b: 0x62f9,
+ 0x100c: 0x40cd, 0x100d: 0x40cd, 0x100e: 0x6311, 0x100f: 0x6329, 0x1010: 0x6341, 0x1011: 0x40ed,
+ 0x1012: 0x410d, 0x1013: 0x412d, 0x1014: 0x414d, 0x1015: 0x416d, 0x1016: 0x6359, 0x1017: 0x6371,
+ 0x1018: 0x6389, 0x1019: 0x63a1, 0x101a: 0x63b9, 0x101b: 0x418d, 0x101c: 0x63d1, 0x101d: 0x63e9,
+ 0x101e: 0x6401, 0x101f: 0x41ad, 0x1020: 0x41cd, 0x1021: 0x6419, 0x1022: 0x41ed, 0x1023: 0x420d,
+ 0x1024: 0x422d, 0x1025: 0x6431, 0x1026: 0x424d, 0x1027: 0x6449, 0x1028: 0x6479, 0x1029: 0x6211,
+ 0x102a: 0x426d, 0x102b: 0x428d, 0x102c: 0x42ad, 0x102d: 0x42cd, 0x102e: 0x64b1, 0x102f: 0x64f1,
+ 0x1030: 0x6539, 0x1031: 0x6551, 0x1032: 0x42ed, 0x1033: 0x6569, 0x1034: 0x6581, 0x1035: 0x6599,
+ 0x1036: 0x430d, 0x1037: 0x65b1, 0x1038: 0x65c9, 0x1039: 0x65b1, 0x103a: 0x65e1, 0x103b: 0x65f9,
+ 0x103c: 0x432d, 0x103d: 0x6611, 0x103e: 0x6629, 0x103f: 0x6611,
+ // Block 0x41, offset 0x1040
+ 0x1040: 0x434d, 0x1041: 0x436d, 0x1042: 0x0040, 0x1043: 0x6641, 0x1044: 0x6659, 0x1045: 0x6671,
+ 0x1046: 0x6689, 0x1047: 0x0040, 0x1048: 0x66c1, 0x1049: 0x66d9, 0x104a: 0x66f1, 0x104b: 0x6709,
+ 0x104c: 0x6721, 0x104d: 0x6739, 0x104e: 0x6401, 0x104f: 0x6751, 0x1050: 0x6769, 0x1051: 0x6781,
+ 0x1052: 0x438d, 0x1053: 0x6799, 0x1054: 0x6289, 0x1055: 0x43ad, 0x1056: 0x43cd, 0x1057: 0x67b1,
+ 0x1058: 0x0040, 0x1059: 0x43ed, 0x105a: 0x67c9, 0x105b: 0x67e1, 0x105c: 0x67f9, 0x105d: 0x6811,
+ 0x105e: 0x6829, 0x105f: 0x6859, 0x1060: 0x6889, 0x1061: 0x68b1, 0x1062: 0x68d9, 0x1063: 0x6901,
+ 0x1064: 0x6929, 0x1065: 0x6951, 0x1066: 0x6979, 0x1067: 0x69a1, 0x1068: 0x69c9, 0x1069: 0x69f1,
+ 0x106a: 0x6a21, 0x106b: 0x6a51, 0x106c: 0x6a81, 0x106d: 0x6ab1, 0x106e: 0x6ae1, 0x106f: 0x6b11,
+ 0x1070: 0x6b41, 0x1071: 0x6b71, 0x1072: 0x6ba1, 0x1073: 0x6bd1, 0x1074: 0x6c01, 0x1075: 0x6c31,
+ 0x1076: 0x6c61, 0x1077: 0x6c91, 0x1078: 0x6cc1, 0x1079: 0x6cf1, 0x107a: 0x6d21, 0x107b: 0x6d51,
+ 0x107c: 0x6d81, 0x107d: 0x6db1, 0x107e: 0x6de1, 0x107f: 0x440d,
+ // Block 0x42, offset 0x1080
+ 0x1080: 0xe00d, 0x1081: 0x0008, 0x1082: 0xe00d, 0x1083: 0x0008, 0x1084: 0xe00d, 0x1085: 0x0008,
+ 0x1086: 0xe00d, 0x1087: 0x0008, 0x1088: 0xe00d, 0x1089: 0x0008, 0x108a: 0xe00d, 0x108b: 0x0008,
+ 0x108c: 0xe00d, 0x108d: 0x0008, 0x108e: 0xe00d, 0x108f: 0x0008, 0x1090: 0xe00d, 0x1091: 0x0008,
+ 0x1092: 0xe00d, 0x1093: 0x0008, 0x1094: 0xe00d, 0x1095: 0x0008, 0x1096: 0xe00d, 0x1097: 0x0008,
+ 0x1098: 0xe00d, 0x1099: 0x0008, 0x109a: 0xe00d, 0x109b: 0x0008, 0x109c: 0xe00d, 0x109d: 0x0008,
+ 0x109e: 0xe00d, 0x109f: 0x0008, 0x10a0: 0xe00d, 0x10a1: 0x0008, 0x10a2: 0xe00d, 0x10a3: 0x0008,
+ 0x10a4: 0xe00d, 0x10a5: 0x0008, 0x10a6: 0xe00d, 0x10a7: 0x0008, 0x10a8: 0xe00d, 0x10a9: 0x0008,
+ 0x10aa: 0xe00d, 0x10ab: 0x0008, 0x10ac: 0xe00d, 0x10ad: 0x0008, 0x10ae: 0x0008, 0x10af: 0x1308,
+ 0x10b0: 0x1318, 0x10b1: 0x1318, 0x10b2: 0x1318, 0x10b3: 0x0018, 0x10b4: 0x1308, 0x10b5: 0x1308,
+ 0x10b6: 0x1308, 0x10b7: 0x1308, 0x10b8: 0x1308, 0x10b9: 0x1308, 0x10ba: 0x1308, 0x10bb: 0x1308,
+ 0x10bc: 0x1308, 0x10bd: 0x1308, 0x10be: 0x0018, 0x10bf: 0x0008,
+ // Block 0x43, offset 0x10c0
+ 0x10c0: 0xe00d, 0x10c1: 0x0008, 0x10c2: 0xe00d, 0x10c3: 0x0008, 0x10c4: 0xe00d, 0x10c5: 0x0008,
+ 0x10c6: 0xe00d, 0x10c7: 0x0008, 0x10c8: 0xe00d, 0x10c9: 0x0008, 0x10ca: 0xe00d, 0x10cb: 0x0008,
+ 0x10cc: 0xe00d, 0x10cd: 0x0008, 0x10ce: 0xe00d, 0x10cf: 0x0008, 0x10d0: 0xe00d, 0x10d1: 0x0008,
+ 0x10d2: 0xe00d, 0x10d3: 0x0008, 0x10d4: 0xe00d, 0x10d5: 0x0008, 0x10d6: 0xe00d, 0x10d7: 0x0008,
+ 0x10d8: 0xe00d, 0x10d9: 0x0008, 0x10da: 0xe00d, 0x10db: 0x0008, 0x10dc: 0x0ea1, 0x10dd: 0x6e11,
+ 0x10de: 0x1308, 0x10df: 0x1308, 0x10e0: 0x0008, 0x10e1: 0x0008, 0x10e2: 0x0008, 0x10e3: 0x0008,
+ 0x10e4: 0x0008, 0x10e5: 0x0008, 0x10e6: 0x0008, 0x10e7: 0x0008, 0x10e8: 0x0008, 0x10e9: 0x0008,
+ 0x10ea: 0x0008, 0x10eb: 0x0008, 0x10ec: 0x0008, 0x10ed: 0x0008, 0x10ee: 0x0008, 0x10ef: 0x0008,
+ 0x10f0: 0x0008, 0x10f1: 0x0008, 0x10f2: 0x0008, 0x10f3: 0x0008, 0x10f4: 0x0008, 0x10f5: 0x0008,
+ 0x10f6: 0x0008, 0x10f7: 0x0008, 0x10f8: 0x0008, 0x10f9: 0x0008, 0x10fa: 0x0008, 0x10fb: 0x0008,
+ 0x10fc: 0x0008, 0x10fd: 0x0008, 0x10fe: 0x0008, 0x10ff: 0x0008,
+ // Block 0x44, offset 0x1100
+ 0x1100: 0x0018, 0x1101: 0x0018, 0x1102: 0x0018, 0x1103: 0x0018, 0x1104: 0x0018, 0x1105: 0x0018,
+ 0x1106: 0x0018, 0x1107: 0x0018, 0x1108: 0x0018, 0x1109: 0x0018, 0x110a: 0x0018, 0x110b: 0x0018,
+ 0x110c: 0x0018, 0x110d: 0x0018, 0x110e: 0x0018, 0x110f: 0x0018, 0x1110: 0x0018, 0x1111: 0x0018,
+ 0x1112: 0x0018, 0x1113: 0x0018, 0x1114: 0x0018, 0x1115: 0x0018, 0x1116: 0x0018, 0x1117: 0x0008,
+ 0x1118: 0x0008, 0x1119: 0x0008, 0x111a: 0x0008, 0x111b: 0x0008, 0x111c: 0x0008, 0x111d: 0x0008,
+ 0x111e: 0x0008, 0x111f: 0x0008, 0x1120: 0x0018, 0x1121: 0x0018, 0x1122: 0xe00d, 0x1123: 0x0008,
+ 0x1124: 0xe00d, 0x1125: 0x0008, 0x1126: 0xe00d, 0x1127: 0x0008, 0x1128: 0xe00d, 0x1129: 0x0008,
+ 0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0xe00d, 0x112f: 0x0008,
+ 0x1130: 0x0008, 0x1131: 0x0008, 0x1132: 0xe00d, 0x1133: 0x0008, 0x1134: 0xe00d, 0x1135: 0x0008,
+ 0x1136: 0xe00d, 0x1137: 0x0008, 0x1138: 0xe00d, 0x1139: 0x0008, 0x113a: 0xe00d, 0x113b: 0x0008,
+ 0x113c: 0xe00d, 0x113d: 0x0008, 0x113e: 0xe00d, 0x113f: 0x0008,
+ // Block 0x45, offset 0x1140
+ 0x1140: 0xe00d, 0x1141: 0x0008, 0x1142: 0xe00d, 0x1143: 0x0008, 0x1144: 0xe00d, 0x1145: 0x0008,
+ 0x1146: 0xe00d, 0x1147: 0x0008, 0x1148: 0xe00d, 0x1149: 0x0008, 0x114a: 0xe00d, 0x114b: 0x0008,
+ 0x114c: 0xe00d, 0x114d: 0x0008, 0x114e: 0xe00d, 0x114f: 0x0008, 0x1150: 0xe00d, 0x1151: 0x0008,
+ 0x1152: 0xe00d, 0x1153: 0x0008, 0x1154: 0xe00d, 0x1155: 0x0008, 0x1156: 0xe00d, 0x1157: 0x0008,
+ 0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0xe00d, 0x115d: 0x0008,
+ 0x115e: 0xe00d, 0x115f: 0x0008, 0x1160: 0xe00d, 0x1161: 0x0008, 0x1162: 0xe00d, 0x1163: 0x0008,
+ 0x1164: 0xe00d, 0x1165: 0x0008, 0x1166: 0xe00d, 0x1167: 0x0008, 0x1168: 0xe00d, 0x1169: 0x0008,
+ 0x116a: 0xe00d, 0x116b: 0x0008, 0x116c: 0xe00d, 0x116d: 0x0008, 0x116e: 0xe00d, 0x116f: 0x0008,
+ 0x1170: 0xe0fd, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008,
+ 0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0xe01d, 0x117a: 0x0008, 0x117b: 0xe03d,
+ 0x117c: 0x0008, 0x117d: 0x442d, 0x117e: 0xe00d, 0x117f: 0x0008,
+ // Block 0x46, offset 0x1180
+ 0x1180: 0xe00d, 0x1181: 0x0008, 0x1182: 0xe00d, 0x1183: 0x0008, 0x1184: 0xe00d, 0x1185: 0x0008,
+ 0x1186: 0xe00d, 0x1187: 0x0008, 0x1188: 0x0008, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0xe03d,
+ 0x118c: 0x0008, 0x118d: 0x11d9, 0x118e: 0x0008, 0x118f: 0x0008, 0x1190: 0xe00d, 0x1191: 0x0008,
+ 0x1192: 0xe00d, 0x1193: 0x0008, 0x1194: 0x0008, 0x1195: 0x0008, 0x1196: 0xe00d, 0x1197: 0x0008,
+ 0x1198: 0xe00d, 0x1199: 0x0008, 0x119a: 0xe00d, 0x119b: 0x0008, 0x119c: 0xe00d, 0x119d: 0x0008,
+ 0x119e: 0xe00d, 0x119f: 0x0008, 0x11a0: 0xe00d, 0x11a1: 0x0008, 0x11a2: 0xe00d, 0x11a3: 0x0008,
+ 0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008,
+ 0x11aa: 0x6e29, 0x11ab: 0x1029, 0x11ac: 0x11c1, 0x11ad: 0x6e41, 0x11ae: 0x1221, 0x11af: 0x0040,
+ 0x11b0: 0x6e59, 0x11b1: 0x6e71, 0x11b2: 0x1239, 0x11b3: 0x444d, 0x11b4: 0xe00d, 0x11b5: 0x0008,
+ 0x11b6: 0xe00d, 0x11b7: 0x0008, 0x11b8: 0x0040, 0x11b9: 0x0040, 0x11ba: 0x0040, 0x11bb: 0x0040,
+ 0x11bc: 0x0040, 0x11bd: 0x0040, 0x11be: 0x0040, 0x11bf: 0x0040,
+ // Block 0x47, offset 0x11c0
+ 0x11c0: 0x64d5, 0x11c1: 0x64f5, 0x11c2: 0x6515, 0x11c3: 0x6535, 0x11c4: 0x6555, 0x11c5: 0x6575,
+ 0x11c6: 0x6595, 0x11c7: 0x65b5, 0x11c8: 0x65d5, 0x11c9: 0x65f5, 0x11ca: 0x6615, 0x11cb: 0x6635,
+ 0x11cc: 0x6655, 0x11cd: 0x6675, 0x11ce: 0x0008, 0x11cf: 0x0008, 0x11d0: 0x6695, 0x11d1: 0x0008,
+ 0x11d2: 0x66b5, 0x11d3: 0x0008, 0x11d4: 0x0008, 0x11d5: 0x66d5, 0x11d6: 0x66f5, 0x11d7: 0x6715,
+ 0x11d8: 0x6735, 0x11d9: 0x6755, 0x11da: 0x6775, 0x11db: 0x6795, 0x11dc: 0x67b5, 0x11dd: 0x67d5,
+ 0x11de: 0x67f5, 0x11df: 0x0008, 0x11e0: 0x6815, 0x11e1: 0x0008, 0x11e2: 0x6835, 0x11e3: 0x0008,
+ 0x11e4: 0x0008, 0x11e5: 0x6855, 0x11e6: 0x6875, 0x11e7: 0x0008, 0x11e8: 0x0008, 0x11e9: 0x0008,
+ 0x11ea: 0x6895, 0x11eb: 0x68b5, 0x11ec: 0x68d5, 0x11ed: 0x68f5, 0x11ee: 0x6915, 0x11ef: 0x6935,
+ 0x11f0: 0x6955, 0x11f1: 0x6975, 0x11f2: 0x6995, 0x11f3: 0x69b5, 0x11f4: 0x69d5, 0x11f5: 0x69f5,
+ 0x11f6: 0x6a15, 0x11f7: 0x6a35, 0x11f8: 0x6a55, 0x11f9: 0x6a75, 0x11fa: 0x6a95, 0x11fb: 0x6ab5,
+ 0x11fc: 0x6ad5, 0x11fd: 0x6af5, 0x11fe: 0x6b15, 0x11ff: 0x6b35,
+ // Block 0x48, offset 0x1200
+ 0x1200: 0x7a95, 0x1201: 0x7ab5, 0x1202: 0x7ad5, 0x1203: 0x7af5, 0x1204: 0x7b15, 0x1205: 0x7b35,
+ 0x1206: 0x7b55, 0x1207: 0x7b75, 0x1208: 0x7b95, 0x1209: 0x7bb5, 0x120a: 0x7bd5, 0x120b: 0x7bf5,
+ 0x120c: 0x7c15, 0x120d: 0x7c35, 0x120e: 0x7c55, 0x120f: 0x6ec9, 0x1210: 0x6ef1, 0x1211: 0x6f19,
+ 0x1212: 0x7c75, 0x1213: 0x7c95, 0x1214: 0x7cb5, 0x1215: 0x6f41, 0x1216: 0x6f69, 0x1217: 0x6f91,
+ 0x1218: 0x7cd5, 0x1219: 0x7cf5, 0x121a: 0x0040, 0x121b: 0x0040, 0x121c: 0x0040, 0x121d: 0x0040,
+ 0x121e: 0x0040, 0x121f: 0x0040, 0x1220: 0x0040, 0x1221: 0x0040, 0x1222: 0x0040, 0x1223: 0x0040,
+ 0x1224: 0x0040, 0x1225: 0x0040, 0x1226: 0x0040, 0x1227: 0x0040, 0x1228: 0x0040, 0x1229: 0x0040,
+ 0x122a: 0x0040, 0x122b: 0x0040, 0x122c: 0x0040, 0x122d: 0x0040, 0x122e: 0x0040, 0x122f: 0x0040,
+ 0x1230: 0x0040, 0x1231: 0x0040, 0x1232: 0x0040, 0x1233: 0x0040, 0x1234: 0x0040, 0x1235: 0x0040,
+ 0x1236: 0x0040, 0x1237: 0x0040, 0x1238: 0x0040, 0x1239: 0x0040, 0x123a: 0x0040, 0x123b: 0x0040,
+ 0x123c: 0x0040, 0x123d: 0x0040, 0x123e: 0x0040, 0x123f: 0x0040,
+ // Block 0x49, offset 0x1240
+ 0x1240: 0x6fb9, 0x1241: 0x6fd1, 0x1242: 0x6fe9, 0x1243: 0x7d15, 0x1244: 0x7d35, 0x1245: 0x7001,
+ 0x1246: 0x7001, 0x1247: 0x0040, 0x1248: 0x0040, 0x1249: 0x0040, 0x124a: 0x0040, 0x124b: 0x0040,
+ 0x124c: 0x0040, 0x124d: 0x0040, 0x124e: 0x0040, 0x124f: 0x0040, 0x1250: 0x0040, 0x1251: 0x0040,
+ 0x1252: 0x0040, 0x1253: 0x7019, 0x1254: 0x7041, 0x1255: 0x7069, 0x1256: 0x7091, 0x1257: 0x70b9,
+ 0x1258: 0x0040, 0x1259: 0x0040, 0x125a: 0x0040, 0x125b: 0x0040, 0x125c: 0x0040, 0x125d: 0x70e1,
+ 0x125e: 0x1308, 0x125f: 0x7109, 0x1260: 0x7131, 0x1261: 0x20a9, 0x1262: 0x20f1, 0x1263: 0x7149,
+ 0x1264: 0x7161, 0x1265: 0x7179, 0x1266: 0x7191, 0x1267: 0x71a9, 0x1268: 0x71c1, 0x1269: 0x1fb2,
+ 0x126a: 0x71d9, 0x126b: 0x7201, 0x126c: 0x7229, 0x126d: 0x7261, 0x126e: 0x7299, 0x126f: 0x72c1,
+ 0x1270: 0x72e9, 0x1271: 0x7311, 0x1272: 0x7339, 0x1273: 0x7361, 0x1274: 0x7389, 0x1275: 0x73b1,
+ 0x1276: 0x73d9, 0x1277: 0x0040, 0x1278: 0x7401, 0x1279: 0x7429, 0x127a: 0x7451, 0x127b: 0x7479,
+ 0x127c: 0x74a1, 0x127d: 0x0040, 0x127e: 0x74c9, 0x127f: 0x0040,
+ // Block 0x4a, offset 0x1280
+ 0x1280: 0x74f1, 0x1281: 0x7519, 0x1282: 0x0040, 0x1283: 0x7541, 0x1284: 0x7569, 0x1285: 0x0040,
+ 0x1286: 0x7591, 0x1287: 0x75b9, 0x1288: 0x75e1, 0x1289: 0x7609, 0x128a: 0x7631, 0x128b: 0x7659,
+ 0x128c: 0x7681, 0x128d: 0x76a9, 0x128e: 0x76d1, 0x128f: 0x76f9, 0x1290: 0x7721, 0x1291: 0x7721,
+ 0x1292: 0x7739, 0x1293: 0x7739, 0x1294: 0x7739, 0x1295: 0x7739, 0x1296: 0x7751, 0x1297: 0x7751,
+ 0x1298: 0x7751, 0x1299: 0x7751, 0x129a: 0x7769, 0x129b: 0x7769, 0x129c: 0x7769, 0x129d: 0x7769,
+ 0x129e: 0x7781, 0x129f: 0x7781, 0x12a0: 0x7781, 0x12a1: 0x7781, 0x12a2: 0x7799, 0x12a3: 0x7799,
+ 0x12a4: 0x7799, 0x12a5: 0x7799, 0x12a6: 0x77b1, 0x12a7: 0x77b1, 0x12a8: 0x77b1, 0x12a9: 0x77b1,
+ 0x12aa: 0x77c9, 0x12ab: 0x77c9, 0x12ac: 0x77c9, 0x12ad: 0x77c9, 0x12ae: 0x77e1, 0x12af: 0x77e1,
+ 0x12b0: 0x77e1, 0x12b1: 0x77e1, 0x12b2: 0x77f9, 0x12b3: 0x77f9, 0x12b4: 0x77f9, 0x12b5: 0x77f9,
+ 0x12b6: 0x7811, 0x12b7: 0x7811, 0x12b8: 0x7811, 0x12b9: 0x7811, 0x12ba: 0x7829, 0x12bb: 0x7829,
+ 0x12bc: 0x7829, 0x12bd: 0x7829, 0x12be: 0x7841, 0x12bf: 0x7841,
+ // Block 0x4b, offset 0x12c0
+ 0x12c0: 0x7841, 0x12c1: 0x7841, 0x12c2: 0x7859, 0x12c3: 0x7859, 0x12c4: 0x7871, 0x12c5: 0x7871,
+ 0x12c6: 0x7889, 0x12c7: 0x7889, 0x12c8: 0x78a1, 0x12c9: 0x78a1, 0x12ca: 0x78b9, 0x12cb: 0x78b9,
+ 0x12cc: 0x78d1, 0x12cd: 0x78d1, 0x12ce: 0x78e9, 0x12cf: 0x78e9, 0x12d0: 0x78e9, 0x12d1: 0x78e9,
+ 0x12d2: 0x7901, 0x12d3: 0x7901, 0x12d4: 0x7901, 0x12d5: 0x7901, 0x12d6: 0x7919, 0x12d7: 0x7919,
+ 0x12d8: 0x7919, 0x12d9: 0x7919, 0x12da: 0x7931, 0x12db: 0x7931, 0x12dc: 0x7931, 0x12dd: 0x7931,
+ 0x12de: 0x7949, 0x12df: 0x7949, 0x12e0: 0x7961, 0x12e1: 0x7961, 0x12e2: 0x7961, 0x12e3: 0x7961,
+ 0x12e4: 0x7979, 0x12e5: 0x7979, 0x12e6: 0x7991, 0x12e7: 0x7991, 0x12e8: 0x7991, 0x12e9: 0x7991,
+ 0x12ea: 0x79a9, 0x12eb: 0x79a9, 0x12ec: 0x79a9, 0x12ed: 0x79a9, 0x12ee: 0x79c1, 0x12ef: 0x79c1,
+ 0x12f0: 0x79d9, 0x12f1: 0x79d9, 0x12f2: 0x0018, 0x12f3: 0x0018, 0x12f4: 0x0018, 0x12f5: 0x0018,
+ 0x12f6: 0x0018, 0x12f7: 0x0018, 0x12f8: 0x0018, 0x12f9: 0x0018, 0x12fa: 0x0018, 0x12fb: 0x0018,
+ 0x12fc: 0x0018, 0x12fd: 0x0018, 0x12fe: 0x0018, 0x12ff: 0x0018,
+ // Block 0x4c, offset 0x1300
+ 0x1300: 0x0018, 0x1301: 0x0018, 0x1302: 0x0040, 0x1303: 0x0040, 0x1304: 0x0040, 0x1305: 0x0040,
+ 0x1306: 0x0040, 0x1307: 0x0040, 0x1308: 0x0040, 0x1309: 0x0040, 0x130a: 0x0040, 0x130b: 0x0040,
+ 0x130c: 0x0040, 0x130d: 0x0040, 0x130e: 0x0040, 0x130f: 0x0040, 0x1310: 0x0040, 0x1311: 0x0040,
+ 0x1312: 0x0040, 0x1313: 0x79f1, 0x1314: 0x79f1, 0x1315: 0x79f1, 0x1316: 0x79f1, 0x1317: 0x7a09,
+ 0x1318: 0x7a09, 0x1319: 0x7a21, 0x131a: 0x7a21, 0x131b: 0x7a39, 0x131c: 0x7a39, 0x131d: 0x0479,
+ 0x131e: 0x7a51, 0x131f: 0x7a51, 0x1320: 0x7a69, 0x1321: 0x7a69, 0x1322: 0x7a81, 0x1323: 0x7a81,
+ 0x1324: 0x7a99, 0x1325: 0x7a99, 0x1326: 0x7a99, 0x1327: 0x7a99, 0x1328: 0x7ab1, 0x1329: 0x7ab1,
+ 0x132a: 0x7ac9, 0x132b: 0x7ac9, 0x132c: 0x7af1, 0x132d: 0x7af1, 0x132e: 0x7b19, 0x132f: 0x7b19,
+ 0x1330: 0x7b41, 0x1331: 0x7b41, 0x1332: 0x7b69, 0x1333: 0x7b69, 0x1334: 0x7b91, 0x1335: 0x7b91,
+ 0x1336: 0x7bb9, 0x1337: 0x7bb9, 0x1338: 0x7bb9, 0x1339: 0x7be1, 0x133a: 0x7be1, 0x133b: 0x7be1,
+ 0x133c: 0x7c09, 0x133d: 0x7c09, 0x133e: 0x7c09, 0x133f: 0x7c09,
+ // Block 0x4d, offset 0x1340
+ 0x1340: 0x85f9, 0x1341: 0x8621, 0x1342: 0x8649, 0x1343: 0x8671, 0x1344: 0x8699, 0x1345: 0x86c1,
+ 0x1346: 0x86e9, 0x1347: 0x8711, 0x1348: 0x8739, 0x1349: 0x8761, 0x134a: 0x8789, 0x134b: 0x87b1,
+ 0x134c: 0x87d9, 0x134d: 0x8801, 0x134e: 0x8829, 0x134f: 0x8851, 0x1350: 0x8879, 0x1351: 0x88a1,
+ 0x1352: 0x88c9, 0x1353: 0x88f1, 0x1354: 0x8919, 0x1355: 0x8941, 0x1356: 0x8969, 0x1357: 0x8991,
+ 0x1358: 0x89b9, 0x1359: 0x89e1, 0x135a: 0x8a09, 0x135b: 0x8a31, 0x135c: 0x8a59, 0x135d: 0x8a81,
+ 0x135e: 0x8aaa, 0x135f: 0x8ada, 0x1360: 0x8b0a, 0x1361: 0x8b3a, 0x1362: 0x8b6a, 0x1363: 0x8b9a,
+ 0x1364: 0x8bc9, 0x1365: 0x8bf1, 0x1366: 0x7c71, 0x1367: 0x8c19, 0x1368: 0x7be1, 0x1369: 0x7c99,
+ 0x136a: 0x8c41, 0x136b: 0x8c69, 0x136c: 0x7d39, 0x136d: 0x8c91, 0x136e: 0x7d61, 0x136f: 0x7d89,
+ 0x1370: 0x8cb9, 0x1371: 0x8ce1, 0x1372: 0x7e29, 0x1373: 0x8d09, 0x1374: 0x7e51, 0x1375: 0x7e79,
+ 0x1376: 0x8d31, 0x1377: 0x8d59, 0x1378: 0x7ec9, 0x1379: 0x8d81, 0x137a: 0x7ef1, 0x137b: 0x7f19,
+ 0x137c: 0x83a1, 0x137d: 0x83c9, 0x137e: 0x8441, 0x137f: 0x8469,
+ // Block 0x4e, offset 0x1380
+ 0x1380: 0x8491, 0x1381: 0x8531, 0x1382: 0x8559, 0x1383: 0x8581, 0x1384: 0x85a9, 0x1385: 0x8649,
+ 0x1386: 0x8671, 0x1387: 0x8699, 0x1388: 0x8da9, 0x1389: 0x8739, 0x138a: 0x8dd1, 0x138b: 0x8df9,
+ 0x138c: 0x8829, 0x138d: 0x8e21, 0x138e: 0x8851, 0x138f: 0x8879, 0x1390: 0x8a81, 0x1391: 0x8e49,
+ 0x1392: 0x8e71, 0x1393: 0x89b9, 0x1394: 0x8e99, 0x1395: 0x89e1, 0x1396: 0x8a09, 0x1397: 0x7c21,
+ 0x1398: 0x7c49, 0x1399: 0x8ec1, 0x139a: 0x7c71, 0x139b: 0x8ee9, 0x139c: 0x7cc1, 0x139d: 0x7ce9,
+ 0x139e: 0x7d11, 0x139f: 0x7d39, 0x13a0: 0x8f11, 0x13a1: 0x7db1, 0x13a2: 0x7dd9, 0x13a3: 0x7e01,
+ 0x13a4: 0x7e29, 0x13a5: 0x8f39, 0x13a6: 0x7ec9, 0x13a7: 0x7f41, 0x13a8: 0x7f69, 0x13a9: 0x7f91,
+ 0x13aa: 0x7fb9, 0x13ab: 0x7fe1, 0x13ac: 0x8031, 0x13ad: 0x8059, 0x13ae: 0x8081, 0x13af: 0x80a9,
+ 0x13b0: 0x80d1, 0x13b1: 0x80f9, 0x13b2: 0x8f61, 0x13b3: 0x8121, 0x13b4: 0x8149, 0x13b5: 0x8171,
+ 0x13b6: 0x8199, 0x13b7: 0x81c1, 0x13b8: 0x81e9, 0x13b9: 0x8239, 0x13ba: 0x8261, 0x13bb: 0x8289,
+ 0x13bc: 0x82b1, 0x13bd: 0x82d9, 0x13be: 0x8301, 0x13bf: 0x8329,
+ // Block 0x4f, offset 0x13c0
+ 0x13c0: 0x8351, 0x13c1: 0x8379, 0x13c2: 0x83f1, 0x13c3: 0x8419, 0x13c4: 0x84b9, 0x13c5: 0x84e1,
+ 0x13c6: 0x8509, 0x13c7: 0x8531, 0x13c8: 0x8559, 0x13c9: 0x85d1, 0x13ca: 0x85f9, 0x13cb: 0x8621,
+ 0x13cc: 0x8649, 0x13cd: 0x8f89, 0x13ce: 0x86c1, 0x13cf: 0x86e9, 0x13d0: 0x8711, 0x13d1: 0x8739,
+ 0x13d2: 0x87b1, 0x13d3: 0x87d9, 0x13d4: 0x8801, 0x13d5: 0x8829, 0x13d6: 0x8fb1, 0x13d7: 0x88a1,
+ 0x13d8: 0x88c9, 0x13d9: 0x8fd9, 0x13da: 0x8941, 0x13db: 0x8969, 0x13dc: 0x8991, 0x13dd: 0x89b9,
+ 0x13de: 0x9001, 0x13df: 0x7c71, 0x13e0: 0x8ee9, 0x13e1: 0x7d39, 0x13e2: 0x8f11, 0x13e3: 0x7e29,
+ 0x13e4: 0x8f39, 0x13e5: 0x7ec9, 0x13e6: 0x9029, 0x13e7: 0x80d1, 0x13e8: 0x9051, 0x13e9: 0x9079,
+ 0x13ea: 0x90a1, 0x13eb: 0x8531, 0x13ec: 0x8559, 0x13ed: 0x8649, 0x13ee: 0x8829, 0x13ef: 0x8fb1,
+ 0x13f0: 0x89b9, 0x13f1: 0x9001, 0x13f2: 0x90c9, 0x13f3: 0x9101, 0x13f4: 0x9139, 0x13f5: 0x9171,
+ 0x13f6: 0x9199, 0x13f7: 0x91c1, 0x13f8: 0x91e9, 0x13f9: 0x9211, 0x13fa: 0x9239, 0x13fb: 0x9261,
+ 0x13fc: 0x9289, 0x13fd: 0x92b1, 0x13fe: 0x92d9, 0x13ff: 0x9301,
+ // Block 0x50, offset 0x1400
+ 0x1400: 0x9329, 0x1401: 0x9351, 0x1402: 0x9379, 0x1403: 0x93a1, 0x1404: 0x93c9, 0x1405: 0x93f1,
+ 0x1406: 0x9419, 0x1407: 0x9441, 0x1408: 0x9469, 0x1409: 0x9491, 0x140a: 0x94b9, 0x140b: 0x94e1,
+ 0x140c: 0x9079, 0x140d: 0x9509, 0x140e: 0x9531, 0x140f: 0x9559, 0x1410: 0x9581, 0x1411: 0x9171,
+ 0x1412: 0x9199, 0x1413: 0x91c1, 0x1414: 0x91e9, 0x1415: 0x9211, 0x1416: 0x9239, 0x1417: 0x9261,
+ 0x1418: 0x9289, 0x1419: 0x92b1, 0x141a: 0x92d9, 0x141b: 0x9301, 0x141c: 0x9329, 0x141d: 0x9351,
+ 0x141e: 0x9379, 0x141f: 0x93a1, 0x1420: 0x93c9, 0x1421: 0x93f1, 0x1422: 0x9419, 0x1423: 0x9441,
+ 0x1424: 0x9469, 0x1425: 0x9491, 0x1426: 0x94b9, 0x1427: 0x94e1, 0x1428: 0x9079, 0x1429: 0x9509,
+ 0x142a: 0x9531, 0x142b: 0x9559, 0x142c: 0x9581, 0x142d: 0x9491, 0x142e: 0x94b9, 0x142f: 0x94e1,
+ 0x1430: 0x9079, 0x1431: 0x9051, 0x1432: 0x90a1, 0x1433: 0x8211, 0x1434: 0x8059, 0x1435: 0x8081,
+ 0x1436: 0x80a9, 0x1437: 0x9491, 0x1438: 0x94b9, 0x1439: 0x94e1, 0x143a: 0x8211, 0x143b: 0x8239,
+ 0x143c: 0x95a9, 0x143d: 0x95a9, 0x143e: 0x0018, 0x143f: 0x0018,
+ // Block 0x51, offset 0x1440
+ 0x1440: 0x0040, 0x1441: 0x0040, 0x1442: 0x0040, 0x1443: 0x0040, 0x1444: 0x0040, 0x1445: 0x0040,
+ 0x1446: 0x0040, 0x1447: 0x0040, 0x1448: 0x0040, 0x1449: 0x0040, 0x144a: 0x0040, 0x144b: 0x0040,
+ 0x144c: 0x0040, 0x144d: 0x0040, 0x144e: 0x0040, 0x144f: 0x0040, 0x1450: 0x95d1, 0x1451: 0x9609,
+ 0x1452: 0x9609, 0x1453: 0x9641, 0x1454: 0x9679, 0x1455: 0x96b1, 0x1456: 0x96e9, 0x1457: 0x9721,
+ 0x1458: 0x9759, 0x1459: 0x9759, 0x145a: 0x9791, 0x145b: 0x97c9, 0x145c: 0x9801, 0x145d: 0x9839,
+ 0x145e: 0x9871, 0x145f: 0x98a9, 0x1460: 0x98a9, 0x1461: 0x98e1, 0x1462: 0x9919, 0x1463: 0x9919,
+ 0x1464: 0x9951, 0x1465: 0x9951, 0x1466: 0x9989, 0x1467: 0x99c1, 0x1468: 0x99c1, 0x1469: 0x99f9,
+ 0x146a: 0x9a31, 0x146b: 0x9a31, 0x146c: 0x9a69, 0x146d: 0x9a69, 0x146e: 0x9aa1, 0x146f: 0x9ad9,
+ 0x1470: 0x9ad9, 0x1471: 0x9b11, 0x1472: 0x9b11, 0x1473: 0x9b49, 0x1474: 0x9b81, 0x1475: 0x9bb9,
+ 0x1476: 0x9bf1, 0x1477: 0x9bf1, 0x1478: 0x9c29, 0x1479: 0x9c61, 0x147a: 0x9c99, 0x147b: 0x9cd1,
+ 0x147c: 0x9d09, 0x147d: 0x9d09, 0x147e: 0x9d41, 0x147f: 0x9d79,
+ // Block 0x52, offset 0x1480
+ 0x1480: 0xa949, 0x1481: 0xa981, 0x1482: 0xa9b9, 0x1483: 0xa8a1, 0x1484: 0x9bb9, 0x1485: 0x9989,
+ 0x1486: 0xa9f1, 0x1487: 0xaa29, 0x1488: 0x0040, 0x1489: 0x0040, 0x148a: 0x0040, 0x148b: 0x0040,
+ 0x148c: 0x0040, 0x148d: 0x0040, 0x148e: 0x0040, 0x148f: 0x0040, 0x1490: 0x0040, 0x1491: 0x0040,
+ 0x1492: 0x0040, 0x1493: 0x0040, 0x1494: 0x0040, 0x1495: 0x0040, 0x1496: 0x0040, 0x1497: 0x0040,
+ 0x1498: 0x0040, 0x1499: 0x0040, 0x149a: 0x0040, 0x149b: 0x0040, 0x149c: 0x0040, 0x149d: 0x0040,
+ 0x149e: 0x0040, 0x149f: 0x0040, 0x14a0: 0x0040, 0x14a1: 0x0040, 0x14a2: 0x0040, 0x14a3: 0x0040,
+ 0x14a4: 0x0040, 0x14a5: 0x0040, 0x14a6: 0x0040, 0x14a7: 0x0040, 0x14a8: 0x0040, 0x14a9: 0x0040,
+ 0x14aa: 0x0040, 0x14ab: 0x0040, 0x14ac: 0x0040, 0x14ad: 0x0040, 0x14ae: 0x0040, 0x14af: 0x0040,
+ 0x14b0: 0xaa61, 0x14b1: 0xaa99, 0x14b2: 0xaad1, 0x14b3: 0xab19, 0x14b4: 0xab61, 0x14b5: 0xaba9,
+ 0x14b6: 0xabf1, 0x14b7: 0xac39, 0x14b8: 0xac81, 0x14b9: 0xacc9, 0x14ba: 0xad02, 0x14bb: 0xae12,
+ 0x14bc: 0xae91, 0x14bd: 0x0018, 0x14be: 0x0040, 0x14bf: 0x0040,
+ // Block 0x53, offset 0x14c0
+ 0x14c0: 0x13c0, 0x14c1: 0x13c0, 0x14c2: 0x13c0, 0x14c3: 0x13c0, 0x14c4: 0x13c0, 0x14c5: 0x13c0,
+ 0x14c6: 0x13c0, 0x14c7: 0x13c0, 0x14c8: 0x13c0, 0x14c9: 0x13c0, 0x14ca: 0x13c0, 0x14cb: 0x13c0,
+ 0x14cc: 0x13c0, 0x14cd: 0x13c0, 0x14ce: 0x13c0, 0x14cf: 0x13c0, 0x14d0: 0xaeda, 0x14d1: 0x7d55,
+ 0x14d2: 0x0040, 0x14d3: 0xaeea, 0x14d4: 0x03c2, 0x14d5: 0xaefa, 0x14d6: 0xaf0a, 0x14d7: 0x7d75,
+ 0x14d8: 0x7d95, 0x14d9: 0x0040, 0x14da: 0x0040, 0x14db: 0x0040, 0x14dc: 0x0040, 0x14dd: 0x0040,
+ 0x14de: 0x0040, 0x14df: 0x0040, 0x14e0: 0x1308, 0x14e1: 0x1308, 0x14e2: 0x1308, 0x14e3: 0x1308,
+ 0x14e4: 0x1308, 0x14e5: 0x1308, 0x14e6: 0x1308, 0x14e7: 0x1308, 0x14e8: 0x1308, 0x14e9: 0x1308,
+ 0x14ea: 0x1308, 0x14eb: 0x1308, 0x14ec: 0x1308, 0x14ed: 0x1308, 0x14ee: 0x1308, 0x14ef: 0x1308,
+ 0x14f0: 0x0040, 0x14f1: 0x7db5, 0x14f2: 0x7dd5, 0x14f3: 0xaf1a, 0x14f4: 0xaf1a, 0x14f5: 0x1fd2,
+ 0x14f6: 0x1fe2, 0x14f7: 0xaf2a, 0x14f8: 0xaf3a, 0x14f9: 0x7df5, 0x14fa: 0x7e15, 0x14fb: 0x7e35,
+ 0x14fc: 0x7df5, 0x14fd: 0x7e55, 0x14fe: 0x7e75, 0x14ff: 0x7e55,
+ // Block 0x54, offset 0x1500
+ 0x1500: 0x7e95, 0x1501: 0x7eb5, 0x1502: 0x7ed5, 0x1503: 0x7eb5, 0x1504: 0x7ef5, 0x1505: 0x0018,
+ 0x1506: 0x0018, 0x1507: 0xaf4a, 0x1508: 0xaf5a, 0x1509: 0x7f16, 0x150a: 0x7f36, 0x150b: 0x7f56,
+ 0x150c: 0x7f76, 0x150d: 0xaf1a, 0x150e: 0xaf1a, 0x150f: 0xaf1a, 0x1510: 0xaeda, 0x1511: 0x7f95,
+ 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x03c2, 0x1515: 0xaeea, 0x1516: 0xaf0a, 0x1517: 0xaefa,
+ 0x1518: 0x7fb5, 0x1519: 0x1fd2, 0x151a: 0x1fe2, 0x151b: 0xaf2a, 0x151c: 0xaf3a, 0x151d: 0x7e95,
+ 0x151e: 0x7ef5, 0x151f: 0xaf6a, 0x1520: 0xaf7a, 0x1521: 0xaf8a, 0x1522: 0x1fb2, 0x1523: 0xaf99,
+ 0x1524: 0xafaa, 0x1525: 0xafba, 0x1526: 0x1fc2, 0x1527: 0x0040, 0x1528: 0xafca, 0x1529: 0xafda,
+ 0x152a: 0xafea, 0x152b: 0xaffa, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040,
+ 0x1530: 0x7fd6, 0x1531: 0xb009, 0x1532: 0x7ff6, 0x1533: 0x0008, 0x1534: 0x8016, 0x1535: 0x0040,
+ 0x1536: 0x8036, 0x1537: 0xb031, 0x1538: 0x8056, 0x1539: 0xb059, 0x153a: 0x8076, 0x153b: 0xb081,
+ 0x153c: 0x8096, 0x153d: 0xb0a9, 0x153e: 0x80b6, 0x153f: 0xb0d1,
+ // Block 0x55, offset 0x1540
+ 0x1540: 0xb0f9, 0x1541: 0xb111, 0x1542: 0xb111, 0x1543: 0xb129, 0x1544: 0xb129, 0x1545: 0xb141,
+ 0x1546: 0xb141, 0x1547: 0xb159, 0x1548: 0xb159, 0x1549: 0xb171, 0x154a: 0xb171, 0x154b: 0xb171,
+ 0x154c: 0xb171, 0x154d: 0xb189, 0x154e: 0xb189, 0x154f: 0xb1a1, 0x1550: 0xb1a1, 0x1551: 0xb1a1,
+ 0x1552: 0xb1a1, 0x1553: 0xb1b9, 0x1554: 0xb1b9, 0x1555: 0xb1d1, 0x1556: 0xb1d1, 0x1557: 0xb1d1,
+ 0x1558: 0xb1d1, 0x1559: 0xb1e9, 0x155a: 0xb1e9, 0x155b: 0xb1e9, 0x155c: 0xb1e9, 0x155d: 0xb201,
+ 0x155e: 0xb201, 0x155f: 0xb201, 0x1560: 0xb201, 0x1561: 0xb219, 0x1562: 0xb219, 0x1563: 0xb219,
+ 0x1564: 0xb219, 0x1565: 0xb231, 0x1566: 0xb231, 0x1567: 0xb231, 0x1568: 0xb231, 0x1569: 0xb249,
+ 0x156a: 0xb249, 0x156b: 0xb261, 0x156c: 0xb261, 0x156d: 0xb279, 0x156e: 0xb279, 0x156f: 0xb291,
+ 0x1570: 0xb291, 0x1571: 0xb2a9, 0x1572: 0xb2a9, 0x1573: 0xb2a9, 0x1574: 0xb2a9, 0x1575: 0xb2c1,
+ 0x1576: 0xb2c1, 0x1577: 0xb2c1, 0x1578: 0xb2c1, 0x1579: 0xb2d9, 0x157a: 0xb2d9, 0x157b: 0xb2d9,
+ 0x157c: 0xb2d9, 0x157d: 0xb2f1, 0x157e: 0xb2f1, 0x157f: 0xb2f1,
+ // Block 0x56, offset 0x1580
+ 0x1580: 0xb2f1, 0x1581: 0xb309, 0x1582: 0xb309, 0x1583: 0xb309, 0x1584: 0xb309, 0x1585: 0xb321,
+ 0x1586: 0xb321, 0x1587: 0xb321, 0x1588: 0xb321, 0x1589: 0xb339, 0x158a: 0xb339, 0x158b: 0xb339,
+ 0x158c: 0xb339, 0x158d: 0xb351, 0x158e: 0xb351, 0x158f: 0xb351, 0x1590: 0xb351, 0x1591: 0xb369,
+ 0x1592: 0xb369, 0x1593: 0xb369, 0x1594: 0xb369, 0x1595: 0xb381, 0x1596: 0xb381, 0x1597: 0xb381,
+ 0x1598: 0xb381, 0x1599: 0xb399, 0x159a: 0xb399, 0x159b: 0xb399, 0x159c: 0xb399, 0x159d: 0xb3b1,
+ 0x159e: 0xb3b1, 0x159f: 0xb3b1, 0x15a0: 0xb3b1, 0x15a1: 0xb3c9, 0x15a2: 0xb3c9, 0x15a3: 0xb3c9,
+ 0x15a4: 0xb3c9, 0x15a5: 0xb3e1, 0x15a6: 0xb3e1, 0x15a7: 0xb3e1, 0x15a8: 0xb3e1, 0x15a9: 0xb3f9,
+ 0x15aa: 0xb3f9, 0x15ab: 0xb3f9, 0x15ac: 0xb3f9, 0x15ad: 0xb411, 0x15ae: 0xb411, 0x15af: 0x7ab1,
+ 0x15b0: 0x7ab1, 0x15b1: 0xb429, 0x15b2: 0xb429, 0x15b3: 0xb429, 0x15b4: 0xb429, 0x15b5: 0xb441,
+ 0x15b6: 0xb441, 0x15b7: 0xb469, 0x15b8: 0xb469, 0x15b9: 0xb491, 0x15ba: 0xb491, 0x15bb: 0xb4b9,
+ 0x15bc: 0xb4b9, 0x15bd: 0x0040, 0x15be: 0x0040, 0x15bf: 0x03c0,
+ // Block 0x57, offset 0x15c0
+ 0x15c0: 0x0040, 0x15c1: 0xaefa, 0x15c2: 0xb4e2, 0x15c3: 0xaf6a, 0x15c4: 0xafda, 0x15c5: 0xafea,
+ 0x15c6: 0xaf7a, 0x15c7: 0xb4f2, 0x15c8: 0x1fd2, 0x15c9: 0x1fe2, 0x15ca: 0xaf8a, 0x15cb: 0x1fb2,
+ 0x15cc: 0xaeda, 0x15cd: 0xaf99, 0x15ce: 0x29d1, 0x15cf: 0xb502, 0x15d0: 0x1f41, 0x15d1: 0x00c9,
+ 0x15d2: 0x0069, 0x15d3: 0x0079, 0x15d4: 0x1f51, 0x15d5: 0x1f61, 0x15d6: 0x1f71, 0x15d7: 0x1f81,
+ 0x15d8: 0x1f91, 0x15d9: 0x1fa1, 0x15da: 0xaeea, 0x15db: 0x03c2, 0x15dc: 0xafaa, 0x15dd: 0x1fc2,
+ 0x15de: 0xafba, 0x15df: 0xaf0a, 0x15e0: 0xaffa, 0x15e1: 0x0039, 0x15e2: 0x0ee9, 0x15e3: 0x1159,
+ 0x15e4: 0x0ef9, 0x15e5: 0x0f09, 0x15e6: 0x1199, 0x15e7: 0x0f31, 0x15e8: 0x0249, 0x15e9: 0x0f41,
+ 0x15ea: 0x0259, 0x15eb: 0x0f51, 0x15ec: 0x0359, 0x15ed: 0x0f61, 0x15ee: 0x0f71, 0x15ef: 0x00d9,
+ 0x15f0: 0x0f99, 0x15f1: 0x2039, 0x15f2: 0x0269, 0x15f3: 0x01d9, 0x15f4: 0x0fa9, 0x15f5: 0x0fb9,
+ 0x15f6: 0x1089, 0x15f7: 0x0279, 0x15f8: 0x0369, 0x15f9: 0x0289, 0x15fa: 0x13d1, 0x15fb: 0xaf4a,
+ 0x15fc: 0xafca, 0x15fd: 0xaf5a, 0x15fe: 0xb512, 0x15ff: 0xaf1a,
+ // Block 0x58, offset 0x1600
+ 0x1600: 0x1caa, 0x1601: 0x0039, 0x1602: 0x0ee9, 0x1603: 0x1159, 0x1604: 0x0ef9, 0x1605: 0x0f09,
+ 0x1606: 0x1199, 0x1607: 0x0f31, 0x1608: 0x0249, 0x1609: 0x0f41, 0x160a: 0x0259, 0x160b: 0x0f51,
+ 0x160c: 0x0359, 0x160d: 0x0f61, 0x160e: 0x0f71, 0x160f: 0x00d9, 0x1610: 0x0f99, 0x1611: 0x2039,
+ 0x1612: 0x0269, 0x1613: 0x01d9, 0x1614: 0x0fa9, 0x1615: 0x0fb9, 0x1616: 0x1089, 0x1617: 0x0279,
+ 0x1618: 0x0369, 0x1619: 0x0289, 0x161a: 0x13d1, 0x161b: 0xaf2a, 0x161c: 0xb522, 0x161d: 0xaf3a,
+ 0x161e: 0xb532, 0x161f: 0x80d5, 0x1620: 0x80f5, 0x1621: 0x29d1, 0x1622: 0x8115, 0x1623: 0x8115,
+ 0x1624: 0x8135, 0x1625: 0x8155, 0x1626: 0x8175, 0x1627: 0x8195, 0x1628: 0x81b5, 0x1629: 0x81d5,
+ 0x162a: 0x81f5, 0x162b: 0x8215, 0x162c: 0x8235, 0x162d: 0x8255, 0x162e: 0x8275, 0x162f: 0x8295,
+ 0x1630: 0x82b5, 0x1631: 0x82d5, 0x1632: 0x82f5, 0x1633: 0x8315, 0x1634: 0x8335, 0x1635: 0x8355,
+ 0x1636: 0x8375, 0x1637: 0x8395, 0x1638: 0x83b5, 0x1639: 0x83d5, 0x163a: 0x83f5, 0x163b: 0x8415,
+ 0x163c: 0x81b5, 0x163d: 0x8435, 0x163e: 0x8455, 0x163f: 0x8215,
+ // Block 0x59, offset 0x1640
+ 0x1640: 0x8475, 0x1641: 0x8495, 0x1642: 0x84b5, 0x1643: 0x84d5, 0x1644: 0x84f5, 0x1645: 0x8515,
+ 0x1646: 0x8535, 0x1647: 0x8555, 0x1648: 0x84d5, 0x1649: 0x8575, 0x164a: 0x84d5, 0x164b: 0x8595,
+ 0x164c: 0x8595, 0x164d: 0x85b5, 0x164e: 0x85b5, 0x164f: 0x85d5, 0x1650: 0x8515, 0x1651: 0x85f5,
+ 0x1652: 0x8615, 0x1653: 0x85f5, 0x1654: 0x8635, 0x1655: 0x8615, 0x1656: 0x8655, 0x1657: 0x8655,
+ 0x1658: 0x8675, 0x1659: 0x8675, 0x165a: 0x8695, 0x165b: 0x8695, 0x165c: 0x8615, 0x165d: 0x8115,
+ 0x165e: 0x86b5, 0x165f: 0x86d5, 0x1660: 0x0040, 0x1661: 0x86f5, 0x1662: 0x8715, 0x1663: 0x8735,
+ 0x1664: 0x8755, 0x1665: 0x8735, 0x1666: 0x8775, 0x1667: 0x8795, 0x1668: 0x87b5, 0x1669: 0x87b5,
+ 0x166a: 0x87d5, 0x166b: 0x87d5, 0x166c: 0x87f5, 0x166d: 0x87f5, 0x166e: 0x87d5, 0x166f: 0x87d5,
+ 0x1670: 0x8815, 0x1671: 0x8835, 0x1672: 0x8855, 0x1673: 0x8875, 0x1674: 0x8895, 0x1675: 0x88b5,
+ 0x1676: 0x88b5, 0x1677: 0x88b5, 0x1678: 0x88d5, 0x1679: 0x88d5, 0x167a: 0x88d5, 0x167b: 0x88d5,
+ 0x167c: 0x87b5, 0x167d: 0x87b5, 0x167e: 0x87b5, 0x167f: 0x0040,
+ // Block 0x5a, offset 0x1680
+ 0x1680: 0x0040, 0x1681: 0x0040, 0x1682: 0x8715, 0x1683: 0x86f5, 0x1684: 0x88f5, 0x1685: 0x86f5,
+ 0x1686: 0x8715, 0x1687: 0x86f5, 0x1688: 0x0040, 0x1689: 0x0040, 0x168a: 0x8915, 0x168b: 0x8715,
+ 0x168c: 0x8935, 0x168d: 0x88f5, 0x168e: 0x8935, 0x168f: 0x8715, 0x1690: 0x0040, 0x1691: 0x0040,
+ 0x1692: 0x8955, 0x1693: 0x8975, 0x1694: 0x8875, 0x1695: 0x8935, 0x1696: 0x88f5, 0x1697: 0x8935,
+ 0x1698: 0x0040, 0x1699: 0x0040, 0x169a: 0x8995, 0x169b: 0x89b5, 0x169c: 0x8995, 0x169d: 0x0040,
+ 0x169e: 0x0040, 0x169f: 0x0040, 0x16a0: 0xb541, 0x16a1: 0xb559, 0x16a2: 0xb571, 0x16a3: 0x89d6,
+ 0x16a4: 0xb589, 0x16a5: 0xb5a1, 0x16a6: 0x89f5, 0x16a7: 0x0040, 0x16a8: 0x8a15, 0x16a9: 0x8a35,
+ 0x16aa: 0x8a55, 0x16ab: 0x8a35, 0x16ac: 0x8a75, 0x16ad: 0x8a95, 0x16ae: 0x8ab5, 0x16af: 0x0040,
+ 0x16b0: 0x0040, 0x16b1: 0x0040, 0x16b2: 0x0040, 0x16b3: 0x0040, 0x16b4: 0x0040, 0x16b5: 0x0040,
+ 0x16b6: 0x0040, 0x16b7: 0x0040, 0x16b8: 0x0040, 0x16b9: 0x0340, 0x16ba: 0x0340, 0x16bb: 0x0340,
+ 0x16bc: 0x0040, 0x16bd: 0x0040, 0x16be: 0x0040, 0x16bf: 0x0040,
+ // Block 0x5b, offset 0x16c0
+ 0x16c0: 0x0208, 0x16c1: 0x0208, 0x16c2: 0x0208, 0x16c3: 0x0208, 0x16c4: 0x0208, 0x16c5: 0x0408,
+ 0x16c6: 0x0008, 0x16c7: 0x0408, 0x16c8: 0x0018, 0x16c9: 0x0408, 0x16ca: 0x0408, 0x16cb: 0x0008,
+ 0x16cc: 0x0008, 0x16cd: 0x0108, 0x16ce: 0x0408, 0x16cf: 0x0408, 0x16d0: 0x0408, 0x16d1: 0x0408,
+ 0x16d2: 0x0408, 0x16d3: 0x0208, 0x16d4: 0x0208, 0x16d5: 0x0208, 0x16d6: 0x0208, 0x16d7: 0x0108,
+ 0x16d8: 0x0208, 0x16d9: 0x0208, 0x16da: 0x0208, 0x16db: 0x0208, 0x16dc: 0x0208, 0x16dd: 0x0408,
+ 0x16de: 0x0208, 0x16df: 0x0208, 0x16e0: 0x0208, 0x16e1: 0x0408, 0x16e2: 0x0008, 0x16e3: 0x0008,
+ 0x16e4: 0x0408, 0x16e5: 0x1308, 0x16e6: 0x1308, 0x16e7: 0x0040, 0x16e8: 0x0040, 0x16e9: 0x0040,
+ 0x16ea: 0x0040, 0x16eb: 0x0218, 0x16ec: 0x0218, 0x16ed: 0x0218, 0x16ee: 0x0218, 0x16ef: 0x0418,
+ 0x16f0: 0x0018, 0x16f1: 0x0018, 0x16f2: 0x0018, 0x16f3: 0x0018, 0x16f4: 0x0018, 0x16f5: 0x0018,
+ 0x16f6: 0x0018, 0x16f7: 0x0040, 0x16f8: 0x0040, 0x16f9: 0x0040, 0x16fa: 0x0040, 0x16fb: 0x0040,
+ 0x16fc: 0x0040, 0x16fd: 0x0040, 0x16fe: 0x0040, 0x16ff: 0x0040,
+ // Block 0x5c, offset 0x1700
+ 0x1700: 0x0208, 0x1701: 0x0408, 0x1702: 0x0208, 0x1703: 0x0408, 0x1704: 0x0408, 0x1705: 0x0408,
+ 0x1706: 0x0208, 0x1707: 0x0208, 0x1708: 0x0208, 0x1709: 0x0408, 0x170a: 0x0208, 0x170b: 0x0208,
+ 0x170c: 0x0408, 0x170d: 0x0208, 0x170e: 0x0408, 0x170f: 0x0408, 0x1710: 0x0208, 0x1711: 0x0408,
+ 0x1712: 0x0040, 0x1713: 0x0040, 0x1714: 0x0040, 0x1715: 0x0040, 0x1716: 0x0040, 0x1717: 0x0040,
+ 0x1718: 0x0040, 0x1719: 0x0018, 0x171a: 0x0018, 0x171b: 0x0018, 0x171c: 0x0018, 0x171d: 0x0040,
+ 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0x0040, 0x1721: 0x0040, 0x1722: 0x0040, 0x1723: 0x0040,
+ 0x1724: 0x0040, 0x1725: 0x0040, 0x1726: 0x0040, 0x1727: 0x0040, 0x1728: 0x0040, 0x1729: 0x0418,
+ 0x172a: 0x0418, 0x172b: 0x0418, 0x172c: 0x0418, 0x172d: 0x0218, 0x172e: 0x0218, 0x172f: 0x0018,
+ 0x1730: 0x0040, 0x1731: 0x0040, 0x1732: 0x0040, 0x1733: 0x0040, 0x1734: 0x0040, 0x1735: 0x0040,
+ 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0040, 0x173a: 0x0040, 0x173b: 0x0040,
+ 0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040,
+ // Block 0x5d, offset 0x1740
+ 0x1740: 0x1308, 0x1741: 0x1308, 0x1742: 0x1008, 0x1743: 0x1008, 0x1744: 0x0040, 0x1745: 0x0008,
+ 0x1746: 0x0008, 0x1747: 0x0008, 0x1748: 0x0008, 0x1749: 0x0008, 0x174a: 0x0008, 0x174b: 0x0008,
+ 0x174c: 0x0008, 0x174d: 0x0040, 0x174e: 0x0040, 0x174f: 0x0008, 0x1750: 0x0008, 0x1751: 0x0040,
+ 0x1752: 0x0040, 0x1753: 0x0008, 0x1754: 0x0008, 0x1755: 0x0008, 0x1756: 0x0008, 0x1757: 0x0008,
+ 0x1758: 0x0008, 0x1759: 0x0008, 0x175a: 0x0008, 0x175b: 0x0008, 0x175c: 0x0008, 0x175d: 0x0008,
+ 0x175e: 0x0008, 0x175f: 0x0008, 0x1760: 0x0008, 0x1761: 0x0008, 0x1762: 0x0008, 0x1763: 0x0008,
+ 0x1764: 0x0008, 0x1765: 0x0008, 0x1766: 0x0008, 0x1767: 0x0008, 0x1768: 0x0008, 0x1769: 0x0040,
+ 0x176a: 0x0008, 0x176b: 0x0008, 0x176c: 0x0008, 0x176d: 0x0008, 0x176e: 0x0008, 0x176f: 0x0008,
+ 0x1770: 0x0008, 0x1771: 0x0040, 0x1772: 0x0008, 0x1773: 0x0008, 0x1774: 0x0040, 0x1775: 0x0008,
+ 0x1776: 0x0008, 0x1777: 0x0008, 0x1778: 0x0008, 0x1779: 0x0008, 0x177a: 0x0040, 0x177b: 0x0040,
+ 0x177c: 0x1308, 0x177d: 0x0008, 0x177e: 0x1008, 0x177f: 0x1008,
+ // Block 0x5e, offset 0x1780
+ 0x1780: 0x1308, 0x1781: 0x1008, 0x1782: 0x1008, 0x1783: 0x1008, 0x1784: 0x1008, 0x1785: 0x0040,
+ 0x1786: 0x0040, 0x1787: 0x1008, 0x1788: 0x1008, 0x1789: 0x0040, 0x178a: 0x0040, 0x178b: 0x1008,
+ 0x178c: 0x1008, 0x178d: 0x1808, 0x178e: 0x0040, 0x178f: 0x0040, 0x1790: 0x0008, 0x1791: 0x0040,
+ 0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x1008,
+ 0x1798: 0x0040, 0x1799: 0x0040, 0x179a: 0x0040, 0x179b: 0x0040, 0x179c: 0x0040, 0x179d: 0x0008,
+ 0x179e: 0x0008, 0x179f: 0x0008, 0x17a0: 0x0008, 0x17a1: 0x0008, 0x17a2: 0x1008, 0x17a3: 0x1008,
+ 0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x1308, 0x17a7: 0x1308, 0x17a8: 0x1308, 0x17a9: 0x1308,
+ 0x17aa: 0x1308, 0x17ab: 0x1308, 0x17ac: 0x1308, 0x17ad: 0x0040, 0x17ae: 0x0040, 0x17af: 0x0040,
+ 0x17b0: 0x1308, 0x17b1: 0x1308, 0x17b2: 0x1308, 0x17b3: 0x1308, 0x17b4: 0x1308, 0x17b5: 0x0040,
+ 0x17b6: 0x0040, 0x17b7: 0x0040, 0x17b8: 0x0040, 0x17b9: 0x0040, 0x17ba: 0x0040, 0x17bb: 0x0040,
+ 0x17bc: 0x0040, 0x17bd: 0x0040, 0x17be: 0x0040, 0x17bf: 0x0040,
+ // Block 0x5f, offset 0x17c0
+ 0x17c0: 0x0039, 0x17c1: 0x0ee9, 0x17c2: 0x1159, 0x17c3: 0x0ef9, 0x17c4: 0x0f09, 0x17c5: 0x1199,
+ 0x17c6: 0x0f31, 0x17c7: 0x0249, 0x17c8: 0x0f41, 0x17c9: 0x0259, 0x17ca: 0x0f51, 0x17cb: 0x0359,
+ 0x17cc: 0x0f61, 0x17cd: 0x0f71, 0x17ce: 0x00d9, 0x17cf: 0x0f99, 0x17d0: 0x2039, 0x17d1: 0x0269,
+ 0x17d2: 0x01d9, 0x17d3: 0x0fa9, 0x17d4: 0x0fb9, 0x17d5: 0x1089, 0x17d6: 0x0279, 0x17d7: 0x0369,
+ 0x17d8: 0x0289, 0x17d9: 0x13d1, 0x17da: 0x0039, 0x17db: 0x0ee9, 0x17dc: 0x1159, 0x17dd: 0x0ef9,
+ 0x17de: 0x0f09, 0x17df: 0x1199, 0x17e0: 0x0f31, 0x17e1: 0x0249, 0x17e2: 0x0f41, 0x17e3: 0x0259,
+ 0x17e4: 0x0f51, 0x17e5: 0x0359, 0x17e6: 0x0f61, 0x17e7: 0x0f71, 0x17e8: 0x00d9, 0x17e9: 0x0f99,
+ 0x17ea: 0x2039, 0x17eb: 0x0269, 0x17ec: 0x01d9, 0x17ed: 0x0fa9, 0x17ee: 0x0fb9, 0x17ef: 0x1089,
+ 0x17f0: 0x0279, 0x17f1: 0x0369, 0x17f2: 0x0289, 0x17f3: 0x13d1, 0x17f4: 0x0039, 0x17f5: 0x0ee9,
+ 0x17f6: 0x1159, 0x17f7: 0x0ef9, 0x17f8: 0x0f09, 0x17f9: 0x1199, 0x17fa: 0x0f31, 0x17fb: 0x0249,
+ 0x17fc: 0x0f41, 0x17fd: 0x0259, 0x17fe: 0x0f51, 0x17ff: 0x0359,
+ // Block 0x60, offset 0x1800
+ 0x1800: 0x0f61, 0x1801: 0x0f71, 0x1802: 0x00d9, 0x1803: 0x0f99, 0x1804: 0x2039, 0x1805: 0x0269,
+ 0x1806: 0x01d9, 0x1807: 0x0fa9, 0x1808: 0x0fb9, 0x1809: 0x1089, 0x180a: 0x0279, 0x180b: 0x0369,
+ 0x180c: 0x0289, 0x180d: 0x13d1, 0x180e: 0x0039, 0x180f: 0x0ee9, 0x1810: 0x1159, 0x1811: 0x0ef9,
+ 0x1812: 0x0f09, 0x1813: 0x1199, 0x1814: 0x0f31, 0x1815: 0x0040, 0x1816: 0x0f41, 0x1817: 0x0259,
+ 0x1818: 0x0f51, 0x1819: 0x0359, 0x181a: 0x0f61, 0x181b: 0x0f71, 0x181c: 0x00d9, 0x181d: 0x0f99,
+ 0x181e: 0x2039, 0x181f: 0x0269, 0x1820: 0x01d9, 0x1821: 0x0fa9, 0x1822: 0x0fb9, 0x1823: 0x1089,
+ 0x1824: 0x0279, 0x1825: 0x0369, 0x1826: 0x0289, 0x1827: 0x13d1, 0x1828: 0x0039, 0x1829: 0x0ee9,
+ 0x182a: 0x1159, 0x182b: 0x0ef9, 0x182c: 0x0f09, 0x182d: 0x1199, 0x182e: 0x0f31, 0x182f: 0x0249,
+ 0x1830: 0x0f41, 0x1831: 0x0259, 0x1832: 0x0f51, 0x1833: 0x0359, 0x1834: 0x0f61, 0x1835: 0x0f71,
+ 0x1836: 0x00d9, 0x1837: 0x0f99, 0x1838: 0x2039, 0x1839: 0x0269, 0x183a: 0x01d9, 0x183b: 0x0fa9,
+ 0x183c: 0x0fb9, 0x183d: 0x1089, 0x183e: 0x0279, 0x183f: 0x0369,
+ // Block 0x61, offset 0x1840
+ 0x1840: 0x0289, 0x1841: 0x13d1, 0x1842: 0x0039, 0x1843: 0x0ee9, 0x1844: 0x1159, 0x1845: 0x0ef9,
+ 0x1846: 0x0f09, 0x1847: 0x1199, 0x1848: 0x0f31, 0x1849: 0x0249, 0x184a: 0x0f41, 0x184b: 0x0259,
+ 0x184c: 0x0f51, 0x184d: 0x0359, 0x184e: 0x0f61, 0x184f: 0x0f71, 0x1850: 0x00d9, 0x1851: 0x0f99,
+ 0x1852: 0x2039, 0x1853: 0x0269, 0x1854: 0x01d9, 0x1855: 0x0fa9, 0x1856: 0x0fb9, 0x1857: 0x1089,
+ 0x1858: 0x0279, 0x1859: 0x0369, 0x185a: 0x0289, 0x185b: 0x13d1, 0x185c: 0x0039, 0x185d: 0x0040,
+ 0x185e: 0x1159, 0x185f: 0x0ef9, 0x1860: 0x0040, 0x1861: 0x0040, 0x1862: 0x0f31, 0x1863: 0x0040,
+ 0x1864: 0x0040, 0x1865: 0x0259, 0x1866: 0x0f51, 0x1867: 0x0040, 0x1868: 0x0040, 0x1869: 0x0f71,
+ 0x186a: 0x00d9, 0x186b: 0x0f99, 0x186c: 0x2039, 0x186d: 0x0040, 0x186e: 0x01d9, 0x186f: 0x0fa9,
+ 0x1870: 0x0fb9, 0x1871: 0x1089, 0x1872: 0x0279, 0x1873: 0x0369, 0x1874: 0x0289, 0x1875: 0x13d1,
+ 0x1876: 0x0039, 0x1877: 0x0ee9, 0x1878: 0x1159, 0x1879: 0x0ef9, 0x187a: 0x0040, 0x187b: 0x1199,
+ 0x187c: 0x0040, 0x187d: 0x0249, 0x187e: 0x0f41, 0x187f: 0x0259,
+ // Block 0x62, offset 0x1880
+ 0x1880: 0x0f51, 0x1881: 0x0359, 0x1882: 0x0f61, 0x1883: 0x0f71, 0x1884: 0x0040, 0x1885: 0x0f99,
+ 0x1886: 0x2039, 0x1887: 0x0269, 0x1888: 0x01d9, 0x1889: 0x0fa9, 0x188a: 0x0fb9, 0x188b: 0x1089,
+ 0x188c: 0x0279, 0x188d: 0x0369, 0x188e: 0x0289, 0x188f: 0x13d1, 0x1890: 0x0039, 0x1891: 0x0ee9,
+ 0x1892: 0x1159, 0x1893: 0x0ef9, 0x1894: 0x0f09, 0x1895: 0x1199, 0x1896: 0x0f31, 0x1897: 0x0249,
+ 0x1898: 0x0f41, 0x1899: 0x0259, 0x189a: 0x0f51, 0x189b: 0x0359, 0x189c: 0x0f61, 0x189d: 0x0f71,
+ 0x189e: 0x00d9, 0x189f: 0x0f99, 0x18a0: 0x2039, 0x18a1: 0x0269, 0x18a2: 0x01d9, 0x18a3: 0x0fa9,
+ 0x18a4: 0x0fb9, 0x18a5: 0x1089, 0x18a6: 0x0279, 0x18a7: 0x0369, 0x18a8: 0x0289, 0x18a9: 0x13d1,
+ 0x18aa: 0x0039, 0x18ab: 0x0ee9, 0x18ac: 0x1159, 0x18ad: 0x0ef9, 0x18ae: 0x0f09, 0x18af: 0x1199,
+ 0x18b0: 0x0f31, 0x18b1: 0x0249, 0x18b2: 0x0f41, 0x18b3: 0x0259, 0x18b4: 0x0f51, 0x18b5: 0x0359,
+ 0x18b6: 0x0f61, 0x18b7: 0x0f71, 0x18b8: 0x00d9, 0x18b9: 0x0f99, 0x18ba: 0x2039, 0x18bb: 0x0269,
+ 0x18bc: 0x01d9, 0x18bd: 0x0fa9, 0x18be: 0x0fb9, 0x18bf: 0x1089,
+ // Block 0x63, offset 0x18c0
+ 0x18c0: 0x0279, 0x18c1: 0x0369, 0x18c2: 0x0289, 0x18c3: 0x13d1, 0x18c4: 0x0039, 0x18c5: 0x0ee9,
+ 0x18c6: 0x0040, 0x18c7: 0x0ef9, 0x18c8: 0x0f09, 0x18c9: 0x1199, 0x18ca: 0x0f31, 0x18cb: 0x0040,
+ 0x18cc: 0x0040, 0x18cd: 0x0259, 0x18ce: 0x0f51, 0x18cf: 0x0359, 0x18d0: 0x0f61, 0x18d1: 0x0f71,
+ 0x18d2: 0x00d9, 0x18d3: 0x0f99, 0x18d4: 0x2039, 0x18d5: 0x0040, 0x18d6: 0x01d9, 0x18d7: 0x0fa9,
+ 0x18d8: 0x0fb9, 0x18d9: 0x1089, 0x18da: 0x0279, 0x18db: 0x0369, 0x18dc: 0x0289, 0x18dd: 0x0040,
+ 0x18de: 0x0039, 0x18df: 0x0ee9, 0x18e0: 0x1159, 0x18e1: 0x0ef9, 0x18e2: 0x0f09, 0x18e3: 0x1199,
+ 0x18e4: 0x0f31, 0x18e5: 0x0249, 0x18e6: 0x0f41, 0x18e7: 0x0259, 0x18e8: 0x0f51, 0x18e9: 0x0359,
+ 0x18ea: 0x0f61, 0x18eb: 0x0f71, 0x18ec: 0x00d9, 0x18ed: 0x0f99, 0x18ee: 0x2039, 0x18ef: 0x0269,
+ 0x18f0: 0x01d9, 0x18f1: 0x0fa9, 0x18f2: 0x0fb9, 0x18f3: 0x1089, 0x18f4: 0x0279, 0x18f5: 0x0369,
+ 0x18f6: 0x0289, 0x18f7: 0x13d1, 0x18f8: 0x0039, 0x18f9: 0x0ee9, 0x18fa: 0x0040, 0x18fb: 0x0ef9,
+ 0x18fc: 0x0f09, 0x18fd: 0x1199, 0x18fe: 0x0f31, 0x18ff: 0x0040,
+ // Block 0x64, offset 0x1900
+ 0x1900: 0x0f41, 0x1901: 0x0259, 0x1902: 0x0f51, 0x1903: 0x0359, 0x1904: 0x0f61, 0x1905: 0x0040,
+ 0x1906: 0x00d9, 0x1907: 0x0040, 0x1908: 0x0040, 0x1909: 0x0040, 0x190a: 0x01d9, 0x190b: 0x0fa9,
+ 0x190c: 0x0fb9, 0x190d: 0x1089, 0x190e: 0x0279, 0x190f: 0x0369, 0x1910: 0x0289, 0x1911: 0x0040,
+ 0x1912: 0x0039, 0x1913: 0x0ee9, 0x1914: 0x1159, 0x1915: 0x0ef9, 0x1916: 0x0f09, 0x1917: 0x1199,
+ 0x1918: 0x0f31, 0x1919: 0x0249, 0x191a: 0x0f41, 0x191b: 0x0259, 0x191c: 0x0f51, 0x191d: 0x0359,
+ 0x191e: 0x0f61, 0x191f: 0x0f71, 0x1920: 0x00d9, 0x1921: 0x0f99, 0x1922: 0x2039, 0x1923: 0x0269,
+ 0x1924: 0x01d9, 0x1925: 0x0fa9, 0x1926: 0x0fb9, 0x1927: 0x1089, 0x1928: 0x0279, 0x1929: 0x0369,
+ 0x192a: 0x0289, 0x192b: 0x13d1, 0x192c: 0x0039, 0x192d: 0x0ee9, 0x192e: 0x1159, 0x192f: 0x0ef9,
+ 0x1930: 0x0f09, 0x1931: 0x1199, 0x1932: 0x0f31, 0x1933: 0x0249, 0x1934: 0x0f41, 0x1935: 0x0259,
+ 0x1936: 0x0f51, 0x1937: 0x0359, 0x1938: 0x0f61, 0x1939: 0x0f71, 0x193a: 0x00d9, 0x193b: 0x0f99,
+ 0x193c: 0x2039, 0x193d: 0x0269, 0x193e: 0x01d9, 0x193f: 0x0fa9,
+ // Block 0x65, offset 0x1940
+ 0x1940: 0x0fb9, 0x1941: 0x1089, 0x1942: 0x0279, 0x1943: 0x0369, 0x1944: 0x0289, 0x1945: 0x13d1,
+ 0x1946: 0x0039, 0x1947: 0x0ee9, 0x1948: 0x1159, 0x1949: 0x0ef9, 0x194a: 0x0f09, 0x194b: 0x1199,
+ 0x194c: 0x0f31, 0x194d: 0x0249, 0x194e: 0x0f41, 0x194f: 0x0259, 0x1950: 0x0f51, 0x1951: 0x0359,
+ 0x1952: 0x0f61, 0x1953: 0x0f71, 0x1954: 0x00d9, 0x1955: 0x0f99, 0x1956: 0x2039, 0x1957: 0x0269,
+ 0x1958: 0x01d9, 0x1959: 0x0fa9, 0x195a: 0x0fb9, 0x195b: 0x1089, 0x195c: 0x0279, 0x195d: 0x0369,
+ 0x195e: 0x0289, 0x195f: 0x13d1, 0x1960: 0x0039, 0x1961: 0x0ee9, 0x1962: 0x1159, 0x1963: 0x0ef9,
+ 0x1964: 0x0f09, 0x1965: 0x1199, 0x1966: 0x0f31, 0x1967: 0x0249, 0x1968: 0x0f41, 0x1969: 0x0259,
+ 0x196a: 0x0f51, 0x196b: 0x0359, 0x196c: 0x0f61, 0x196d: 0x0f71, 0x196e: 0x00d9, 0x196f: 0x0f99,
+ 0x1970: 0x2039, 0x1971: 0x0269, 0x1972: 0x01d9, 0x1973: 0x0fa9, 0x1974: 0x0fb9, 0x1975: 0x1089,
+ 0x1976: 0x0279, 0x1977: 0x0369, 0x1978: 0x0289, 0x1979: 0x13d1, 0x197a: 0x0039, 0x197b: 0x0ee9,
+ 0x197c: 0x1159, 0x197d: 0x0ef9, 0x197e: 0x0f09, 0x197f: 0x1199,
+ // Block 0x66, offset 0x1980
+ 0x1980: 0x0f31, 0x1981: 0x0249, 0x1982: 0x0f41, 0x1983: 0x0259, 0x1984: 0x0f51, 0x1985: 0x0359,
+ 0x1986: 0x0f61, 0x1987: 0x0f71, 0x1988: 0x00d9, 0x1989: 0x0f99, 0x198a: 0x2039, 0x198b: 0x0269,
+ 0x198c: 0x01d9, 0x198d: 0x0fa9, 0x198e: 0x0fb9, 0x198f: 0x1089, 0x1990: 0x0279, 0x1991: 0x0369,
+ 0x1992: 0x0289, 0x1993: 0x13d1, 0x1994: 0x0039, 0x1995: 0x0ee9, 0x1996: 0x1159, 0x1997: 0x0ef9,
+ 0x1998: 0x0f09, 0x1999: 0x1199, 0x199a: 0x0f31, 0x199b: 0x0249, 0x199c: 0x0f41, 0x199d: 0x0259,
+ 0x199e: 0x0f51, 0x199f: 0x0359, 0x19a0: 0x0f61, 0x19a1: 0x0f71, 0x19a2: 0x00d9, 0x19a3: 0x0f99,
+ 0x19a4: 0x2039, 0x19a5: 0x0269, 0x19a6: 0x01d9, 0x19a7: 0x0fa9, 0x19a8: 0x0fb9, 0x19a9: 0x1089,
+ 0x19aa: 0x0279, 0x19ab: 0x0369, 0x19ac: 0x0289, 0x19ad: 0x13d1, 0x19ae: 0x0039, 0x19af: 0x0ee9,
+ 0x19b0: 0x1159, 0x19b1: 0x0ef9, 0x19b2: 0x0f09, 0x19b3: 0x1199, 0x19b4: 0x0f31, 0x19b5: 0x0249,
+ 0x19b6: 0x0f41, 0x19b7: 0x0259, 0x19b8: 0x0f51, 0x19b9: 0x0359, 0x19ba: 0x0f61, 0x19bb: 0x0f71,
+ 0x19bc: 0x00d9, 0x19bd: 0x0f99, 0x19be: 0x2039, 0x19bf: 0x0269,
+ // Block 0x67, offset 0x19c0
+ 0x19c0: 0x01d9, 0x19c1: 0x0fa9, 0x19c2: 0x0fb9, 0x19c3: 0x1089, 0x19c4: 0x0279, 0x19c5: 0x0369,
+ 0x19c6: 0x0289, 0x19c7: 0x13d1, 0x19c8: 0x0039, 0x19c9: 0x0ee9, 0x19ca: 0x1159, 0x19cb: 0x0ef9,
+ 0x19cc: 0x0f09, 0x19cd: 0x1199, 0x19ce: 0x0f31, 0x19cf: 0x0249, 0x19d0: 0x0f41, 0x19d1: 0x0259,
+ 0x19d2: 0x0f51, 0x19d3: 0x0359, 0x19d4: 0x0f61, 0x19d5: 0x0f71, 0x19d6: 0x00d9, 0x19d7: 0x0f99,
+ 0x19d8: 0x2039, 0x19d9: 0x0269, 0x19da: 0x01d9, 0x19db: 0x0fa9, 0x19dc: 0x0fb9, 0x19dd: 0x1089,
+ 0x19de: 0x0279, 0x19df: 0x0369, 0x19e0: 0x0289, 0x19e1: 0x13d1, 0x19e2: 0x0039, 0x19e3: 0x0ee9,
+ 0x19e4: 0x1159, 0x19e5: 0x0ef9, 0x19e6: 0x0f09, 0x19e7: 0x1199, 0x19e8: 0x0f31, 0x19e9: 0x0249,
+ 0x19ea: 0x0f41, 0x19eb: 0x0259, 0x19ec: 0x0f51, 0x19ed: 0x0359, 0x19ee: 0x0f61, 0x19ef: 0x0f71,
+ 0x19f0: 0x00d9, 0x19f1: 0x0f99, 0x19f2: 0x2039, 0x19f3: 0x0269, 0x19f4: 0x01d9, 0x19f5: 0x0fa9,
+ 0x19f6: 0x0fb9, 0x19f7: 0x1089, 0x19f8: 0x0279, 0x19f9: 0x0369, 0x19fa: 0x0289, 0x19fb: 0x13d1,
+ 0x19fc: 0x0039, 0x19fd: 0x0ee9, 0x19fe: 0x1159, 0x19ff: 0x0ef9,
+ // Block 0x68, offset 0x1a00
+ 0x1a00: 0x0f09, 0x1a01: 0x1199, 0x1a02: 0x0f31, 0x1a03: 0x0249, 0x1a04: 0x0f41, 0x1a05: 0x0259,
+ 0x1a06: 0x0f51, 0x1a07: 0x0359, 0x1a08: 0x0f61, 0x1a09: 0x0f71, 0x1a0a: 0x00d9, 0x1a0b: 0x0f99,
+ 0x1a0c: 0x2039, 0x1a0d: 0x0269, 0x1a0e: 0x01d9, 0x1a0f: 0x0fa9, 0x1a10: 0x0fb9, 0x1a11: 0x1089,
+ 0x1a12: 0x0279, 0x1a13: 0x0369, 0x1a14: 0x0289, 0x1a15: 0x13d1, 0x1a16: 0x0039, 0x1a17: 0x0ee9,
+ 0x1a18: 0x1159, 0x1a19: 0x0ef9, 0x1a1a: 0x0f09, 0x1a1b: 0x1199, 0x1a1c: 0x0f31, 0x1a1d: 0x0249,
+ 0x1a1e: 0x0f41, 0x1a1f: 0x0259, 0x1a20: 0x0f51, 0x1a21: 0x0359, 0x1a22: 0x0f61, 0x1a23: 0x0f71,
+ 0x1a24: 0x00d9, 0x1a25: 0x0f99, 0x1a26: 0x2039, 0x1a27: 0x0269, 0x1a28: 0x01d9, 0x1a29: 0x0fa9,
+ 0x1a2a: 0x0fb9, 0x1a2b: 0x1089, 0x1a2c: 0x0279, 0x1a2d: 0x0369, 0x1a2e: 0x0289, 0x1a2f: 0x13d1,
+ 0x1a30: 0x0039, 0x1a31: 0x0ee9, 0x1a32: 0x1159, 0x1a33: 0x0ef9, 0x1a34: 0x0f09, 0x1a35: 0x1199,
+ 0x1a36: 0x0f31, 0x1a37: 0x0249, 0x1a38: 0x0f41, 0x1a39: 0x0259, 0x1a3a: 0x0f51, 0x1a3b: 0x0359,
+ 0x1a3c: 0x0f61, 0x1a3d: 0x0f71, 0x1a3e: 0x00d9, 0x1a3f: 0x0f99,
+ // Block 0x69, offset 0x1a40
+ 0x1a40: 0x2039, 0x1a41: 0x0269, 0x1a42: 0x01d9, 0x1a43: 0x0fa9, 0x1a44: 0x0fb9, 0x1a45: 0x1089,
+ 0x1a46: 0x0279, 0x1a47: 0x0369, 0x1a48: 0x0289, 0x1a49: 0x13d1, 0x1a4a: 0x0039, 0x1a4b: 0x0ee9,
+ 0x1a4c: 0x1159, 0x1a4d: 0x0ef9, 0x1a4e: 0x0f09, 0x1a4f: 0x1199, 0x1a50: 0x0f31, 0x1a51: 0x0249,
+ 0x1a52: 0x0f41, 0x1a53: 0x0259, 0x1a54: 0x0f51, 0x1a55: 0x0359, 0x1a56: 0x0f61, 0x1a57: 0x0f71,
+ 0x1a58: 0x00d9, 0x1a59: 0x0f99, 0x1a5a: 0x2039, 0x1a5b: 0x0269, 0x1a5c: 0x01d9, 0x1a5d: 0x0fa9,
+ 0x1a5e: 0x0fb9, 0x1a5f: 0x1089, 0x1a60: 0x0279, 0x1a61: 0x0369, 0x1a62: 0x0289, 0x1a63: 0x13d1,
+ 0x1a64: 0xba81, 0x1a65: 0xba99, 0x1a66: 0x0040, 0x1a67: 0x0040, 0x1a68: 0xbab1, 0x1a69: 0x1099,
+ 0x1a6a: 0x10b1, 0x1a6b: 0x10c9, 0x1a6c: 0xbac9, 0x1a6d: 0xbae1, 0x1a6e: 0xbaf9, 0x1a6f: 0x1429,
+ 0x1a70: 0x1a31, 0x1a71: 0xbb11, 0x1a72: 0xbb29, 0x1a73: 0xbb41, 0x1a74: 0xbb59, 0x1a75: 0xbb71,
+ 0x1a76: 0xbb89, 0x1a77: 0x2109, 0x1a78: 0x1111, 0x1a79: 0x1429, 0x1a7a: 0xbba1, 0x1a7b: 0xbbb9,
+ 0x1a7c: 0xbbd1, 0x1a7d: 0x10e1, 0x1a7e: 0x10f9, 0x1a7f: 0xbbe9,
+ // Block 0x6a, offset 0x1a80
+ 0x1a80: 0x2079, 0x1a81: 0xbc01, 0x1a82: 0xbab1, 0x1a83: 0x1099, 0x1a84: 0x10b1, 0x1a85: 0x10c9,
+ 0x1a86: 0xbac9, 0x1a87: 0xbae1, 0x1a88: 0xbaf9, 0x1a89: 0x1429, 0x1a8a: 0x1a31, 0x1a8b: 0xbb11,
+ 0x1a8c: 0xbb29, 0x1a8d: 0xbb41, 0x1a8e: 0xbb59, 0x1a8f: 0xbb71, 0x1a90: 0xbb89, 0x1a91: 0x2109,
+ 0x1a92: 0x1111, 0x1a93: 0xbba1, 0x1a94: 0xbba1, 0x1a95: 0xbbb9, 0x1a96: 0xbbd1, 0x1a97: 0x10e1,
+ 0x1a98: 0x10f9, 0x1a99: 0xbbe9, 0x1a9a: 0x2079, 0x1a9b: 0xbc21, 0x1a9c: 0xbac9, 0x1a9d: 0x1429,
+ 0x1a9e: 0xbb11, 0x1a9f: 0x10e1, 0x1aa0: 0x1111, 0x1aa1: 0x2109, 0x1aa2: 0xbab1, 0x1aa3: 0x1099,
+ 0x1aa4: 0x10b1, 0x1aa5: 0x10c9, 0x1aa6: 0xbac9, 0x1aa7: 0xbae1, 0x1aa8: 0xbaf9, 0x1aa9: 0x1429,
+ 0x1aaa: 0x1a31, 0x1aab: 0xbb11, 0x1aac: 0xbb29, 0x1aad: 0xbb41, 0x1aae: 0xbb59, 0x1aaf: 0xbb71,
+ 0x1ab0: 0xbb89, 0x1ab1: 0x2109, 0x1ab2: 0x1111, 0x1ab3: 0x1429, 0x1ab4: 0xbba1, 0x1ab5: 0xbbb9,
+ 0x1ab6: 0xbbd1, 0x1ab7: 0x10e1, 0x1ab8: 0x10f9, 0x1ab9: 0xbbe9, 0x1aba: 0x2079, 0x1abb: 0xbc01,
+ 0x1abc: 0xbab1, 0x1abd: 0x1099, 0x1abe: 0x10b1, 0x1abf: 0x10c9,
+ // Block 0x6b, offset 0x1ac0
+ 0x1ac0: 0xbac9, 0x1ac1: 0xbae1, 0x1ac2: 0xbaf9, 0x1ac3: 0x1429, 0x1ac4: 0x1a31, 0x1ac5: 0xbb11,
+ 0x1ac6: 0xbb29, 0x1ac7: 0xbb41, 0x1ac8: 0xbb59, 0x1ac9: 0xbb71, 0x1aca: 0xbb89, 0x1acb: 0x2109,
+ 0x1acc: 0x1111, 0x1acd: 0xbba1, 0x1ace: 0xbba1, 0x1acf: 0xbbb9, 0x1ad0: 0xbbd1, 0x1ad1: 0x10e1,
+ 0x1ad2: 0x10f9, 0x1ad3: 0xbbe9, 0x1ad4: 0x2079, 0x1ad5: 0xbc21, 0x1ad6: 0xbac9, 0x1ad7: 0x1429,
+ 0x1ad8: 0xbb11, 0x1ad9: 0x10e1, 0x1ada: 0x1111, 0x1adb: 0x2109, 0x1adc: 0xbab1, 0x1add: 0x1099,
+ 0x1ade: 0x10b1, 0x1adf: 0x10c9, 0x1ae0: 0xbac9, 0x1ae1: 0xbae1, 0x1ae2: 0xbaf9, 0x1ae3: 0x1429,
+ 0x1ae4: 0x1a31, 0x1ae5: 0xbb11, 0x1ae6: 0xbb29, 0x1ae7: 0xbb41, 0x1ae8: 0xbb59, 0x1ae9: 0xbb71,
+ 0x1aea: 0xbb89, 0x1aeb: 0x2109, 0x1aec: 0x1111, 0x1aed: 0x1429, 0x1aee: 0xbba1, 0x1aef: 0xbbb9,
+ 0x1af0: 0xbbd1, 0x1af1: 0x10e1, 0x1af2: 0x10f9, 0x1af3: 0xbbe9, 0x1af4: 0x2079, 0x1af5: 0xbc01,
+ 0x1af6: 0xbab1, 0x1af7: 0x1099, 0x1af8: 0x10b1, 0x1af9: 0x10c9, 0x1afa: 0xbac9, 0x1afb: 0xbae1,
+ 0x1afc: 0xbaf9, 0x1afd: 0x1429, 0x1afe: 0x1a31, 0x1aff: 0xbb11,
+ // Block 0x6c, offset 0x1b00
+ 0x1b00: 0xbb29, 0x1b01: 0xbb41, 0x1b02: 0xbb59, 0x1b03: 0xbb71, 0x1b04: 0xbb89, 0x1b05: 0x2109,
+ 0x1b06: 0x1111, 0x1b07: 0xbba1, 0x1b08: 0xbba1, 0x1b09: 0xbbb9, 0x1b0a: 0xbbd1, 0x1b0b: 0x10e1,
+ 0x1b0c: 0x10f9, 0x1b0d: 0xbbe9, 0x1b0e: 0x2079, 0x1b0f: 0xbc21, 0x1b10: 0xbac9, 0x1b11: 0x1429,
+ 0x1b12: 0xbb11, 0x1b13: 0x10e1, 0x1b14: 0x1111, 0x1b15: 0x2109, 0x1b16: 0xbab1, 0x1b17: 0x1099,
+ 0x1b18: 0x10b1, 0x1b19: 0x10c9, 0x1b1a: 0xbac9, 0x1b1b: 0xbae1, 0x1b1c: 0xbaf9, 0x1b1d: 0x1429,
+ 0x1b1e: 0x1a31, 0x1b1f: 0xbb11, 0x1b20: 0xbb29, 0x1b21: 0xbb41, 0x1b22: 0xbb59, 0x1b23: 0xbb71,
+ 0x1b24: 0xbb89, 0x1b25: 0x2109, 0x1b26: 0x1111, 0x1b27: 0x1429, 0x1b28: 0xbba1, 0x1b29: 0xbbb9,
+ 0x1b2a: 0xbbd1, 0x1b2b: 0x10e1, 0x1b2c: 0x10f9, 0x1b2d: 0xbbe9, 0x1b2e: 0x2079, 0x1b2f: 0xbc01,
+ 0x1b30: 0xbab1, 0x1b31: 0x1099, 0x1b32: 0x10b1, 0x1b33: 0x10c9, 0x1b34: 0xbac9, 0x1b35: 0xbae1,
+ 0x1b36: 0xbaf9, 0x1b37: 0x1429, 0x1b38: 0x1a31, 0x1b39: 0xbb11, 0x1b3a: 0xbb29, 0x1b3b: 0xbb41,
+ 0x1b3c: 0xbb59, 0x1b3d: 0xbb71, 0x1b3e: 0xbb89, 0x1b3f: 0x2109,
+ // Block 0x6d, offset 0x1b40
+ 0x1b40: 0x1111, 0x1b41: 0xbba1, 0x1b42: 0xbba1, 0x1b43: 0xbbb9, 0x1b44: 0xbbd1, 0x1b45: 0x10e1,
+ 0x1b46: 0x10f9, 0x1b47: 0xbbe9, 0x1b48: 0x2079, 0x1b49: 0xbc21, 0x1b4a: 0xbac9, 0x1b4b: 0x1429,
+ 0x1b4c: 0xbb11, 0x1b4d: 0x10e1, 0x1b4e: 0x1111, 0x1b4f: 0x2109, 0x1b50: 0xbab1, 0x1b51: 0x1099,
+ 0x1b52: 0x10b1, 0x1b53: 0x10c9, 0x1b54: 0xbac9, 0x1b55: 0xbae1, 0x1b56: 0xbaf9, 0x1b57: 0x1429,
+ 0x1b58: 0x1a31, 0x1b59: 0xbb11, 0x1b5a: 0xbb29, 0x1b5b: 0xbb41, 0x1b5c: 0xbb59, 0x1b5d: 0xbb71,
+ 0x1b5e: 0xbb89, 0x1b5f: 0x2109, 0x1b60: 0x1111, 0x1b61: 0x1429, 0x1b62: 0xbba1, 0x1b63: 0xbbb9,
+ 0x1b64: 0xbbd1, 0x1b65: 0x10e1, 0x1b66: 0x10f9, 0x1b67: 0xbbe9, 0x1b68: 0x2079, 0x1b69: 0xbc01,
+ 0x1b6a: 0xbab1, 0x1b6b: 0x1099, 0x1b6c: 0x10b1, 0x1b6d: 0x10c9, 0x1b6e: 0xbac9, 0x1b6f: 0xbae1,
+ 0x1b70: 0xbaf9, 0x1b71: 0x1429, 0x1b72: 0x1a31, 0x1b73: 0xbb11, 0x1b74: 0xbb29, 0x1b75: 0xbb41,
+ 0x1b76: 0xbb59, 0x1b77: 0xbb71, 0x1b78: 0xbb89, 0x1b79: 0x2109, 0x1b7a: 0x1111, 0x1b7b: 0xbba1,
+ 0x1b7c: 0xbba1, 0x1b7d: 0xbbb9, 0x1b7e: 0xbbd1, 0x1b7f: 0x10e1,
+ // Block 0x6e, offset 0x1b80
+ 0x1b80: 0x10f9, 0x1b81: 0xbbe9, 0x1b82: 0x2079, 0x1b83: 0xbc21, 0x1b84: 0xbac9, 0x1b85: 0x1429,
+ 0x1b86: 0xbb11, 0x1b87: 0x10e1, 0x1b88: 0x1111, 0x1b89: 0x2109, 0x1b8a: 0xbc41, 0x1b8b: 0xbc41,
+ 0x1b8c: 0x0040, 0x1b8d: 0x0040, 0x1b8e: 0x1f41, 0x1b8f: 0x00c9, 0x1b90: 0x0069, 0x1b91: 0x0079,
+ 0x1b92: 0x1f51, 0x1b93: 0x1f61, 0x1b94: 0x1f71, 0x1b95: 0x1f81, 0x1b96: 0x1f91, 0x1b97: 0x1fa1,
+ 0x1b98: 0x1f41, 0x1b99: 0x00c9, 0x1b9a: 0x0069, 0x1b9b: 0x0079, 0x1b9c: 0x1f51, 0x1b9d: 0x1f61,
+ 0x1b9e: 0x1f71, 0x1b9f: 0x1f81, 0x1ba0: 0x1f91, 0x1ba1: 0x1fa1, 0x1ba2: 0x1f41, 0x1ba3: 0x00c9,
+ 0x1ba4: 0x0069, 0x1ba5: 0x0079, 0x1ba6: 0x1f51, 0x1ba7: 0x1f61, 0x1ba8: 0x1f71, 0x1ba9: 0x1f81,
+ 0x1baa: 0x1f91, 0x1bab: 0x1fa1, 0x1bac: 0x1f41, 0x1bad: 0x00c9, 0x1bae: 0x0069, 0x1baf: 0x0079,
+ 0x1bb0: 0x1f51, 0x1bb1: 0x1f61, 0x1bb2: 0x1f71, 0x1bb3: 0x1f81, 0x1bb4: 0x1f91, 0x1bb5: 0x1fa1,
+ 0x1bb6: 0x1f41, 0x1bb7: 0x00c9, 0x1bb8: 0x0069, 0x1bb9: 0x0079, 0x1bba: 0x1f51, 0x1bbb: 0x1f61,
+ 0x1bbc: 0x1f71, 0x1bbd: 0x1f81, 0x1bbe: 0x1f91, 0x1bbf: 0x1fa1,
+ // Block 0x6f, offset 0x1bc0
+ 0x1bc0: 0xe115, 0x1bc1: 0xe115, 0x1bc2: 0xe135, 0x1bc3: 0xe135, 0x1bc4: 0xe115, 0x1bc5: 0xe115,
+ 0x1bc6: 0xe175, 0x1bc7: 0xe175, 0x1bc8: 0xe115, 0x1bc9: 0xe115, 0x1bca: 0xe135, 0x1bcb: 0xe135,
+ 0x1bcc: 0xe115, 0x1bcd: 0xe115, 0x1bce: 0xe1f5, 0x1bcf: 0xe1f5, 0x1bd0: 0xe115, 0x1bd1: 0xe115,
+ 0x1bd2: 0xe135, 0x1bd3: 0xe135, 0x1bd4: 0xe115, 0x1bd5: 0xe115, 0x1bd6: 0xe175, 0x1bd7: 0xe175,
+ 0x1bd8: 0xe115, 0x1bd9: 0xe115, 0x1bda: 0xe135, 0x1bdb: 0xe135, 0x1bdc: 0xe115, 0x1bdd: 0xe115,
+ 0x1bde: 0x8b05, 0x1bdf: 0x8b05, 0x1be0: 0x04b5, 0x1be1: 0x04b5, 0x1be2: 0x0208, 0x1be3: 0x0208,
+ 0x1be4: 0x0208, 0x1be5: 0x0208, 0x1be6: 0x0208, 0x1be7: 0x0208, 0x1be8: 0x0208, 0x1be9: 0x0208,
+ 0x1bea: 0x0208, 0x1beb: 0x0208, 0x1bec: 0x0208, 0x1bed: 0x0208, 0x1bee: 0x0208, 0x1bef: 0x0208,
+ 0x1bf0: 0x0208, 0x1bf1: 0x0208, 0x1bf2: 0x0208, 0x1bf3: 0x0208, 0x1bf4: 0x0208, 0x1bf5: 0x0208,
+ 0x1bf6: 0x0208, 0x1bf7: 0x0208, 0x1bf8: 0x0208, 0x1bf9: 0x0208, 0x1bfa: 0x0208, 0x1bfb: 0x0208,
+ 0x1bfc: 0x0208, 0x1bfd: 0x0208, 0x1bfe: 0x0208, 0x1bff: 0x0208,
+ // Block 0x70, offset 0x1c00
+ 0x1c00: 0xb189, 0x1c01: 0xb1a1, 0x1c02: 0xb201, 0x1c03: 0xb249, 0x1c04: 0x0040, 0x1c05: 0xb411,
+ 0x1c06: 0xb291, 0x1c07: 0xb219, 0x1c08: 0xb309, 0x1c09: 0xb429, 0x1c0a: 0xb399, 0x1c0b: 0xb3b1,
+ 0x1c0c: 0xb3c9, 0x1c0d: 0xb3e1, 0x1c0e: 0xb2a9, 0x1c0f: 0xb339, 0x1c10: 0xb369, 0x1c11: 0xb2d9,
+ 0x1c12: 0xb381, 0x1c13: 0xb279, 0x1c14: 0xb2c1, 0x1c15: 0xb1d1, 0x1c16: 0xb1e9, 0x1c17: 0xb231,
+ 0x1c18: 0xb261, 0x1c19: 0xb2f1, 0x1c1a: 0xb321, 0x1c1b: 0xb351, 0x1c1c: 0xbc59, 0x1c1d: 0x7949,
+ 0x1c1e: 0xbc71, 0x1c1f: 0xbc89, 0x1c20: 0x0040, 0x1c21: 0xb1a1, 0x1c22: 0xb201, 0x1c23: 0x0040,
+ 0x1c24: 0xb3f9, 0x1c25: 0x0040, 0x1c26: 0x0040, 0x1c27: 0xb219, 0x1c28: 0x0040, 0x1c29: 0xb429,
+ 0x1c2a: 0xb399, 0x1c2b: 0xb3b1, 0x1c2c: 0xb3c9, 0x1c2d: 0xb3e1, 0x1c2e: 0xb2a9, 0x1c2f: 0xb339,
+ 0x1c30: 0xb369, 0x1c31: 0xb2d9, 0x1c32: 0xb381, 0x1c33: 0x0040, 0x1c34: 0xb2c1, 0x1c35: 0xb1d1,
+ 0x1c36: 0xb1e9, 0x1c37: 0xb231, 0x1c38: 0x0040, 0x1c39: 0xb2f1, 0x1c3a: 0x0040, 0x1c3b: 0xb351,
+ 0x1c3c: 0x0040, 0x1c3d: 0x0040, 0x1c3e: 0x0040, 0x1c3f: 0x0040,
+ // Block 0x71, offset 0x1c40
+ 0x1c40: 0x0040, 0x1c41: 0x0040, 0x1c42: 0xb201, 0x1c43: 0x0040, 0x1c44: 0x0040, 0x1c45: 0x0040,
+ 0x1c46: 0x0040, 0x1c47: 0xb219, 0x1c48: 0x0040, 0x1c49: 0xb429, 0x1c4a: 0x0040, 0x1c4b: 0xb3b1,
+ 0x1c4c: 0x0040, 0x1c4d: 0xb3e1, 0x1c4e: 0xb2a9, 0x1c4f: 0xb339, 0x1c50: 0x0040, 0x1c51: 0xb2d9,
+ 0x1c52: 0xb381, 0x1c53: 0x0040, 0x1c54: 0xb2c1, 0x1c55: 0x0040, 0x1c56: 0x0040, 0x1c57: 0xb231,
+ 0x1c58: 0x0040, 0x1c59: 0xb2f1, 0x1c5a: 0x0040, 0x1c5b: 0xb351, 0x1c5c: 0x0040, 0x1c5d: 0x7949,
+ 0x1c5e: 0x0040, 0x1c5f: 0xbc89, 0x1c60: 0x0040, 0x1c61: 0xb1a1, 0x1c62: 0xb201, 0x1c63: 0x0040,
+ 0x1c64: 0xb3f9, 0x1c65: 0x0040, 0x1c66: 0x0040, 0x1c67: 0xb219, 0x1c68: 0xb309, 0x1c69: 0xb429,
+ 0x1c6a: 0xb399, 0x1c6b: 0x0040, 0x1c6c: 0xb3c9, 0x1c6d: 0xb3e1, 0x1c6e: 0xb2a9, 0x1c6f: 0xb339,
+ 0x1c70: 0xb369, 0x1c71: 0xb2d9, 0x1c72: 0xb381, 0x1c73: 0x0040, 0x1c74: 0xb2c1, 0x1c75: 0xb1d1,
+ 0x1c76: 0xb1e9, 0x1c77: 0xb231, 0x1c78: 0x0040, 0x1c79: 0xb2f1, 0x1c7a: 0xb321, 0x1c7b: 0xb351,
+ 0x1c7c: 0xbc59, 0x1c7d: 0x0040, 0x1c7e: 0xbc71, 0x1c7f: 0x0040,
+ // Block 0x72, offset 0x1c80
+ 0x1c80: 0xb189, 0x1c81: 0xb1a1, 0x1c82: 0xb201, 0x1c83: 0xb249, 0x1c84: 0xb3f9, 0x1c85: 0xb411,
+ 0x1c86: 0xb291, 0x1c87: 0xb219, 0x1c88: 0xb309, 0x1c89: 0xb429, 0x1c8a: 0x0040, 0x1c8b: 0xb3b1,
+ 0x1c8c: 0xb3c9, 0x1c8d: 0xb3e1, 0x1c8e: 0xb2a9, 0x1c8f: 0xb339, 0x1c90: 0xb369, 0x1c91: 0xb2d9,
+ 0x1c92: 0xb381, 0x1c93: 0xb279, 0x1c94: 0xb2c1, 0x1c95: 0xb1d1, 0x1c96: 0xb1e9, 0x1c97: 0xb231,
+ 0x1c98: 0xb261, 0x1c99: 0xb2f1, 0x1c9a: 0xb321, 0x1c9b: 0xb351, 0x1c9c: 0x0040, 0x1c9d: 0x0040,
+ 0x1c9e: 0x0040, 0x1c9f: 0x0040, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0xb249,
+ 0x1ca4: 0x0040, 0x1ca5: 0xb411, 0x1ca6: 0xb291, 0x1ca7: 0xb219, 0x1ca8: 0xb309, 0x1ca9: 0xb429,
+ 0x1caa: 0x0040, 0x1cab: 0xb3b1, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339,
+ 0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0xb279, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1,
+ 0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0xb261, 0x1cb9: 0xb2f1, 0x1cba: 0xb321, 0x1cbb: 0xb351,
+ 0x1cbc: 0x0040, 0x1cbd: 0x0040, 0x1cbe: 0x0040, 0x1cbf: 0x0040,
+ // Block 0x73, offset 0x1cc0
+ 0x1cc0: 0x0040, 0x1cc1: 0xbca2, 0x1cc2: 0xbcba, 0x1cc3: 0xbcd2, 0x1cc4: 0xbcea, 0x1cc5: 0xbd02,
+ 0x1cc6: 0xbd1a, 0x1cc7: 0xbd32, 0x1cc8: 0xbd4a, 0x1cc9: 0xbd62, 0x1cca: 0xbd7a, 0x1ccb: 0x0018,
+ 0x1ccc: 0x0018, 0x1ccd: 0x0040, 0x1cce: 0x0040, 0x1ccf: 0x0040, 0x1cd0: 0xbd92, 0x1cd1: 0xbdb2,
+ 0x1cd2: 0xbdd2, 0x1cd3: 0xbdf2, 0x1cd4: 0xbe12, 0x1cd5: 0xbe32, 0x1cd6: 0xbe52, 0x1cd7: 0xbe72,
+ 0x1cd8: 0xbe92, 0x1cd9: 0xbeb2, 0x1cda: 0xbed2, 0x1cdb: 0xbef2, 0x1cdc: 0xbf12, 0x1cdd: 0xbf32,
+ 0x1cde: 0xbf52, 0x1cdf: 0xbf72, 0x1ce0: 0xbf92, 0x1ce1: 0xbfb2, 0x1ce2: 0xbfd2, 0x1ce3: 0xbff2,
+ 0x1ce4: 0xc012, 0x1ce5: 0xc032, 0x1ce6: 0xc052, 0x1ce7: 0xc072, 0x1ce8: 0xc092, 0x1ce9: 0xc0b2,
+ 0x1cea: 0xc0d1, 0x1ceb: 0x1159, 0x1cec: 0x0269, 0x1ced: 0x6671, 0x1cee: 0xc111, 0x1cef: 0x0040,
+ 0x1cf0: 0x0039, 0x1cf1: 0x0ee9, 0x1cf2: 0x1159, 0x1cf3: 0x0ef9, 0x1cf4: 0x0f09, 0x1cf5: 0x1199,
+ 0x1cf6: 0x0f31, 0x1cf7: 0x0249, 0x1cf8: 0x0f41, 0x1cf9: 0x0259, 0x1cfa: 0x0f51, 0x1cfb: 0x0359,
+ 0x1cfc: 0x0f61, 0x1cfd: 0x0f71, 0x1cfe: 0x00d9, 0x1cff: 0x0f99,
+ // Block 0x74, offset 0x1d00
+ 0x1d00: 0x2039, 0x1d01: 0x0269, 0x1d02: 0x01d9, 0x1d03: 0x0fa9, 0x1d04: 0x0fb9, 0x1d05: 0x1089,
+ 0x1d06: 0x0279, 0x1d07: 0x0369, 0x1d08: 0x0289, 0x1d09: 0x13d1, 0x1d0a: 0xc129, 0x1d0b: 0x65b1,
+ 0x1d0c: 0xc141, 0x1d0d: 0x1441, 0x1d0e: 0xc159, 0x1d0f: 0xc179, 0x1d10: 0x0018, 0x1d11: 0x0018,
+ 0x1d12: 0x0018, 0x1d13: 0x0018, 0x1d14: 0x0018, 0x1d15: 0x0018, 0x1d16: 0x0018, 0x1d17: 0x0018,
+ 0x1d18: 0x0018, 0x1d19: 0x0018, 0x1d1a: 0x0018, 0x1d1b: 0x0018, 0x1d1c: 0x0018, 0x1d1d: 0x0018,
+ 0x1d1e: 0x0018, 0x1d1f: 0x0018, 0x1d20: 0x0018, 0x1d21: 0x0018, 0x1d22: 0x0018, 0x1d23: 0x0018,
+ 0x1d24: 0x0018, 0x1d25: 0x0018, 0x1d26: 0x0018, 0x1d27: 0x0018, 0x1d28: 0x0018, 0x1d29: 0x0018,
+ 0x1d2a: 0xc191, 0x1d2b: 0xc1a9, 0x1d2c: 0x0040, 0x1d2d: 0x0040, 0x1d2e: 0x0040, 0x1d2f: 0x0040,
+ 0x1d30: 0x0018, 0x1d31: 0x0018, 0x1d32: 0x0018, 0x1d33: 0x0018, 0x1d34: 0x0018, 0x1d35: 0x0018,
+ 0x1d36: 0x0018, 0x1d37: 0x0018, 0x1d38: 0x0018, 0x1d39: 0x0018, 0x1d3a: 0x0018, 0x1d3b: 0x0018,
+ 0x1d3c: 0x0018, 0x1d3d: 0x0018, 0x1d3e: 0x0018, 0x1d3f: 0x0018,
+ // Block 0x75, offset 0x1d40
+ 0x1d40: 0xc1d9, 0x1d41: 0xc211, 0x1d42: 0xc249, 0x1d43: 0x0040, 0x1d44: 0x0040, 0x1d45: 0x0040,
+ 0x1d46: 0x0040, 0x1d47: 0x0040, 0x1d48: 0x0040, 0x1d49: 0x0040, 0x1d4a: 0x0040, 0x1d4b: 0x0040,
+ 0x1d4c: 0x0040, 0x1d4d: 0x0040, 0x1d4e: 0x0040, 0x1d4f: 0x0040, 0x1d50: 0xc269, 0x1d51: 0xc289,
+ 0x1d52: 0xc2a9, 0x1d53: 0xc2c9, 0x1d54: 0xc2e9, 0x1d55: 0xc309, 0x1d56: 0xc329, 0x1d57: 0xc349,
+ 0x1d58: 0xc369, 0x1d59: 0xc389, 0x1d5a: 0xc3a9, 0x1d5b: 0xc3c9, 0x1d5c: 0xc3e9, 0x1d5d: 0xc409,
+ 0x1d5e: 0xc429, 0x1d5f: 0xc449, 0x1d60: 0xc469, 0x1d61: 0xc489, 0x1d62: 0xc4a9, 0x1d63: 0xc4c9,
+ 0x1d64: 0xc4e9, 0x1d65: 0xc509, 0x1d66: 0xc529, 0x1d67: 0xc549, 0x1d68: 0xc569, 0x1d69: 0xc589,
+ 0x1d6a: 0xc5a9, 0x1d6b: 0xc5c9, 0x1d6c: 0xc5e9, 0x1d6d: 0xc609, 0x1d6e: 0xc629, 0x1d6f: 0xc649,
+ 0x1d70: 0xc669, 0x1d71: 0xc689, 0x1d72: 0xc6a9, 0x1d73: 0xc6c9, 0x1d74: 0xc6e9, 0x1d75: 0xc709,
+ 0x1d76: 0xc729, 0x1d77: 0xc749, 0x1d78: 0xc769, 0x1d79: 0xc789, 0x1d7a: 0xc7a9, 0x1d7b: 0xc7c9,
+ 0x1d7c: 0x0040, 0x1d7d: 0x0040, 0x1d7e: 0x0040, 0x1d7f: 0x0040,
+ // Block 0x76, offset 0x1d80
+ 0x1d80: 0xcaf9, 0x1d81: 0xcb19, 0x1d82: 0xcb39, 0x1d83: 0x8b1d, 0x1d84: 0xcb59, 0x1d85: 0xcb79,
+ 0x1d86: 0xcb99, 0x1d87: 0xcbb9, 0x1d88: 0xcbd9, 0x1d89: 0xcbf9, 0x1d8a: 0xcc19, 0x1d8b: 0xcc39,
+ 0x1d8c: 0xcc59, 0x1d8d: 0x8b3d, 0x1d8e: 0xcc79, 0x1d8f: 0xcc99, 0x1d90: 0xccb9, 0x1d91: 0xccd9,
+ 0x1d92: 0x8b5d, 0x1d93: 0xccf9, 0x1d94: 0xcd19, 0x1d95: 0xc429, 0x1d96: 0x8b7d, 0x1d97: 0xcd39,
+ 0x1d98: 0xcd59, 0x1d99: 0xcd79, 0x1d9a: 0xcd99, 0x1d9b: 0xcdb9, 0x1d9c: 0x8b9d, 0x1d9d: 0xcdd9,
+ 0x1d9e: 0xcdf9, 0x1d9f: 0xce19, 0x1da0: 0xce39, 0x1da1: 0xce59, 0x1da2: 0xc789, 0x1da3: 0xce79,
+ 0x1da4: 0xce99, 0x1da5: 0xceb9, 0x1da6: 0xced9, 0x1da7: 0xcef9, 0x1da8: 0xcf19, 0x1da9: 0xcf39,
+ 0x1daa: 0xcf59, 0x1dab: 0xcf79, 0x1dac: 0xcf99, 0x1dad: 0xcfb9, 0x1dae: 0xcfd9, 0x1daf: 0xcff9,
+ 0x1db0: 0xd019, 0x1db1: 0xd039, 0x1db2: 0xd039, 0x1db3: 0xd039, 0x1db4: 0x8bbd, 0x1db5: 0xd059,
+ 0x1db6: 0xd079, 0x1db7: 0xd099, 0x1db8: 0x8bdd, 0x1db9: 0xd0b9, 0x1dba: 0xd0d9, 0x1dbb: 0xd0f9,
+ 0x1dbc: 0xd119, 0x1dbd: 0xd139, 0x1dbe: 0xd159, 0x1dbf: 0xd179,
+ // Block 0x77, offset 0x1dc0
+ 0x1dc0: 0xd199, 0x1dc1: 0xd1b9, 0x1dc2: 0xd1d9, 0x1dc3: 0xd1f9, 0x1dc4: 0xd219, 0x1dc5: 0xd239,
+ 0x1dc6: 0xd239, 0x1dc7: 0xd259, 0x1dc8: 0xd279, 0x1dc9: 0xd299, 0x1dca: 0xd2b9, 0x1dcb: 0xd2d9,
+ 0x1dcc: 0xd2f9, 0x1dcd: 0xd319, 0x1dce: 0xd339, 0x1dcf: 0xd359, 0x1dd0: 0xd379, 0x1dd1: 0xd399,
+ 0x1dd2: 0xd3b9, 0x1dd3: 0xd3d9, 0x1dd4: 0xd3f9, 0x1dd5: 0xd419, 0x1dd6: 0xd439, 0x1dd7: 0xd459,
+ 0x1dd8: 0xd479, 0x1dd9: 0x8bfd, 0x1dda: 0xd499, 0x1ddb: 0xd4b9, 0x1ddc: 0xd4d9, 0x1ddd: 0xc309,
+ 0x1dde: 0xd4f9, 0x1ddf: 0xd519, 0x1de0: 0x8c1d, 0x1de1: 0x8c3d, 0x1de2: 0xd539, 0x1de3: 0xd559,
+ 0x1de4: 0xd579, 0x1de5: 0xd599, 0x1de6: 0xd5b9, 0x1de7: 0xd5d9, 0x1de8: 0x0040, 0x1de9: 0xd5f9,
+ 0x1dea: 0xd619, 0x1deb: 0xd619, 0x1dec: 0x8c5d, 0x1ded: 0xd639, 0x1dee: 0xd659, 0x1def: 0xd679,
+ 0x1df0: 0xd699, 0x1df1: 0x8c7d, 0x1df2: 0xd6b9, 0x1df3: 0xd6d9, 0x1df4: 0x0040, 0x1df5: 0xd6f9,
+ 0x1df6: 0xd719, 0x1df7: 0xd739, 0x1df8: 0xd759, 0x1df9: 0xd779, 0x1dfa: 0xd799, 0x1dfb: 0x8c9d,
+ 0x1dfc: 0xd7b9, 0x1dfd: 0x8cbd, 0x1dfe: 0xd7d9, 0x1dff: 0xd7f9,
+ // Block 0x78, offset 0x1e00
+ 0x1e00: 0xd819, 0x1e01: 0xd839, 0x1e02: 0xd859, 0x1e03: 0xd879, 0x1e04: 0xd899, 0x1e05: 0xd8b9,
+ 0x1e06: 0xd8d9, 0x1e07: 0xd8f9, 0x1e08: 0xd919, 0x1e09: 0x8cdd, 0x1e0a: 0xd939, 0x1e0b: 0xd959,
+ 0x1e0c: 0xd979, 0x1e0d: 0xd999, 0x1e0e: 0xd9b9, 0x1e0f: 0x8cfd, 0x1e10: 0xd9d9, 0x1e11: 0x8d1d,
+ 0x1e12: 0x8d3d, 0x1e13: 0xd9f9, 0x1e14: 0xda19, 0x1e15: 0xda19, 0x1e16: 0xda39, 0x1e17: 0x8d5d,
+ 0x1e18: 0x8d7d, 0x1e19: 0xda59, 0x1e1a: 0xda79, 0x1e1b: 0xda99, 0x1e1c: 0xdab9, 0x1e1d: 0xdad9,
+ 0x1e1e: 0xdaf9, 0x1e1f: 0xdb19, 0x1e20: 0xdb39, 0x1e21: 0xdb59, 0x1e22: 0xdb79, 0x1e23: 0xdb99,
+ 0x1e24: 0x8d9d, 0x1e25: 0xdbb9, 0x1e26: 0xdbd9, 0x1e27: 0xdbf9, 0x1e28: 0xdc19, 0x1e29: 0xdbf9,
+ 0x1e2a: 0xdc39, 0x1e2b: 0xdc59, 0x1e2c: 0xdc79, 0x1e2d: 0xdc99, 0x1e2e: 0xdcb9, 0x1e2f: 0xdcd9,
+ 0x1e30: 0xdcf9, 0x1e31: 0xdd19, 0x1e32: 0xdd39, 0x1e33: 0xdd59, 0x1e34: 0xdd79, 0x1e35: 0xdd99,
+ 0x1e36: 0xddb9, 0x1e37: 0xddd9, 0x1e38: 0x8dbd, 0x1e39: 0xddf9, 0x1e3a: 0xde19, 0x1e3b: 0xde39,
+ 0x1e3c: 0xde59, 0x1e3d: 0xde79, 0x1e3e: 0x8ddd, 0x1e3f: 0xde99,
+ // Block 0x79, offset 0x1e40
+ 0x1e40: 0xe599, 0x1e41: 0xe5b9, 0x1e42: 0xe5d9, 0x1e43: 0xe5f9, 0x1e44: 0xe619, 0x1e45: 0xe639,
+ 0x1e46: 0x8efd, 0x1e47: 0xe659, 0x1e48: 0xe679, 0x1e49: 0xe699, 0x1e4a: 0xe6b9, 0x1e4b: 0xe6d9,
+ 0x1e4c: 0xe6f9, 0x1e4d: 0x8f1d, 0x1e4e: 0xe719, 0x1e4f: 0xe739, 0x1e50: 0x8f3d, 0x1e51: 0x8f5d,
+ 0x1e52: 0xe759, 0x1e53: 0xe779, 0x1e54: 0xe799, 0x1e55: 0xe7b9, 0x1e56: 0xe7d9, 0x1e57: 0xe7f9,
+ 0x1e58: 0xe819, 0x1e59: 0xe839, 0x1e5a: 0xe859, 0x1e5b: 0x8f7d, 0x1e5c: 0xe879, 0x1e5d: 0x8f9d,
+ 0x1e5e: 0xe899, 0x1e5f: 0x0040, 0x1e60: 0xe8b9, 0x1e61: 0xe8d9, 0x1e62: 0xe8f9, 0x1e63: 0x8fbd,
+ 0x1e64: 0xe919, 0x1e65: 0xe939, 0x1e66: 0x8fdd, 0x1e67: 0x8ffd, 0x1e68: 0xe959, 0x1e69: 0xe979,
+ 0x1e6a: 0xe999, 0x1e6b: 0xe9b9, 0x1e6c: 0xe9d9, 0x1e6d: 0xe9d9, 0x1e6e: 0xe9f9, 0x1e6f: 0xea19,
+ 0x1e70: 0xea39, 0x1e71: 0xea59, 0x1e72: 0xea79, 0x1e73: 0xea99, 0x1e74: 0xeab9, 0x1e75: 0x901d,
+ 0x1e76: 0xead9, 0x1e77: 0x903d, 0x1e78: 0xeaf9, 0x1e79: 0x905d, 0x1e7a: 0xeb19, 0x1e7b: 0x907d,
+ 0x1e7c: 0x909d, 0x1e7d: 0x90bd, 0x1e7e: 0xeb39, 0x1e7f: 0xeb59,
+ // Block 0x7a, offset 0x1e80
+ 0x1e80: 0xeb79, 0x1e81: 0x90dd, 0x1e82: 0x90fd, 0x1e83: 0x911d, 0x1e84: 0x913d, 0x1e85: 0xeb99,
+ 0x1e86: 0xebb9, 0x1e87: 0xebb9, 0x1e88: 0xebd9, 0x1e89: 0xebf9, 0x1e8a: 0xec19, 0x1e8b: 0xec39,
+ 0x1e8c: 0xec59, 0x1e8d: 0x915d, 0x1e8e: 0xec79, 0x1e8f: 0xec99, 0x1e90: 0xecb9, 0x1e91: 0xecd9,
+ 0x1e92: 0x917d, 0x1e93: 0xecf9, 0x1e94: 0x919d, 0x1e95: 0x91bd, 0x1e96: 0xed19, 0x1e97: 0xed39,
+ 0x1e98: 0xed59, 0x1e99: 0xed79, 0x1e9a: 0xed99, 0x1e9b: 0xedb9, 0x1e9c: 0x91dd, 0x1e9d: 0x91fd,
+ 0x1e9e: 0x921d, 0x1e9f: 0x0040, 0x1ea0: 0xedd9, 0x1ea1: 0x923d, 0x1ea2: 0xedf9, 0x1ea3: 0xee19,
+ 0x1ea4: 0xee39, 0x1ea5: 0x925d, 0x1ea6: 0xee59, 0x1ea7: 0xee79, 0x1ea8: 0xee99, 0x1ea9: 0xeeb9,
+ 0x1eaa: 0xeed9, 0x1eab: 0x927d, 0x1eac: 0xeef9, 0x1ead: 0xef19, 0x1eae: 0xef39, 0x1eaf: 0xef59,
+ 0x1eb0: 0xef79, 0x1eb1: 0xef99, 0x1eb2: 0x929d, 0x1eb3: 0x92bd, 0x1eb4: 0xefb9, 0x1eb5: 0x92dd,
+ 0x1eb6: 0xefd9, 0x1eb7: 0x92fd, 0x1eb8: 0xeff9, 0x1eb9: 0xf019, 0x1eba: 0xf039, 0x1ebb: 0x931d,
+ 0x1ebc: 0x933d, 0x1ebd: 0xf059, 0x1ebe: 0x935d, 0x1ebf: 0xf079,
+ // Block 0x7b, offset 0x1ec0
+ 0x1ec0: 0xf6b9, 0x1ec1: 0xf6d9, 0x1ec2: 0xf6f9, 0x1ec3: 0xf719, 0x1ec4: 0xf739, 0x1ec5: 0x951d,
+ 0x1ec6: 0xf759, 0x1ec7: 0xf779, 0x1ec8: 0xf799, 0x1ec9: 0xf7b9, 0x1eca: 0xf7d9, 0x1ecb: 0x953d,
+ 0x1ecc: 0x955d, 0x1ecd: 0xf7f9, 0x1ece: 0xf819, 0x1ecf: 0xf839, 0x1ed0: 0xf859, 0x1ed1: 0xf879,
+ 0x1ed2: 0xf899, 0x1ed3: 0x957d, 0x1ed4: 0xf8b9, 0x1ed5: 0xf8d9, 0x1ed6: 0xf8f9, 0x1ed7: 0xf919,
+ 0x1ed8: 0x959d, 0x1ed9: 0x95bd, 0x1eda: 0xf939, 0x1edb: 0xf959, 0x1edc: 0xf979, 0x1edd: 0x95dd,
+ 0x1ede: 0xf999, 0x1edf: 0xf9b9, 0x1ee0: 0x6815, 0x1ee1: 0x95fd, 0x1ee2: 0xf9d9, 0x1ee3: 0xf9f9,
+ 0x1ee4: 0xfa19, 0x1ee5: 0x961d, 0x1ee6: 0xfa39, 0x1ee7: 0xfa59, 0x1ee8: 0xfa79, 0x1ee9: 0xfa99,
+ 0x1eea: 0xfab9, 0x1eeb: 0xfad9, 0x1eec: 0xfaf9, 0x1eed: 0x963d, 0x1eee: 0xfb19, 0x1eef: 0xfb39,
+ 0x1ef0: 0xfb59, 0x1ef1: 0x965d, 0x1ef2: 0xfb79, 0x1ef3: 0xfb99, 0x1ef4: 0xfbb9, 0x1ef5: 0xfbd9,
+ 0x1ef6: 0x7b35, 0x1ef7: 0x967d, 0x1ef8: 0xfbf9, 0x1ef9: 0xfc19, 0x1efa: 0xfc39, 0x1efb: 0x969d,
+ 0x1efc: 0xfc59, 0x1efd: 0x96bd, 0x1efe: 0xfc79, 0x1eff: 0xfc79,
+ // Block 0x7c, offset 0x1f00
+ 0x1f00: 0xfc99, 0x1f01: 0x96dd, 0x1f02: 0xfcb9, 0x1f03: 0xfcd9, 0x1f04: 0xfcf9, 0x1f05: 0xfd19,
+ 0x1f06: 0xfd39, 0x1f07: 0xfd59, 0x1f08: 0xfd79, 0x1f09: 0x96fd, 0x1f0a: 0xfd99, 0x1f0b: 0xfdb9,
+ 0x1f0c: 0xfdd9, 0x1f0d: 0xfdf9, 0x1f0e: 0xfe19, 0x1f0f: 0xfe39, 0x1f10: 0x971d, 0x1f11: 0xfe59,
+ 0x1f12: 0x973d, 0x1f13: 0x975d, 0x1f14: 0x977d, 0x1f15: 0xfe79, 0x1f16: 0xfe99, 0x1f17: 0xfeb9,
+ 0x1f18: 0xfed9, 0x1f19: 0xfef9, 0x1f1a: 0xff19, 0x1f1b: 0xff39, 0x1f1c: 0xff59, 0x1f1d: 0x979d,
+ 0x1f1e: 0x0040, 0x1f1f: 0x0040, 0x1f20: 0x0040, 0x1f21: 0x0040, 0x1f22: 0x0040, 0x1f23: 0x0040,
+ 0x1f24: 0x0040, 0x1f25: 0x0040, 0x1f26: 0x0040, 0x1f27: 0x0040, 0x1f28: 0x0040, 0x1f29: 0x0040,
+ 0x1f2a: 0x0040, 0x1f2b: 0x0040, 0x1f2c: 0x0040, 0x1f2d: 0x0040, 0x1f2e: 0x0040, 0x1f2f: 0x0040,
+ 0x1f30: 0x0040, 0x1f31: 0x0040, 0x1f32: 0x0040, 0x1f33: 0x0040, 0x1f34: 0x0040, 0x1f35: 0x0040,
+ 0x1f36: 0x0040, 0x1f37: 0x0040, 0x1f38: 0x0040, 0x1f39: 0x0040, 0x1f3a: 0x0040, 0x1f3b: 0x0040,
+ 0x1f3c: 0x0040, 0x1f3d: 0x0040, 0x1f3e: 0x0040, 0x1f3f: 0x0040,
+}
+
+// idnaIndex: 35 blocks, 2240 entries, 4480 bytes
+// Block 0 is the zero block.
+var idnaIndex = [2240]uint16{
+ // Block 0x0, offset 0x0
+ // Block 0x1, offset 0x40
+ // Block 0x2, offset 0x80
+ // Block 0x3, offset 0xc0
+ 0xc2: 0x01, 0xc3: 0x7b, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05,
+ 0xc8: 0x06, 0xc9: 0x7c, 0xca: 0x7d, 0xcb: 0x07, 0xcc: 0x7e, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a,
+ 0xd0: 0x7f, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x80, 0xd6: 0x81, 0xd7: 0x82,
+ 0xd8: 0x0f, 0xd9: 0x83, 0xda: 0x84, 0xdb: 0x10, 0xdc: 0x11, 0xdd: 0x85, 0xde: 0x86, 0xdf: 0x87,
+ 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07,
+ 0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x0a, 0xee: 0x0b, 0xef: 0x0c,
+ 0xf0: 0x1c, 0xf1: 0x1d, 0xf2: 0x1d, 0xf3: 0x1f, 0xf4: 0x20,
+ // Block 0x4, offset 0x100
+ 0x120: 0x88, 0x121: 0x89, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x12, 0x126: 0x13, 0x127: 0x14,
+ 0x128: 0x15, 0x129: 0x16, 0x12a: 0x17, 0x12b: 0x18, 0x12c: 0x19, 0x12d: 0x1a, 0x12e: 0x1b, 0x12f: 0x8d,
+ 0x130: 0x8e, 0x131: 0x1c, 0x132: 0x1d, 0x133: 0x1e, 0x134: 0x8f, 0x135: 0x1f, 0x136: 0x90, 0x137: 0x91,
+ 0x138: 0x92, 0x139: 0x93, 0x13a: 0x20, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x21, 0x13e: 0x22, 0x13f: 0x96,
+ // Block 0x5, offset 0x140
+ 0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9b, 0x147: 0x9b,
+ 0x148: 0x9d, 0x149: 0x9e, 0x14a: 0x9f, 0x14b: 0xa0, 0x14c: 0xa1, 0x14d: 0xa2, 0x14e: 0xa3, 0x14f: 0xa4,
+ 0x150: 0xa5, 0x151: 0x9d, 0x152: 0x9d, 0x153: 0x9d, 0x154: 0x9d, 0x155: 0x9d, 0x156: 0x9d, 0x157: 0x9d,
+ 0x158: 0x9d, 0x159: 0xa6, 0x15a: 0xa7, 0x15b: 0xa8, 0x15c: 0xa9, 0x15d: 0xaa, 0x15e: 0xab, 0x15f: 0xac,
+ 0x160: 0xad, 0x161: 0xae, 0x162: 0xaf, 0x163: 0xb0, 0x164: 0xb1, 0x165: 0xb2, 0x166: 0xb3, 0x167: 0xb4,
+ 0x168: 0xb5, 0x169: 0xb6, 0x16a: 0xb7, 0x16b: 0xb8, 0x16c: 0xb9, 0x16d: 0xba, 0x16e: 0xbb, 0x16f: 0xbc,
+ 0x170: 0xbd, 0x171: 0xbe, 0x172: 0xbf, 0x173: 0xc0, 0x174: 0x23, 0x175: 0x24, 0x176: 0x25, 0x177: 0xc1,
+ 0x178: 0x26, 0x179: 0x26, 0x17a: 0x27, 0x17b: 0x26, 0x17c: 0xc2, 0x17d: 0x28, 0x17e: 0x29, 0x17f: 0x2a,
+ // Block 0x6, offset 0x180
+ 0x180: 0x2b, 0x181: 0x2c, 0x182: 0x2d, 0x183: 0xc3, 0x184: 0x2e, 0x185: 0x2f, 0x186: 0xc4, 0x187: 0x9b,
+ 0x188: 0xc5, 0x189: 0xc6, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc7, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0xc8,
+ 0x190: 0xc9, 0x191: 0x30, 0x192: 0x31, 0x193: 0x32, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b,
+ 0x198: 0x9b, 0x199: 0x9b, 0x19a: 0x9b, 0x19b: 0x9b, 0x19c: 0x9b, 0x19d: 0x9b, 0x19e: 0x9b, 0x19f: 0x9b,
+ 0x1a0: 0x9b, 0x1a1: 0x9b, 0x1a2: 0x9b, 0x1a3: 0x9b, 0x1a4: 0x9b, 0x1a5: 0x9b, 0x1a6: 0x9b, 0x1a7: 0x9b,
+ 0x1a8: 0xca, 0x1a9: 0xcb, 0x1aa: 0x9b, 0x1ab: 0xcc, 0x1ac: 0x9b, 0x1ad: 0xcd, 0x1ae: 0xce, 0x1af: 0xcf,
+ 0x1b0: 0xd0, 0x1b1: 0x33, 0x1b2: 0x26, 0x1b3: 0x34, 0x1b4: 0xd1, 0x1b5: 0xd2, 0x1b6: 0xd3, 0x1b7: 0xd4,
+ 0x1b8: 0xd5, 0x1b9: 0xd6, 0x1ba: 0xd7, 0x1bb: 0xd8, 0x1bc: 0xd9, 0x1bd: 0xda, 0x1be: 0xdb, 0x1bf: 0x35,
+ // Block 0x7, offset 0x1c0
+ 0x1c0: 0x36, 0x1c1: 0xdc, 0x1c2: 0xdd, 0x1c3: 0xde, 0x1c4: 0xdf, 0x1c5: 0x37, 0x1c6: 0x38, 0x1c7: 0xe0,
+ 0x1c8: 0xe1, 0x1c9: 0x39, 0x1ca: 0x3a, 0x1cb: 0x3b, 0x1cc: 0x3c, 0x1cd: 0x3d, 0x1ce: 0x3e, 0x1cf: 0x3f,
+ 0x1d0: 0x9d, 0x1d1: 0x9d, 0x1d2: 0x9d, 0x1d3: 0x9d, 0x1d4: 0x9d, 0x1d5: 0x9d, 0x1d6: 0x9d, 0x1d7: 0x9d,
+ 0x1d8: 0x9d, 0x1d9: 0x9d, 0x1da: 0x9d, 0x1db: 0x9d, 0x1dc: 0x9d, 0x1dd: 0x9d, 0x1de: 0x9d, 0x1df: 0x9d,
+ 0x1e0: 0x9d, 0x1e1: 0x9d, 0x1e2: 0x9d, 0x1e3: 0x9d, 0x1e4: 0x9d, 0x1e5: 0x9d, 0x1e6: 0x9d, 0x1e7: 0x9d,
+ 0x1e8: 0x9d, 0x1e9: 0x9d, 0x1ea: 0x9d, 0x1eb: 0x9d, 0x1ec: 0x9d, 0x1ed: 0x9d, 0x1ee: 0x9d, 0x1ef: 0x9d,
+ 0x1f0: 0x9d, 0x1f1: 0x9d, 0x1f2: 0x9d, 0x1f3: 0x9d, 0x1f4: 0x9d, 0x1f5: 0x9d, 0x1f6: 0x9d, 0x1f7: 0x9d,
+ 0x1f8: 0x9d, 0x1f9: 0x9d, 0x1fa: 0x9d, 0x1fb: 0x9d, 0x1fc: 0x9d, 0x1fd: 0x9d, 0x1fe: 0x9d, 0x1ff: 0x9d,
+ // Block 0x8, offset 0x200
+ 0x200: 0x9d, 0x201: 0x9d, 0x202: 0x9d, 0x203: 0x9d, 0x204: 0x9d, 0x205: 0x9d, 0x206: 0x9d, 0x207: 0x9d,
+ 0x208: 0x9d, 0x209: 0x9d, 0x20a: 0x9d, 0x20b: 0x9d, 0x20c: 0x9d, 0x20d: 0x9d, 0x20e: 0x9d, 0x20f: 0x9d,
+ 0x210: 0x9d, 0x211: 0x9d, 0x212: 0x9d, 0x213: 0x9d, 0x214: 0x9d, 0x215: 0x9d, 0x216: 0x9d, 0x217: 0x9d,
+ 0x218: 0x9d, 0x219: 0x9d, 0x21a: 0x9d, 0x21b: 0x9d, 0x21c: 0x9d, 0x21d: 0x9d, 0x21e: 0x9d, 0x21f: 0x9d,
+ 0x220: 0x9d, 0x221: 0x9d, 0x222: 0x9d, 0x223: 0x9d, 0x224: 0x9d, 0x225: 0x9d, 0x226: 0x9d, 0x227: 0x9d,
+ 0x228: 0x9d, 0x229: 0x9d, 0x22a: 0x9d, 0x22b: 0x9d, 0x22c: 0x9d, 0x22d: 0x9d, 0x22e: 0x9d, 0x22f: 0x9d,
+ 0x230: 0x9d, 0x231: 0x9d, 0x232: 0x9d, 0x233: 0x9d, 0x234: 0x9d, 0x235: 0x9d, 0x236: 0xb0, 0x237: 0x9b,
+ 0x238: 0x9d, 0x239: 0x9d, 0x23a: 0x9d, 0x23b: 0x9d, 0x23c: 0x9d, 0x23d: 0x9d, 0x23e: 0x9d, 0x23f: 0x9d,
+ // Block 0x9, offset 0x240
+ 0x240: 0x9d, 0x241: 0x9d, 0x242: 0x9d, 0x243: 0x9d, 0x244: 0x9d, 0x245: 0x9d, 0x246: 0x9d, 0x247: 0x9d,
+ 0x248: 0x9d, 0x249: 0x9d, 0x24a: 0x9d, 0x24b: 0x9d, 0x24c: 0x9d, 0x24d: 0x9d, 0x24e: 0x9d, 0x24f: 0x9d,
+ 0x250: 0x9d, 0x251: 0x9d, 0x252: 0x9d, 0x253: 0x9d, 0x254: 0x9d, 0x255: 0x9d, 0x256: 0x9d, 0x257: 0x9d,
+ 0x258: 0x9d, 0x259: 0x9d, 0x25a: 0x9d, 0x25b: 0x9d, 0x25c: 0x9d, 0x25d: 0x9d, 0x25e: 0x9d, 0x25f: 0x9d,
+ 0x260: 0x9d, 0x261: 0x9d, 0x262: 0x9d, 0x263: 0x9d, 0x264: 0x9d, 0x265: 0x9d, 0x266: 0x9d, 0x267: 0x9d,
+ 0x268: 0x9d, 0x269: 0x9d, 0x26a: 0x9d, 0x26b: 0x9d, 0x26c: 0x9d, 0x26d: 0x9d, 0x26e: 0x9d, 0x26f: 0x9d,
+ 0x270: 0x9d, 0x271: 0x9d, 0x272: 0x9d, 0x273: 0x9d, 0x274: 0x9d, 0x275: 0x9d, 0x276: 0x9d, 0x277: 0x9d,
+ 0x278: 0x9d, 0x279: 0x9d, 0x27a: 0x9d, 0x27b: 0x9d, 0x27c: 0x9d, 0x27d: 0x9d, 0x27e: 0x9d, 0x27f: 0x9d,
+ // Block 0xa, offset 0x280
+ 0x280: 0x9d, 0x281: 0x9d, 0x282: 0x9d, 0x283: 0x9d, 0x284: 0x9d, 0x285: 0x9d, 0x286: 0x9d, 0x287: 0x9d,
+ 0x288: 0x9d, 0x289: 0x9d, 0x28a: 0x9d, 0x28b: 0x9d, 0x28c: 0x9d, 0x28d: 0x9d, 0x28e: 0x9d, 0x28f: 0x9d,
+ 0x290: 0x9d, 0x291: 0x9d, 0x292: 0x9d, 0x293: 0x9d, 0x294: 0x9d, 0x295: 0x9d, 0x296: 0x9d, 0x297: 0x9d,
+ 0x298: 0x9d, 0x299: 0x9d, 0x29a: 0x9d, 0x29b: 0x9d, 0x29c: 0x9d, 0x29d: 0x9d, 0x29e: 0x9d, 0x29f: 0x9d,
+ 0x2a0: 0x9d, 0x2a1: 0x9d, 0x2a2: 0x9d, 0x2a3: 0x9d, 0x2a4: 0x9d, 0x2a5: 0x9d, 0x2a6: 0x9d, 0x2a7: 0x9d,
+ 0x2a8: 0x9d, 0x2a9: 0x9d, 0x2aa: 0x9d, 0x2ab: 0x9d, 0x2ac: 0x9d, 0x2ad: 0x9d, 0x2ae: 0x9d, 0x2af: 0x9d,
+ 0x2b0: 0x9d, 0x2b1: 0x9d, 0x2b2: 0x9d, 0x2b3: 0x9d, 0x2b4: 0x9d, 0x2b5: 0x9d, 0x2b6: 0x9d, 0x2b7: 0x9d,
+ 0x2b8: 0x9d, 0x2b9: 0x9d, 0x2ba: 0x9d, 0x2bb: 0x9d, 0x2bc: 0x9d, 0x2bd: 0x9d, 0x2be: 0x9d, 0x2bf: 0xe2,
+ // Block 0xb, offset 0x2c0
+ 0x2c0: 0x9d, 0x2c1: 0x9d, 0x2c2: 0x9d, 0x2c3: 0x9d, 0x2c4: 0x9d, 0x2c5: 0x9d, 0x2c6: 0x9d, 0x2c7: 0x9d,
+ 0x2c8: 0x9d, 0x2c9: 0x9d, 0x2ca: 0x9d, 0x2cb: 0x9d, 0x2cc: 0x9d, 0x2cd: 0x9d, 0x2ce: 0x9d, 0x2cf: 0x9d,
+ 0x2d0: 0x9d, 0x2d1: 0x9d, 0x2d2: 0xe3, 0x2d3: 0xe4, 0x2d4: 0x9d, 0x2d5: 0x9d, 0x2d6: 0x9d, 0x2d7: 0x9d,
+ 0x2d8: 0xe5, 0x2d9: 0x40, 0x2da: 0x41, 0x2db: 0xe6, 0x2dc: 0x42, 0x2dd: 0x43, 0x2de: 0x44, 0x2df: 0xe7,
+ 0x2e0: 0xe8, 0x2e1: 0xe9, 0x2e2: 0xea, 0x2e3: 0xeb, 0x2e4: 0xec, 0x2e5: 0xed, 0x2e6: 0xee, 0x2e7: 0xef,
+ 0x2e8: 0xf0, 0x2e9: 0xf1, 0x2ea: 0xf2, 0x2eb: 0xf3, 0x2ec: 0xf4, 0x2ed: 0xf5, 0x2ee: 0xf6, 0x2ef: 0xf7,
+ 0x2f0: 0x9d, 0x2f1: 0x9d, 0x2f2: 0x9d, 0x2f3: 0x9d, 0x2f4: 0x9d, 0x2f5: 0x9d, 0x2f6: 0x9d, 0x2f7: 0x9d,
+ 0x2f8: 0x9d, 0x2f9: 0x9d, 0x2fa: 0x9d, 0x2fb: 0x9d, 0x2fc: 0x9d, 0x2fd: 0x9d, 0x2fe: 0x9d, 0x2ff: 0x9d,
+ // Block 0xc, offset 0x300
+ 0x300: 0x9d, 0x301: 0x9d, 0x302: 0x9d, 0x303: 0x9d, 0x304: 0x9d, 0x305: 0x9d, 0x306: 0x9d, 0x307: 0x9d,
+ 0x308: 0x9d, 0x309: 0x9d, 0x30a: 0x9d, 0x30b: 0x9d, 0x30c: 0x9d, 0x30d: 0x9d, 0x30e: 0x9d, 0x30f: 0x9d,
+ 0x310: 0x9d, 0x311: 0x9d, 0x312: 0x9d, 0x313: 0x9d, 0x314: 0x9d, 0x315: 0x9d, 0x316: 0x9d, 0x317: 0x9d,
+ 0x318: 0x9d, 0x319: 0x9d, 0x31a: 0x9d, 0x31b: 0x9d, 0x31c: 0x9d, 0x31d: 0x9d, 0x31e: 0xf8, 0x31f: 0xf9,
+ // Block 0xd, offset 0x340
+ 0x340: 0xb8, 0x341: 0xb8, 0x342: 0xb8, 0x343: 0xb8, 0x344: 0xb8, 0x345: 0xb8, 0x346: 0xb8, 0x347: 0xb8,
+ 0x348: 0xb8, 0x349: 0xb8, 0x34a: 0xb8, 0x34b: 0xb8, 0x34c: 0xb8, 0x34d: 0xb8, 0x34e: 0xb8, 0x34f: 0xb8,
+ 0x350: 0xb8, 0x351: 0xb8, 0x352: 0xb8, 0x353: 0xb8, 0x354: 0xb8, 0x355: 0xb8, 0x356: 0xb8, 0x357: 0xb8,
+ 0x358: 0xb8, 0x359: 0xb8, 0x35a: 0xb8, 0x35b: 0xb8, 0x35c: 0xb8, 0x35d: 0xb8, 0x35e: 0xb8, 0x35f: 0xb8,
+ 0x360: 0xb8, 0x361: 0xb8, 0x362: 0xb8, 0x363: 0xb8, 0x364: 0xb8, 0x365: 0xb8, 0x366: 0xb8, 0x367: 0xb8,
+ 0x368: 0xb8, 0x369: 0xb8, 0x36a: 0xb8, 0x36b: 0xb8, 0x36c: 0xb8, 0x36d: 0xb8, 0x36e: 0xb8, 0x36f: 0xb8,
+ 0x370: 0xb8, 0x371: 0xb8, 0x372: 0xb8, 0x373: 0xb8, 0x374: 0xb8, 0x375: 0xb8, 0x376: 0xb8, 0x377: 0xb8,
+ 0x378: 0xb8, 0x379: 0xb8, 0x37a: 0xb8, 0x37b: 0xb8, 0x37c: 0xb8, 0x37d: 0xb8, 0x37e: 0xb8, 0x37f: 0xb8,
+ // Block 0xe, offset 0x380
+ 0x380: 0xb8, 0x381: 0xb8, 0x382: 0xb8, 0x383: 0xb8, 0x384: 0xb8, 0x385: 0xb8, 0x386: 0xb8, 0x387: 0xb8,
+ 0x388: 0xb8, 0x389: 0xb8, 0x38a: 0xb8, 0x38b: 0xb8, 0x38c: 0xb8, 0x38d: 0xb8, 0x38e: 0xb8, 0x38f: 0xb8,
+ 0x390: 0xb8, 0x391: 0xb8, 0x392: 0xb8, 0x393: 0xb8, 0x394: 0xb8, 0x395: 0xb8, 0x396: 0xb8, 0x397: 0xb8,
+ 0x398: 0xb8, 0x399: 0xb8, 0x39a: 0xb8, 0x39b: 0xb8, 0x39c: 0xb8, 0x39d: 0xb8, 0x39e: 0xb8, 0x39f: 0xb8,
+ 0x3a0: 0xb8, 0x3a1: 0xb8, 0x3a2: 0xb8, 0x3a3: 0xb8, 0x3a4: 0xfa, 0x3a5: 0xfb, 0x3a6: 0xfc, 0x3a7: 0xfd,
+ 0x3a8: 0x45, 0x3a9: 0xfe, 0x3aa: 0xff, 0x3ab: 0x46, 0x3ac: 0x47, 0x3ad: 0x48, 0x3ae: 0x49, 0x3af: 0x4a,
+ 0x3b0: 0x100, 0x3b1: 0x4b, 0x3b2: 0x4c, 0x3b3: 0x4d, 0x3b4: 0x4e, 0x3b5: 0x4f, 0x3b6: 0x101, 0x3b7: 0x50,
+ 0x3b8: 0x51, 0x3b9: 0x52, 0x3ba: 0x53, 0x3bb: 0x54, 0x3bc: 0x55, 0x3bd: 0x56, 0x3be: 0x57, 0x3bf: 0x58,
+ // Block 0xf, offset 0x3c0
+ 0x3c0: 0x102, 0x3c1: 0x103, 0x3c2: 0x9d, 0x3c3: 0x104, 0x3c4: 0x105, 0x3c5: 0x9b, 0x3c6: 0x106, 0x3c7: 0x107,
+ 0x3c8: 0xb8, 0x3c9: 0xb8, 0x3ca: 0x108, 0x3cb: 0x109, 0x3cc: 0x10a, 0x3cd: 0x10b, 0x3ce: 0x10c, 0x3cf: 0x10d,
+ 0x3d0: 0x10e, 0x3d1: 0x9d, 0x3d2: 0x10f, 0x3d3: 0x110, 0x3d4: 0x111, 0x3d5: 0x112, 0x3d6: 0xb8, 0x3d7: 0xb8,
+ 0x3d8: 0x9d, 0x3d9: 0x9d, 0x3da: 0x9d, 0x3db: 0x9d, 0x3dc: 0x113, 0x3dd: 0x114, 0x3de: 0xb8, 0x3df: 0xb8,
+ 0x3e0: 0x115, 0x3e1: 0x116, 0x3e2: 0x117, 0x3e3: 0x118, 0x3e4: 0x119, 0x3e5: 0xb8, 0x3e6: 0x11a, 0x3e7: 0x11b,
+ 0x3e8: 0x11c, 0x3e9: 0x11d, 0x3ea: 0x11e, 0x3eb: 0x59, 0x3ec: 0x11f, 0x3ed: 0x120, 0x3ee: 0x5a, 0x3ef: 0xb8,
+ 0x3f0: 0x9d, 0x3f1: 0x121, 0x3f2: 0x122, 0x3f3: 0x123, 0x3f4: 0xb8, 0x3f5: 0xb8, 0x3f6: 0xb8, 0x3f7: 0xb8,
+ 0x3f8: 0xb8, 0x3f9: 0x124, 0x3fa: 0xb8, 0x3fb: 0xb8, 0x3fc: 0xb8, 0x3fd: 0xb8, 0x3fe: 0xb8, 0x3ff: 0xb8,
+ // Block 0x10, offset 0x400
+ 0x400: 0x125, 0x401: 0x126, 0x402: 0x127, 0x403: 0x128, 0x404: 0x129, 0x405: 0x12a, 0x406: 0x12b, 0x407: 0x12c,
+ 0x408: 0x12d, 0x409: 0xb8, 0x40a: 0x12e, 0x40b: 0x12f, 0x40c: 0x5b, 0x40d: 0x5c, 0x40e: 0xb8, 0x40f: 0xb8,
+ 0x410: 0x130, 0x411: 0x131, 0x412: 0x132, 0x413: 0x133, 0x414: 0xb8, 0x415: 0xb8, 0x416: 0x134, 0x417: 0x135,
+ 0x418: 0x136, 0x419: 0x137, 0x41a: 0x138, 0x41b: 0x139, 0x41c: 0x13a, 0x41d: 0xb8, 0x41e: 0xb8, 0x41f: 0xb8,
+ 0x420: 0xb8, 0x421: 0xb8, 0x422: 0x13b, 0x423: 0x13c, 0x424: 0xb8, 0x425: 0xb8, 0x426: 0xb8, 0x427: 0xb8,
+ 0x428: 0xb8, 0x429: 0xb8, 0x42a: 0xb8, 0x42b: 0x13d, 0x42c: 0xb8, 0x42d: 0xb8, 0x42e: 0xb8, 0x42f: 0xb8,
+ 0x430: 0x13e, 0x431: 0x13f, 0x432: 0x140, 0x433: 0xb8, 0x434: 0xb8, 0x435: 0xb8, 0x436: 0xb8, 0x437: 0xb8,
+ 0x438: 0xb8, 0x439: 0xb8, 0x43a: 0xb8, 0x43b: 0xb8, 0x43c: 0xb8, 0x43d: 0xb8, 0x43e: 0xb8, 0x43f: 0xb8,
+ // Block 0x11, offset 0x440
+ 0x440: 0x9d, 0x441: 0x9d, 0x442: 0x9d, 0x443: 0x9d, 0x444: 0x9d, 0x445: 0x9d, 0x446: 0x9d, 0x447: 0x9d,
+ 0x448: 0x9d, 0x449: 0x9d, 0x44a: 0x9d, 0x44b: 0x9d, 0x44c: 0x9d, 0x44d: 0x9d, 0x44e: 0x141, 0x44f: 0xb8,
+ 0x450: 0x9b, 0x451: 0x142, 0x452: 0x9d, 0x453: 0x9d, 0x454: 0x9d, 0x455: 0x143, 0x456: 0xb8, 0x457: 0xb8,
+ 0x458: 0xb8, 0x459: 0xb8, 0x45a: 0xb8, 0x45b: 0xb8, 0x45c: 0xb8, 0x45d: 0xb8, 0x45e: 0xb8, 0x45f: 0xb8,
+ 0x460: 0xb8, 0x461: 0xb8, 0x462: 0xb8, 0x463: 0xb8, 0x464: 0xb8, 0x465: 0xb8, 0x466: 0xb8, 0x467: 0xb8,
+ 0x468: 0xb8, 0x469: 0xb8, 0x46a: 0xb8, 0x46b: 0xb8, 0x46c: 0xb8, 0x46d: 0xb8, 0x46e: 0xb8, 0x46f: 0xb8,
+ 0x470: 0xb8, 0x471: 0xb8, 0x472: 0xb8, 0x473: 0xb8, 0x474: 0xb8, 0x475: 0xb8, 0x476: 0xb8, 0x477: 0xb8,
+ 0x478: 0xb8, 0x479: 0xb8, 0x47a: 0xb8, 0x47b: 0xb8, 0x47c: 0xb8, 0x47d: 0xb8, 0x47e: 0xb8, 0x47f: 0xb8,
+ // Block 0x12, offset 0x480
+ 0x480: 0x9d, 0x481: 0x9d, 0x482: 0x9d, 0x483: 0x9d, 0x484: 0x9d, 0x485: 0x9d, 0x486: 0x9d, 0x487: 0x9d,
+ 0x488: 0x9d, 0x489: 0x9d, 0x48a: 0x9d, 0x48b: 0x9d, 0x48c: 0x9d, 0x48d: 0x9d, 0x48e: 0x9d, 0x48f: 0x9d,
+ 0x490: 0x144, 0x491: 0xb8, 0x492: 0xb8, 0x493: 0xb8, 0x494: 0xb8, 0x495: 0xb8, 0x496: 0xb8, 0x497: 0xb8,
+ 0x498: 0xb8, 0x499: 0xb8, 0x49a: 0xb8, 0x49b: 0xb8, 0x49c: 0xb8, 0x49d: 0xb8, 0x49e: 0xb8, 0x49f: 0xb8,
+ 0x4a0: 0xb8, 0x4a1: 0xb8, 0x4a2: 0xb8, 0x4a3: 0xb8, 0x4a4: 0xb8, 0x4a5: 0xb8, 0x4a6: 0xb8, 0x4a7: 0xb8,
+ 0x4a8: 0xb8, 0x4a9: 0xb8, 0x4aa: 0xb8, 0x4ab: 0xb8, 0x4ac: 0xb8, 0x4ad: 0xb8, 0x4ae: 0xb8, 0x4af: 0xb8,
+ 0x4b0: 0xb8, 0x4b1: 0xb8, 0x4b2: 0xb8, 0x4b3: 0xb8, 0x4b4: 0xb8, 0x4b5: 0xb8, 0x4b6: 0xb8, 0x4b7: 0xb8,
+ 0x4b8: 0xb8, 0x4b9: 0xb8, 0x4ba: 0xb8, 0x4bb: 0xb8, 0x4bc: 0xb8, 0x4bd: 0xb8, 0x4be: 0xb8, 0x4bf: 0xb8,
+ // Block 0x13, offset 0x4c0
+ 0x4c0: 0xb8, 0x4c1: 0xb8, 0x4c2: 0xb8, 0x4c3: 0xb8, 0x4c4: 0xb8, 0x4c5: 0xb8, 0x4c6: 0xb8, 0x4c7: 0xb8,
+ 0x4c8: 0xb8, 0x4c9: 0xb8, 0x4ca: 0xb8, 0x4cb: 0xb8, 0x4cc: 0xb8, 0x4cd: 0xb8, 0x4ce: 0xb8, 0x4cf: 0xb8,
+ 0x4d0: 0x9d, 0x4d1: 0x9d, 0x4d2: 0x9d, 0x4d3: 0x9d, 0x4d4: 0x9d, 0x4d5: 0x9d, 0x4d6: 0x9d, 0x4d7: 0x9d,
+ 0x4d8: 0x9d, 0x4d9: 0x145, 0x4da: 0xb8, 0x4db: 0xb8, 0x4dc: 0xb8, 0x4dd: 0xb8, 0x4de: 0xb8, 0x4df: 0xb8,
+ 0x4e0: 0xb8, 0x4e1: 0xb8, 0x4e2: 0xb8, 0x4e3: 0xb8, 0x4e4: 0xb8, 0x4e5: 0xb8, 0x4e6: 0xb8, 0x4e7: 0xb8,
+ 0x4e8: 0xb8, 0x4e9: 0xb8, 0x4ea: 0xb8, 0x4eb: 0xb8, 0x4ec: 0xb8, 0x4ed: 0xb8, 0x4ee: 0xb8, 0x4ef: 0xb8,
+ 0x4f0: 0xb8, 0x4f1: 0xb8, 0x4f2: 0xb8, 0x4f3: 0xb8, 0x4f4: 0xb8, 0x4f5: 0xb8, 0x4f6: 0xb8, 0x4f7: 0xb8,
+ 0x4f8: 0xb8, 0x4f9: 0xb8, 0x4fa: 0xb8, 0x4fb: 0xb8, 0x4fc: 0xb8, 0x4fd: 0xb8, 0x4fe: 0xb8, 0x4ff: 0xb8,
+ // Block 0x14, offset 0x500
+ 0x500: 0xb8, 0x501: 0xb8, 0x502: 0xb8, 0x503: 0xb8, 0x504: 0xb8, 0x505: 0xb8, 0x506: 0xb8, 0x507: 0xb8,
+ 0x508: 0xb8, 0x509: 0xb8, 0x50a: 0xb8, 0x50b: 0xb8, 0x50c: 0xb8, 0x50d: 0xb8, 0x50e: 0xb8, 0x50f: 0xb8,
+ 0x510: 0xb8, 0x511: 0xb8, 0x512: 0xb8, 0x513: 0xb8, 0x514: 0xb8, 0x515: 0xb8, 0x516: 0xb8, 0x517: 0xb8,
+ 0x518: 0xb8, 0x519: 0xb8, 0x51a: 0xb8, 0x51b: 0xb8, 0x51c: 0xb8, 0x51d: 0xb8, 0x51e: 0xb8, 0x51f: 0xb8,
+ 0x520: 0x9d, 0x521: 0x9d, 0x522: 0x9d, 0x523: 0x9d, 0x524: 0x9d, 0x525: 0x9d, 0x526: 0x9d, 0x527: 0x9d,
+ 0x528: 0x13d, 0x529: 0x146, 0x52a: 0xb8, 0x52b: 0x147, 0x52c: 0x148, 0x52d: 0x149, 0x52e: 0x14a, 0x52f: 0xb8,
+ 0x530: 0xb8, 0x531: 0xb8, 0x532: 0xb8, 0x533: 0xb8, 0x534: 0xb8, 0x535: 0xb8, 0x536: 0xb8, 0x537: 0xb8,
+ 0x538: 0xb8, 0x539: 0xb8, 0x53a: 0xb8, 0x53b: 0xb8, 0x53c: 0x9d, 0x53d: 0x14b, 0x53e: 0x14c, 0x53f: 0x14d,
+ // Block 0x15, offset 0x540
+ 0x540: 0x9d, 0x541: 0x9d, 0x542: 0x9d, 0x543: 0x9d, 0x544: 0x9d, 0x545: 0x9d, 0x546: 0x9d, 0x547: 0x9d,
+ 0x548: 0x9d, 0x549: 0x9d, 0x54a: 0x9d, 0x54b: 0x9d, 0x54c: 0x9d, 0x54d: 0x9d, 0x54e: 0x9d, 0x54f: 0x9d,
+ 0x550: 0x9d, 0x551: 0x9d, 0x552: 0x9d, 0x553: 0x9d, 0x554: 0x9d, 0x555: 0x9d, 0x556: 0x9d, 0x557: 0x9d,
+ 0x558: 0x9d, 0x559: 0x9d, 0x55a: 0x9d, 0x55b: 0x9d, 0x55c: 0x9d, 0x55d: 0x9d, 0x55e: 0x9d, 0x55f: 0x14e,
+ 0x560: 0x9d, 0x561: 0x9d, 0x562: 0x9d, 0x563: 0x9d, 0x564: 0x9d, 0x565: 0x9d, 0x566: 0x9d, 0x567: 0x9d,
+ 0x568: 0x9d, 0x569: 0x9d, 0x56a: 0x9d, 0x56b: 0x14f, 0x56c: 0xb8, 0x56d: 0xb8, 0x56e: 0xb8, 0x56f: 0xb8,
+ 0x570: 0xb8, 0x571: 0xb8, 0x572: 0xb8, 0x573: 0xb8, 0x574: 0xb8, 0x575: 0xb8, 0x576: 0xb8, 0x577: 0xb8,
+ 0x578: 0xb8, 0x579: 0xb8, 0x57a: 0xb8, 0x57b: 0xb8, 0x57c: 0xb8, 0x57d: 0xb8, 0x57e: 0xb8, 0x57f: 0xb8,
+ // Block 0x16, offset 0x580
+ 0x580: 0x150, 0x581: 0xb8, 0x582: 0xb8, 0x583: 0xb8, 0x584: 0xb8, 0x585: 0xb8, 0x586: 0xb8, 0x587: 0xb8,
+ 0x588: 0xb8, 0x589: 0xb8, 0x58a: 0xb8, 0x58b: 0xb8, 0x58c: 0xb8, 0x58d: 0xb8, 0x58e: 0xb8, 0x58f: 0xb8,
+ 0x590: 0xb8, 0x591: 0xb8, 0x592: 0xb8, 0x593: 0xb8, 0x594: 0xb8, 0x595: 0xb8, 0x596: 0xb8, 0x597: 0xb8,
+ 0x598: 0xb8, 0x599: 0xb8, 0x59a: 0xb8, 0x59b: 0xb8, 0x59c: 0xb8, 0x59d: 0xb8, 0x59e: 0xb8, 0x59f: 0xb8,
+ 0x5a0: 0xb8, 0x5a1: 0xb8, 0x5a2: 0xb8, 0x5a3: 0xb8, 0x5a4: 0xb8, 0x5a5: 0xb8, 0x5a6: 0xb8, 0x5a7: 0xb8,
+ 0x5a8: 0xb8, 0x5a9: 0xb8, 0x5aa: 0xb8, 0x5ab: 0xb8, 0x5ac: 0xb8, 0x5ad: 0xb8, 0x5ae: 0xb8, 0x5af: 0xb8,
+ 0x5b0: 0x9d, 0x5b1: 0x151, 0x5b2: 0x152, 0x5b3: 0xb8, 0x5b4: 0xb8, 0x5b5: 0xb8, 0x5b6: 0xb8, 0x5b7: 0xb8,
+ 0x5b8: 0xb8, 0x5b9: 0xb8, 0x5ba: 0xb8, 0x5bb: 0xb8, 0x5bc: 0xb8, 0x5bd: 0xb8, 0x5be: 0xb8, 0x5bf: 0xb8,
+ // Block 0x17, offset 0x5c0
+ 0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x153, 0x5c4: 0x154, 0x5c5: 0x155, 0x5c6: 0x156, 0x5c7: 0x157,
+ 0x5c8: 0x9b, 0x5c9: 0x158, 0x5ca: 0xb8, 0x5cb: 0xb8, 0x5cc: 0x9b, 0x5cd: 0x159, 0x5ce: 0xb8, 0x5cf: 0xb8,
+ 0x5d0: 0x5d, 0x5d1: 0x5e, 0x5d2: 0x5f, 0x5d3: 0x60, 0x5d4: 0x61, 0x5d5: 0x62, 0x5d6: 0x63, 0x5d7: 0x64,
+ 0x5d8: 0x65, 0x5d9: 0x66, 0x5da: 0x67, 0x5db: 0x68, 0x5dc: 0x69, 0x5dd: 0x6a, 0x5de: 0x6b, 0x5df: 0x6c,
+ 0x5e0: 0x9b, 0x5e1: 0x9b, 0x5e2: 0x9b, 0x5e3: 0x9b, 0x5e4: 0x9b, 0x5e5: 0x9b, 0x5e6: 0x9b, 0x5e7: 0x9b,
+ 0x5e8: 0x15a, 0x5e9: 0x15b, 0x5ea: 0x15c, 0x5eb: 0xb8, 0x5ec: 0xb8, 0x5ed: 0xb8, 0x5ee: 0xb8, 0x5ef: 0xb8,
+ 0x5f0: 0xb8, 0x5f1: 0xb8, 0x5f2: 0xb8, 0x5f3: 0xb8, 0x5f4: 0xb8, 0x5f5: 0xb8, 0x5f6: 0xb8, 0x5f7: 0xb8,
+ 0x5f8: 0xb8, 0x5f9: 0xb8, 0x5fa: 0xb8, 0x5fb: 0xb8, 0x5fc: 0xb8, 0x5fd: 0xb8, 0x5fe: 0xb8, 0x5ff: 0xb8,
+ // Block 0x18, offset 0x600
+ 0x600: 0x15d, 0x601: 0xb8, 0x602: 0xb8, 0x603: 0xb8, 0x604: 0xb8, 0x605: 0xb8, 0x606: 0xb8, 0x607: 0xb8,
+ 0x608: 0xb8, 0x609: 0xb8, 0x60a: 0xb8, 0x60b: 0xb8, 0x60c: 0xb8, 0x60d: 0xb8, 0x60e: 0xb8, 0x60f: 0xb8,
+ 0x610: 0xb8, 0x611: 0xb8, 0x612: 0xb8, 0x613: 0xb8, 0x614: 0xb8, 0x615: 0xb8, 0x616: 0xb8, 0x617: 0xb8,
+ 0x618: 0xb8, 0x619: 0xb8, 0x61a: 0xb8, 0x61b: 0xb8, 0x61c: 0xb8, 0x61d: 0xb8, 0x61e: 0xb8, 0x61f: 0xb8,
+ 0x620: 0x9d, 0x621: 0x9d, 0x622: 0x9d, 0x623: 0x15e, 0x624: 0x6d, 0x625: 0x15f, 0x626: 0xb8, 0x627: 0xb8,
+ 0x628: 0xb8, 0x629: 0xb8, 0x62a: 0xb8, 0x62b: 0xb8, 0x62c: 0xb8, 0x62d: 0xb8, 0x62e: 0xb8, 0x62f: 0xb8,
+ 0x630: 0xb8, 0x631: 0xb8, 0x632: 0xb8, 0x633: 0xb8, 0x634: 0xb8, 0x635: 0xb8, 0x636: 0xb8, 0x637: 0xb8,
+ 0x638: 0x6e, 0x639: 0x6f, 0x63a: 0x70, 0x63b: 0x160, 0x63c: 0xb8, 0x63d: 0xb8, 0x63e: 0xb8, 0x63f: 0xb8,
+ // Block 0x19, offset 0x640
+ 0x640: 0x161, 0x641: 0x9b, 0x642: 0x162, 0x643: 0x163, 0x644: 0x71, 0x645: 0x72, 0x646: 0x164, 0x647: 0x165,
+ 0x648: 0x73, 0x649: 0x166, 0x64a: 0xb8, 0x64b: 0xb8, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b,
+ 0x650: 0x9b, 0x651: 0x9b, 0x652: 0x9b, 0x653: 0x9b, 0x654: 0x9b, 0x655: 0x9b, 0x656: 0x9b, 0x657: 0x9b,
+ 0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x167, 0x65c: 0x9b, 0x65d: 0x168, 0x65e: 0x9b, 0x65f: 0x169,
+ 0x660: 0x16a, 0x661: 0x16b, 0x662: 0x16c, 0x663: 0xb8, 0x664: 0x16d, 0x665: 0x16e, 0x666: 0x16f, 0x667: 0x170,
+ 0x668: 0xb8, 0x669: 0xb8, 0x66a: 0xb8, 0x66b: 0xb8, 0x66c: 0xb8, 0x66d: 0xb8, 0x66e: 0xb8, 0x66f: 0xb8,
+ 0x670: 0xb8, 0x671: 0xb8, 0x672: 0xb8, 0x673: 0xb8, 0x674: 0xb8, 0x675: 0xb8, 0x676: 0xb8, 0x677: 0xb8,
+ 0x678: 0xb8, 0x679: 0xb8, 0x67a: 0xb8, 0x67b: 0xb8, 0x67c: 0xb8, 0x67d: 0xb8, 0x67e: 0xb8, 0x67f: 0xb8,
+ // Block 0x1a, offset 0x680
+ 0x680: 0x9d, 0x681: 0x9d, 0x682: 0x9d, 0x683: 0x9d, 0x684: 0x9d, 0x685: 0x9d, 0x686: 0x9d, 0x687: 0x9d,
+ 0x688: 0x9d, 0x689: 0x9d, 0x68a: 0x9d, 0x68b: 0x9d, 0x68c: 0x9d, 0x68d: 0x9d, 0x68e: 0x9d, 0x68f: 0x9d,
+ 0x690: 0x9d, 0x691: 0x9d, 0x692: 0x9d, 0x693: 0x9d, 0x694: 0x9d, 0x695: 0x9d, 0x696: 0x9d, 0x697: 0x9d,
+ 0x698: 0x9d, 0x699: 0x9d, 0x69a: 0x9d, 0x69b: 0x171, 0x69c: 0x9d, 0x69d: 0x9d, 0x69e: 0x9d, 0x69f: 0x9d,
+ 0x6a0: 0x9d, 0x6a1: 0x9d, 0x6a2: 0x9d, 0x6a3: 0x9d, 0x6a4: 0x9d, 0x6a5: 0x9d, 0x6a6: 0x9d, 0x6a7: 0x9d,
+ 0x6a8: 0x9d, 0x6a9: 0x9d, 0x6aa: 0x9d, 0x6ab: 0x9d, 0x6ac: 0x9d, 0x6ad: 0x9d, 0x6ae: 0x9d, 0x6af: 0x9d,
+ 0x6b0: 0x9d, 0x6b1: 0x9d, 0x6b2: 0x9d, 0x6b3: 0x9d, 0x6b4: 0x9d, 0x6b5: 0x9d, 0x6b6: 0x9d, 0x6b7: 0x9d,
+ 0x6b8: 0x9d, 0x6b9: 0x9d, 0x6ba: 0x9d, 0x6bb: 0x9d, 0x6bc: 0x9d, 0x6bd: 0x9d, 0x6be: 0x9d, 0x6bf: 0x9d,
+ // Block 0x1b, offset 0x6c0
+ 0x6c0: 0x9d, 0x6c1: 0x9d, 0x6c2: 0x9d, 0x6c3: 0x9d, 0x6c4: 0x9d, 0x6c5: 0x9d, 0x6c6: 0x9d, 0x6c7: 0x9d,
+ 0x6c8: 0x9d, 0x6c9: 0x9d, 0x6ca: 0x9d, 0x6cb: 0x9d, 0x6cc: 0x9d, 0x6cd: 0x9d, 0x6ce: 0x9d, 0x6cf: 0x9d,
+ 0x6d0: 0x9d, 0x6d1: 0x9d, 0x6d2: 0x9d, 0x6d3: 0x9d, 0x6d4: 0x9d, 0x6d5: 0x9d, 0x6d6: 0x9d, 0x6d7: 0x9d,
+ 0x6d8: 0x9d, 0x6d9: 0x9d, 0x6da: 0x9d, 0x6db: 0x9d, 0x6dc: 0x172, 0x6dd: 0x9d, 0x6de: 0x9d, 0x6df: 0x9d,
+ 0x6e0: 0x173, 0x6e1: 0x9d, 0x6e2: 0x9d, 0x6e3: 0x9d, 0x6e4: 0x9d, 0x6e5: 0x9d, 0x6e6: 0x9d, 0x6e7: 0x9d,
+ 0x6e8: 0x9d, 0x6e9: 0x9d, 0x6ea: 0x9d, 0x6eb: 0x9d, 0x6ec: 0x9d, 0x6ed: 0x9d, 0x6ee: 0x9d, 0x6ef: 0x9d,
+ 0x6f0: 0x9d, 0x6f1: 0x9d, 0x6f2: 0x9d, 0x6f3: 0x9d, 0x6f4: 0x9d, 0x6f5: 0x9d, 0x6f6: 0x9d, 0x6f7: 0x9d,
+ 0x6f8: 0x9d, 0x6f9: 0x9d, 0x6fa: 0x9d, 0x6fb: 0x9d, 0x6fc: 0x9d, 0x6fd: 0x9d, 0x6fe: 0x9d, 0x6ff: 0x9d,
+ // Block 0x1c, offset 0x700
+ 0x700: 0x9d, 0x701: 0x9d, 0x702: 0x9d, 0x703: 0x9d, 0x704: 0x9d, 0x705: 0x9d, 0x706: 0x9d, 0x707: 0x9d,
+ 0x708: 0x9d, 0x709: 0x9d, 0x70a: 0x9d, 0x70b: 0x9d, 0x70c: 0x9d, 0x70d: 0x9d, 0x70e: 0x9d, 0x70f: 0x9d,
+ 0x710: 0x9d, 0x711: 0x9d, 0x712: 0x9d, 0x713: 0x9d, 0x714: 0x9d, 0x715: 0x9d, 0x716: 0x9d, 0x717: 0x9d,
+ 0x718: 0x9d, 0x719: 0x9d, 0x71a: 0x9d, 0x71b: 0x9d, 0x71c: 0x9d, 0x71d: 0x9d, 0x71e: 0x9d, 0x71f: 0x9d,
+ 0x720: 0x9d, 0x721: 0x9d, 0x722: 0x9d, 0x723: 0x9d, 0x724: 0x9d, 0x725: 0x9d, 0x726: 0x9d, 0x727: 0x9d,
+ 0x728: 0x9d, 0x729: 0x9d, 0x72a: 0x9d, 0x72b: 0x9d, 0x72c: 0x9d, 0x72d: 0x9d, 0x72e: 0x9d, 0x72f: 0x9d,
+ 0x730: 0x9d, 0x731: 0x9d, 0x732: 0x9d, 0x733: 0x9d, 0x734: 0x9d, 0x735: 0x9d, 0x736: 0x9d, 0x737: 0x9d,
+ 0x738: 0x9d, 0x739: 0x9d, 0x73a: 0x174, 0x73b: 0xb8, 0x73c: 0xb8, 0x73d: 0xb8, 0x73e: 0xb8, 0x73f: 0xb8,
+ // Block 0x1d, offset 0x740
+ 0x740: 0xb8, 0x741: 0xb8, 0x742: 0xb8, 0x743: 0xb8, 0x744: 0xb8, 0x745: 0xb8, 0x746: 0xb8, 0x747: 0xb8,
+ 0x748: 0xb8, 0x749: 0xb8, 0x74a: 0xb8, 0x74b: 0xb8, 0x74c: 0xb8, 0x74d: 0xb8, 0x74e: 0xb8, 0x74f: 0xb8,
+ 0x750: 0xb8, 0x751: 0xb8, 0x752: 0xb8, 0x753: 0xb8, 0x754: 0xb8, 0x755: 0xb8, 0x756: 0xb8, 0x757: 0xb8,
+ 0x758: 0xb8, 0x759: 0xb8, 0x75a: 0xb8, 0x75b: 0xb8, 0x75c: 0xb8, 0x75d: 0xb8, 0x75e: 0xb8, 0x75f: 0xb8,
+ 0x760: 0x74, 0x761: 0x75, 0x762: 0x76, 0x763: 0x175, 0x764: 0x77, 0x765: 0x78, 0x766: 0x176, 0x767: 0x79,
+ 0x768: 0x7a, 0x769: 0xb8, 0x76a: 0xb8, 0x76b: 0xb8, 0x76c: 0xb8, 0x76d: 0xb8, 0x76e: 0xb8, 0x76f: 0xb8,
+ 0x770: 0xb8, 0x771: 0xb8, 0x772: 0xb8, 0x773: 0xb8, 0x774: 0xb8, 0x775: 0xb8, 0x776: 0xb8, 0x777: 0xb8,
+ 0x778: 0xb8, 0x779: 0xb8, 0x77a: 0xb8, 0x77b: 0xb8, 0x77c: 0xb8, 0x77d: 0xb8, 0x77e: 0xb8, 0x77f: 0xb8,
+ // Block 0x1e, offset 0x780
+ 0x790: 0x0d, 0x791: 0x0e, 0x792: 0x0f, 0x793: 0x10, 0x794: 0x11, 0x795: 0x0b, 0x796: 0x12, 0x797: 0x07,
+ 0x798: 0x13, 0x799: 0x0b, 0x79a: 0x0b, 0x79b: 0x14, 0x79c: 0x0b, 0x79d: 0x15, 0x79e: 0x16, 0x79f: 0x17,
+ 0x7a0: 0x07, 0x7a1: 0x07, 0x7a2: 0x07, 0x7a3: 0x07, 0x7a4: 0x07, 0x7a5: 0x07, 0x7a6: 0x07, 0x7a7: 0x07,
+ 0x7a8: 0x07, 0x7a9: 0x07, 0x7aa: 0x18, 0x7ab: 0x19, 0x7ac: 0x1a, 0x7ad: 0x0b, 0x7ae: 0x0b, 0x7af: 0x1b,
+ 0x7b0: 0x0b, 0x7b1: 0x0b, 0x7b2: 0x0b, 0x7b3: 0x0b, 0x7b4: 0x0b, 0x7b5: 0x0b, 0x7b6: 0x0b, 0x7b7: 0x0b,
+ 0x7b8: 0x0b, 0x7b9: 0x0b, 0x7ba: 0x0b, 0x7bb: 0x0b, 0x7bc: 0x0b, 0x7bd: 0x0b, 0x7be: 0x0b, 0x7bf: 0x0b,
+ // Block 0x1f, offset 0x7c0
+ 0x7c0: 0x0b, 0x7c1: 0x0b, 0x7c2: 0x0b, 0x7c3: 0x0b, 0x7c4: 0x0b, 0x7c5: 0x0b, 0x7c6: 0x0b, 0x7c7: 0x0b,
+ 0x7c8: 0x0b, 0x7c9: 0x0b, 0x7ca: 0x0b, 0x7cb: 0x0b, 0x7cc: 0x0b, 0x7cd: 0x0b, 0x7ce: 0x0b, 0x7cf: 0x0b,
+ 0x7d0: 0x0b, 0x7d1: 0x0b, 0x7d2: 0x0b, 0x7d3: 0x0b, 0x7d4: 0x0b, 0x7d5: 0x0b, 0x7d6: 0x0b, 0x7d7: 0x0b,
+ 0x7d8: 0x0b, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x0b, 0x7dc: 0x0b, 0x7dd: 0x0b, 0x7de: 0x0b, 0x7df: 0x0b,
+ 0x7e0: 0x0b, 0x7e1: 0x0b, 0x7e2: 0x0b, 0x7e3: 0x0b, 0x7e4: 0x0b, 0x7e5: 0x0b, 0x7e6: 0x0b, 0x7e7: 0x0b,
+ 0x7e8: 0x0b, 0x7e9: 0x0b, 0x7ea: 0x0b, 0x7eb: 0x0b, 0x7ec: 0x0b, 0x7ed: 0x0b, 0x7ee: 0x0b, 0x7ef: 0x0b,
+ 0x7f0: 0x0b, 0x7f1: 0x0b, 0x7f2: 0x0b, 0x7f3: 0x0b, 0x7f4: 0x0b, 0x7f5: 0x0b, 0x7f6: 0x0b, 0x7f7: 0x0b,
+ 0x7f8: 0x0b, 0x7f9: 0x0b, 0x7fa: 0x0b, 0x7fb: 0x0b, 0x7fc: 0x0b, 0x7fd: 0x0b, 0x7fe: 0x0b, 0x7ff: 0x0b,
+ // Block 0x20, offset 0x800
+ 0x800: 0x177, 0x801: 0x178, 0x802: 0xb8, 0x803: 0xb8, 0x804: 0x179, 0x805: 0x179, 0x806: 0x179, 0x807: 0x17a,
+ 0x808: 0xb8, 0x809: 0xb8, 0x80a: 0xb8, 0x80b: 0xb8, 0x80c: 0xb8, 0x80d: 0xb8, 0x80e: 0xb8, 0x80f: 0xb8,
+ 0x810: 0xb8, 0x811: 0xb8, 0x812: 0xb8, 0x813: 0xb8, 0x814: 0xb8, 0x815: 0xb8, 0x816: 0xb8, 0x817: 0xb8,
+ 0x818: 0xb8, 0x819: 0xb8, 0x81a: 0xb8, 0x81b: 0xb8, 0x81c: 0xb8, 0x81d: 0xb8, 0x81e: 0xb8, 0x81f: 0xb8,
+ 0x820: 0xb8, 0x821: 0xb8, 0x822: 0xb8, 0x823: 0xb8, 0x824: 0xb8, 0x825: 0xb8, 0x826: 0xb8, 0x827: 0xb8,
+ 0x828: 0xb8, 0x829: 0xb8, 0x82a: 0xb8, 0x82b: 0xb8, 0x82c: 0xb8, 0x82d: 0xb8, 0x82e: 0xb8, 0x82f: 0xb8,
+ 0x830: 0xb8, 0x831: 0xb8, 0x832: 0xb8, 0x833: 0xb8, 0x834: 0xb8, 0x835: 0xb8, 0x836: 0xb8, 0x837: 0xb8,
+ 0x838: 0xb8, 0x839: 0xb8, 0x83a: 0xb8, 0x83b: 0xb8, 0x83c: 0xb8, 0x83d: 0xb8, 0x83e: 0xb8, 0x83f: 0xb8,
+ // Block 0x21, offset 0x840
+ 0x840: 0x0b, 0x841: 0x0b, 0x842: 0x0b, 0x843: 0x0b, 0x844: 0x0b, 0x845: 0x0b, 0x846: 0x0b, 0x847: 0x0b,
+ 0x848: 0x0b, 0x849: 0x0b, 0x84a: 0x0b, 0x84b: 0x0b, 0x84c: 0x0b, 0x84d: 0x0b, 0x84e: 0x0b, 0x84f: 0x0b,
+ 0x850: 0x0b, 0x851: 0x0b, 0x852: 0x0b, 0x853: 0x0b, 0x854: 0x0b, 0x855: 0x0b, 0x856: 0x0b, 0x857: 0x0b,
+ 0x858: 0x0b, 0x859: 0x0b, 0x85a: 0x0b, 0x85b: 0x0b, 0x85c: 0x0b, 0x85d: 0x0b, 0x85e: 0x0b, 0x85f: 0x0b,
+ 0x860: 0x1e, 0x861: 0x0b, 0x862: 0x0b, 0x863: 0x0b, 0x864: 0x0b, 0x865: 0x0b, 0x866: 0x0b, 0x867: 0x0b,
+ 0x868: 0x0b, 0x869: 0x0b, 0x86a: 0x0b, 0x86b: 0x0b, 0x86c: 0x0b, 0x86d: 0x0b, 0x86e: 0x0b, 0x86f: 0x0b,
+ 0x870: 0x0b, 0x871: 0x0b, 0x872: 0x0b, 0x873: 0x0b, 0x874: 0x0b, 0x875: 0x0b, 0x876: 0x0b, 0x877: 0x0b,
+ 0x878: 0x0b, 0x879: 0x0b, 0x87a: 0x0b, 0x87b: 0x0b, 0x87c: 0x0b, 0x87d: 0x0b, 0x87e: 0x0b, 0x87f: 0x0b,
+ // Block 0x22, offset 0x880
+ 0x880: 0x0b, 0x881: 0x0b, 0x882: 0x0b, 0x883: 0x0b, 0x884: 0x0b, 0x885: 0x0b, 0x886: 0x0b, 0x887: 0x0b,
+ 0x888: 0x0b, 0x889: 0x0b, 0x88a: 0x0b, 0x88b: 0x0b, 0x88c: 0x0b, 0x88d: 0x0b, 0x88e: 0x0b, 0x88f: 0x0b,
+}
+
+// idnaSparseOffset: 256 entries, 512 bytes
+var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x34, 0x3f, 0x4b, 0x5c, 0x60, 0x6f, 0x74, 0x7b, 0x87, 0x95, 0xa3, 0xa8, 0xb1, 0xc1, 0xcf, 0xdc, 0xe8, 0xf9, 0x103, 0x10a, 0x117, 0x128, 0x12f, 0x13a, 0x149, 0x157, 0x161, 0x163, 0x167, 0x169, 0x175, 0x180, 0x188, 0x18e, 0x194, 0x199, 0x19e, 0x1a1, 0x1a5, 0x1ab, 0x1b0, 0x1bc, 0x1c6, 0x1cc, 0x1dd, 0x1e7, 0x1ea, 0x1f2, 0x1f5, 0x202, 0x20a, 0x20e, 0x215, 0x21d, 0x22d, 0x239, 0x23b, 0x245, 0x251, 0x25d, 0x269, 0x271, 0x276, 0x280, 0x291, 0x295, 0x2a0, 0x2a4, 0x2ad, 0x2b5, 0x2bb, 0x2c0, 0x2c3, 0x2c6, 0x2ca, 0x2d0, 0x2d4, 0x2d8, 0x2de, 0x2e5, 0x2eb, 0x2f3, 0x2fa, 0x305, 0x30f, 0x313, 0x316, 0x31c, 0x320, 0x322, 0x325, 0x327, 0x32a, 0x334, 0x337, 0x346, 0x34a, 0x34f, 0x352, 0x356, 0x35b, 0x360, 0x366, 0x36c, 0x37b, 0x381, 0x385, 0x394, 0x399, 0x3a1, 0x3ab, 0x3b6, 0x3be, 0x3cf, 0x3d8, 0x3e8, 0x3f5, 0x3ff, 0x404, 0x411, 0x415, 0x41a, 0x41c, 0x420, 0x422, 0x426, 0x42f, 0x435, 0x439, 0x449, 0x453, 0x458, 0x45b, 0x461, 0x468, 0x46d, 0x471, 0x477, 0x47c, 0x485, 0x48a, 0x490, 0x497, 0x49e, 0x4a5, 0x4a9, 0x4ae, 0x4b1, 0x4b6, 0x4c2, 0x4c8, 0x4cd, 0x4d4, 0x4dc, 0x4e1, 0x4e5, 0x4f5, 0x4fc, 0x500, 0x504, 0x50b, 0x50e, 0x511, 0x515, 0x519, 0x51f, 0x528, 0x534, 0x53b, 0x544, 0x54c, 0x553, 0x561, 0x56e, 0x57b, 0x584, 0x588, 0x596, 0x59e, 0x5a9, 0x5b2, 0x5b8, 0x5c0, 0x5c9, 0x5d3, 0x5d6, 0x5e2, 0x5e5, 0x5ea, 0x5ed, 0x5f7, 0x600, 0x60c, 0x60f, 0x614, 0x617, 0x61a, 0x61d, 0x624, 0x62b, 0x62f, 0x63a, 0x63d, 0x643, 0x648, 0x64c, 0x64f, 0x652, 0x655, 0x65a, 0x664, 0x667, 0x66b, 0x67a, 0x686, 0x68a, 0x68f, 0x694, 0x698, 0x69d, 0x6a6, 0x6b1, 0x6b7, 0x6bf, 0x6c3, 0x6c7, 0x6cd, 0x6d3, 0x6d8, 0x6db, 0x6e9, 0x6f0, 0x6f3, 0x6f6, 0x6fa, 0x700, 0x705, 0x70f, 0x714, 0x717, 0x71a, 0x71d, 0x720, 0x724, 0x727, 0x737, 0x748, 0x74d, 0x74f, 0x751}
+
+// idnaSparseValues: 1876 entries, 7504 bytes
+var idnaSparseValues = [1876]valueRange{
+ // Block 0x0, offset 0x0
+ {value: 0x0000, lo: 0x07},
+ {value: 0xe105, lo: 0x80, hi: 0x96},
+ {value: 0x0018, lo: 0x97, hi: 0x97},
+ {value: 0xe105, lo: 0x98, hi: 0x9e},
+ {value: 0x001f, lo: 0x9f, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xb6},
+ {value: 0x0018, lo: 0xb7, hi: 0xb7},
+ {value: 0x0008, lo: 0xb8, hi: 0xbf},
+ // Block 0x1, offset 0x8
+ {value: 0x0000, lo: 0x10},
+ {value: 0x0008, lo: 0x80, hi: 0x80},
+ {value: 0xe01d, lo: 0x81, hi: 0x81},
+ {value: 0x0008, lo: 0x82, hi: 0x82},
+ {value: 0x0335, lo: 0x83, hi: 0x83},
+ {value: 0x034d, lo: 0x84, hi: 0x84},
+ {value: 0x0365, lo: 0x85, hi: 0x85},
+ {value: 0xe00d, lo: 0x86, hi: 0x86},
+ {value: 0x0008, lo: 0x87, hi: 0x87},
+ {value: 0xe00d, lo: 0x88, hi: 0x88},
+ {value: 0x0008, lo: 0x89, hi: 0x89},
+ {value: 0xe00d, lo: 0x8a, hi: 0x8a},
+ {value: 0x0008, lo: 0x8b, hi: 0x8b},
+ {value: 0xe00d, lo: 0x8c, hi: 0x8c},
+ {value: 0x0008, lo: 0x8d, hi: 0x8d},
+ {value: 0xe00d, lo: 0x8e, hi: 0x8e},
+ {value: 0x0008, lo: 0x8f, hi: 0xbf},
+ // Block 0x2, offset 0x19
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x0008, lo: 0x80, hi: 0xaf},
+ {value: 0x0249, lo: 0xb0, hi: 0xb0},
+ {value: 0x037d, lo: 0xb1, hi: 0xb1},
+ {value: 0x0259, lo: 0xb2, hi: 0xb2},
+ {value: 0x0269, lo: 0xb3, hi: 0xb3},
+ {value: 0x034d, lo: 0xb4, hi: 0xb4},
+ {value: 0x0395, lo: 0xb5, hi: 0xb5},
+ {value: 0xe1bd, lo: 0xb6, hi: 0xb6},
+ {value: 0x0279, lo: 0xb7, hi: 0xb7},
+ {value: 0x0289, lo: 0xb8, hi: 0xb8},
+ {value: 0x0008, lo: 0xb9, hi: 0xbf},
+ // Block 0x3, offset 0x25
+ {value: 0x0000, lo: 0x01},
+ {value: 0x1308, lo: 0x80, hi: 0xbf},
+ // Block 0x4, offset 0x27
+ {value: 0x0000, lo: 0x04},
+ {value: 0x03f5, lo: 0x80, hi: 0x8f},
+ {value: 0xe105, lo: 0x90, hi: 0x9f},
+ {value: 0x049d, lo: 0xa0, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xbf},
+ // Block 0x5, offset 0x2c
+ {value: 0x0000, lo: 0x07},
+ {value: 0xe185, lo: 0x80, hi: 0x8f},
+ {value: 0x0545, lo: 0x90, hi: 0x96},
+ {value: 0x0040, lo: 0x97, hi: 0x98},
+ {value: 0x0008, lo: 0x99, hi: 0x99},
+ {value: 0x0018, lo: 0x9a, hi: 0x9f},
+ {value: 0x0040, lo: 0xa0, hi: 0xa0},
+ {value: 0x0008, lo: 0xa1, hi: 0xbf},
+ // Block 0x6, offset 0x34
+ {value: 0x0000, lo: 0x0a},
+ {value: 0x0008, lo: 0x80, hi: 0x86},
+ {value: 0x0401, lo: 0x87, hi: 0x87},
+ {value: 0x0040, lo: 0x88, hi: 0x88},
+ {value: 0x0018, lo: 0x89, hi: 0x8a},
+ {value: 0x0040, lo: 0x8b, hi: 0x8c},
+ {value: 0x0018, lo: 0x8d, hi: 0x8f},
+ {value: 0x0040, lo: 0x90, hi: 0x90},
+ {value: 0x1308, lo: 0x91, hi: 0xbd},
+ {value: 0x0018, lo: 0xbe, hi: 0xbe},
+ {value: 0x1308, lo: 0xbf, hi: 0xbf},
+ // Block 0x7, offset 0x3f
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x0018, lo: 0x80, hi: 0x80},
+ {value: 0x1308, lo: 0x81, hi: 0x82},
+ {value: 0x0018, lo: 0x83, hi: 0x83},
+ {value: 0x1308, lo: 0x84, hi: 0x85},
+ {value: 0x0018, lo: 0x86, hi: 0x86},
+ {value: 0x1308, lo: 0x87, hi: 0x87},
+ {value: 0x0040, lo: 0x88, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0xaa},
+ {value: 0x0040, lo: 0xab, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xb4},
+ {value: 0x0040, lo: 0xb5, hi: 0xbf},
+ // Block 0x8, offset 0x4b
+ {value: 0x0000, lo: 0x10},
+ {value: 0x0018, lo: 0x80, hi: 0x80},
+ {value: 0x0208, lo: 0x81, hi: 0x87},
+ {value: 0x0408, lo: 0x88, hi: 0x88},
+ {value: 0x0208, lo: 0x89, hi: 0x8a},
+ {value: 0x1308, lo: 0x8b, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xa9},
+ {value: 0x0018, lo: 0xaa, hi: 0xad},
+ {value: 0x0208, lo: 0xae, hi: 0xaf},
+ {value: 0x1308, lo: 0xb0, hi: 0xb0},
+ {value: 0x0408, lo: 0xb1, hi: 0xb3},
+ {value: 0x0008, lo: 0xb4, hi: 0xb4},
+ {value: 0x0429, lo: 0xb5, hi: 0xb5},
+ {value: 0x0451, lo: 0xb6, hi: 0xb6},
+ {value: 0x0479, lo: 0xb7, hi: 0xb7},
+ {value: 0x04a1, lo: 0xb8, hi: 0xb8},
+ {value: 0x0208, lo: 0xb9, hi: 0xbf},
+ // Block 0x9, offset 0x5c
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0208, lo: 0x80, hi: 0x87},
+ {value: 0x0408, lo: 0x88, hi: 0x99},
+ {value: 0x0208, lo: 0x9a, hi: 0xbf},
+ // Block 0xa, offset 0x60
+ {value: 0x0000, lo: 0x0e},
+ {value: 0x1308, lo: 0x80, hi: 0x8a},
+ {value: 0x0040, lo: 0x8b, hi: 0x8c},
+ {value: 0x0408, lo: 0x8d, hi: 0x8d},
+ {value: 0x0208, lo: 0x8e, hi: 0x98},
+ {value: 0x0408, lo: 0x99, hi: 0x9b},
+ {value: 0x0208, lo: 0x9c, hi: 0xaa},
+ {value: 0x0408, lo: 0xab, hi: 0xac},
+ {value: 0x0208, lo: 0xad, hi: 0xb0},
+ {value: 0x0408, lo: 0xb1, hi: 0xb1},
+ {value: 0x0208, lo: 0xb2, hi: 0xb2},
+ {value: 0x0408, lo: 0xb3, hi: 0xb4},
+ {value: 0x0208, lo: 0xb5, hi: 0xb7},
+ {value: 0x0408, lo: 0xb8, hi: 0xb9},
+ {value: 0x0208, lo: 0xba, hi: 0xbf},
+ // Block 0xb, offset 0x6f
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0008, lo: 0x80, hi: 0xa5},
+ {value: 0x1308, lo: 0xa6, hi: 0xb0},
+ {value: 0x0008, lo: 0xb1, hi: 0xb1},
+ {value: 0x0040, lo: 0xb2, hi: 0xbf},
+ // Block 0xc, offset 0x74
+ {value: 0x0000, lo: 0x06},
+ {value: 0x0008, lo: 0x80, hi: 0x89},
+ {value: 0x0208, lo: 0x8a, hi: 0xaa},
+ {value: 0x1308, lo: 0xab, hi: 0xb3},
+ {value: 0x0008, lo: 0xb4, hi: 0xb5},
+ {value: 0x0018, lo: 0xb6, hi: 0xba},
+ {value: 0x0040, lo: 0xbb, hi: 0xbf},
+ // Block 0xd, offset 0x7b
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x0008, lo: 0x80, hi: 0x95},
+ {value: 0x1308, lo: 0x96, hi: 0x99},
+ {value: 0x0008, lo: 0x9a, hi: 0x9a},
+ {value: 0x1308, lo: 0x9b, hi: 0xa3},
+ {value: 0x0008, lo: 0xa4, hi: 0xa4},
+ {value: 0x1308, lo: 0xa5, hi: 0xa7},
+ {value: 0x0008, lo: 0xa8, hi: 0xa8},
+ {value: 0x1308, lo: 0xa9, hi: 0xad},
+ {value: 0x0040, lo: 0xae, hi: 0xaf},
+ {value: 0x0018, lo: 0xb0, hi: 0xbe},
+ {value: 0x0040, lo: 0xbf, hi: 0xbf},
+ // Block 0xe, offset 0x87
+ {value: 0x0000, lo: 0x0d},
+ {value: 0x0408, lo: 0x80, hi: 0x80},
+ {value: 0x0208, lo: 0x81, hi: 0x85},
+ {value: 0x0408, lo: 0x86, hi: 0x87},
+ {value: 0x0208, lo: 0x88, hi: 0x88},
+ {value: 0x0408, lo: 0x89, hi: 0x89},
+ {value: 0x0208, lo: 0x8a, hi: 0x93},
+ {value: 0x0408, lo: 0x94, hi: 0x94},
+ {value: 0x0208, lo: 0x95, hi: 0x95},
+ {value: 0x0008, lo: 0x96, hi: 0x98},
+ {value: 0x1308, lo: 0x99, hi: 0x9b},
+ {value: 0x0040, lo: 0x9c, hi: 0x9d},
+ {value: 0x0018, lo: 0x9e, hi: 0x9e},
+ {value: 0x0040, lo: 0x9f, hi: 0xbf},
+ // Block 0xf, offset 0x95
+ {value: 0x0000, lo: 0x0d},
+ {value: 0x0040, lo: 0x80, hi: 0x9f},
+ {value: 0x0208, lo: 0xa0, hi: 0xa9},
+ {value: 0x0408, lo: 0xaa, hi: 0xac},
+ {value: 0x0008, lo: 0xad, hi: 0xad},
+ {value: 0x0408, lo: 0xae, hi: 0xae},
+ {value: 0x0208, lo: 0xaf, hi: 0xb0},
+ {value: 0x0408, lo: 0xb1, hi: 0xb2},
+ {value: 0x0208, lo: 0xb3, hi: 0xb4},
+ {value: 0x0040, lo: 0xb5, hi: 0xb5},
+ {value: 0x0208, lo: 0xb6, hi: 0xb8},
+ {value: 0x0408, lo: 0xb9, hi: 0xb9},
+ {value: 0x0208, lo: 0xba, hi: 0xbd},
+ {value: 0x0040, lo: 0xbe, hi: 0xbf},
+ // Block 0x10, offset 0xa3
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0040, lo: 0x80, hi: 0x93},
+ {value: 0x1308, lo: 0x94, hi: 0xa1},
+ {value: 0x0040, lo: 0xa2, hi: 0xa2},
+ {value: 0x1308, lo: 0xa3, hi: 0xbf},
+ // Block 0x11, offset 0xa8
+ {value: 0x0000, lo: 0x08},
+ {value: 0x1308, lo: 0x80, hi: 0x82},
+ {value: 0x1008, lo: 0x83, hi: 0x83},
+ {value: 0x0008, lo: 0x84, hi: 0xb9},
+ {value: 0x1308, lo: 0xba, hi: 0xba},
+ {value: 0x1008, lo: 0xbb, hi: 0xbb},
+ {value: 0x1308, lo: 0xbc, hi: 0xbc},
+ {value: 0x0008, lo: 0xbd, hi: 0xbd},
+ {value: 0x1008, lo: 0xbe, hi: 0xbf},
+ // Block 0x12, offset 0xb1
+ {value: 0x0000, lo: 0x0f},
+ {value: 0x1308, lo: 0x80, hi: 0x80},
+ {value: 0x1008, lo: 0x81, hi: 0x82},
+ {value: 0x0040, lo: 0x83, hi: 0x85},
+ {value: 0x1008, lo: 0x86, hi: 0x88},
+ {value: 0x0040, lo: 0x89, hi: 0x89},
+ {value: 0x1008, lo: 0x8a, hi: 0x8c},
+ {value: 0x1b08, lo: 0x8d, hi: 0x8d},
+ {value: 0x0040, lo: 0x8e, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x90},
+ {value: 0x0040, lo: 0x91, hi: 0x96},
+ {value: 0x1008, lo: 0x97, hi: 0x97},
+ {value: 0x0040, lo: 0x98, hi: 0xa5},
+ {value: 0x0008, lo: 0xa6, hi: 0xaf},
+ {value: 0x0018, lo: 0xb0, hi: 0xba},
+ {value: 0x0040, lo: 0xbb, hi: 0xbf},
+ // Block 0x13, offset 0xc1
+ {value: 0x0000, lo: 0x0d},
+ {value: 0x1308, lo: 0x80, hi: 0x80},
+ {value: 0x1008, lo: 0x81, hi: 0x83},
+ {value: 0x0040, lo: 0x84, hi: 0x84},
+ {value: 0x0008, lo: 0x85, hi: 0x8c},
+ {value: 0x0040, lo: 0x8d, hi: 0x8d},
+ {value: 0x0008, lo: 0x8e, hi: 0x90},
+ {value: 0x0040, lo: 0x91, hi: 0x91},
+ {value: 0x0008, lo: 0x92, hi: 0xa8},
+ {value: 0x0040, lo: 0xa9, hi: 0xa9},
+ {value: 0x0008, lo: 0xaa, hi: 0xb9},
+ {value: 0x0040, lo: 0xba, hi: 0xbc},
+ {value: 0x0008, lo: 0xbd, hi: 0xbd},
+ {value: 0x1308, lo: 0xbe, hi: 0xbf},
+ // Block 0x14, offset 0xcf
+ {value: 0x0000, lo: 0x0c},
+ {value: 0x0040, lo: 0x80, hi: 0x80},
+ {value: 0x1308, lo: 0x81, hi: 0x81},
+ {value: 0x1008, lo: 0x82, hi: 0x83},
+ {value: 0x0040, lo: 0x84, hi: 0x84},
+ {value: 0x0008, lo: 0x85, hi: 0x8c},
+ {value: 0x0040, lo: 0x8d, hi: 0x8d},
+ {value: 0x0008, lo: 0x8e, hi: 0x90},
+ {value: 0x0040, lo: 0x91, hi: 0x91},
+ {value: 0x0008, lo: 0x92, hi: 0xba},
+ {value: 0x0040, lo: 0xbb, hi: 0xbc},
+ {value: 0x0008, lo: 0xbd, hi: 0xbd},
+ {value: 0x1008, lo: 0xbe, hi: 0xbf},
+ // Block 0x15, offset 0xdc
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x0040, lo: 0x80, hi: 0x81},
+ {value: 0x1008, lo: 0x82, hi: 0x83},
+ {value: 0x0040, lo: 0x84, hi: 0x84},
+ {value: 0x0008, lo: 0x85, hi: 0x96},
+ {value: 0x0040, lo: 0x97, hi: 0x99},
+ {value: 0x0008, lo: 0x9a, hi: 0xb1},
+ {value: 0x0040, lo: 0xb2, hi: 0xb2},
+ {value: 0x0008, lo: 0xb3, hi: 0xbb},
+ {value: 0x0040, lo: 0xbc, hi: 0xbc},
+ {value: 0x0008, lo: 0xbd, hi: 0xbd},
+ {value: 0x0040, lo: 0xbe, hi: 0xbf},
+ // Block 0x16, offset 0xe8
+ {value: 0x0000, lo: 0x10},
+ {value: 0x0008, lo: 0x80, hi: 0x86},
+ {value: 0x0040, lo: 0x87, hi: 0x89},
+ {value: 0x1b08, lo: 0x8a, hi: 0x8a},
+ {value: 0x0040, lo: 0x8b, hi: 0x8e},
+ {value: 0x1008, lo: 0x8f, hi: 0x91},
+ {value: 0x1308, lo: 0x92, hi: 0x94},
+ {value: 0x0040, lo: 0x95, hi: 0x95},
+ {value: 0x1308, lo: 0x96, hi: 0x96},
+ {value: 0x0040, lo: 0x97, hi: 0x97},
+ {value: 0x1008, lo: 0x98, hi: 0x9f},
+ {value: 0x0040, lo: 0xa0, hi: 0xa5},
+ {value: 0x0008, lo: 0xa6, hi: 0xaf},
+ {value: 0x0040, lo: 0xb0, hi: 0xb1},
+ {value: 0x1008, lo: 0xb2, hi: 0xb3},
+ {value: 0x0018, lo: 0xb4, hi: 0xb4},
+ {value: 0x0040, lo: 0xb5, hi: 0xbf},
+ // Block 0x17, offset 0xf9
+ {value: 0x0000, lo: 0x09},
+ {value: 0x0040, lo: 0x80, hi: 0x80},
+ {value: 0x0008, lo: 0x81, hi: 0xb0},
+ {value: 0x1308, lo: 0xb1, hi: 0xb1},
+ {value: 0x0008, lo: 0xb2, hi: 0xb2},
+ {value: 0x08f1, lo: 0xb3, hi: 0xb3},
+ {value: 0x1308, lo: 0xb4, hi: 0xb9},
+ {value: 0x1b08, lo: 0xba, hi: 0xba},
+ {value: 0x0040, lo: 0xbb, hi: 0xbe},
+ {value: 0x0018, lo: 0xbf, hi: 0xbf},
+ // Block 0x18, offset 0x103
+ {value: 0x0000, lo: 0x06},
+ {value: 0x0008, lo: 0x80, hi: 0x86},
+ {value: 0x1308, lo: 0x87, hi: 0x8e},
+ {value: 0x0018, lo: 0x8f, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x99},
+ {value: 0x0018, lo: 0x9a, hi: 0x9b},
+ {value: 0x0040, lo: 0x9c, hi: 0xbf},
+ // Block 0x19, offset 0x10a
+ {value: 0x0000, lo: 0x0c},
+ {value: 0x0008, lo: 0x80, hi: 0x84},
+ {value: 0x0040, lo: 0x85, hi: 0x85},
+ {value: 0x0008, lo: 0x86, hi: 0x86},
+ {value: 0x0040, lo: 0x87, hi: 0x87},
+ {value: 0x1308, lo: 0x88, hi: 0x8d},
+ {value: 0x0040, lo: 0x8e, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x99},
+ {value: 0x0040, lo: 0x9a, hi: 0x9b},
+ {value: 0x0961, lo: 0x9c, hi: 0x9c},
+ {value: 0x0999, lo: 0x9d, hi: 0x9d},
+ {value: 0x0008, lo: 0x9e, hi: 0x9f},
+ {value: 0x0040, lo: 0xa0, hi: 0xbf},
+ // Block 0x1a, offset 0x117
+ {value: 0x0000, lo: 0x10},
+ {value: 0x0008, lo: 0x80, hi: 0x80},
+ {value: 0x0018, lo: 0x81, hi: 0x8a},
+ {value: 0x0008, lo: 0x8b, hi: 0x8b},
+ {value: 0xe03d, lo: 0x8c, hi: 0x8c},
+ {value: 0x0018, lo: 0x8d, hi: 0x97},
+ {value: 0x1308, lo: 0x98, hi: 0x99},
+ {value: 0x0018, lo: 0x9a, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xa9},
+ {value: 0x0018, lo: 0xaa, hi: 0xb4},
+ {value: 0x1308, lo: 0xb5, hi: 0xb5},
+ {value: 0x0018, lo: 0xb6, hi: 0xb6},
+ {value: 0x1308, lo: 0xb7, hi: 0xb7},
+ {value: 0x0018, lo: 0xb8, hi: 0xb8},
+ {value: 0x1308, lo: 0xb9, hi: 0xb9},
+ {value: 0x0018, lo: 0xba, hi: 0xbd},
+ {value: 0x1008, lo: 0xbe, hi: 0xbf},
+ // Block 0x1b, offset 0x128
+ {value: 0x0000, lo: 0x06},
+ {value: 0x0018, lo: 0x80, hi: 0x85},
+ {value: 0x1308, lo: 0x86, hi: 0x86},
+ {value: 0x0018, lo: 0x87, hi: 0x8c},
+ {value: 0x0040, lo: 0x8d, hi: 0x8d},
+ {value: 0x0018, lo: 0x8e, hi: 0x9a},
+ {value: 0x0040, lo: 0x9b, hi: 0xbf},
+ // Block 0x1c, offset 0x12f
+ {value: 0x0000, lo: 0x0a},
+ {value: 0x0008, lo: 0x80, hi: 0xaa},
+ {value: 0x1008, lo: 0xab, hi: 0xac},
+ {value: 0x1308, lo: 0xad, hi: 0xb0},
+ {value: 0x1008, lo: 0xb1, hi: 0xb1},
+ {value: 0x1308, lo: 0xb2, hi: 0xb7},
+ {value: 0x1008, lo: 0xb8, hi: 0xb8},
+ {value: 0x1b08, lo: 0xb9, hi: 0xba},
+ {value: 0x1008, lo: 0xbb, hi: 0xbc},
+ {value: 0x1308, lo: 0xbd, hi: 0xbe},
+ {value: 0x0008, lo: 0xbf, hi: 0xbf},
+ // Block 0x1d, offset 0x13a
+ {value: 0x0000, lo: 0x0e},
+ {value: 0x0008, lo: 0x80, hi: 0x89},
+ {value: 0x0018, lo: 0x8a, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x95},
+ {value: 0x1008, lo: 0x96, hi: 0x97},
+ {value: 0x1308, lo: 0x98, hi: 0x99},
+ {value: 0x0008, lo: 0x9a, hi: 0x9d},
+ {value: 0x1308, lo: 0x9e, hi: 0xa0},
+ {value: 0x0008, lo: 0xa1, hi: 0xa1},
+ {value: 0x1008, lo: 0xa2, hi: 0xa4},
+ {value: 0x0008, lo: 0xa5, hi: 0xa6},
+ {value: 0x1008, lo: 0xa7, hi: 0xad},
+ {value: 0x0008, lo: 0xae, hi: 0xb0},
+ {value: 0x1308, lo: 0xb1, hi: 0xb4},
+ {value: 0x0008, lo: 0xb5, hi: 0xbf},
+ // Block 0x1e, offset 0x149
+ {value: 0x0000, lo: 0x0d},
+ {value: 0x0008, lo: 0x80, hi: 0x81},
+ {value: 0x1308, lo: 0x82, hi: 0x82},
+ {value: 0x1008, lo: 0x83, hi: 0x84},
+ {value: 0x1308, lo: 0x85, hi: 0x86},
+ {value: 0x1008, lo: 0x87, hi: 0x8c},
+ {value: 0x1308, lo: 0x8d, hi: 0x8d},
+ {value: 0x0008, lo: 0x8e, hi: 0x8e},
+ {value: 0x1008, lo: 0x8f, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x99},
+ {value: 0x1008, lo: 0x9a, hi: 0x9c},
+ {value: 0x1308, lo: 0x9d, hi: 0x9d},
+ {value: 0x0018, lo: 0x9e, hi: 0x9f},
+ {value: 0x0040, lo: 0xa0, hi: 0xbf},
+ // Block 0x1f, offset 0x157
+ {value: 0x0000, lo: 0x09},
+ {value: 0x0040, lo: 0x80, hi: 0x86},
+ {value: 0x055d, lo: 0x87, hi: 0x87},
+ {value: 0x0040, lo: 0x88, hi: 0x8c},
+ {value: 0x055d, lo: 0x8d, hi: 0x8d},
+ {value: 0x0040, lo: 0x8e, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0xba},
+ {value: 0x0018, lo: 0xbb, hi: 0xbb},
+ {value: 0xe105, lo: 0xbc, hi: 0xbc},
+ {value: 0x0008, lo: 0xbd, hi: 0xbf},
+ // Block 0x20, offset 0x161
+ {value: 0x0000, lo: 0x01},
+ {value: 0x0018, lo: 0x80, hi: 0xbf},
+ // Block 0x21, offset 0x163
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0018, lo: 0x80, hi: 0x9e},
+ {value: 0x0040, lo: 0x9f, hi: 0xa0},
+ {value: 0x0018, lo: 0xa1, hi: 0xbf},
+ // Block 0x22, offset 0x167
+ {value: 0x0000, lo: 0x01},
+ {value: 0x0008, lo: 0x80, hi: 0xbf},
+ // Block 0x23, offset 0x169
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x0008, lo: 0x80, hi: 0x88},
+ {value: 0x0040, lo: 0x89, hi: 0x89},
+ {value: 0x0008, lo: 0x8a, hi: 0x8d},
+ {value: 0x0040, lo: 0x8e, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x96},
+ {value: 0x0040, lo: 0x97, hi: 0x97},
+ {value: 0x0008, lo: 0x98, hi: 0x98},
+ {value: 0x0040, lo: 0x99, hi: 0x99},
+ {value: 0x0008, lo: 0x9a, hi: 0x9d},
+ {value: 0x0040, lo: 0x9e, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xbf},
+ // Block 0x24, offset 0x175
+ {value: 0x0000, lo: 0x0a},
+ {value: 0x0008, lo: 0x80, hi: 0x88},
+ {value: 0x0040, lo: 0x89, hi: 0x89},
+ {value: 0x0008, lo: 0x8a, hi: 0x8d},
+ {value: 0x0040, lo: 0x8e, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0xb0},
+ {value: 0x0040, lo: 0xb1, hi: 0xb1},
+ {value: 0x0008, lo: 0xb2, hi: 0xb5},
+ {value: 0x0040, lo: 0xb6, hi: 0xb7},
+ {value: 0x0008, lo: 0xb8, hi: 0xbe},
+ {value: 0x0040, lo: 0xbf, hi: 0xbf},
+ // Block 0x25, offset 0x180
+ {value: 0x0000, lo: 0x07},
+ {value: 0x0008, lo: 0x80, hi: 0x80},
+ {value: 0x0040, lo: 0x81, hi: 0x81},
+ {value: 0x0008, lo: 0x82, hi: 0x85},
+ {value: 0x0040, lo: 0x86, hi: 0x87},
+ {value: 0x0008, lo: 0x88, hi: 0x96},
+ {value: 0x0040, lo: 0x97, hi: 0x97},
+ {value: 0x0008, lo: 0x98, hi: 0xbf},
+ // Block 0x26, offset 0x188
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0008, lo: 0x80, hi: 0x90},
+ {value: 0x0040, lo: 0x91, hi: 0x91},
+ {value: 0x0008, lo: 0x92, hi: 0x95},
+ {value: 0x0040, lo: 0x96, hi: 0x97},
+ {value: 0x0008, lo: 0x98, hi: 0xbf},
+ // Block 0x27, offset 0x18e
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0008, lo: 0x80, hi: 0x9a},
+ {value: 0x0040, lo: 0x9b, hi: 0x9c},
+ {value: 0x1308, lo: 0x9d, hi: 0x9f},
+ {value: 0x0018, lo: 0xa0, hi: 0xbc},
+ {value: 0x0040, lo: 0xbd, hi: 0xbf},
+ // Block 0x28, offset 0x194
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0008, lo: 0x80, hi: 0x8f},
+ {value: 0x0018, lo: 0x90, hi: 0x99},
+ {value: 0x0040, lo: 0x9a, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xbf},
+ // Block 0x29, offset 0x199
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0008, lo: 0x80, hi: 0xb5},
+ {value: 0x0040, lo: 0xb6, hi: 0xb7},
+ {value: 0xe045, lo: 0xb8, hi: 0xbd},
+ {value: 0x0040, lo: 0xbe, hi: 0xbf},
+ // Block 0x2a, offset 0x19e
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0018, lo: 0x80, hi: 0x80},
+ {value: 0x0008, lo: 0x81, hi: 0xbf},
+ // Block 0x2b, offset 0x1a1
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0008, lo: 0x80, hi: 0xac},
+ {value: 0x0018, lo: 0xad, hi: 0xae},
+ {value: 0x0008, lo: 0xaf, hi: 0xbf},
+ // Block 0x2c, offset 0x1a5
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0040, lo: 0x80, hi: 0x80},
+ {value: 0x0008, lo: 0x81, hi: 0x9a},
+ {value: 0x0018, lo: 0x9b, hi: 0x9c},
+ {value: 0x0040, lo: 0x9d, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xbf},
+ // Block 0x2d, offset 0x1ab
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0008, lo: 0x80, hi: 0xaa},
+ {value: 0x0018, lo: 0xab, hi: 0xb0},
+ {value: 0x0008, lo: 0xb1, hi: 0xb8},
+ {value: 0x0040, lo: 0xb9, hi: 0xbf},
+ // Block 0x2e, offset 0x1b0
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x0008, lo: 0x80, hi: 0x8c},
+ {value: 0x0040, lo: 0x8d, hi: 0x8d},
+ {value: 0x0008, lo: 0x8e, hi: 0x91},
+ {value: 0x1308, lo: 0x92, hi: 0x93},
+ {value: 0x1b08, lo: 0x94, hi: 0x94},
+ {value: 0x0040, lo: 0x95, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xb1},
+ {value: 0x1308, lo: 0xb2, hi: 0xb3},
+ {value: 0x1b08, lo: 0xb4, hi: 0xb4},
+ {value: 0x0018, lo: 0xb5, hi: 0xb6},
+ {value: 0x0040, lo: 0xb7, hi: 0xbf},
+ // Block 0x2f, offset 0x1bc
+ {value: 0x0000, lo: 0x09},
+ {value: 0x0008, lo: 0x80, hi: 0x91},
+ {value: 0x1308, lo: 0x92, hi: 0x93},
+ {value: 0x0040, lo: 0x94, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xac},
+ {value: 0x0040, lo: 0xad, hi: 0xad},
+ {value: 0x0008, lo: 0xae, hi: 0xb0},
+ {value: 0x0040, lo: 0xb1, hi: 0xb1},
+ {value: 0x1308, lo: 0xb2, hi: 0xb3},
+ {value: 0x0040, lo: 0xb4, hi: 0xbf},
+ // Block 0x30, offset 0x1c6
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0008, lo: 0x80, hi: 0xb3},
+ {value: 0x1340, lo: 0xb4, hi: 0xb5},
+ {value: 0x1008, lo: 0xb6, hi: 0xb6},
+ {value: 0x1308, lo: 0xb7, hi: 0xbd},
+ {value: 0x1008, lo: 0xbe, hi: 0xbf},
+ // Block 0x31, offset 0x1cc
+ {value: 0x0000, lo: 0x10},
+ {value: 0x1008, lo: 0x80, hi: 0x85},
+ {value: 0x1308, lo: 0x86, hi: 0x86},
+ {value: 0x1008, lo: 0x87, hi: 0x88},
+ {value: 0x1308, lo: 0x89, hi: 0x91},
+ {value: 0x1b08, lo: 0x92, hi: 0x92},
+ {value: 0x1308, lo: 0x93, hi: 0x93},
+ {value: 0x0018, lo: 0x94, hi: 0x96},
+ {value: 0x0008, lo: 0x97, hi: 0x97},
+ {value: 0x0018, lo: 0x98, hi: 0x9b},
+ {value: 0x0008, lo: 0x9c, hi: 0x9c},
+ {value: 0x1308, lo: 0x9d, hi: 0x9d},
+ {value: 0x0040, lo: 0x9e, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xa9},
+ {value: 0x0040, lo: 0xaa, hi: 0xaf},
+ {value: 0x0018, lo: 0xb0, hi: 0xb9},
+ {value: 0x0040, lo: 0xba, hi: 0xbf},
+ // Block 0x32, offset 0x1dd
+ {value: 0x0000, lo: 0x09},
+ {value: 0x0018, lo: 0x80, hi: 0x85},
+ {value: 0x0040, lo: 0x86, hi: 0x86},
+ {value: 0x0218, lo: 0x87, hi: 0x87},
+ {value: 0x0018, lo: 0x88, hi: 0x8a},
+ {value: 0x13c0, lo: 0x8b, hi: 0x8d},
+ {value: 0x0040, lo: 0x8e, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x99},
+ {value: 0x0040, lo: 0x9a, hi: 0x9f},
+ {value: 0x0208, lo: 0xa0, hi: 0xbf},
+ // Block 0x33, offset 0x1e7
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0208, lo: 0x80, hi: 0xb7},
+ {value: 0x0040, lo: 0xb8, hi: 0xbf},
+ // Block 0x34, offset 0x1ea
+ {value: 0x0000, lo: 0x07},
+ {value: 0x0008, lo: 0x80, hi: 0x84},
+ {value: 0x1308, lo: 0x85, hi: 0x86},
+ {value: 0x0208, lo: 0x87, hi: 0xa8},
+ {value: 0x1308, lo: 0xa9, hi: 0xa9},
+ {value: 0x0208, lo: 0xaa, hi: 0xaa},
+ {value: 0x0040, lo: 0xab, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xbf},
+ // Block 0x35, offset 0x1f2
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0xb5},
+ {value: 0x0040, lo: 0xb6, hi: 0xbf},
+ // Block 0x36, offset 0x1f5
+ {value: 0x0000, lo: 0x0c},
+ {value: 0x0008, lo: 0x80, hi: 0x9e},
+ {value: 0x0040, lo: 0x9f, hi: 0x9f},
+ {value: 0x1308, lo: 0xa0, hi: 0xa2},
+ {value: 0x1008, lo: 0xa3, hi: 0xa6},
+ {value: 0x1308, lo: 0xa7, hi: 0xa8},
+ {value: 0x1008, lo: 0xa9, hi: 0xab},
+ {value: 0x0040, lo: 0xac, hi: 0xaf},
+ {value: 0x1008, lo: 0xb0, hi: 0xb1},
+ {value: 0x1308, lo: 0xb2, hi: 0xb2},
+ {value: 0x1008, lo: 0xb3, hi: 0xb8},
+ {value: 0x1308, lo: 0xb9, hi: 0xbb},
+ {value: 0x0040, lo: 0xbc, hi: 0xbf},
+ // Block 0x37, offset 0x202
+ {value: 0x0000, lo: 0x07},
+ {value: 0x0018, lo: 0x80, hi: 0x80},
+ {value: 0x0040, lo: 0x81, hi: 0x83},
+ {value: 0x0018, lo: 0x84, hi: 0x85},
+ {value: 0x0008, lo: 0x86, hi: 0xad},
+ {value: 0x0040, lo: 0xae, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xb4},
+ {value: 0x0040, lo: 0xb5, hi: 0xbf},
+ // Block 0x38, offset 0x20a
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0008, lo: 0x80, hi: 0xab},
+ {value: 0x0040, lo: 0xac, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xbf},
+ // Block 0x39, offset 0x20e
+ {value: 0x0000, lo: 0x06},
+ {value: 0x0008, lo: 0x80, hi: 0x89},
+ {value: 0x0040, lo: 0x8a, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x99},
+ {value: 0x0028, lo: 0x9a, hi: 0x9a},
+ {value: 0x0040, lo: 0x9b, hi: 0x9d},
+ {value: 0x0018, lo: 0x9e, hi: 0xbf},
+ // Block 0x3a, offset 0x215
+ {value: 0x0000, lo: 0x07},
+ {value: 0x0008, lo: 0x80, hi: 0x96},
+ {value: 0x1308, lo: 0x97, hi: 0x98},
+ {value: 0x1008, lo: 0x99, hi: 0x9a},
+ {value: 0x1308, lo: 0x9b, hi: 0x9b},
+ {value: 0x0040, lo: 0x9c, hi: 0x9d},
+ {value: 0x0018, lo: 0x9e, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xbf},
+ // Block 0x3b, offset 0x21d
+ {value: 0x0000, lo: 0x0f},
+ {value: 0x0008, lo: 0x80, hi: 0x94},
+ {value: 0x1008, lo: 0x95, hi: 0x95},
+ {value: 0x1308, lo: 0x96, hi: 0x96},
+ {value: 0x1008, lo: 0x97, hi: 0x97},
+ {value: 0x1308, lo: 0x98, hi: 0x9e},
+ {value: 0x0040, lo: 0x9f, hi: 0x9f},
+ {value: 0x1b08, lo: 0xa0, hi: 0xa0},
+ {value: 0x1008, lo: 0xa1, hi: 0xa1},
+ {value: 0x1308, lo: 0xa2, hi: 0xa2},
+ {value: 0x1008, lo: 0xa3, hi: 0xa4},
+ {value: 0x1308, lo: 0xa5, hi: 0xac},
+ {value: 0x1008, lo: 0xad, hi: 0xb2},
+ {value: 0x1308, lo: 0xb3, hi: 0xbc},
+ {value: 0x0040, lo: 0xbd, hi: 0xbe},
+ {value: 0x1308, lo: 0xbf, hi: 0xbf},
+ // Block 0x3c, offset 0x22d
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x0008, lo: 0x80, hi: 0x89},
+ {value: 0x0040, lo: 0x8a, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x99},
+ {value: 0x0040, lo: 0x9a, hi: 0x9f},
+ {value: 0x0018, lo: 0xa0, hi: 0xa6},
+ {value: 0x0008, lo: 0xa7, hi: 0xa7},
+ {value: 0x0018, lo: 0xa8, hi: 0xad},
+ {value: 0x0040, lo: 0xae, hi: 0xaf},
+ {value: 0x1308, lo: 0xb0, hi: 0xbd},
+ {value: 0x1318, lo: 0xbe, hi: 0xbe},
+ {value: 0x0040, lo: 0xbf, hi: 0xbf},
+ // Block 0x3d, offset 0x239
+ {value: 0x0000, lo: 0x01},
+ {value: 0x0040, lo: 0x80, hi: 0xbf},
+ // Block 0x3e, offset 0x23b
+ {value: 0x0000, lo: 0x09},
+ {value: 0x1308, lo: 0x80, hi: 0x83},
+ {value: 0x1008, lo: 0x84, hi: 0x84},
+ {value: 0x0008, lo: 0x85, hi: 0xb3},
+ {value: 0x1308, lo: 0xb4, hi: 0xb4},
+ {value: 0x1008, lo: 0xb5, hi: 0xb5},
+ {value: 0x1308, lo: 0xb6, hi: 0xba},
+ {value: 0x1008, lo: 0xbb, hi: 0xbb},
+ {value: 0x1308, lo: 0xbc, hi: 0xbc},
+ {value: 0x1008, lo: 0xbd, hi: 0xbf},
+ // Block 0x3f, offset 0x245
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x1008, lo: 0x80, hi: 0x81},
+ {value: 0x1308, lo: 0x82, hi: 0x82},
+ {value: 0x1008, lo: 0x83, hi: 0x83},
+ {value: 0x1808, lo: 0x84, hi: 0x84},
+ {value: 0x0008, lo: 0x85, hi: 0x8b},
+ {value: 0x0040, lo: 0x8c, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x99},
+ {value: 0x0018, lo: 0x9a, hi: 0xaa},
+ {value: 0x1308, lo: 0xab, hi: 0xb3},
+ {value: 0x0018, lo: 0xb4, hi: 0xbc},
+ {value: 0x0040, lo: 0xbd, hi: 0xbf},
+ // Block 0x40, offset 0x251
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x1308, lo: 0x80, hi: 0x81},
+ {value: 0x1008, lo: 0x82, hi: 0x82},
+ {value: 0x0008, lo: 0x83, hi: 0xa0},
+ {value: 0x1008, lo: 0xa1, hi: 0xa1},
+ {value: 0x1308, lo: 0xa2, hi: 0xa5},
+ {value: 0x1008, lo: 0xa6, hi: 0xa7},
+ {value: 0x1308, lo: 0xa8, hi: 0xa9},
+ {value: 0x1808, lo: 0xaa, hi: 0xaa},
+ {value: 0x1b08, lo: 0xab, hi: 0xab},
+ {value: 0x1308, lo: 0xac, hi: 0xad},
+ {value: 0x0008, lo: 0xae, hi: 0xbf},
+ // Block 0x41, offset 0x25d
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x0008, lo: 0x80, hi: 0xa5},
+ {value: 0x1308, lo: 0xa6, hi: 0xa6},
+ {value: 0x1008, lo: 0xa7, hi: 0xa7},
+ {value: 0x1308, lo: 0xa8, hi: 0xa9},
+ {value: 0x1008, lo: 0xaa, hi: 0xac},
+ {value: 0x1308, lo: 0xad, hi: 0xad},
+ {value: 0x1008, lo: 0xae, hi: 0xae},
+ {value: 0x1308, lo: 0xaf, hi: 0xb1},
+ {value: 0x1808, lo: 0xb2, hi: 0xb3},
+ {value: 0x0040, lo: 0xb4, hi: 0xbb},
+ {value: 0x0018, lo: 0xbc, hi: 0xbf},
+ // Block 0x42, offset 0x269
+ {value: 0x0000, lo: 0x07},
+ {value: 0x0008, lo: 0x80, hi: 0xa3},
+ {value: 0x1008, lo: 0xa4, hi: 0xab},
+ {value: 0x1308, lo: 0xac, hi: 0xb3},
+ {value: 0x1008, lo: 0xb4, hi: 0xb5},
+ {value: 0x1308, lo: 0xb6, hi: 0xb7},
+ {value: 0x0040, lo: 0xb8, hi: 0xba},
+ {value: 0x0018, lo: 0xbb, hi: 0xbf},
+ // Block 0x43, offset 0x271
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0008, lo: 0x80, hi: 0x89},
+ {value: 0x0040, lo: 0x8a, hi: 0x8c},
+ {value: 0x0008, lo: 0x8d, hi: 0xbd},
+ {value: 0x0018, lo: 0xbe, hi: 0xbf},
+ // Block 0x44, offset 0x276
+ {value: 0x0000, lo: 0x09},
+ {value: 0x0e29, lo: 0x80, hi: 0x80},
+ {value: 0x0e41, lo: 0x81, hi: 0x81},
+ {value: 0x0e59, lo: 0x82, hi: 0x82},
+ {value: 0x0e71, lo: 0x83, hi: 0x83},
+ {value: 0x0e89, lo: 0x84, hi: 0x85},
+ {value: 0x0ea1, lo: 0x86, hi: 0x86},
+ {value: 0x0eb9, lo: 0x87, hi: 0x87},
+ {value: 0x057d, lo: 0x88, hi: 0x88},
+ {value: 0x0040, lo: 0x89, hi: 0xbf},
+ // Block 0x45, offset 0x280
+ {value: 0x0000, lo: 0x10},
+ {value: 0x0018, lo: 0x80, hi: 0x87},
+ {value: 0x0040, lo: 0x88, hi: 0x8f},
+ {value: 0x1308, lo: 0x90, hi: 0x92},
+ {value: 0x0018, lo: 0x93, hi: 0x93},
+ {value: 0x1308, lo: 0x94, hi: 0xa0},
+ {value: 0x1008, lo: 0xa1, hi: 0xa1},
+ {value: 0x1308, lo: 0xa2, hi: 0xa8},
+ {value: 0x0008, lo: 0xa9, hi: 0xac},
+ {value: 0x1308, lo: 0xad, hi: 0xad},
+ {value: 0x0008, lo: 0xae, hi: 0xb1},
+ {value: 0x1008, lo: 0xb2, hi: 0xb3},
+ {value: 0x1308, lo: 0xb4, hi: 0xb4},
+ {value: 0x0008, lo: 0xb5, hi: 0xb6},
+ {value: 0x0040, lo: 0xb7, hi: 0xb7},
+ {value: 0x1308, lo: 0xb8, hi: 0xb9},
+ {value: 0x0040, lo: 0xba, hi: 0xbf},
+ // Block 0x46, offset 0x291
+ {value: 0x0000, lo: 0x03},
+ {value: 0x1308, lo: 0x80, hi: 0xb5},
+ {value: 0x0040, lo: 0xb6, hi: 0xba},
+ {value: 0x1308, lo: 0xbb, hi: 0xbf},
+ // Block 0x47, offset 0x295
+ {value: 0x0000, lo: 0x0a},
+ {value: 0x0008, lo: 0x80, hi: 0x87},
+ {value: 0xe045, lo: 0x88, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x95},
+ {value: 0x0040, lo: 0x96, hi: 0x97},
+ {value: 0xe045, lo: 0x98, hi: 0x9d},
+ {value: 0x0040, lo: 0x9e, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xa7},
+ {value: 0xe045, lo: 0xa8, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xb7},
+ {value: 0xe045, lo: 0xb8, hi: 0xbf},
+ // Block 0x48, offset 0x2a0
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0040, lo: 0x80, hi: 0x8f},
+ {value: 0x1318, lo: 0x90, hi: 0xb0},
+ {value: 0x0040, lo: 0xb1, hi: 0xbf},
+ // Block 0x49, offset 0x2a4
+ {value: 0x0000, lo: 0x08},
+ {value: 0x0018, lo: 0x80, hi: 0x82},
+ {value: 0x0040, lo: 0x83, hi: 0x83},
+ {value: 0x0008, lo: 0x84, hi: 0x84},
+ {value: 0x0018, lo: 0x85, hi: 0x88},
+ {value: 0x24c1, lo: 0x89, hi: 0x89},
+ {value: 0x0018, lo: 0x8a, hi: 0x8b},
+ {value: 0x0040, lo: 0x8c, hi: 0x8f},
+ {value: 0x0018, lo: 0x90, hi: 0xbf},
+ // Block 0x4a, offset 0x2ad
+ {value: 0x0000, lo: 0x07},
+ {value: 0x0018, lo: 0x80, hi: 0xab},
+ {value: 0x24f1, lo: 0xac, hi: 0xac},
+ {value: 0x2529, lo: 0xad, hi: 0xad},
+ {value: 0x0018, lo: 0xae, hi: 0xae},
+ {value: 0x2579, lo: 0xaf, hi: 0xaf},
+ {value: 0x25b1, lo: 0xb0, hi: 0xb0},
+ {value: 0x0018, lo: 0xb1, hi: 0xbf},
+ // Block 0x4b, offset 0x2b5
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0018, lo: 0x80, hi: 0x9f},
+ {value: 0x0080, lo: 0xa0, hi: 0xa0},
+ {value: 0x0018, lo: 0xa1, hi: 0xad},
+ {value: 0x0080, lo: 0xae, hi: 0xaf},
+ {value: 0x0018, lo: 0xb0, hi: 0xbf},
+ // Block 0x4c, offset 0x2bb
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0018, lo: 0x80, hi: 0xa8},
+ {value: 0x09c5, lo: 0xa9, hi: 0xa9},
+ {value: 0x09e5, lo: 0xaa, hi: 0xaa},
+ {value: 0x0018, lo: 0xab, hi: 0xbf},
+ // Block 0x4d, offset 0x2c0
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0018, lo: 0x80, hi: 0xbe},
+ {value: 0x0040, lo: 0xbf, hi: 0xbf},
+ // Block 0x4e, offset 0x2c3
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0018, lo: 0x80, hi: 0xa6},
+ {value: 0x0040, lo: 0xa7, hi: 0xbf},
+ // Block 0x4f, offset 0x2c6
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0018, lo: 0x80, hi: 0x8b},
+ {value: 0x28c1, lo: 0x8c, hi: 0x8c},
+ {value: 0x0018, lo: 0x8d, hi: 0xbf},
+ // Block 0x50, offset 0x2ca
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0018, lo: 0x80, hi: 0xb3},
+ {value: 0x0e66, lo: 0xb4, hi: 0xb4},
+ {value: 0x292a, lo: 0xb5, hi: 0xb5},
+ {value: 0x0e86, lo: 0xb6, hi: 0xb6},
+ {value: 0x0018, lo: 0xb7, hi: 0xbf},
+ // Block 0x51, offset 0x2d0
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0018, lo: 0x80, hi: 0x9b},
+ {value: 0x2941, lo: 0x9c, hi: 0x9c},
+ {value: 0x0018, lo: 0x9d, hi: 0xbf},
+ // Block 0x52, offset 0x2d4
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0018, lo: 0x80, hi: 0xb3},
+ {value: 0x0040, lo: 0xb4, hi: 0xb5},
+ {value: 0x0018, lo: 0xb6, hi: 0xbf},
+ // Block 0x53, offset 0x2d8
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0018, lo: 0x80, hi: 0x95},
+ {value: 0x0040, lo: 0x96, hi: 0x97},
+ {value: 0x0018, lo: 0x98, hi: 0xb9},
+ {value: 0x0040, lo: 0xba, hi: 0xbc},
+ {value: 0x0018, lo: 0xbd, hi: 0xbf},
+ // Block 0x54, offset 0x2de
+ {value: 0x0000, lo: 0x06},
+ {value: 0x0018, lo: 0x80, hi: 0x88},
+ {value: 0x0040, lo: 0x89, hi: 0x89},
+ {value: 0x0018, lo: 0x8a, hi: 0x91},
+ {value: 0x0040, lo: 0x92, hi: 0xab},
+ {value: 0x0018, lo: 0xac, hi: 0xaf},
+ {value: 0x0040, lo: 0xb0, hi: 0xbf},
+ // Block 0x55, offset 0x2e5
+ {value: 0x0000, lo: 0x05},
+ {value: 0xe185, lo: 0x80, hi: 0x8f},
+ {value: 0x03f5, lo: 0x90, hi: 0x9f},
+ {value: 0x0ea5, lo: 0xa0, hi: 0xae},
+ {value: 0x0040, lo: 0xaf, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xbf},
+ // Block 0x56, offset 0x2eb
+ {value: 0x0000, lo: 0x07},
+ {value: 0x0008, lo: 0x80, hi: 0xa5},
+ {value: 0x0040, lo: 0xa6, hi: 0xa6},
+ {value: 0x0008, lo: 0xa7, hi: 0xa7},
+ {value: 0x0040, lo: 0xa8, hi: 0xac},
+ {value: 0x0008, lo: 0xad, hi: 0xad},
+ {value: 0x0040, lo: 0xae, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xbf},
+ // Block 0x57, offset 0x2f3
+ {value: 0x0000, lo: 0x06},
+ {value: 0x0008, lo: 0x80, hi: 0xa7},
+ {value: 0x0040, lo: 0xa8, hi: 0xae},
+ {value: 0xe075, lo: 0xaf, hi: 0xaf},
+ {value: 0x0018, lo: 0xb0, hi: 0xb0},
+ {value: 0x0040, lo: 0xb1, hi: 0xbe},
+ {value: 0x1b08, lo: 0xbf, hi: 0xbf},
+ // Block 0x58, offset 0x2fa
+ {value: 0x0000, lo: 0x0a},
+ {value: 0x0008, lo: 0x80, hi: 0x96},
+ {value: 0x0040, lo: 0x97, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xa6},
+ {value: 0x0040, lo: 0xa7, hi: 0xa7},
+ {value: 0x0008, lo: 0xa8, hi: 0xae},
+ {value: 0x0040, lo: 0xaf, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xb6},
+ {value: 0x0040, lo: 0xb7, hi: 0xb7},
+ {value: 0x0008, lo: 0xb8, hi: 0xbe},
+ {value: 0x0040, lo: 0xbf, hi: 0xbf},
+ // Block 0x59, offset 0x305
+ {value: 0x0000, lo: 0x09},
+ {value: 0x0008, lo: 0x80, hi: 0x86},
+ {value: 0x0040, lo: 0x87, hi: 0x87},
+ {value: 0x0008, lo: 0x88, hi: 0x8e},
+ {value: 0x0040, lo: 0x8f, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x96},
+ {value: 0x0040, lo: 0x97, hi: 0x97},
+ {value: 0x0008, lo: 0x98, hi: 0x9e},
+ {value: 0x0040, lo: 0x9f, hi: 0x9f},
+ {value: 0x1308, lo: 0xa0, hi: 0xbf},
+ // Block 0x5a, offset 0x30f
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0018, lo: 0x80, hi: 0xae},
+ {value: 0x0008, lo: 0xaf, hi: 0xaf},
+ {value: 0x0018, lo: 0xb0, hi: 0xbf},
+ // Block 0x5b, offset 0x313
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0018, lo: 0x80, hi: 0x84},
+ {value: 0x0040, lo: 0x85, hi: 0xbf},
+ // Block 0x5c, offset 0x316
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0018, lo: 0x80, hi: 0x99},
+ {value: 0x0040, lo: 0x9a, hi: 0x9a},
+ {value: 0x0018, lo: 0x9b, hi: 0x9e},
+ {value: 0x0edd, lo: 0x9f, hi: 0x9f},
+ {value: 0x0018, lo: 0xa0, hi: 0xbf},
+ // Block 0x5d, offset 0x31c
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0018, lo: 0x80, hi: 0xb2},
+ {value: 0x0efd, lo: 0xb3, hi: 0xb3},
+ {value: 0x0040, lo: 0xb4, hi: 0xbf},
+ // Block 0x5e, offset 0x320
+ {value: 0x0020, lo: 0x01},
+ {value: 0x0f1d, lo: 0x80, hi: 0xbf},
+ // Block 0x5f, offset 0x322
+ {value: 0x0020, lo: 0x02},
+ {value: 0x171d, lo: 0x80, hi: 0x8f},
+ {value: 0x18fd, lo: 0x90, hi: 0xbf},
+ // Block 0x60, offset 0x325
+ {value: 0x0020, lo: 0x01},
+ {value: 0x1efd, lo: 0x80, hi: 0xbf},
+ // Block 0x61, offset 0x327
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0040, lo: 0x80, hi: 0x80},
+ {value: 0x0008, lo: 0x81, hi: 0xbf},
+ // Block 0x62, offset 0x32a
+ {value: 0x0000, lo: 0x09},
+ {value: 0x0008, lo: 0x80, hi: 0x96},
+ {value: 0x0040, lo: 0x97, hi: 0x98},
+ {value: 0x1308, lo: 0x99, hi: 0x9a},
+ {value: 0x29e2, lo: 0x9b, hi: 0x9b},
+ {value: 0x2a0a, lo: 0x9c, hi: 0x9c},
+ {value: 0x0008, lo: 0x9d, hi: 0x9e},
+ {value: 0x2a31, lo: 0x9f, hi: 0x9f},
+ {value: 0x0018, lo: 0xa0, hi: 0xa0},
+ {value: 0x0008, lo: 0xa1, hi: 0xbf},
+ // Block 0x63, offset 0x334
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0xbe},
+ {value: 0x2a69, lo: 0xbf, hi: 0xbf},
+ // Block 0x64, offset 0x337
+ {value: 0x0000, lo: 0x0e},
+ {value: 0x0040, lo: 0x80, hi: 0x84},
+ {value: 0x0008, lo: 0x85, hi: 0xad},
+ {value: 0x0040, lo: 0xae, hi: 0xb0},
+ {value: 0x2a1d, lo: 0xb1, hi: 0xb1},
+ {value: 0x2a3d, lo: 0xb2, hi: 0xb2},
+ {value: 0x2a5d, lo: 0xb3, hi: 0xb3},
+ {value: 0x2a7d, lo: 0xb4, hi: 0xb4},
+ {value: 0x2a5d, lo: 0xb5, hi: 0xb5},
+ {value: 0x2a9d, lo: 0xb6, hi: 0xb6},
+ {value: 0x2abd, lo: 0xb7, hi: 0xb7},
+ {value: 0x2add, lo: 0xb8, hi: 0xb9},
+ {value: 0x2afd, lo: 0xba, hi: 0xbb},
+ {value: 0x2b1d, lo: 0xbc, hi: 0xbd},
+ {value: 0x2afd, lo: 0xbe, hi: 0xbf},
+ // Block 0x65, offset 0x346
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0018, lo: 0x80, hi: 0xa3},
+ {value: 0x0040, lo: 0xa4, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xbf},
+ // Block 0x66, offset 0x34a
+ {value: 0x0030, lo: 0x04},
+ {value: 0x2aa2, lo: 0x80, hi: 0x9d},
+ {value: 0x305a, lo: 0x9e, hi: 0x9e},
+ {value: 0x0040, lo: 0x9f, hi: 0x9f},
+ {value: 0x30a2, lo: 0xa0, hi: 0xbf},
+ // Block 0x67, offset 0x34f
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0x95},
+ {value: 0x0040, lo: 0x96, hi: 0xbf},
+ // Block 0x68, offset 0x352
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0008, lo: 0x80, hi: 0x8c},
+ {value: 0x0040, lo: 0x8d, hi: 0x8f},
+ {value: 0x0018, lo: 0x90, hi: 0xbf},
+ // Block 0x69, offset 0x356
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0018, lo: 0x80, hi: 0x86},
+ {value: 0x0040, lo: 0x87, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0xbd},
+ {value: 0x0018, lo: 0xbe, hi: 0xbf},
+ // Block 0x6a, offset 0x35b
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0008, lo: 0x80, hi: 0x8c},
+ {value: 0x0018, lo: 0x8d, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0xab},
+ {value: 0x0040, lo: 0xac, hi: 0xbf},
+ // Block 0x6b, offset 0x360
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0008, lo: 0x80, hi: 0xa5},
+ {value: 0x0018, lo: 0xa6, hi: 0xaf},
+ {value: 0x1308, lo: 0xb0, hi: 0xb1},
+ {value: 0x0018, lo: 0xb2, hi: 0xb7},
+ {value: 0x0040, lo: 0xb8, hi: 0xbf},
+ // Block 0x6c, offset 0x366
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0040, lo: 0x80, hi: 0xb6},
+ {value: 0x0008, lo: 0xb7, hi: 0xb7},
+ {value: 0x2009, lo: 0xb8, hi: 0xb8},
+ {value: 0x6e89, lo: 0xb9, hi: 0xb9},
+ {value: 0x0008, lo: 0xba, hi: 0xbf},
+ // Block 0x6d, offset 0x36c
+ {value: 0x0000, lo: 0x0e},
+ {value: 0x0008, lo: 0x80, hi: 0x81},
+ {value: 0x1308, lo: 0x82, hi: 0x82},
+ {value: 0x0008, lo: 0x83, hi: 0x85},
+ {value: 0x1b08, lo: 0x86, hi: 0x86},
+ {value: 0x0008, lo: 0x87, hi: 0x8a},
+ {value: 0x1308, lo: 0x8b, hi: 0x8b},
+ {value: 0x0008, lo: 0x8c, hi: 0xa2},
+ {value: 0x1008, lo: 0xa3, hi: 0xa4},
+ {value: 0x1308, lo: 0xa5, hi: 0xa6},
+ {value: 0x1008, lo: 0xa7, hi: 0xa7},
+ {value: 0x0018, lo: 0xa8, hi: 0xab},
+ {value: 0x0040, lo: 0xac, hi: 0xaf},
+ {value: 0x0018, lo: 0xb0, hi: 0xb9},
+ {value: 0x0040, lo: 0xba, hi: 0xbf},
+ // Block 0x6e, offset 0x37b
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0208, lo: 0x80, hi: 0xb1},
+ {value: 0x0108, lo: 0xb2, hi: 0xb2},
+ {value: 0x0008, lo: 0xb3, hi: 0xb3},
+ {value: 0x0018, lo: 0xb4, hi: 0xb7},
+ {value: 0x0040, lo: 0xb8, hi: 0xbf},
+ // Block 0x6f, offset 0x381
+ {value: 0x0000, lo: 0x03},
+ {value: 0x1008, lo: 0x80, hi: 0x81},
+ {value: 0x0008, lo: 0x82, hi: 0xb3},
+ {value: 0x1008, lo: 0xb4, hi: 0xbf},
+ // Block 0x70, offset 0x385
+ {value: 0x0000, lo: 0x0e},
+ {value: 0x1008, lo: 0x80, hi: 0x83},
+ {value: 0x1b08, lo: 0x84, hi: 0x84},
+ {value: 0x1308, lo: 0x85, hi: 0x85},
+ {value: 0x0040, lo: 0x86, hi: 0x8d},
+ {value: 0x0018, lo: 0x8e, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x99},
+ {value: 0x0040, lo: 0x9a, hi: 0x9f},
+ {value: 0x1308, lo: 0xa0, hi: 0xb1},
+ {value: 0x0008, lo: 0xb2, hi: 0xb7},
+ {value: 0x0018, lo: 0xb8, hi: 0xba},
+ {value: 0x0008, lo: 0xbb, hi: 0xbb},
+ {value: 0x0018, lo: 0xbc, hi: 0xbc},
+ {value: 0x0008, lo: 0xbd, hi: 0xbd},
+ {value: 0x0040, lo: 0xbe, hi: 0xbf},
+ // Block 0x71, offset 0x394
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0008, lo: 0x80, hi: 0xa5},
+ {value: 0x1308, lo: 0xa6, hi: 0xad},
+ {value: 0x0018, lo: 0xae, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xbf},
+ // Block 0x72, offset 0x399
+ {value: 0x0000, lo: 0x07},
+ {value: 0x0008, lo: 0x80, hi: 0x86},
+ {value: 0x1308, lo: 0x87, hi: 0x91},
+ {value: 0x1008, lo: 0x92, hi: 0x92},
+ {value: 0x1808, lo: 0x93, hi: 0x93},
+ {value: 0x0040, lo: 0x94, hi: 0x9e},
+ {value: 0x0018, lo: 0x9f, hi: 0xbc},
+ {value: 0x0040, lo: 0xbd, hi: 0xbf},
+ // Block 0x73, offset 0x3a1
+ {value: 0x0000, lo: 0x09},
+ {value: 0x1308, lo: 0x80, hi: 0x82},
+ {value: 0x1008, lo: 0x83, hi: 0x83},
+ {value: 0x0008, lo: 0x84, hi: 0xb2},
+ {value: 0x1308, lo: 0xb3, hi: 0xb3},
+ {value: 0x1008, lo: 0xb4, hi: 0xb5},
+ {value: 0x1308, lo: 0xb6, hi: 0xb9},
+ {value: 0x1008, lo: 0xba, hi: 0xbb},
+ {value: 0x1308, lo: 0xbc, hi: 0xbc},
+ {value: 0x1008, lo: 0xbd, hi: 0xbf},
+ // Block 0x74, offset 0x3ab
+ {value: 0x0000, lo: 0x0a},
+ {value: 0x1808, lo: 0x80, hi: 0x80},
+ {value: 0x0018, lo: 0x81, hi: 0x8d},
+ {value: 0x0040, lo: 0x8e, hi: 0x8e},
+ {value: 0x0008, lo: 0x8f, hi: 0x99},
+ {value: 0x0040, lo: 0x9a, hi: 0x9d},
+ {value: 0x0018, lo: 0x9e, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xa4},
+ {value: 0x1308, lo: 0xa5, hi: 0xa5},
+ {value: 0x0008, lo: 0xa6, hi: 0xbe},
+ {value: 0x0040, lo: 0xbf, hi: 0xbf},
+ // Block 0x75, offset 0x3b6
+ {value: 0x0000, lo: 0x07},
+ {value: 0x0008, lo: 0x80, hi: 0xa8},
+ {value: 0x1308, lo: 0xa9, hi: 0xae},
+ {value: 0x1008, lo: 0xaf, hi: 0xb0},
+ {value: 0x1308, lo: 0xb1, hi: 0xb2},
+ {value: 0x1008, lo: 0xb3, hi: 0xb4},
+ {value: 0x1308, lo: 0xb5, hi: 0xb6},
+ {value: 0x0040, lo: 0xb7, hi: 0xbf},
+ // Block 0x76, offset 0x3be
+ {value: 0x0000, lo: 0x10},
+ {value: 0x0008, lo: 0x80, hi: 0x82},
+ {value: 0x1308, lo: 0x83, hi: 0x83},
+ {value: 0x0008, lo: 0x84, hi: 0x8b},
+ {value: 0x1308, lo: 0x8c, hi: 0x8c},
+ {value: 0x1008, lo: 0x8d, hi: 0x8d},
+ {value: 0x0040, lo: 0x8e, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x99},
+ {value: 0x0040, lo: 0x9a, hi: 0x9b},
+ {value: 0x0018, lo: 0x9c, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xb6},
+ {value: 0x0018, lo: 0xb7, hi: 0xb9},
+ {value: 0x0008, lo: 0xba, hi: 0xba},
+ {value: 0x1008, lo: 0xbb, hi: 0xbb},
+ {value: 0x1308, lo: 0xbc, hi: 0xbc},
+ {value: 0x1008, lo: 0xbd, hi: 0xbd},
+ {value: 0x0008, lo: 0xbe, hi: 0xbf},
+ // Block 0x77, offset 0x3cf
+ {value: 0x0000, lo: 0x08},
+ {value: 0x0008, lo: 0x80, hi: 0xaf},
+ {value: 0x1308, lo: 0xb0, hi: 0xb0},
+ {value: 0x0008, lo: 0xb1, hi: 0xb1},
+ {value: 0x1308, lo: 0xb2, hi: 0xb4},
+ {value: 0x0008, lo: 0xb5, hi: 0xb6},
+ {value: 0x1308, lo: 0xb7, hi: 0xb8},
+ {value: 0x0008, lo: 0xb9, hi: 0xbd},
+ {value: 0x1308, lo: 0xbe, hi: 0xbf},
+ // Block 0x78, offset 0x3d8
+ {value: 0x0000, lo: 0x0f},
+ {value: 0x0008, lo: 0x80, hi: 0x80},
+ {value: 0x1308, lo: 0x81, hi: 0x81},
+ {value: 0x0008, lo: 0x82, hi: 0x82},
+ {value: 0x0040, lo: 0x83, hi: 0x9a},
+ {value: 0x0008, lo: 0x9b, hi: 0x9d},
+ {value: 0x0018, lo: 0x9e, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xaa},
+ {value: 0x1008, lo: 0xab, hi: 0xab},
+ {value: 0x1308, lo: 0xac, hi: 0xad},
+ {value: 0x1008, lo: 0xae, hi: 0xaf},
+ {value: 0x0018, lo: 0xb0, hi: 0xb1},
+ {value: 0x0008, lo: 0xb2, hi: 0xb4},
+ {value: 0x1008, lo: 0xb5, hi: 0xb5},
+ {value: 0x1b08, lo: 0xb6, hi: 0xb6},
+ {value: 0x0040, lo: 0xb7, hi: 0xbf},
+ // Block 0x79, offset 0x3e8
+ {value: 0x0000, lo: 0x0c},
+ {value: 0x0040, lo: 0x80, hi: 0x80},
+ {value: 0x0008, lo: 0x81, hi: 0x86},
+ {value: 0x0040, lo: 0x87, hi: 0x88},
+ {value: 0x0008, lo: 0x89, hi: 0x8e},
+ {value: 0x0040, lo: 0x8f, hi: 0x90},
+ {value: 0x0008, lo: 0x91, hi: 0x96},
+ {value: 0x0040, lo: 0x97, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xa6},
+ {value: 0x0040, lo: 0xa7, hi: 0xa7},
+ {value: 0x0008, lo: 0xa8, hi: 0xae},
+ {value: 0x0040, lo: 0xaf, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xbf},
+ // Block 0x7a, offset 0x3f5
+ {value: 0x0000, lo: 0x09},
+ {value: 0x0008, lo: 0x80, hi: 0x9a},
+ {value: 0x0018, lo: 0x9b, hi: 0x9b},
+ {value: 0x4465, lo: 0x9c, hi: 0x9c},
+ {value: 0x447d, lo: 0x9d, hi: 0x9d},
+ {value: 0x2971, lo: 0x9e, hi: 0x9e},
+ {value: 0xe06d, lo: 0x9f, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xa5},
+ {value: 0x0040, lo: 0xa6, hi: 0xaf},
+ {value: 0x4495, lo: 0xb0, hi: 0xbf},
+ // Block 0x7b, offset 0x3ff
+ {value: 0x0000, lo: 0x04},
+ {value: 0x44b5, lo: 0x80, hi: 0x8f},
+ {value: 0x44d5, lo: 0x90, hi: 0x9f},
+ {value: 0x44f5, lo: 0xa0, hi: 0xaf},
+ {value: 0x44d5, lo: 0xb0, hi: 0xbf},
+ // Block 0x7c, offset 0x404
+ {value: 0x0000, lo: 0x0c},
+ {value: 0x0008, lo: 0x80, hi: 0xa2},
+ {value: 0x1008, lo: 0xa3, hi: 0xa4},
+ {value: 0x1308, lo: 0xa5, hi: 0xa5},
+ {value: 0x1008, lo: 0xa6, hi: 0xa7},
+ {value: 0x1308, lo: 0xa8, hi: 0xa8},
+ {value: 0x1008, lo: 0xa9, hi: 0xaa},
+ {value: 0x0018, lo: 0xab, hi: 0xab},
+ {value: 0x1008, lo: 0xac, hi: 0xac},
+ {value: 0x1b08, lo: 0xad, hi: 0xad},
+ {value: 0x0040, lo: 0xae, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xb9},
+ {value: 0x0040, lo: 0xba, hi: 0xbf},
+ // Block 0x7d, offset 0x411
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0008, lo: 0x80, hi: 0xa3},
+ {value: 0x0040, lo: 0xa4, hi: 0xaf},
+ {value: 0x0018, lo: 0xb0, hi: 0xbf},
+ // Block 0x7e, offset 0x415
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0018, lo: 0x80, hi: 0x86},
+ {value: 0x0040, lo: 0x87, hi: 0x8a},
+ {value: 0x0018, lo: 0x8b, hi: 0xbb},
+ {value: 0x0040, lo: 0xbc, hi: 0xbf},
+ // Block 0x7f, offset 0x41a
+ {value: 0x0020, lo: 0x01},
+ {value: 0x4515, lo: 0x80, hi: 0xbf},
+ // Block 0x80, offset 0x41c
+ {value: 0x0020, lo: 0x03},
+ {value: 0x4d15, lo: 0x80, hi: 0x94},
+ {value: 0x4ad5, lo: 0x95, hi: 0x95},
+ {value: 0x4fb5, lo: 0x96, hi: 0xbf},
+ // Block 0x81, offset 0x420
+ {value: 0x0020, lo: 0x01},
+ {value: 0x54f5, lo: 0x80, hi: 0xbf},
+ // Block 0x82, offset 0x422
+ {value: 0x0020, lo: 0x03},
+ {value: 0x5cf5, lo: 0x80, hi: 0x84},
+ {value: 0x5655, lo: 0x85, hi: 0x85},
+ {value: 0x5d95, lo: 0x86, hi: 0xbf},
+ // Block 0x83, offset 0x426
+ {value: 0x0020, lo: 0x08},
+ {value: 0x6b55, lo: 0x80, hi: 0x8f},
+ {value: 0x6d15, lo: 0x90, hi: 0x90},
+ {value: 0x6d55, lo: 0x91, hi: 0xab},
+ {value: 0x6ea1, lo: 0xac, hi: 0xac},
+ {value: 0x70b5, lo: 0xad, hi: 0xad},
+ {value: 0x0040, lo: 0xae, hi: 0xae},
+ {value: 0x0040, lo: 0xaf, hi: 0xaf},
+ {value: 0x70d5, lo: 0xb0, hi: 0xbf},
+ // Block 0x84, offset 0x42f
+ {value: 0x0020, lo: 0x05},
+ {value: 0x72d5, lo: 0x80, hi: 0xad},
+ {value: 0x6535, lo: 0xae, hi: 0xae},
+ {value: 0x7895, lo: 0xaf, hi: 0xb5},
+ {value: 0x6f55, lo: 0xb6, hi: 0xb6},
+ {value: 0x7975, lo: 0xb7, hi: 0xbf},
+ // Block 0x85, offset 0x435
+ {value: 0x0028, lo: 0x03},
+ {value: 0x7c21, lo: 0x80, hi: 0x82},
+ {value: 0x7be1, lo: 0x83, hi: 0x83},
+ {value: 0x7c99, lo: 0x84, hi: 0xbf},
+ // Block 0x86, offset 0x439
+ {value: 0x0038, lo: 0x0f},
+ {value: 0x9db1, lo: 0x80, hi: 0x83},
+ {value: 0x9e59, lo: 0x84, hi: 0x85},
+ {value: 0x9e91, lo: 0x86, hi: 0x87},
+ {value: 0x9ec9, lo: 0x88, hi: 0x8f},
+ {value: 0x0040, lo: 0x90, hi: 0x90},
+ {value: 0x0040, lo: 0x91, hi: 0x91},
+ {value: 0xa089, lo: 0x92, hi: 0x97},
+ {value: 0xa1a1, lo: 0x98, hi: 0x9c},
+ {value: 0xa281, lo: 0x9d, hi: 0xb3},
+ {value: 0x9d41, lo: 0xb4, hi: 0xb4},
+ {value: 0x9db1, lo: 0xb5, hi: 0xb5},
+ {value: 0xa789, lo: 0xb6, hi: 0xbb},
+ {value: 0xa869, lo: 0xbc, hi: 0xbc},
+ {value: 0xa7f9, lo: 0xbd, hi: 0xbd},
+ {value: 0xa8d9, lo: 0xbe, hi: 0xbf},
+ // Block 0x87, offset 0x449
+ {value: 0x0000, lo: 0x09},
+ {value: 0x0008, lo: 0x80, hi: 0x8b},
+ {value: 0x0040, lo: 0x8c, hi: 0x8c},
+ {value: 0x0008, lo: 0x8d, hi: 0xa6},
+ {value: 0x0040, lo: 0xa7, hi: 0xa7},
+ {value: 0x0008, lo: 0xa8, hi: 0xba},
+ {value: 0x0040, lo: 0xbb, hi: 0xbb},
+ {value: 0x0008, lo: 0xbc, hi: 0xbd},
+ {value: 0x0040, lo: 0xbe, hi: 0xbe},
+ {value: 0x0008, lo: 0xbf, hi: 0xbf},
+ // Block 0x88, offset 0x453
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0008, lo: 0x80, hi: 0x8d},
+ {value: 0x0040, lo: 0x8e, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x9d},
+ {value: 0x0040, lo: 0x9e, hi: 0xbf},
+ // Block 0x89, offset 0x458
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0xba},
+ {value: 0x0040, lo: 0xbb, hi: 0xbf},
+ // Block 0x8a, offset 0x45b
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0018, lo: 0x80, hi: 0x82},
+ {value: 0x0040, lo: 0x83, hi: 0x86},
+ {value: 0x0018, lo: 0x87, hi: 0xb3},
+ {value: 0x0040, lo: 0xb4, hi: 0xb6},
+ {value: 0x0018, lo: 0xb7, hi: 0xbf},
+ // Block 0x8b, offset 0x461
+ {value: 0x0000, lo: 0x06},
+ {value: 0x0018, lo: 0x80, hi: 0x8e},
+ {value: 0x0040, lo: 0x8f, hi: 0x8f},
+ {value: 0x0018, lo: 0x90, hi: 0x9b},
+ {value: 0x0040, lo: 0x9c, hi: 0x9f},
+ {value: 0x0018, lo: 0xa0, hi: 0xa0},
+ {value: 0x0040, lo: 0xa1, hi: 0xbf},
+ // Block 0x8c, offset 0x468
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0040, lo: 0x80, hi: 0x8f},
+ {value: 0x0018, lo: 0x90, hi: 0xbc},
+ {value: 0x1308, lo: 0xbd, hi: 0xbd},
+ {value: 0x0040, lo: 0xbe, hi: 0xbf},
+ // Block 0x8d, offset 0x46d
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0008, lo: 0x80, hi: 0x9c},
+ {value: 0x0040, lo: 0x9d, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xbf},
+ // Block 0x8e, offset 0x471
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0008, lo: 0x80, hi: 0x90},
+ {value: 0x0040, lo: 0x91, hi: 0x9f},
+ {value: 0x1308, lo: 0xa0, hi: 0xa0},
+ {value: 0x0018, lo: 0xa1, hi: 0xbb},
+ {value: 0x0040, lo: 0xbc, hi: 0xbf},
+ // Block 0x8f, offset 0x477
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0008, lo: 0x80, hi: 0x9f},
+ {value: 0x0018, lo: 0xa0, hi: 0xa3},
+ {value: 0x0040, lo: 0xa4, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xbf},
+ // Block 0x90, offset 0x47c
+ {value: 0x0000, lo: 0x08},
+ {value: 0x0008, lo: 0x80, hi: 0x80},
+ {value: 0x0018, lo: 0x81, hi: 0x81},
+ {value: 0x0008, lo: 0x82, hi: 0x89},
+ {value: 0x0018, lo: 0x8a, hi: 0x8a},
+ {value: 0x0040, lo: 0x8b, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0xb5},
+ {value: 0x1308, lo: 0xb6, hi: 0xba},
+ {value: 0x0040, lo: 0xbb, hi: 0xbf},
+ // Block 0x91, offset 0x485
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0008, lo: 0x80, hi: 0x9d},
+ {value: 0x0040, lo: 0x9e, hi: 0x9e},
+ {value: 0x0018, lo: 0x9f, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xbf},
+ // Block 0x92, offset 0x48a
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0008, lo: 0x80, hi: 0x83},
+ {value: 0x0040, lo: 0x84, hi: 0x87},
+ {value: 0x0008, lo: 0x88, hi: 0x8f},
+ {value: 0x0018, lo: 0x90, hi: 0x95},
+ {value: 0x0040, lo: 0x96, hi: 0xbf},
+ // Block 0x93, offset 0x490
+ {value: 0x0000, lo: 0x06},
+ {value: 0xe145, lo: 0x80, hi: 0x87},
+ {value: 0xe1c5, lo: 0x88, hi: 0x8f},
+ {value: 0xe145, lo: 0x90, hi: 0x97},
+ {value: 0x8ad5, lo: 0x98, hi: 0x9f},
+ {value: 0x8aed, lo: 0xa0, hi: 0xa7},
+ {value: 0x0008, lo: 0xa8, hi: 0xbf},
+ // Block 0x94, offset 0x497
+ {value: 0x0000, lo: 0x06},
+ {value: 0x0008, lo: 0x80, hi: 0x9d},
+ {value: 0x0040, lo: 0x9e, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xa9},
+ {value: 0x0040, lo: 0xaa, hi: 0xaf},
+ {value: 0x8aed, lo: 0xb0, hi: 0xb7},
+ {value: 0x8ad5, lo: 0xb8, hi: 0xbf},
+ // Block 0x95, offset 0x49e
+ {value: 0x0000, lo: 0x06},
+ {value: 0xe145, lo: 0x80, hi: 0x87},
+ {value: 0xe1c5, lo: 0x88, hi: 0x8f},
+ {value: 0xe145, lo: 0x90, hi: 0x93},
+ {value: 0x0040, lo: 0x94, hi: 0x97},
+ {value: 0x0008, lo: 0x98, hi: 0xbb},
+ {value: 0x0040, lo: 0xbc, hi: 0xbf},
+ // Block 0x96, offset 0x4a5
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0008, lo: 0x80, hi: 0xa7},
+ {value: 0x0040, lo: 0xa8, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xbf},
+ // Block 0x97, offset 0x4a9
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0008, lo: 0x80, hi: 0xa3},
+ {value: 0x0040, lo: 0xa4, hi: 0xae},
+ {value: 0x0018, lo: 0xaf, hi: 0xaf},
+ {value: 0x0040, lo: 0xb0, hi: 0xbf},
+ // Block 0x98, offset 0x4ae
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0xb6},
+ {value: 0x0040, lo: 0xb7, hi: 0xbf},
+ // Block 0x99, offset 0x4b1
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0008, lo: 0x80, hi: 0x95},
+ {value: 0x0040, lo: 0x96, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xa7},
+ {value: 0x0040, lo: 0xa8, hi: 0xbf},
+ // Block 0x9a, offset 0x4b6
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x0008, lo: 0x80, hi: 0x85},
+ {value: 0x0040, lo: 0x86, hi: 0x87},
+ {value: 0x0008, lo: 0x88, hi: 0x88},
+ {value: 0x0040, lo: 0x89, hi: 0x89},
+ {value: 0x0008, lo: 0x8a, hi: 0xb5},
+ {value: 0x0040, lo: 0xb6, hi: 0xb6},
+ {value: 0x0008, lo: 0xb7, hi: 0xb8},
+ {value: 0x0040, lo: 0xb9, hi: 0xbb},
+ {value: 0x0008, lo: 0xbc, hi: 0xbc},
+ {value: 0x0040, lo: 0xbd, hi: 0xbe},
+ {value: 0x0008, lo: 0xbf, hi: 0xbf},
+ // Block 0x9b, offset 0x4c2
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0008, lo: 0x80, hi: 0x95},
+ {value: 0x0040, lo: 0x96, hi: 0x96},
+ {value: 0x0018, lo: 0x97, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xb6},
+ {value: 0x0018, lo: 0xb7, hi: 0xbf},
+ // Block 0x9c, offset 0x4c8
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0008, lo: 0x80, hi: 0x9e},
+ {value: 0x0040, lo: 0x9f, hi: 0xa6},
+ {value: 0x0018, lo: 0xa7, hi: 0xaf},
+ {value: 0x0040, lo: 0xb0, hi: 0xbf},
+ // Block 0x9d, offset 0x4cd
+ {value: 0x0000, lo: 0x06},
+ {value: 0x0040, lo: 0x80, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xb2},
+ {value: 0x0040, lo: 0xb3, hi: 0xb3},
+ {value: 0x0008, lo: 0xb4, hi: 0xb5},
+ {value: 0x0040, lo: 0xb6, hi: 0xba},
+ {value: 0x0018, lo: 0xbb, hi: 0xbf},
+ // Block 0x9e, offset 0x4d4
+ {value: 0x0000, lo: 0x07},
+ {value: 0x0008, lo: 0x80, hi: 0x95},
+ {value: 0x0018, lo: 0x96, hi: 0x9b},
+ {value: 0x0040, lo: 0x9c, hi: 0x9e},
+ {value: 0x0018, lo: 0x9f, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xb9},
+ {value: 0x0040, lo: 0xba, hi: 0xbe},
+ {value: 0x0018, lo: 0xbf, hi: 0xbf},
+ // Block 0x9f, offset 0x4dc
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0008, lo: 0x80, hi: 0xb7},
+ {value: 0x0040, lo: 0xb8, hi: 0xbb},
+ {value: 0x0018, lo: 0xbc, hi: 0xbd},
+ {value: 0x0008, lo: 0xbe, hi: 0xbf},
+ // Block 0xa0, offset 0x4e1
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0018, lo: 0x80, hi: 0x8f},
+ {value: 0x0040, lo: 0x90, hi: 0x91},
+ {value: 0x0018, lo: 0x92, hi: 0xbf},
+ // Block 0xa1, offset 0x4e5
+ {value: 0x0000, lo: 0x0f},
+ {value: 0x0008, lo: 0x80, hi: 0x80},
+ {value: 0x1308, lo: 0x81, hi: 0x83},
+ {value: 0x0040, lo: 0x84, hi: 0x84},
+ {value: 0x1308, lo: 0x85, hi: 0x86},
+ {value: 0x0040, lo: 0x87, hi: 0x8b},
+ {value: 0x1308, lo: 0x8c, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x93},
+ {value: 0x0040, lo: 0x94, hi: 0x94},
+ {value: 0x0008, lo: 0x95, hi: 0x97},
+ {value: 0x0040, lo: 0x98, hi: 0x98},
+ {value: 0x0008, lo: 0x99, hi: 0xb3},
+ {value: 0x0040, lo: 0xb4, hi: 0xb7},
+ {value: 0x1308, lo: 0xb8, hi: 0xba},
+ {value: 0x0040, lo: 0xbb, hi: 0xbe},
+ {value: 0x1b08, lo: 0xbf, hi: 0xbf},
+ // Block 0xa2, offset 0x4f5
+ {value: 0x0000, lo: 0x06},
+ {value: 0x0018, lo: 0x80, hi: 0x87},
+ {value: 0x0040, lo: 0x88, hi: 0x8f},
+ {value: 0x0018, lo: 0x90, hi: 0x98},
+ {value: 0x0040, lo: 0x99, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xbc},
+ {value: 0x0018, lo: 0xbd, hi: 0xbf},
+ // Block 0xa3, offset 0x4fc
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0008, lo: 0x80, hi: 0x9c},
+ {value: 0x0018, lo: 0x9d, hi: 0x9f},
+ {value: 0x0040, lo: 0xa0, hi: 0xbf},
+ // Block 0xa4, offset 0x500
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0008, lo: 0x80, hi: 0xb5},
+ {value: 0x0040, lo: 0xb6, hi: 0xb8},
+ {value: 0x0018, lo: 0xb9, hi: 0xbf},
+ // Block 0xa5, offset 0x504
+ {value: 0x0000, lo: 0x06},
+ {value: 0x0008, lo: 0x80, hi: 0x95},
+ {value: 0x0040, lo: 0x96, hi: 0x97},
+ {value: 0x0018, lo: 0x98, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xb2},
+ {value: 0x0040, lo: 0xb3, hi: 0xb7},
+ {value: 0x0018, lo: 0xb8, hi: 0xbf},
+ // Block 0xa6, offset 0x50b
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0x88},
+ {value: 0x0040, lo: 0x89, hi: 0xbf},
+ // Block 0xa7, offset 0x50e
+ {value: 0x0000, lo: 0x02},
+ {value: 0x03dd, lo: 0x80, hi: 0xb2},
+ {value: 0x0040, lo: 0xb3, hi: 0xbf},
+ // Block 0xa8, offset 0x511
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0008, lo: 0x80, hi: 0xb2},
+ {value: 0x0040, lo: 0xb3, hi: 0xb9},
+ {value: 0x0018, lo: 0xba, hi: 0xbf},
+ // Block 0xa9, offset 0x515
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0040, lo: 0x80, hi: 0x9f},
+ {value: 0x0018, lo: 0xa0, hi: 0xbe},
+ {value: 0x0040, lo: 0xbf, hi: 0xbf},
+ // Block 0xaa, offset 0x519
+ {value: 0x0000, lo: 0x05},
+ {value: 0x1008, lo: 0x80, hi: 0x80},
+ {value: 0x1308, lo: 0x81, hi: 0x81},
+ {value: 0x1008, lo: 0x82, hi: 0x82},
+ {value: 0x0008, lo: 0x83, hi: 0xb7},
+ {value: 0x1308, lo: 0xb8, hi: 0xbf},
+ // Block 0xab, offset 0x51f
+ {value: 0x0000, lo: 0x08},
+ {value: 0x1308, lo: 0x80, hi: 0x85},
+ {value: 0x1b08, lo: 0x86, hi: 0x86},
+ {value: 0x0018, lo: 0x87, hi: 0x8d},
+ {value: 0x0040, lo: 0x8e, hi: 0x91},
+ {value: 0x0018, lo: 0x92, hi: 0xa5},
+ {value: 0x0008, lo: 0xa6, hi: 0xaf},
+ {value: 0x0040, lo: 0xb0, hi: 0xbe},
+ {value: 0x1b08, lo: 0xbf, hi: 0xbf},
+ // Block 0xac, offset 0x528
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x1308, lo: 0x80, hi: 0x81},
+ {value: 0x1008, lo: 0x82, hi: 0x82},
+ {value: 0x0008, lo: 0x83, hi: 0xaf},
+ {value: 0x1008, lo: 0xb0, hi: 0xb2},
+ {value: 0x1308, lo: 0xb3, hi: 0xb6},
+ {value: 0x1008, lo: 0xb7, hi: 0xb8},
+ {value: 0x1b08, lo: 0xb9, hi: 0xb9},
+ {value: 0x1308, lo: 0xba, hi: 0xba},
+ {value: 0x0018, lo: 0xbb, hi: 0xbc},
+ {value: 0x0340, lo: 0xbd, hi: 0xbd},
+ {value: 0x0018, lo: 0xbe, hi: 0xbf},
+ // Block 0xad, offset 0x534
+ {value: 0x0000, lo: 0x06},
+ {value: 0x0018, lo: 0x80, hi: 0x81},
+ {value: 0x0040, lo: 0x82, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0xa8},
+ {value: 0x0040, lo: 0xa9, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xb9},
+ {value: 0x0040, lo: 0xba, hi: 0xbf},
+ // Block 0xae, offset 0x53b
+ {value: 0x0000, lo: 0x08},
+ {value: 0x1308, lo: 0x80, hi: 0x82},
+ {value: 0x0008, lo: 0x83, hi: 0xa6},
+ {value: 0x1308, lo: 0xa7, hi: 0xab},
+ {value: 0x1008, lo: 0xac, hi: 0xac},
+ {value: 0x1308, lo: 0xad, hi: 0xb2},
+ {value: 0x1b08, lo: 0xb3, hi: 0xb4},
+ {value: 0x0040, lo: 0xb5, hi: 0xb5},
+ {value: 0x0008, lo: 0xb6, hi: 0xbf},
+ // Block 0xaf, offset 0x544
+ {value: 0x0000, lo: 0x07},
+ {value: 0x0018, lo: 0x80, hi: 0x83},
+ {value: 0x0040, lo: 0x84, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0xb2},
+ {value: 0x1308, lo: 0xb3, hi: 0xb3},
+ {value: 0x0018, lo: 0xb4, hi: 0xb5},
+ {value: 0x0008, lo: 0xb6, hi: 0xb6},
+ {value: 0x0040, lo: 0xb7, hi: 0xbf},
+ // Block 0xb0, offset 0x54c
+ {value: 0x0000, lo: 0x06},
+ {value: 0x1308, lo: 0x80, hi: 0x81},
+ {value: 0x1008, lo: 0x82, hi: 0x82},
+ {value: 0x0008, lo: 0x83, hi: 0xb2},
+ {value: 0x1008, lo: 0xb3, hi: 0xb5},
+ {value: 0x1308, lo: 0xb6, hi: 0xbe},
+ {value: 0x1008, lo: 0xbf, hi: 0xbf},
+ // Block 0xb1, offset 0x553
+ {value: 0x0000, lo: 0x0d},
+ {value: 0x1808, lo: 0x80, hi: 0x80},
+ {value: 0x0008, lo: 0x81, hi: 0x84},
+ {value: 0x0018, lo: 0x85, hi: 0x89},
+ {value: 0x1308, lo: 0x8a, hi: 0x8c},
+ {value: 0x0018, lo: 0x8d, hi: 0x8d},
+ {value: 0x0040, lo: 0x8e, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x9a},
+ {value: 0x0018, lo: 0x9b, hi: 0x9b},
+ {value: 0x0008, lo: 0x9c, hi: 0x9c},
+ {value: 0x0018, lo: 0x9d, hi: 0x9f},
+ {value: 0x0040, lo: 0xa0, hi: 0xa0},
+ {value: 0x0018, lo: 0xa1, hi: 0xb4},
+ {value: 0x0040, lo: 0xb5, hi: 0xbf},
+ // Block 0xb2, offset 0x561
+ {value: 0x0000, lo: 0x0c},
+ {value: 0x0008, lo: 0x80, hi: 0x91},
+ {value: 0x0040, lo: 0x92, hi: 0x92},
+ {value: 0x0008, lo: 0x93, hi: 0xab},
+ {value: 0x1008, lo: 0xac, hi: 0xae},
+ {value: 0x1308, lo: 0xaf, hi: 0xb1},
+ {value: 0x1008, lo: 0xb2, hi: 0xb3},
+ {value: 0x1308, lo: 0xb4, hi: 0xb4},
+ {value: 0x1808, lo: 0xb5, hi: 0xb5},
+ {value: 0x1308, lo: 0xb6, hi: 0xb7},
+ {value: 0x0018, lo: 0xb8, hi: 0xbd},
+ {value: 0x1308, lo: 0xbe, hi: 0xbe},
+ {value: 0x0040, lo: 0xbf, hi: 0xbf},
+ // Block 0xb3, offset 0x56e
+ {value: 0x0000, lo: 0x0c},
+ {value: 0x0008, lo: 0x80, hi: 0x86},
+ {value: 0x0040, lo: 0x87, hi: 0x87},
+ {value: 0x0008, lo: 0x88, hi: 0x88},
+ {value: 0x0040, lo: 0x89, hi: 0x89},
+ {value: 0x0008, lo: 0x8a, hi: 0x8d},
+ {value: 0x0040, lo: 0x8e, hi: 0x8e},
+ {value: 0x0008, lo: 0x8f, hi: 0x9d},
+ {value: 0x0040, lo: 0x9e, hi: 0x9e},
+ {value: 0x0008, lo: 0x9f, hi: 0xa8},
+ {value: 0x0018, lo: 0xa9, hi: 0xa9},
+ {value: 0x0040, lo: 0xaa, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xbf},
+ // Block 0xb4, offset 0x57b
+ {value: 0x0000, lo: 0x08},
+ {value: 0x0008, lo: 0x80, hi: 0x9e},
+ {value: 0x1308, lo: 0x9f, hi: 0x9f},
+ {value: 0x1008, lo: 0xa0, hi: 0xa2},
+ {value: 0x1308, lo: 0xa3, hi: 0xa9},
+ {value: 0x1b08, lo: 0xaa, hi: 0xaa},
+ {value: 0x0040, lo: 0xab, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xb9},
+ {value: 0x0040, lo: 0xba, hi: 0xbf},
+ // Block 0xb5, offset 0x584
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0008, lo: 0x80, hi: 0xb4},
+ {value: 0x1008, lo: 0xb5, hi: 0xb7},
+ {value: 0x1308, lo: 0xb8, hi: 0xbf},
+ // Block 0xb6, offset 0x588
+ {value: 0x0000, lo: 0x0d},
+ {value: 0x1008, lo: 0x80, hi: 0x81},
+ {value: 0x1b08, lo: 0x82, hi: 0x82},
+ {value: 0x1308, lo: 0x83, hi: 0x84},
+ {value: 0x1008, lo: 0x85, hi: 0x85},
+ {value: 0x1308, lo: 0x86, hi: 0x86},
+ {value: 0x0008, lo: 0x87, hi: 0x8a},
+ {value: 0x0018, lo: 0x8b, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x99},
+ {value: 0x0040, lo: 0x9a, hi: 0x9a},
+ {value: 0x0018, lo: 0x9b, hi: 0x9b},
+ {value: 0x0040, lo: 0x9c, hi: 0x9c},
+ {value: 0x0018, lo: 0x9d, hi: 0x9d},
+ {value: 0x0040, lo: 0x9e, hi: 0xbf},
+ // Block 0xb7, offset 0x596
+ {value: 0x0000, lo: 0x07},
+ {value: 0x0008, lo: 0x80, hi: 0xaf},
+ {value: 0x1008, lo: 0xb0, hi: 0xb2},
+ {value: 0x1308, lo: 0xb3, hi: 0xb8},
+ {value: 0x1008, lo: 0xb9, hi: 0xb9},
+ {value: 0x1308, lo: 0xba, hi: 0xba},
+ {value: 0x1008, lo: 0xbb, hi: 0xbe},
+ {value: 0x1308, lo: 0xbf, hi: 0xbf},
+ // Block 0xb8, offset 0x59e
+ {value: 0x0000, lo: 0x0a},
+ {value: 0x1308, lo: 0x80, hi: 0x80},
+ {value: 0x1008, lo: 0x81, hi: 0x81},
+ {value: 0x1b08, lo: 0x82, hi: 0x82},
+ {value: 0x1308, lo: 0x83, hi: 0x83},
+ {value: 0x0008, lo: 0x84, hi: 0x85},
+ {value: 0x0018, lo: 0x86, hi: 0x86},
+ {value: 0x0008, lo: 0x87, hi: 0x87},
+ {value: 0x0040, lo: 0x88, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x99},
+ {value: 0x0040, lo: 0x9a, hi: 0xbf},
+ // Block 0xb9, offset 0x5a9
+ {value: 0x0000, lo: 0x08},
+ {value: 0x0008, lo: 0x80, hi: 0xae},
+ {value: 0x1008, lo: 0xaf, hi: 0xb1},
+ {value: 0x1308, lo: 0xb2, hi: 0xb5},
+ {value: 0x0040, lo: 0xb6, hi: 0xb7},
+ {value: 0x1008, lo: 0xb8, hi: 0xbb},
+ {value: 0x1308, lo: 0xbc, hi: 0xbd},
+ {value: 0x1008, lo: 0xbe, hi: 0xbe},
+ {value: 0x1b08, lo: 0xbf, hi: 0xbf},
+ // Block 0xba, offset 0x5b2
+ {value: 0x0000, lo: 0x05},
+ {value: 0x1308, lo: 0x80, hi: 0x80},
+ {value: 0x0018, lo: 0x81, hi: 0x97},
+ {value: 0x0008, lo: 0x98, hi: 0x9b},
+ {value: 0x1308, lo: 0x9c, hi: 0x9d},
+ {value: 0x0040, lo: 0x9e, hi: 0xbf},
+ // Block 0xbb, offset 0x5b8
+ {value: 0x0000, lo: 0x07},
+ {value: 0x0008, lo: 0x80, hi: 0xaf},
+ {value: 0x1008, lo: 0xb0, hi: 0xb2},
+ {value: 0x1308, lo: 0xb3, hi: 0xba},
+ {value: 0x1008, lo: 0xbb, hi: 0xbc},
+ {value: 0x1308, lo: 0xbd, hi: 0xbd},
+ {value: 0x1008, lo: 0xbe, hi: 0xbe},
+ {value: 0x1b08, lo: 0xbf, hi: 0xbf},
+ // Block 0xbc, offset 0x5c0
+ {value: 0x0000, lo: 0x08},
+ {value: 0x1308, lo: 0x80, hi: 0x80},
+ {value: 0x0018, lo: 0x81, hi: 0x83},
+ {value: 0x0008, lo: 0x84, hi: 0x84},
+ {value: 0x0040, lo: 0x85, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x99},
+ {value: 0x0040, lo: 0x9a, hi: 0x9f},
+ {value: 0x0018, lo: 0xa0, hi: 0xac},
+ {value: 0x0040, lo: 0xad, hi: 0xbf},
+ // Block 0xbd, offset 0x5c9
+ {value: 0x0000, lo: 0x09},
+ {value: 0x0008, lo: 0x80, hi: 0xaa},
+ {value: 0x1308, lo: 0xab, hi: 0xab},
+ {value: 0x1008, lo: 0xac, hi: 0xac},
+ {value: 0x1308, lo: 0xad, hi: 0xad},
+ {value: 0x1008, lo: 0xae, hi: 0xaf},
+ {value: 0x1308, lo: 0xb0, hi: 0xb5},
+ {value: 0x1808, lo: 0xb6, hi: 0xb6},
+ {value: 0x1308, lo: 0xb7, hi: 0xb7},
+ {value: 0x0040, lo: 0xb8, hi: 0xbf},
+ // Block 0xbe, offset 0x5d3
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0x89},
+ {value: 0x0040, lo: 0x8a, hi: 0xbf},
+ // Block 0xbf, offset 0x5d6
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x0008, lo: 0x80, hi: 0x99},
+ {value: 0x0040, lo: 0x9a, hi: 0x9c},
+ {value: 0x1308, lo: 0x9d, hi: 0x9f},
+ {value: 0x1008, lo: 0xa0, hi: 0xa1},
+ {value: 0x1308, lo: 0xa2, hi: 0xa5},
+ {value: 0x1008, lo: 0xa6, hi: 0xa6},
+ {value: 0x1308, lo: 0xa7, hi: 0xaa},
+ {value: 0x1b08, lo: 0xab, hi: 0xab},
+ {value: 0x0040, lo: 0xac, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xb9},
+ {value: 0x0018, lo: 0xba, hi: 0xbf},
+ // Block 0xc0, offset 0x5e2
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0040, lo: 0x80, hi: 0x9f},
+ {value: 0x049d, lo: 0xa0, hi: 0xbf},
+ // Block 0xc1, offset 0x5e5
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0008, lo: 0x80, hi: 0xa9},
+ {value: 0x0018, lo: 0xaa, hi: 0xb2},
+ {value: 0x0040, lo: 0xb3, hi: 0xbe},
+ {value: 0x0008, lo: 0xbf, hi: 0xbf},
+ // Block 0xc2, offset 0x5ea
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0xb8},
+ {value: 0x0040, lo: 0xb9, hi: 0xbf},
+ // Block 0xc3, offset 0x5ed
+ {value: 0x0000, lo: 0x09},
+ {value: 0x0008, lo: 0x80, hi: 0x88},
+ {value: 0x0040, lo: 0x89, hi: 0x89},
+ {value: 0x0008, lo: 0x8a, hi: 0xae},
+ {value: 0x1008, lo: 0xaf, hi: 0xaf},
+ {value: 0x1308, lo: 0xb0, hi: 0xb6},
+ {value: 0x0040, lo: 0xb7, hi: 0xb7},
+ {value: 0x1308, lo: 0xb8, hi: 0xbd},
+ {value: 0x1008, lo: 0xbe, hi: 0xbe},
+ {value: 0x1b08, lo: 0xbf, hi: 0xbf},
+ // Block 0xc4, offset 0x5f7
+ {value: 0x0000, lo: 0x08},
+ {value: 0x0008, lo: 0x80, hi: 0x80},
+ {value: 0x0018, lo: 0x81, hi: 0x85},
+ {value: 0x0040, lo: 0x86, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x99},
+ {value: 0x0018, lo: 0x9a, hi: 0xac},
+ {value: 0x0040, lo: 0xad, hi: 0xaf},
+ {value: 0x0018, lo: 0xb0, hi: 0xb1},
+ {value: 0x0008, lo: 0xb2, hi: 0xbf},
+ // Block 0xc5, offset 0x600
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x0008, lo: 0x80, hi: 0x8f},
+ {value: 0x0040, lo: 0x90, hi: 0x91},
+ {value: 0x1308, lo: 0x92, hi: 0xa7},
+ {value: 0x0040, lo: 0xa8, hi: 0xa8},
+ {value: 0x1008, lo: 0xa9, hi: 0xa9},
+ {value: 0x1308, lo: 0xaa, hi: 0xb0},
+ {value: 0x1008, lo: 0xb1, hi: 0xb1},
+ {value: 0x1308, lo: 0xb2, hi: 0xb3},
+ {value: 0x1008, lo: 0xb4, hi: 0xb4},
+ {value: 0x1308, lo: 0xb5, hi: 0xb6},
+ {value: 0x0040, lo: 0xb7, hi: 0xbf},
+ // Block 0xc6, offset 0x60c
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0x99},
+ {value: 0x0040, lo: 0x9a, hi: 0xbf},
+ // Block 0xc7, offset 0x60f
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0018, lo: 0x80, hi: 0xae},
+ {value: 0x0040, lo: 0xaf, hi: 0xaf},
+ {value: 0x0018, lo: 0xb0, hi: 0xb4},
+ {value: 0x0040, lo: 0xb5, hi: 0xbf},
+ // Block 0xc8, offset 0x614
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0x83},
+ {value: 0x0040, lo: 0x84, hi: 0xbf},
+ // Block 0xc9, offset 0x617
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0xae},
+ {value: 0x0040, lo: 0xaf, hi: 0xbf},
+ // Block 0xca, offset 0x61a
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0x86},
+ {value: 0x0040, lo: 0x87, hi: 0xbf},
+ // Block 0xcb, offset 0x61d
+ {value: 0x0000, lo: 0x06},
+ {value: 0x0008, lo: 0x80, hi: 0x9e},
+ {value: 0x0040, lo: 0x9f, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xa9},
+ {value: 0x0040, lo: 0xaa, hi: 0xad},
+ {value: 0x0018, lo: 0xae, hi: 0xaf},
+ {value: 0x0040, lo: 0xb0, hi: 0xbf},
+ // Block 0xcc, offset 0x624
+ {value: 0x0000, lo: 0x06},
+ {value: 0x0040, lo: 0x80, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0xad},
+ {value: 0x0040, lo: 0xae, hi: 0xaf},
+ {value: 0x1308, lo: 0xb0, hi: 0xb4},
+ {value: 0x0018, lo: 0xb5, hi: 0xb5},
+ {value: 0x0040, lo: 0xb6, hi: 0xbf},
+ // Block 0xcd, offset 0x62b
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0008, lo: 0x80, hi: 0xaf},
+ {value: 0x1308, lo: 0xb0, hi: 0xb6},
+ {value: 0x0018, lo: 0xb7, hi: 0xbf},
+ // Block 0xce, offset 0x62f
+ {value: 0x0000, lo: 0x0a},
+ {value: 0x0008, lo: 0x80, hi: 0x83},
+ {value: 0x0018, lo: 0x84, hi: 0x85},
+ {value: 0x0040, lo: 0x86, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x99},
+ {value: 0x0040, lo: 0x9a, hi: 0x9a},
+ {value: 0x0018, lo: 0x9b, hi: 0xa1},
+ {value: 0x0040, lo: 0xa2, hi: 0xa2},
+ {value: 0x0008, lo: 0xa3, hi: 0xb7},
+ {value: 0x0040, lo: 0xb8, hi: 0xbc},
+ {value: 0x0008, lo: 0xbd, hi: 0xbf},
+ // Block 0xcf, offset 0x63a
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0x8f},
+ {value: 0x0040, lo: 0x90, hi: 0xbf},
+ // Block 0xd0, offset 0x63d
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0008, lo: 0x80, hi: 0x84},
+ {value: 0x0040, lo: 0x85, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x90},
+ {value: 0x1008, lo: 0x91, hi: 0xbe},
+ {value: 0x0040, lo: 0xbf, hi: 0xbf},
+ // Block 0xd1, offset 0x643
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0040, lo: 0x80, hi: 0x8e},
+ {value: 0x1308, lo: 0x8f, hi: 0x92},
+ {value: 0x0008, lo: 0x93, hi: 0x9f},
+ {value: 0x0040, lo: 0xa0, hi: 0xbf},
+ // Block 0xd2, offset 0x648
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0040, lo: 0x80, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xa0},
+ {value: 0x0040, lo: 0xa1, hi: 0xbf},
+ // Block 0xd3, offset 0x64c
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0xac},
+ {value: 0x0040, lo: 0xad, hi: 0xbf},
+ // Block 0xd4, offset 0x64f
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0xb2},
+ {value: 0x0040, lo: 0xb3, hi: 0xbf},
+ // Block 0xd5, offset 0x652
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0x81},
+ {value: 0x0040, lo: 0x82, hi: 0xbf},
+ // Block 0xd6, offset 0x655
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0008, lo: 0x80, hi: 0xaa},
+ {value: 0x0040, lo: 0xab, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xbc},
+ {value: 0x0040, lo: 0xbd, hi: 0xbf},
+ // Block 0xd7, offset 0x65a
+ {value: 0x0000, lo: 0x09},
+ {value: 0x0008, lo: 0x80, hi: 0x88},
+ {value: 0x0040, lo: 0x89, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x99},
+ {value: 0x0040, lo: 0x9a, hi: 0x9b},
+ {value: 0x0018, lo: 0x9c, hi: 0x9c},
+ {value: 0x1308, lo: 0x9d, hi: 0x9e},
+ {value: 0x0018, lo: 0x9f, hi: 0x9f},
+ {value: 0x03c0, lo: 0xa0, hi: 0xa3},
+ {value: 0x0040, lo: 0xa4, hi: 0xbf},
+ // Block 0xd8, offset 0x664
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0018, lo: 0x80, hi: 0xb5},
+ {value: 0x0040, lo: 0xb6, hi: 0xbf},
+ // Block 0xd9, offset 0x667
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0018, lo: 0x80, hi: 0xa6},
+ {value: 0x0040, lo: 0xa7, hi: 0xa8},
+ {value: 0x0018, lo: 0xa9, hi: 0xbf},
+ // Block 0xda, offset 0x66b
+ {value: 0x0000, lo: 0x0e},
+ {value: 0x0018, lo: 0x80, hi: 0x9d},
+ {value: 0xb5b9, lo: 0x9e, hi: 0x9e},
+ {value: 0xb601, lo: 0x9f, hi: 0x9f},
+ {value: 0xb649, lo: 0xa0, hi: 0xa0},
+ {value: 0xb6b1, lo: 0xa1, hi: 0xa1},
+ {value: 0xb719, lo: 0xa2, hi: 0xa2},
+ {value: 0xb781, lo: 0xa3, hi: 0xa3},
+ {value: 0xb7e9, lo: 0xa4, hi: 0xa4},
+ {value: 0x1018, lo: 0xa5, hi: 0xa6},
+ {value: 0x1318, lo: 0xa7, hi: 0xa9},
+ {value: 0x0018, lo: 0xaa, hi: 0xac},
+ {value: 0x1018, lo: 0xad, hi: 0xb2},
+ {value: 0x0340, lo: 0xb3, hi: 0xba},
+ {value: 0x1318, lo: 0xbb, hi: 0xbf},
+ // Block 0xdb, offset 0x67a
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x1318, lo: 0x80, hi: 0x82},
+ {value: 0x0018, lo: 0x83, hi: 0x84},
+ {value: 0x1318, lo: 0x85, hi: 0x8b},
+ {value: 0x0018, lo: 0x8c, hi: 0xa9},
+ {value: 0x1318, lo: 0xaa, hi: 0xad},
+ {value: 0x0018, lo: 0xae, hi: 0xba},
+ {value: 0xb851, lo: 0xbb, hi: 0xbb},
+ {value: 0xb899, lo: 0xbc, hi: 0xbc},
+ {value: 0xb8e1, lo: 0xbd, hi: 0xbd},
+ {value: 0xb949, lo: 0xbe, hi: 0xbe},
+ {value: 0xb9b1, lo: 0xbf, hi: 0xbf},
+ // Block 0xdc, offset 0x686
+ {value: 0x0000, lo: 0x03},
+ {value: 0xba19, lo: 0x80, hi: 0x80},
+ {value: 0x0018, lo: 0x81, hi: 0xa8},
+ {value: 0x0040, lo: 0xa9, hi: 0xbf},
+ // Block 0xdd, offset 0x68a
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0018, lo: 0x80, hi: 0x81},
+ {value: 0x1318, lo: 0x82, hi: 0x84},
+ {value: 0x0018, lo: 0x85, hi: 0x85},
+ {value: 0x0040, lo: 0x86, hi: 0xbf},
+ // Block 0xde, offset 0x68f
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0018, lo: 0x80, hi: 0x96},
+ {value: 0x0040, lo: 0x97, hi: 0x9f},
+ {value: 0x0018, lo: 0xa0, hi: 0xb1},
+ {value: 0x0040, lo: 0xb2, hi: 0xbf},
+ // Block 0xdf, offset 0x694
+ {value: 0x0000, lo: 0x03},
+ {value: 0x1308, lo: 0x80, hi: 0xb6},
+ {value: 0x0018, lo: 0xb7, hi: 0xba},
+ {value: 0x1308, lo: 0xbb, hi: 0xbf},
+ // Block 0xe0, offset 0x698
+ {value: 0x0000, lo: 0x04},
+ {value: 0x1308, lo: 0x80, hi: 0xac},
+ {value: 0x0018, lo: 0xad, hi: 0xb4},
+ {value: 0x1308, lo: 0xb5, hi: 0xb5},
+ {value: 0x0018, lo: 0xb6, hi: 0xbf},
+ // Block 0xe1, offset 0x69d
+ {value: 0x0000, lo: 0x08},
+ {value: 0x0018, lo: 0x80, hi: 0x83},
+ {value: 0x1308, lo: 0x84, hi: 0x84},
+ {value: 0x0018, lo: 0x85, hi: 0x8b},
+ {value: 0x0040, lo: 0x8c, hi: 0x9a},
+ {value: 0x1308, lo: 0x9b, hi: 0x9f},
+ {value: 0x0040, lo: 0xa0, hi: 0xa0},
+ {value: 0x1308, lo: 0xa1, hi: 0xaf},
+ {value: 0x0040, lo: 0xb0, hi: 0xbf},
+ // Block 0xe2, offset 0x6a6
+ {value: 0x0000, lo: 0x0a},
+ {value: 0x1308, lo: 0x80, hi: 0x86},
+ {value: 0x0040, lo: 0x87, hi: 0x87},
+ {value: 0x1308, lo: 0x88, hi: 0x98},
+ {value: 0x0040, lo: 0x99, hi: 0x9a},
+ {value: 0x1308, lo: 0x9b, hi: 0xa1},
+ {value: 0x0040, lo: 0xa2, hi: 0xa2},
+ {value: 0x1308, lo: 0xa3, hi: 0xa4},
+ {value: 0x0040, lo: 0xa5, hi: 0xa5},
+ {value: 0x1308, lo: 0xa6, hi: 0xaa},
+ {value: 0x0040, lo: 0xab, hi: 0xbf},
+ // Block 0xe3, offset 0x6b1
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0008, lo: 0x80, hi: 0x84},
+ {value: 0x0040, lo: 0x85, hi: 0x86},
+ {value: 0x0018, lo: 0x87, hi: 0x8f},
+ {value: 0x1308, lo: 0x90, hi: 0x96},
+ {value: 0x0040, lo: 0x97, hi: 0xbf},
+ // Block 0xe4, offset 0x6b7
+ {value: 0x0000, lo: 0x07},
+ {value: 0x0208, lo: 0x80, hi: 0x83},
+ {value: 0x1308, lo: 0x84, hi: 0x8a},
+ {value: 0x0040, lo: 0x8b, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x99},
+ {value: 0x0040, lo: 0x9a, hi: 0x9d},
+ {value: 0x0018, lo: 0x9e, hi: 0x9f},
+ {value: 0x0040, lo: 0xa0, hi: 0xbf},
+ // Block 0xe5, offset 0x6bf
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0040, lo: 0x80, hi: 0xaf},
+ {value: 0x0018, lo: 0xb0, hi: 0xb1},
+ {value: 0x0040, lo: 0xb2, hi: 0xbf},
+ // Block 0xe6, offset 0x6c3
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0018, lo: 0x80, hi: 0xab},
+ {value: 0x0040, lo: 0xac, hi: 0xaf},
+ {value: 0x0018, lo: 0xb0, hi: 0xbf},
+ // Block 0xe7, offset 0x6c7
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0018, lo: 0x80, hi: 0x93},
+ {value: 0x0040, lo: 0x94, hi: 0x9f},
+ {value: 0x0018, lo: 0xa0, hi: 0xae},
+ {value: 0x0040, lo: 0xaf, hi: 0xb0},
+ {value: 0x0018, lo: 0xb1, hi: 0xbf},
+ // Block 0xe8, offset 0x6cd
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0040, lo: 0x80, hi: 0x80},
+ {value: 0x0018, lo: 0x81, hi: 0x8f},
+ {value: 0x0040, lo: 0x90, hi: 0x90},
+ {value: 0x0018, lo: 0x91, hi: 0xb5},
+ {value: 0x0040, lo: 0xb6, hi: 0xbf},
+ // Block 0xe9, offset 0x6d3
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0018, lo: 0x80, hi: 0x8f},
+ {value: 0xc1c1, lo: 0x90, hi: 0x90},
+ {value: 0x0018, lo: 0x91, hi: 0xac},
+ {value: 0x0040, lo: 0xad, hi: 0xbf},
+ // Block 0xea, offset 0x6d8
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0040, lo: 0x80, hi: 0xa5},
+ {value: 0x0018, lo: 0xa6, hi: 0xbf},
+ // Block 0xeb, offset 0x6db
+ {value: 0x0000, lo: 0x0d},
+ {value: 0xc7e9, lo: 0x80, hi: 0x80},
+ {value: 0xc839, lo: 0x81, hi: 0x81},
+ {value: 0xc889, lo: 0x82, hi: 0x82},
+ {value: 0xc8d9, lo: 0x83, hi: 0x83},
+ {value: 0xc929, lo: 0x84, hi: 0x84},
+ {value: 0xc979, lo: 0x85, hi: 0x85},
+ {value: 0xc9c9, lo: 0x86, hi: 0x86},
+ {value: 0xca19, lo: 0x87, hi: 0x87},
+ {value: 0xca69, lo: 0x88, hi: 0x88},
+ {value: 0x0040, lo: 0x89, hi: 0x8f},
+ {value: 0xcab9, lo: 0x90, hi: 0x90},
+ {value: 0xcad9, lo: 0x91, hi: 0x91},
+ {value: 0x0040, lo: 0x92, hi: 0xbf},
+ // Block 0xec, offset 0x6e9
+ {value: 0x0000, lo: 0x06},
+ {value: 0x0018, lo: 0x80, hi: 0x92},
+ {value: 0x0040, lo: 0x93, hi: 0x9f},
+ {value: 0x0018, lo: 0xa0, hi: 0xac},
+ {value: 0x0040, lo: 0xad, hi: 0xaf},
+ {value: 0x0018, lo: 0xb0, hi: 0xb6},
+ {value: 0x0040, lo: 0xb7, hi: 0xbf},
+ // Block 0xed, offset 0x6f0
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0018, lo: 0x80, hi: 0xb3},
+ {value: 0x0040, lo: 0xb4, hi: 0xbf},
+ // Block 0xee, offset 0x6f3
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0018, lo: 0x80, hi: 0x94},
+ {value: 0x0040, lo: 0x95, hi: 0xbf},
+ // Block 0xef, offset 0x6f6
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0018, lo: 0x80, hi: 0x8b},
+ {value: 0x0040, lo: 0x8c, hi: 0x8f},
+ {value: 0x0018, lo: 0x90, hi: 0xbf},
+ // Block 0xf0, offset 0x6fa
+ {value: 0x0000, lo: 0x05},
+ {value: 0x0018, lo: 0x80, hi: 0x87},
+ {value: 0x0040, lo: 0x88, hi: 0x8f},
+ {value: 0x0018, lo: 0x90, hi: 0x99},
+ {value: 0x0040, lo: 0x9a, hi: 0x9f},
+ {value: 0x0018, lo: 0xa0, hi: 0xbf},
+ // Block 0xf1, offset 0x700
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0018, lo: 0x80, hi: 0x87},
+ {value: 0x0040, lo: 0x88, hi: 0x8f},
+ {value: 0x0018, lo: 0x90, hi: 0xad},
+ {value: 0x0040, lo: 0xae, hi: 0xbf},
+ // Block 0xf2, offset 0x705
+ {value: 0x0000, lo: 0x09},
+ {value: 0x0040, lo: 0x80, hi: 0x8f},
+ {value: 0x0018, lo: 0x90, hi: 0x9e},
+ {value: 0x0040, lo: 0x9f, hi: 0x9f},
+ {value: 0x0018, lo: 0xa0, hi: 0xa7},
+ {value: 0x0040, lo: 0xa8, hi: 0xaf},
+ {value: 0x0018, lo: 0xb0, hi: 0xb0},
+ {value: 0x0040, lo: 0xb1, hi: 0xb2},
+ {value: 0x0018, lo: 0xb3, hi: 0xbe},
+ {value: 0x0040, lo: 0xbf, hi: 0xbf},
+ // Block 0xf3, offset 0x70f
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0018, lo: 0x80, hi: 0x8b},
+ {value: 0x0040, lo: 0x8c, hi: 0x8f},
+ {value: 0x0018, lo: 0x90, hi: 0x9e},
+ {value: 0x0040, lo: 0x9f, hi: 0xbf},
+ // Block 0xf4, offset 0x714
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0018, lo: 0x80, hi: 0x91},
+ {value: 0x0040, lo: 0x92, hi: 0xbf},
+ // Block 0xf5, offset 0x717
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0018, lo: 0x80, hi: 0x80},
+ {value: 0x0040, lo: 0x81, hi: 0xbf},
+ // Block 0xf6, offset 0x71a
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0x96},
+ {value: 0x0040, lo: 0x97, hi: 0xbf},
+ // Block 0xf7, offset 0x71d
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0xb4},
+ {value: 0x0040, lo: 0xb5, hi: 0xbf},
+ // Block 0xf8, offset 0x720
+ {value: 0x0000, lo: 0x03},
+ {value: 0x0008, lo: 0x80, hi: 0x9d},
+ {value: 0x0040, lo: 0x9e, hi: 0x9f},
+ {value: 0x0008, lo: 0xa0, hi: 0xbf},
+ // Block 0xf9, offset 0x724
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0xa1},
+ {value: 0x0040, lo: 0xa2, hi: 0xbf},
+ // Block 0xfa, offset 0x727
+ {value: 0x0020, lo: 0x0f},
+ {value: 0xdeb9, lo: 0x80, hi: 0x89},
+ {value: 0x8dfd, lo: 0x8a, hi: 0x8a},
+ {value: 0xdff9, lo: 0x8b, hi: 0x9c},
+ {value: 0x8e1d, lo: 0x9d, hi: 0x9d},
+ {value: 0xe239, lo: 0x9e, hi: 0xa2},
+ {value: 0x8e3d, lo: 0xa3, hi: 0xa3},
+ {value: 0xe2d9, lo: 0xa4, hi: 0xab},
+ {value: 0x7ed5, lo: 0xac, hi: 0xac},
+ {value: 0xe3d9, lo: 0xad, hi: 0xaf},
+ {value: 0x8e5d, lo: 0xb0, hi: 0xb0},
+ {value: 0xe439, lo: 0xb1, hi: 0xb6},
+ {value: 0x8e7d, lo: 0xb7, hi: 0xb9},
+ {value: 0xe4f9, lo: 0xba, hi: 0xba},
+ {value: 0x8edd, lo: 0xbb, hi: 0xbb},
+ {value: 0xe519, lo: 0xbc, hi: 0xbf},
+ // Block 0xfb, offset 0x737
+ {value: 0x0020, lo: 0x10},
+ {value: 0x937d, lo: 0x80, hi: 0x80},
+ {value: 0xf099, lo: 0x81, hi: 0x86},
+ {value: 0x939d, lo: 0x87, hi: 0x8a},
+ {value: 0xd9f9, lo: 0x8b, hi: 0x8b},
+ {value: 0xf159, lo: 0x8c, hi: 0x96},
+ {value: 0x941d, lo: 0x97, hi: 0x97},
+ {value: 0xf2b9, lo: 0x98, hi: 0xa3},
+ {value: 0x943d, lo: 0xa4, hi: 0xa6},
+ {value: 0xf439, lo: 0xa7, hi: 0xaa},
+ {value: 0x949d, lo: 0xab, hi: 0xab},
+ {value: 0xf4b9, lo: 0xac, hi: 0xac},
+ {value: 0x94bd, lo: 0xad, hi: 0xad},
+ {value: 0xf4d9, lo: 0xae, hi: 0xaf},
+ {value: 0x94dd, lo: 0xb0, hi: 0xb1},
+ {value: 0xf519, lo: 0xb2, hi: 0xbe},
+ {value: 0x0040, lo: 0xbf, hi: 0xbf},
+ // Block 0xfc, offset 0x748
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0040, lo: 0x80, hi: 0x80},
+ {value: 0x0340, lo: 0x81, hi: 0x81},
+ {value: 0x0040, lo: 0x82, hi: 0x9f},
+ {value: 0x0340, lo: 0xa0, hi: 0xbf},
+ // Block 0xfd, offset 0x74d
+ {value: 0x0000, lo: 0x01},
+ {value: 0x0340, lo: 0x80, hi: 0xbf},
+ // Block 0xfe, offset 0x74f
+ {value: 0x0000, lo: 0x01},
+ {value: 0x13c0, lo: 0x80, hi: 0xbf},
+ // Block 0xff, offset 0x751
+ {value: 0x0000, lo: 0x02},
+ {value: 0x13c0, lo: 0x80, hi: 0xaf},
+ {value: 0x0040, lo: 0xb0, hi: 0xbf},
+}
+
+// Total table size 41559 bytes (40KiB); checksum: F4A1FA4E
diff --git a/vendor/golang.org/x/net/idna/trie.go b/vendor/golang.org/x/net/idna/trie.go
new file mode 100644
index 0000000..c4ef847
--- /dev/null
+++ b/vendor/golang.org/x/net/idna/trie.go
@@ -0,0 +1,72 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package idna
+
+// appendMapping appends the mapping for the respective rune. isMapped must be
+// true. A mapping is a categorization of a rune as defined in UTS #46.
+func (c info) appendMapping(b []byte, s string) []byte {
+ index := int(c >> indexShift)
+ if c&xorBit == 0 {
+ s := mappings[index:]
+ return append(b, s[1:s[0]+1]...)
+ }
+ b = append(b, s...)
+ if c&inlineXOR == inlineXOR {
+ // TODO: support and handle two-byte inline masks
+ b[len(b)-1] ^= byte(index)
+ } else {
+ for p := len(b) - int(xorData[index]); p < len(b); p++ {
+ index++
+ b[p] ^= xorData[index]
+ }
+ }
+ return b
+}
+
+// Sparse block handling code.
+
+type valueRange struct {
+ value uint16 // header: value:stride
+ lo, hi byte // header: lo:n
+}
+
+type sparseBlocks struct {
+ values []valueRange
+ offset []uint16
+}
+
+var idnaSparse = sparseBlocks{
+ values: idnaSparseValues[:],
+ offset: idnaSparseOffset[:],
+}
+
+// Don't use newIdnaTrie to avoid unconditional linking in of the table.
+var trie = &idnaTrie{}
+
+// lookup determines the type of block n and looks up the value for b.
+// For n < t.cutoff, the block is a simple lookup table. Otherwise, the block
+// is a list of ranges with an accompanying value. Given a matching range r,
+// the value for b is by r.value + (b - r.lo) * stride.
+func (t *sparseBlocks) lookup(n uint32, b byte) uint16 {
+ offset := t.offset[n]
+ header := t.values[offset]
+ lo := offset + 1
+ hi := lo + uint16(header.lo)
+ for lo < hi {
+ m := lo + (hi-lo)/2
+ r := t.values[m]
+ if r.lo <= b && b <= r.hi {
+ return r.value + uint16(b-r.lo)*header.value
+ }
+ if b < r.lo {
+ hi = m
+ } else {
+ lo = m + 1
+ }
+ }
+ return 0
+}
diff --git a/vendor/golang.org/x/net/idna/trieval.go b/vendor/golang.org/x/net/idna/trieval.go
new file mode 100644
index 0000000..63cb03b
--- /dev/null
+++ b/vendor/golang.org/x/net/idna/trieval.go
@@ -0,0 +1,114 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package idna
+
+// This file contains definitions for interpreting the trie value of the idna
+// trie generated by "go run gen*.go". It is shared by both the generator
+// program and the resultant package. Sharing is achieved by the generator
+// copying gen_trieval.go to trieval.go and changing what's above this comment.
+
+// info holds information from the IDNA mapping table for a single rune. It is
+// the value returned by a trie lookup. In most cases, all information fits in
+// a 16-bit value. For mappings, this value may contain an index into a slice
+// with the mapped string. Such mappings can consist of the actual mapped value
+// or an XOR pattern to be applied to the bytes of the UTF8 encoding of the
+// input rune. This technique is used by the cases packages and reduces the
+// table size significantly.
+//
+// The per-rune values have the following format:
+//
+// if mapped {
+// if inlinedXOR {
+// 15..13 inline XOR marker
+// 12..11 unused
+// 10..3 inline XOR mask
+// } else {
+// 15..3 index into xor or mapping table
+// }
+// } else {
+// 15..13 unused
+// 12 modifier (including virama)
+// 11 virama modifier
+// 10..8 joining type
+// 7..3 category type
+// }
+// 2 use xor pattern
+// 1..0 mapped category
+//
+// See the definitions below for a more detailed description of the various
+// bits.
+type info uint16
+
+const (
+ catSmallMask = 0x3
+ catBigMask = 0xF8
+ indexShift = 3
+ xorBit = 0x4 // interpret the index as an xor pattern
+ inlineXOR = 0xE000 // These bits are set if the XOR pattern is inlined.
+
+ joinShift = 8
+ joinMask = 0x07
+
+ viramaModifier = 0x0800
+ modifier = 0x1000
+)
+
+// A category corresponds to a category defined in the IDNA mapping table.
+type category uint16
+
+const (
+ unknown category = 0 // not defined currently in unicode.
+ mapped category = 1
+ disallowedSTD3Mapped category = 2
+ deviation category = 3
+)
+
+const (
+ valid category = 0x08
+ validNV8 category = 0x18
+ validXV8 category = 0x28
+ disallowed category = 0x40
+ disallowedSTD3Valid category = 0x80
+ ignored category = 0xC0
+)
+
+// join types and additional rune information
+const (
+ joiningL = (iota + 1)
+ joiningD
+ joiningT
+ joiningR
+
+ //the following types are derived during processing
+ joinZWJ
+ joinZWNJ
+ joinVirama
+ numJoinTypes
+)
+
+func (c info) isMapped() bool {
+ return c&0x3 != 0
+}
+
+func (c info) category() category {
+ small := c & catSmallMask
+ if small != 0 {
+ return category(small)
+ }
+ return category(c & catBigMask)
+}
+
+func (c info) joinType() info {
+ if c.isMapped() {
+ return 0
+ }
+ return (c >> joinShift) & joinMask
+}
+
+func (c info) isModifier() bool {
+ return c&(modifier|catSmallMask) == modifier
+}
+
+func (c info) isViramaModifier() bool {
+ return c&(viramaModifier|catSmallMask) == viramaModifier
+}
diff --git a/vendor/golang.org/x/net/internal/iana/const.go b/vendor/golang.org/x/net/internal/iana/const.go
index 3438a27..c9df24d 100644
--- a/vendor/golang.org/x/net/internal/iana/const.go
+++ b/vendor/golang.org/x/net/internal/iana/const.go
@@ -4,7 +4,7 @@
// Package iana provides protocol number resources managed by the Internet Assigned Numbers Authority (IANA).
package iana // import "golang.org/x/net/internal/iana"
-// Differentiated Services Field Codepoints (DSCP), Updated: 2013-06-25
+// Differentiated Services Field Codepoints (DSCP), Updated: 2017-05-12
const (
DiffServCS0 = 0x0 // CS0
DiffServCS1 = 0x20 // CS1
@@ -26,7 +26,7 @@ const (
DiffServAF41 = 0x88 // AF41
DiffServAF42 = 0x90 // AF42
DiffServAF43 = 0x98 // AF43
- DiffServEFPHB = 0xb8 // EF PHB
+ DiffServEF = 0xb8 // EF
DiffServVOICEADMIT = 0xb0 // VOICE-ADMIT
)
@@ -38,7 +38,7 @@ const (
CongestionExperienced = 0x3 // CE (Congestion Experienced)
)
-// Protocol Numbers, Updated: 2015-10-06
+// Protocol Numbers, Updated: 2016-06-22
const (
ProtocolIP = 0 // IPv4 encapsulation, pseudo protocol number
ProtocolHOPOPT = 0 // IPv6 Hop-by-Hop Option
diff --git a/vendor/golang.org/x/net/internal/netreflect/socket.go b/vendor/golang.org/x/net/internal/netreflect/socket.go
deleted file mode 100644
index e82e51c..0000000
--- a/vendor/golang.org/x/net/internal/netreflect/socket.go
+++ /dev/null
@@ -1,37 +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.
-
-// Package netreflect implements run-time reflection for the
-// facilities of net package.
-package netreflect
-
-import (
- "errors"
- "net"
-)
-
-var (
- errInvalidType = errors.New("invalid type")
- errOpNoSupport = errors.New("operation not supported")
-)
-
-// SocketOf returns the socket descriptor of c.
-func SocketOf(c net.Conn) (uintptr, error) {
- switch c.(type) {
- case *net.TCPConn, *net.UDPConn, *net.IPConn, *net.UnixConn:
- return socketOf(c)
- default:
- return 0, errInvalidType
- }
-}
-
-// PacketSocketOf returns the socket descriptor of c.
-func PacketSocketOf(c net.PacketConn) (uintptr, error) {
- switch c.(type) {
- case *net.UDPConn, *net.IPConn, *net.UnixConn:
- return socketOf(c.(net.Conn))
- default:
- return 0, errInvalidType
- }
-}
diff --git a/vendor/golang.org/x/net/internal/netreflect/socket_posix.go b/vendor/golang.org/x/net/internal/netreflect/socket_posix.go
deleted file mode 100644
index df475a2..0000000
--- a/vendor/golang.org/x/net/internal/netreflect/socket_posix.go
+++ /dev/null
@@ -1,30 +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 darwin dragonfly freebsd linux netbsd openbsd solaris windows
-
-package netreflect
-
-import (
- "net"
- "reflect"
- "runtime"
-)
-
-func socketOf(c net.Conn) (uintptr, error) {
- v := reflect.ValueOf(c)
- switch e := v.Elem(); e.Kind() {
- case reflect.Struct:
- fd := e.FieldByName("conn").FieldByName("fd")
- switch e := fd.Elem(); e.Kind() {
- case reflect.Struct:
- sysfd := e.FieldByName("sysfd")
- if runtime.GOOS == "windows" {
- return uintptr(sysfd.Uint()), nil
- }
- return uintptr(sysfd.Int()), nil
- }
- }
- return 0, errInvalidType
-}
diff --git a/vendor/golang.org/x/net/internal/netreflect/socket_stub.go b/vendor/golang.org/x/net/internal/netreflect/socket_stub.go
deleted file mode 100644
index 85adb4b..0000000
--- a/vendor/golang.org/x/net/internal/netreflect/socket_stub.go
+++ /dev/null
@@ -1,11 +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 !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows
-
-package netreflect
-
-import "net"
-
-func socketOf(c net.Conn) (uintptr, error) { return 0, errOpNoSupport }
diff --git a/vendor/golang.org/x/net/internal/netreflect/socket_test.go b/vendor/golang.org/x/net/internal/netreflect/socket_test.go
deleted file mode 100644
index 305665a..0000000
--- a/vendor/golang.org/x/net/internal/netreflect/socket_test.go
+++ /dev/null
@@ -1,123 +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.
-
-package netreflect_test
-
-import (
- "fmt"
- "io/ioutil"
- "net"
- "os"
- "runtime"
- "testing"
-
- "golang.org/x/net/internal/netreflect"
-)
-
-func localPath() string {
- f, err := ioutil.TempFile("", "netreflect")
- if err != nil {
- panic(err)
- }
- path := f.Name()
- f.Close()
- os.Remove(path)
- return path
-}
-
-func newLocalListener(network string) (net.Listener, error) {
- switch network {
- case "tcp":
- if ln, err := net.Listen("tcp4", "127.0.0.1:0"); err == nil {
- return ln, nil
- }
- return net.Listen("tcp6", "[::1]:0")
- case "tcp4":
- return net.Listen("tcp4", "127.0.0.1:0")
- case "tcp6":
- return net.Listen("tcp6", "[::1]:0")
- case "unix", "unixpacket":
- return net.Listen(network, localPath())
- }
- return nil, fmt.Errorf("%s is not supported", network)
-}
-
-func newLocalPacketListener(network string) (net.PacketConn, error) {
- switch network {
- case "udp":
- if c, err := net.ListenPacket("udp4", "127.0.0.1:0"); err == nil {
- return c, nil
- }
- return net.ListenPacket("udp6", "[::1]:0")
- case "udp4":
- return net.ListenPacket("udp4", "127.0.0.1:0")
- case "udp6":
- return net.ListenPacket("udp6", "[::1]:0")
- case "unixgram":
- return net.ListenPacket(network, localPath())
- }
- return nil, fmt.Errorf("%s is not supported", network)
-}
-
-func TestSocketOf(t *testing.T) {
- for _, network := range []string{"tcp", "unix", "unixpacket"} {
- switch runtime.GOOS {
- case "darwin":
- if network == "unixpacket" {
- continue
- }
- case "nacl", "plan9":
- continue
- case "windows":
- if network == "unix" || network == "unixpacket" {
- continue
- }
- }
- ln, err := newLocalListener(network)
- if err != nil {
- t.Error(err)
- continue
- }
- defer func() {
- path := ln.Addr().String()
- ln.Close()
- if network == "unix" || network == "unixpacket" {
- os.Remove(path)
- }
- }()
- c, err := net.Dial(ln.Addr().Network(), ln.Addr().String())
- if err != nil {
- t.Error(err)
- continue
- }
- defer c.Close()
- if _, err := netreflect.SocketOf(c); err != nil {
- t.Error(err)
- continue
- }
- }
-}
-
-func TestPacketSocketOf(t *testing.T) {
- for _, network := range []string{"udp", "unixgram"} {
- switch runtime.GOOS {
- case "nacl", "plan9":
- continue
- case "windows":
- if network == "unixgram" {
- continue
- }
- }
- c, err := newLocalPacketListener(network)
- if err != nil {
- t.Error(err)
- continue
- }
- defer c.Close()
- if _, err := netreflect.PacketSocketOf(c); err != nil {
- t.Error(err)
- continue
- }
- }
-}
diff --git a/vendor/golang.org/x/net/internal/nettest/stack.go b/vendor/golang.org/x/net/internal/nettest/stack.go
index 5ab9530..cc92c03 100644
--- a/vendor/golang.org/x/net/internal/nettest/stack.go
+++ b/vendor/golang.org/x/net/internal/nettest/stack.go
@@ -2,35 +2,40 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// Package nettest provides utilities for IP testing.
+// Package nettest provides utilities for network testing.
package nettest // import "golang.org/x/net/internal/nettest"
-import "net"
+import (
+ "fmt"
+ "io/ioutil"
+ "net"
+ "os"
+ "runtime"
+)
+
+var (
+ supportsIPv4 bool
+ supportsIPv6 bool
+)
+
+func init() {
+ if ln, err := net.Listen("tcp4", "127.0.0.1:0"); err == nil {
+ ln.Close()
+ supportsIPv4 = true
+ }
+ if ln, err := net.Listen("tcp6", "[::1]:0"); err == nil {
+ ln.Close()
+ supportsIPv6 = true
+ }
+}
// SupportsIPv4 reports whether the platform supports IPv4 networking
// functionality.
-func SupportsIPv4() bool {
- ln, err := net.Listen("tcp4", "127.0.0.1:0")
- if err != nil {
- return false
- }
- ln.Close()
- return true
-}
+func SupportsIPv4() bool { return supportsIPv4 }
// SupportsIPv6 reports whether the platform supports IPv6 networking
// functionality.
-func SupportsIPv6() bool {
- if causesIPv6Crash() {
- return false
- }
- ln, err := net.Listen("tcp6", "[::1]:0")
- if err != nil {
- return false
- }
- ln.Close()
- return true
-}
+func SupportsIPv6() bool { return supportsIPv6 }
// SupportsRawIPSocket reports whether the platform supports raw IP
// sockets.
@@ -50,3 +55,93 @@ func SupportsIPv6MulticastDeliveryOnLoopback() bool {
func ProtocolNotSupported(err error) bool {
return protocolNotSupported(err)
}
+
+// TestableNetwork reports whether network is testable on the current
+// platform configuration.
+func TestableNetwork(network string) bool {
+ // This is based on logic from standard library's
+ // net/platform_test.go.
+ switch network {
+ case "unix", "unixgram":
+ switch runtime.GOOS {
+ case "android", "nacl", "plan9", "windows":
+ return false
+ }
+ if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") {
+ return false
+ }
+ case "unixpacket":
+ switch runtime.GOOS {
+ case "android", "darwin", "freebsd", "nacl", "plan9", "windows":
+ return false
+ }
+ }
+ return true
+}
+
+// NewLocalListener returns a listener which listens to a loopback IP
+// address or local file system path.
+// Network must be "tcp", "tcp4", "tcp6", "unix" or "unixpacket".
+func NewLocalListener(network string) (net.Listener, error) {
+ switch network {
+ case "tcp":
+ if supportsIPv4 {
+ if ln, err := net.Listen("tcp4", "127.0.0.1:0"); err == nil {
+ return ln, nil
+ }
+ }
+ if supportsIPv6 {
+ return net.Listen("tcp6", "[::1]:0")
+ }
+ case "tcp4":
+ if supportsIPv4 {
+ return net.Listen("tcp4", "127.0.0.1:0")
+ }
+ case "tcp6":
+ if supportsIPv6 {
+ return net.Listen("tcp6", "[::1]:0")
+ }
+ case "unix", "unixpacket":
+ return net.Listen(network, localPath())
+ }
+ return nil, fmt.Errorf("%s is not supported", network)
+}
+
+// NewLocalPacketListener returns a packet listener which listens to a
+// loopback IP address or local file system path.
+// Network must be "udp", "udp4", "udp6" or "unixgram".
+func NewLocalPacketListener(network string) (net.PacketConn, error) {
+ switch network {
+ case "udp":
+ if supportsIPv4 {
+ if c, err := net.ListenPacket("udp4", "127.0.0.1:0"); err == nil {
+ return c, nil
+ }
+ }
+ if supportsIPv6 {
+ return net.ListenPacket("udp6", "[::1]:0")
+ }
+ case "udp4":
+ if supportsIPv4 {
+ return net.ListenPacket("udp4", "127.0.0.1:0")
+ }
+ case "udp6":
+ if supportsIPv6 {
+ return net.ListenPacket("udp6", "[::1]:0")
+ }
+ case "unixgram":
+ return net.ListenPacket(network, localPath())
+ }
+ return nil, fmt.Errorf("%s is not supported", network)
+}
+
+func localPath() string {
+ f, err := ioutil.TempFile("", "nettest")
+ if err != nil {
+ panic(err)
+ }
+ path := f.Name()
+ f.Close()
+ os.Remove(path)
+ return path
+}
diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr.go b/vendor/golang.org/x/net/internal/socket/cmsghdr.go
new file mode 100644
index 0000000..1eb07d2
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/cmsghdr.go
@@ -0,0 +1,11 @@
+// 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 darwin dragonfly freebsd linux netbsd openbsd solaris
+
+package socket
+
+func (h *cmsghdr) len() int { return int(h.Len) }
+func (h *cmsghdr) lvl() int { return int(h.Level) }
+func (h *cmsghdr) typ() int { return int(h.Type) }
diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go b/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go
new file mode 100644
index 0000000..d1d0c2d
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go
@@ -0,0 +1,13 @@
+// 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 darwin dragonfly freebsd netbsd openbsd
+
+package socket
+
+func (h *cmsghdr) set(l, lvl, typ int) {
+ h.Len = uint32(l)
+ h.Level = int32(lvl)
+ h.Type = int32(typ)
+}
diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go b/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go
new file mode 100644
index 0000000..bac6681
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go
@@ -0,0 +1,14 @@
+// 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 arm mips mipsle 386
+// +build linux
+
+package socket
+
+func (h *cmsghdr) set(l, lvl, typ int) {
+ h.Len = uint32(l)
+ h.Level = int32(lvl)
+ h.Type = int32(typ)
+}
diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go b/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go
new file mode 100644
index 0000000..63f0534
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go
@@ -0,0 +1,14 @@
+// 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 arm64 amd64 ppc64 ppc64le mips64 mips64le s390x
+// +build linux
+
+package socket
+
+func (h *cmsghdr) set(l, lvl, typ int) {
+ h.Len = uint64(l)
+ h.Level = int32(lvl)
+ h.Type = int32(typ)
+}
diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go b/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go
new file mode 100644
index 0000000..7dedd43
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go
@@ -0,0 +1,14 @@
+// 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 amd64
+// +build solaris
+
+package socket
+
+func (h *cmsghdr) set(l, lvl, typ int) {
+ h.Len = uint32(l)
+ h.Level = int32(lvl)
+ h.Type = int32(typ)
+}
diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go b/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go
new file mode 100644
index 0000000..a4e7122
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go
@@ -0,0 +1,17 @@
+// 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 !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris
+
+package socket
+
+type cmsghdr struct{}
+
+const sizeofCmsghdr = 0
+
+func (h *cmsghdr) len() int { return 0 }
+func (h *cmsghdr) lvl() int { return 0 }
+func (h *cmsghdr) typ() int { return 0 }
+
+func (h *cmsghdr) set(l, lvl, typ int) {}
diff --git a/vendor/golang.org/x/net/internal/socket/defs_darwin.go b/vendor/golang.org/x/net/internal/socket/defs_darwin.go
new file mode 100644
index 0000000..14e28c0
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/defs_darwin.go
@@ -0,0 +1,44 @@
+// 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 ignore
+
+// +godefs map struct_in_addr [4]byte /* in_addr */
+// +godefs map struct_in6_addr [16]byte /* in6_addr */
+
+package socket
+
+/*
+#include
+
+#include
+*/
+import "C"
+
+const (
+ sysAF_UNSPEC = C.AF_UNSPEC
+ sysAF_INET = C.AF_INET
+ sysAF_INET6 = C.AF_INET6
+
+ sysSOCK_RAW = C.SOCK_RAW
+)
+
+type iovec C.struct_iovec
+
+type msghdr C.struct_msghdr
+
+type cmsghdr C.struct_cmsghdr
+
+type sockaddrInet C.struct_sockaddr_in
+
+type sockaddrInet6 C.struct_sockaddr_in6
+
+const (
+ sizeofIovec = C.sizeof_struct_iovec
+ sizeofMsghdr = C.sizeof_struct_msghdr
+ sizeofCmsghdr = C.sizeof_struct_cmsghdr
+
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
+)
diff --git a/vendor/golang.org/x/net/internal/socket/defs_dragonfly.go b/vendor/golang.org/x/net/internal/socket/defs_dragonfly.go
new file mode 100644
index 0000000..14e28c0
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/defs_dragonfly.go
@@ -0,0 +1,44 @@
+// 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 ignore
+
+// +godefs map struct_in_addr [4]byte /* in_addr */
+// +godefs map struct_in6_addr [16]byte /* in6_addr */
+
+package socket
+
+/*
+#include
+
+#include
+*/
+import "C"
+
+const (
+ sysAF_UNSPEC = C.AF_UNSPEC
+ sysAF_INET = C.AF_INET
+ sysAF_INET6 = C.AF_INET6
+
+ sysSOCK_RAW = C.SOCK_RAW
+)
+
+type iovec C.struct_iovec
+
+type msghdr C.struct_msghdr
+
+type cmsghdr C.struct_cmsghdr
+
+type sockaddrInet C.struct_sockaddr_in
+
+type sockaddrInet6 C.struct_sockaddr_in6
+
+const (
+ sizeofIovec = C.sizeof_struct_iovec
+ sizeofMsghdr = C.sizeof_struct_msghdr
+ sizeofCmsghdr = C.sizeof_struct_cmsghdr
+
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
+)
diff --git a/vendor/golang.org/x/net/internal/socket/defs_freebsd.go b/vendor/golang.org/x/net/internal/socket/defs_freebsd.go
new file mode 100644
index 0000000..14e28c0
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/defs_freebsd.go
@@ -0,0 +1,44 @@
+// 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 ignore
+
+// +godefs map struct_in_addr [4]byte /* in_addr */
+// +godefs map struct_in6_addr [16]byte /* in6_addr */
+
+package socket
+
+/*
+#include
+
+#include
+*/
+import "C"
+
+const (
+ sysAF_UNSPEC = C.AF_UNSPEC
+ sysAF_INET = C.AF_INET
+ sysAF_INET6 = C.AF_INET6
+
+ sysSOCK_RAW = C.SOCK_RAW
+)
+
+type iovec C.struct_iovec
+
+type msghdr C.struct_msghdr
+
+type cmsghdr C.struct_cmsghdr
+
+type sockaddrInet C.struct_sockaddr_in
+
+type sockaddrInet6 C.struct_sockaddr_in6
+
+const (
+ sizeofIovec = C.sizeof_struct_iovec
+ sizeofMsghdr = C.sizeof_struct_msghdr
+ sizeofCmsghdr = C.sizeof_struct_cmsghdr
+
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
+)
diff --git a/vendor/golang.org/x/net/internal/socket/defs_linux.go b/vendor/golang.org/x/net/internal/socket/defs_linux.go
new file mode 100644
index 0000000..ce9ec2f
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/defs_linux.go
@@ -0,0 +1,49 @@
+// 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 ignore
+
+// +godefs map struct_in_addr [4]byte /* in_addr */
+// +godefs map struct_in6_addr [16]byte /* in6_addr */
+
+package socket
+
+/*
+#include
+#include
+
+#define _GNU_SOURCE
+#include
+*/
+import "C"
+
+const (
+ sysAF_UNSPEC = C.AF_UNSPEC
+ sysAF_INET = C.AF_INET
+ sysAF_INET6 = C.AF_INET6
+
+ sysSOCK_RAW = C.SOCK_RAW
+)
+
+type iovec C.struct_iovec
+
+type msghdr C.struct_msghdr
+
+type mmsghdr C.struct_mmsghdr
+
+type cmsghdr C.struct_cmsghdr
+
+type sockaddrInet C.struct_sockaddr_in
+
+type sockaddrInet6 C.struct_sockaddr_in6
+
+const (
+ sizeofIovec = C.sizeof_struct_iovec
+ sizeofMsghdr = C.sizeof_struct_msghdr
+ sizeofMmsghdr = C.sizeof_struct_mmsghdr
+ sizeofCmsghdr = C.sizeof_struct_cmsghdr
+
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
+)
diff --git a/vendor/golang.org/x/net/internal/socket/defs_netbsd.go b/vendor/golang.org/x/net/internal/socket/defs_netbsd.go
new file mode 100644
index 0000000..3f84335
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/defs_netbsd.go
@@ -0,0 +1,47 @@
+// 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 ignore
+
+// +godefs map struct_in_addr [4]byte /* in_addr */
+// +godefs map struct_in6_addr [16]byte /* in6_addr */
+
+package socket
+
+/*
+#include
+
+#include
+*/
+import "C"
+
+const (
+ sysAF_UNSPEC = C.AF_UNSPEC
+ sysAF_INET = C.AF_INET
+ sysAF_INET6 = C.AF_INET6
+
+ sysSOCK_RAW = C.SOCK_RAW
+)
+
+type iovec C.struct_iovec
+
+type msghdr C.struct_msghdr
+
+type mmsghdr C.struct_mmsghdr
+
+type cmsghdr C.struct_cmsghdr
+
+type sockaddrInet C.struct_sockaddr_in
+
+type sockaddrInet6 C.struct_sockaddr_in6
+
+const (
+ sizeofIovec = C.sizeof_struct_iovec
+ sizeofMsghdr = C.sizeof_struct_msghdr
+ sizeofMmsghdr = C.sizeof_struct_mmsghdr
+ sizeofCmsghdr = C.sizeof_struct_cmsghdr
+
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
+)
diff --git a/vendor/golang.org/x/net/internal/socket/defs_openbsd.go b/vendor/golang.org/x/net/internal/socket/defs_openbsd.go
new file mode 100644
index 0000000..14e28c0
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/defs_openbsd.go
@@ -0,0 +1,44 @@
+// 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 ignore
+
+// +godefs map struct_in_addr [4]byte /* in_addr */
+// +godefs map struct_in6_addr [16]byte /* in6_addr */
+
+package socket
+
+/*
+#include
+
+#include
+*/
+import "C"
+
+const (
+ sysAF_UNSPEC = C.AF_UNSPEC
+ sysAF_INET = C.AF_INET
+ sysAF_INET6 = C.AF_INET6
+
+ sysSOCK_RAW = C.SOCK_RAW
+)
+
+type iovec C.struct_iovec
+
+type msghdr C.struct_msghdr
+
+type cmsghdr C.struct_cmsghdr
+
+type sockaddrInet C.struct_sockaddr_in
+
+type sockaddrInet6 C.struct_sockaddr_in6
+
+const (
+ sizeofIovec = C.sizeof_struct_iovec
+ sizeofMsghdr = C.sizeof_struct_msghdr
+ sizeofCmsghdr = C.sizeof_struct_cmsghdr
+
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
+)
diff --git a/vendor/golang.org/x/net/internal/socket/defs_solaris.go b/vendor/golang.org/x/net/internal/socket/defs_solaris.go
new file mode 100644
index 0000000..14e28c0
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/defs_solaris.go
@@ -0,0 +1,44 @@
+// 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 ignore
+
+// +godefs map struct_in_addr [4]byte /* in_addr */
+// +godefs map struct_in6_addr [16]byte /* in6_addr */
+
+package socket
+
+/*
+#include
+
+#include
+*/
+import "C"
+
+const (
+ sysAF_UNSPEC = C.AF_UNSPEC
+ sysAF_INET = C.AF_INET
+ sysAF_INET6 = C.AF_INET6
+
+ sysSOCK_RAW = C.SOCK_RAW
+)
+
+type iovec C.struct_iovec
+
+type msghdr C.struct_msghdr
+
+type cmsghdr C.struct_cmsghdr
+
+type sockaddrInet C.struct_sockaddr_in
+
+type sockaddrInet6 C.struct_sockaddr_in6
+
+const (
+ sizeofIovec = C.sizeof_struct_iovec
+ sizeofMsghdr = C.sizeof_struct_msghdr
+ sizeofCmsghdr = C.sizeof_struct_cmsghdr
+
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
+)
diff --git a/vendor/golang.org/x/net/internal/socket/error_unix.go b/vendor/golang.org/x/net/internal/socket/error_unix.go
new file mode 100644
index 0000000..93dff91
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/error_unix.go
@@ -0,0 +1,31 @@
+// 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 darwin dragonfly freebsd linux netbsd openbsd solaris
+
+package socket
+
+import "syscall"
+
+var (
+ errEAGAIN error = syscall.EAGAIN
+ errEINVAL error = syscall.EINVAL
+ errENOENT error = syscall.ENOENT
+)
+
+// errnoErr returns common boxed Errno values, to prevent allocations
+// at runtime.
+func errnoErr(errno syscall.Errno) error {
+ switch errno {
+ case 0:
+ return nil
+ case syscall.EAGAIN:
+ return errEAGAIN
+ case syscall.EINVAL:
+ return errEINVAL
+ case syscall.ENOENT:
+ return errENOENT
+ }
+ return errno
+}
diff --git a/vendor/golang.org/x/net/internal/socket/error_windows.go b/vendor/golang.org/x/net/internal/socket/error_windows.go
new file mode 100644
index 0000000..6a6379a
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/error_windows.go
@@ -0,0 +1,26 @@
+// 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 socket
+
+import "syscall"
+
+var (
+ errERROR_IO_PENDING error = syscall.ERROR_IO_PENDING
+ errEINVAL error = syscall.EINVAL
+)
+
+// errnoErr returns common boxed Errno values, to prevent allocations
+// at runtime.
+func errnoErr(errno syscall.Errno) error {
+ switch errno {
+ case 0:
+ return nil
+ case syscall.ERROR_IO_PENDING:
+ return errERROR_IO_PENDING
+ case syscall.EINVAL:
+ return errEINVAL
+ }
+ return errno
+}
diff --git a/vendor/golang.org/x/net/internal/socket/iovec_32bit.go b/vendor/golang.org/x/net/internal/socket/iovec_32bit.go
new file mode 100644
index 0000000..d6a570c
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/iovec_32bit.go
@@ -0,0 +1,15 @@
+// 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 arm mips mipsle 386
+// +build darwin dragonfly freebsd linux netbsd openbsd
+
+package socket
+
+import "unsafe"
+
+func (v *iovec) set(b []byte) {
+ v.Base = (*byte)(unsafe.Pointer(&b[0]))
+ v.Len = uint32(len(b))
+}
diff --git a/vendor/golang.org/x/net/internal/socket/iovec_64bit.go b/vendor/golang.org/x/net/internal/socket/iovec_64bit.go
new file mode 100644
index 0000000..2ae435e
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/iovec_64bit.go
@@ -0,0 +1,15 @@
+// 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 arm64 amd64 ppc64 ppc64le mips64 mips64le s390x
+// +build darwin dragonfly freebsd linux netbsd openbsd
+
+package socket
+
+import "unsafe"
+
+func (v *iovec) set(b []byte) {
+ v.Base = (*byte)(unsafe.Pointer(&b[0]))
+ v.Len = uint64(len(b))
+}
diff --git a/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go b/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go
new file mode 100644
index 0000000..100a628
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go
@@ -0,0 +1,15 @@
+// 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 amd64
+// +build solaris
+
+package socket
+
+import "unsafe"
+
+func (v *iovec) set(b []byte) {
+ v.Base = (*int8)(unsafe.Pointer(&b[0]))
+ v.Len = uint64(len(b))
+}
diff --git a/vendor/golang.org/x/net/internal/socket/iovec_stub.go b/vendor/golang.org/x/net/internal/socket/iovec_stub.go
new file mode 100644
index 0000000..c87d2a9
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/iovec_stub.go
@@ -0,0 +1,11 @@
+// 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 !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris
+
+package socket
+
+type iovec struct{}
+
+func (v *iovec) set(b []byte) {}
diff --git a/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go b/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go
new file mode 100644
index 0000000..2e80a9c
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go
@@ -0,0 +1,21 @@
+// 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 !linux,!netbsd
+
+package socket
+
+import "net"
+
+type mmsghdr struct{}
+
+type mmsghdrs []mmsghdr
+
+func (hs mmsghdrs) pack(ms []Message, parseFn func([]byte, string) (net.Addr, error), marshalFn func(net.Addr) []byte) error {
+ return nil
+}
+
+func (hs mmsghdrs) unpack(ms []Message, parseFn func([]byte, string) (net.Addr, error), hint string) error {
+ return nil
+}
diff --git a/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go b/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go
new file mode 100644
index 0000000..3c42ea7
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go
@@ -0,0 +1,42 @@
+// 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 linux netbsd
+
+package socket
+
+import "net"
+
+type mmsghdrs []mmsghdr
+
+func (hs mmsghdrs) pack(ms []Message, parseFn func([]byte, string) (net.Addr, error), marshalFn func(net.Addr) []byte) error {
+ for i := range hs {
+ vs := make([]iovec, len(ms[i].Buffers))
+ var sa []byte
+ if parseFn != nil {
+ sa = make([]byte, sizeofSockaddrInet6)
+ }
+ if marshalFn != nil {
+ sa = marshalFn(ms[i].Addr)
+ }
+ hs[i].Hdr.pack(vs, ms[i].Buffers, ms[i].OOB, sa)
+ }
+ return nil
+}
+
+func (hs mmsghdrs) unpack(ms []Message, parseFn func([]byte, string) (net.Addr, error), hint string) error {
+ for i := range hs {
+ ms[i].N = int(hs[i].Len)
+ ms[i].NN = hs[i].Hdr.controllen()
+ ms[i].Flags = hs[i].Hdr.flags()
+ if parseFn != nil {
+ var err error
+ ms[i].Addr, err = parseFn(hs[i].Hdr.name(), hint)
+ if err != nil {
+ return err
+ }
+ }
+ }
+ return nil
+}
diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go b/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go
new file mode 100644
index 0000000..5567afc
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go
@@ -0,0 +1,39 @@
+// 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 darwin dragonfly freebsd netbsd openbsd
+
+package socket
+
+import "unsafe"
+
+func (h *msghdr) pack(vs []iovec, bs [][]byte, oob []byte, sa []byte) {
+ for i := range vs {
+ vs[i].set(bs[i])
+ }
+ h.setIov(vs)
+ if len(oob) > 0 {
+ h.Control = (*byte)(unsafe.Pointer(&oob[0]))
+ h.Controllen = uint32(len(oob))
+ }
+ if sa != nil {
+ h.Name = (*byte)(unsafe.Pointer(&sa[0]))
+ h.Namelen = uint32(len(sa))
+ }
+}
+
+func (h *msghdr) name() []byte {
+ if h.Name != nil && h.Namelen > 0 {
+ return (*[sizeofSockaddrInet6]byte)(unsafe.Pointer(h.Name))[:h.Namelen]
+ }
+ return nil
+}
+
+func (h *msghdr) controllen() int {
+ return int(h.Controllen)
+}
+
+func (h *msghdr) flags() int {
+ return int(h.Flags)
+}
diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go b/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go
new file mode 100644
index 0000000..3fcb042
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go
@@ -0,0 +1,12 @@
+// 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 darwin dragonfly freebsd netbsd
+
+package socket
+
+func (h *msghdr) setIov(vs []iovec) {
+ h.Iov = &vs[0]
+ h.Iovlen = int32(len(vs))
+}
diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_linux.go b/vendor/golang.org/x/net/internal/socket/msghdr_linux.go
new file mode 100644
index 0000000..5a38798
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/msghdr_linux.go
@@ -0,0 +1,36 @@
+// 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 socket
+
+import "unsafe"
+
+func (h *msghdr) pack(vs []iovec, bs [][]byte, oob []byte, sa []byte) {
+ for i := range vs {
+ vs[i].set(bs[i])
+ }
+ h.setIov(vs)
+ if len(oob) > 0 {
+ h.setControl(oob)
+ }
+ if sa != nil {
+ h.Name = (*byte)(unsafe.Pointer(&sa[0]))
+ h.Namelen = uint32(len(sa))
+ }
+}
+
+func (h *msghdr) name() []byte {
+ if h.Name != nil && h.Namelen > 0 {
+ return (*[sizeofSockaddrInet6]byte)(unsafe.Pointer(h.Name))[:h.Namelen]
+ }
+ return nil
+}
+
+func (h *msghdr) controllen() int {
+ return int(h.Controllen)
+}
+
+func (h *msghdr) flags() int {
+ return int(h.Flags)
+}
diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go b/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go
new file mode 100644
index 0000000..9f671ae
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.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 arm mips mipsle 386
+// +build linux
+
+package socket
+
+import "unsafe"
+
+func (h *msghdr) setIov(vs []iovec) {
+ h.Iov = &vs[0]
+ h.Iovlen = uint32(len(vs))
+}
+
+func (h *msghdr) setControl(b []byte) {
+ h.Control = (*byte)(unsafe.Pointer(&b[0]))
+ h.Controllen = uint32(len(b))
+}
diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go b/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go
new file mode 100644
index 0000000..9f78706
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.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 arm64 amd64 ppc64 ppc64le mips64 mips64le s390x
+// +build linux
+
+package socket
+
+import "unsafe"
+
+func (h *msghdr) setIov(vs []iovec) {
+ h.Iov = &vs[0]
+ h.Iovlen = uint64(len(vs))
+}
+
+func (h *msghdr) setControl(b []byte) {
+ h.Control = (*byte)(unsafe.Pointer(&b[0]))
+ h.Controllen = uint64(len(b))
+}
diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go b/vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go
new file mode 100644
index 0000000..be354ff
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go
@@ -0,0 +1,10 @@
+// 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 socket
+
+func (h *msghdr) setIov(vs []iovec) {
+ h.Iov = &vs[0]
+ h.Iovlen = uint32(len(vs))
+}
diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go b/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go
new file mode 100644
index 0000000..d1b0593
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go
@@ -0,0 +1,34 @@
+// 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 amd64
+// +build solaris
+
+package socket
+
+import "unsafe"
+
+func (h *msghdr) pack(vs []iovec, bs [][]byte, oob []byte, sa []byte) {
+ for i := range vs {
+ vs[i].set(bs[i])
+ }
+ h.Iov = &vs[0]
+ h.Iovlen = int32(len(vs))
+ if len(oob) > 0 {
+ h.Accrights = (*int8)(unsafe.Pointer(&oob[0]))
+ h.Accrightslen = int32(len(oob))
+ }
+ if sa != nil {
+ h.Name = (*byte)(unsafe.Pointer(&sa[0]))
+ h.Namelen = uint32(len(sa))
+ }
+}
+
+func (h *msghdr) controllen() int {
+ return int(h.Accrightslen)
+}
+
+func (h *msghdr) flags() int {
+ return int(NativeEndian.Uint32(h.Pad_cgo_2[:]))
+}
diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_stub.go b/vendor/golang.org/x/net/internal/socket/msghdr_stub.go
new file mode 100644
index 0000000..64e8173
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/msghdr_stub.go
@@ -0,0 +1,14 @@
+// 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 !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris
+
+package socket
+
+type msghdr struct{}
+
+func (h *msghdr) pack(vs []iovec, bs [][]byte, oob []byte, sa []byte) {}
+func (h *msghdr) name() []byte { return nil }
+func (h *msghdr) controllen() int { return 0 }
+func (h *msghdr) flags() int { return 0 }
diff --git a/vendor/golang.org/x/net/internal/socket/rawconn.go b/vendor/golang.org/x/net/internal/socket/rawconn.go
new file mode 100644
index 0000000..d6871d5
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/rawconn.go
@@ -0,0 +1,66 @@
+// 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 socket
+
+import (
+ "errors"
+ "net"
+ "os"
+ "syscall"
+)
+
+// A Conn represents a raw connection.
+type Conn struct {
+ network string
+ c syscall.RawConn
+}
+
+// NewConn returns a new raw connection.
+func NewConn(c net.Conn) (*Conn, error) {
+ var err error
+ var cc Conn
+ switch c := c.(type) {
+ case *net.TCPConn:
+ cc.network = "tcp"
+ cc.c, err = c.SyscallConn()
+ case *net.UDPConn:
+ cc.network = "udp"
+ cc.c, err = c.SyscallConn()
+ case *net.IPConn:
+ cc.network = "ip"
+ cc.c, err = c.SyscallConn()
+ default:
+ return nil, errors.New("unknown connection type")
+ }
+ if err != nil {
+ return nil, err
+ }
+ return &cc, nil
+}
+
+func (o *Option) get(c *Conn, b []byte) (int, error) {
+ var operr error
+ var n int
+ fn := func(s uintptr) {
+ n, operr = getsockopt(s, o.Level, o.Name, b)
+ }
+ if err := c.c.Control(fn); err != nil {
+ return 0, err
+ }
+ return n, os.NewSyscallError("getsockopt", operr)
+}
+
+func (o *Option) set(c *Conn, b []byte) error {
+ var operr error
+ fn := func(s uintptr) {
+ operr = setsockopt(s, o.Level, o.Name, b)
+ }
+ if err := c.c.Control(fn); err != nil {
+ return err
+ }
+ return os.NewSyscallError("setsockopt", operr)
+}
diff --git a/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go b/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go
new file mode 100644
index 0000000..499164a
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go
@@ -0,0 +1,74 @@
+// 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
+// +build linux
+
+package socket
+
+import (
+ "net"
+ "os"
+ "syscall"
+)
+
+func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) {
+ hs := make(mmsghdrs, len(ms))
+ var parseFn func([]byte, string) (net.Addr, error)
+ if c.network != "tcp" {
+ parseFn = parseInetAddr
+ }
+ if err := hs.pack(ms, parseFn, nil); err != nil {
+ return 0, err
+ }
+ var operr error
+ var n int
+ fn := func(s uintptr) bool {
+ n, operr = recvmmsg(s, hs, flags)
+ if operr == syscall.EAGAIN {
+ return false
+ }
+ return true
+ }
+ if err := c.c.Read(fn); err != nil {
+ return n, err
+ }
+ if operr != nil {
+ return n, os.NewSyscallError("recvmmsg", operr)
+ }
+ if err := hs[:n].unpack(ms[:n], parseFn, c.network); err != nil {
+ return n, err
+ }
+ return n, nil
+}
+
+func (c *Conn) sendMsgs(ms []Message, flags int) (int, error) {
+ hs := make(mmsghdrs, len(ms))
+ var marshalFn func(net.Addr) []byte
+ if c.network != "tcp" {
+ marshalFn = marshalInetAddr
+ }
+ if err := hs.pack(ms, nil, marshalFn); err != nil {
+ return 0, err
+ }
+ var operr error
+ var n int
+ fn := func(s uintptr) bool {
+ n, operr = sendmmsg(s, hs, flags)
+ if operr == syscall.EAGAIN {
+ return false
+ }
+ return true
+ }
+ if err := c.c.Write(fn); err != nil {
+ return n, err
+ }
+ if operr != nil {
+ return n, os.NewSyscallError("sendmmsg", operr)
+ }
+ if err := hs[:n].unpack(ms[:n], nil, ""); err != nil {
+ return n, err
+ }
+ return n, nil
+}
diff --git a/vendor/golang.org/x/net/internal/socket/rawconn_msg.go b/vendor/golang.org/x/net/internal/socket/rawconn_msg.go
new file mode 100644
index 0000000..b21d2e6
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/rawconn_msg.go
@@ -0,0 +1,77 @@
+// 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
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
+
+package socket
+
+import (
+ "os"
+ "syscall"
+)
+
+func (c *Conn) recvMsg(m *Message, flags int) error {
+ var h msghdr
+ vs := make([]iovec, len(m.Buffers))
+ var sa []byte
+ if c.network != "tcp" {
+ sa = make([]byte, sizeofSockaddrInet6)
+ }
+ h.pack(vs, m.Buffers, m.OOB, sa)
+ var operr error
+ var n int
+ fn := func(s uintptr) bool {
+ n, operr = recvmsg(s, &h, flags)
+ if operr == syscall.EAGAIN {
+ return false
+ }
+ return true
+ }
+ if err := c.c.Read(fn); err != nil {
+ return err
+ }
+ if operr != nil {
+ return os.NewSyscallError("recvmsg", operr)
+ }
+ if c.network != "tcp" {
+ var err error
+ m.Addr, err = parseInetAddr(sa[:], c.network)
+ if err != nil {
+ return err
+ }
+ }
+ m.N = n
+ m.NN = h.controllen()
+ m.Flags = h.flags()
+ return nil
+}
+
+func (c *Conn) sendMsg(m *Message, flags int) error {
+ var h msghdr
+ vs := make([]iovec, len(m.Buffers))
+ var sa []byte
+ if m.Addr != nil {
+ sa = marshalInetAddr(m.Addr)
+ }
+ h.pack(vs, m.Buffers, m.OOB, sa)
+ var operr error
+ var n int
+ fn := func(s uintptr) bool {
+ n, operr = sendmsg(s, &h, flags)
+ if operr == syscall.EAGAIN {
+ return false
+ }
+ return true
+ }
+ if err := c.c.Write(fn); err != nil {
+ return err
+ }
+ if operr != nil {
+ return os.NewSyscallError("sendmsg", operr)
+ }
+ m.N = n
+ m.NN = len(m.OOB)
+ return nil
+}
diff --git a/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go b/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go
new file mode 100644
index 0000000..f78832a
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go
@@ -0,0 +1,18 @@
+// 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
+// +build !linux
+
+package socket
+
+import "errors"
+
+func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) {
+ return 0, errors.New("not implemented")
+}
+
+func (c *Conn) sendMsgs(ms []Message, flags int) (int, error) {
+ return 0, errors.New("not implemented")
+}
diff --git a/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go b/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go
new file mode 100644
index 0000000..96733cb
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go
@@ -0,0 +1,18 @@
+// 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
+// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows
+
+package socket
+
+import "errors"
+
+func (c *Conn) recvMsg(m *Message, flags int) error {
+ return errors.New("not implemented")
+}
+
+func (c *Conn) sendMsg(m *Message, flags int) error {
+ return errors.New("not implemented")
+}
diff --git a/vendor/golang.org/x/net/internal/socket/rawconn_stub.go b/vendor/golang.org/x/net/internal/socket/rawconn_stub.go
new file mode 100644
index 0000000..d2add1a
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/rawconn_stub.go
@@ -0,0 +1,25 @@
+// 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 socket
+
+import "errors"
+
+func (c *Conn) recvMsg(m *Message, flags int) error {
+ return errors.New("not implemented")
+}
+
+func (c *Conn) sendMsg(m *Message, flags int) error {
+ return errors.New("not implemented")
+}
+
+func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) {
+ return 0, errors.New("not implemented")
+}
+
+func (c *Conn) sendMsgs(ms []Message, flags int) (int, error) {
+ return 0, errors.New("not implemented")
+}
diff --git a/vendor/golang.org/x/net/internal/socket/reflect.go b/vendor/golang.org/x/net/internal/socket/reflect.go
new file mode 100644
index 0000000..bb179f1
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/reflect.go
@@ -0,0 +1,62 @@
+// 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 socket
+
+import (
+ "errors"
+ "net"
+ "os"
+ "reflect"
+ "runtime"
+)
+
+// A Conn represents a raw connection.
+type Conn struct {
+ c net.Conn
+}
+
+// NewConn returns a new raw connection.
+func NewConn(c net.Conn) (*Conn, error) {
+ return &Conn{c: c}, nil
+}
+
+func (o *Option) get(c *Conn, b []byte) (int, error) {
+ s, err := socketOf(c.c)
+ if err != nil {
+ return 0, err
+ }
+ n, err := getsockopt(s, o.Level, o.Name, b)
+ return n, os.NewSyscallError("getsockopt", err)
+}
+
+func (o *Option) set(c *Conn, b []byte) error {
+ s, err := socketOf(c.c)
+ if err != nil {
+ return err
+ }
+ return os.NewSyscallError("setsockopt", setsockopt(s, o.Level, o.Name, b))
+}
+
+func socketOf(c net.Conn) (uintptr, error) {
+ switch c.(type) {
+ case *net.TCPConn, *net.UDPConn, *net.IPConn:
+ v := reflect.ValueOf(c)
+ switch e := v.Elem(); e.Kind() {
+ case reflect.Struct:
+ fd := e.FieldByName("conn").FieldByName("fd")
+ switch e := fd.Elem(); e.Kind() {
+ case reflect.Struct:
+ sysfd := e.FieldByName("sysfd")
+ if runtime.GOOS == "windows" {
+ return uintptr(sysfd.Uint()), nil
+ }
+ return uintptr(sysfd.Int()), nil
+ }
+ }
+ }
+ return 0, errors.New("invalid type")
+}
diff --git a/vendor/golang.org/x/net/internal/socket/socket.go b/vendor/golang.org/x/net/internal/socket/socket.go
new file mode 100644
index 0000000..1eab2fb
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/socket.go
@@ -0,0 +1,282 @@
+// 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 socket provides a portable interface for socket system
+// calls.
+package socket // import "golang.org/x/net/internal/socket"
+
+import (
+ "errors"
+ "net"
+ "unsafe"
+)
+
+// An Option represents a sticky socket option.
+type Option struct {
+ Level int // level
+ Name int // name; must be equal or greater than 1
+ Len int // length of value in bytes; must be equal or greater than 1
+}
+
+// Get reads a value for the option from the kernel.
+// It returns the number of bytes written into b.
+func (o *Option) Get(c *Conn, b []byte) (int, error) {
+ if o.Name < 1 || o.Len < 1 {
+ return 0, errors.New("invalid option")
+ }
+ if len(b) < o.Len {
+ return 0, errors.New("short buffer")
+ }
+ return o.get(c, b)
+}
+
+// GetInt returns an integer value for the option.
+//
+// The Len field of Option must be either 1 or 4.
+func (o *Option) GetInt(c *Conn) (int, error) {
+ if o.Len != 1 && o.Len != 4 {
+ return 0, errors.New("invalid option")
+ }
+ var b []byte
+ var bb [4]byte
+ if o.Len == 1 {
+ b = bb[:1]
+ } else {
+ b = bb[:4]
+ }
+ n, err := o.get(c, b)
+ if err != nil {
+ return 0, err
+ }
+ if n != o.Len {
+ return 0, errors.New("invalid option length")
+ }
+ if o.Len == 1 {
+ return int(b[0]), nil
+ }
+ return int(NativeEndian.Uint32(b[:4])), nil
+}
+
+// Set writes the option and value to the kernel.
+func (o *Option) Set(c *Conn, b []byte) error {
+ if o.Name < 1 || o.Len < 1 {
+ return errors.New("invalid option")
+ }
+ if len(b) < o.Len {
+ return errors.New("short buffer")
+ }
+ return o.set(c, b)
+}
+
+// SetInt writes the option and value to the kernel.
+//
+// The Len field of Option must be either 1 or 4.
+func (o *Option) SetInt(c *Conn, v int) error {
+ if o.Len != 1 && o.Len != 4 {
+ return errors.New("invalid option")
+ }
+ var b []byte
+ if o.Len == 1 {
+ b = []byte{byte(v)}
+ } else {
+ var bb [4]byte
+ NativeEndian.PutUint32(bb[:o.Len], uint32(v))
+ b = bb[:4]
+ }
+ return o.set(c, b)
+}
+
+func controlHeaderLen() int {
+ return roundup(sizeofCmsghdr)
+}
+
+func controlMessageLen(dataLen int) int {
+ return roundup(sizeofCmsghdr) + dataLen
+}
+
+// ControlMessageSpace returns the whole length of control message.
+func ControlMessageSpace(dataLen int) int {
+ return roundup(sizeofCmsghdr) + roundup(dataLen)
+}
+
+// A ControlMessage represents the head message in a stream of control
+// messages.
+//
+// A control message comprises of a header, data and a few padding
+// fields to conform to the interface to the kernel.
+//
+// See RFC 3542 for further information.
+type ControlMessage []byte
+
+// Data returns the data field of the control message at the head on
+// w.
+func (m ControlMessage) Data(dataLen int) []byte {
+ l := controlHeaderLen()
+ if len(m) < l || len(m) < l+dataLen {
+ return nil
+ }
+ return m[l : l+dataLen]
+}
+
+// Next returns the control message at the next on w.
+//
+// Next works only for standard control messages.
+func (m ControlMessage) Next(dataLen int) ControlMessage {
+ l := ControlMessageSpace(dataLen)
+ if len(m) < l {
+ return nil
+ }
+ return m[l:]
+}
+
+// MarshalHeader marshals the header fields of the control message at
+// the head on w.
+func (m ControlMessage) MarshalHeader(lvl, typ, dataLen int) error {
+ if len(m) < controlHeaderLen() {
+ return errors.New("short message")
+ }
+ h := (*cmsghdr)(unsafe.Pointer(&m[0]))
+ h.set(controlMessageLen(dataLen), lvl, typ)
+ return nil
+}
+
+// ParseHeader parses and returns the header fields of the control
+// message at the head on w.
+func (m ControlMessage) ParseHeader() (lvl, typ, dataLen int, err error) {
+ l := controlHeaderLen()
+ if len(m) < l {
+ return 0, 0, 0, errors.New("short message")
+ }
+ h := (*cmsghdr)(unsafe.Pointer(&m[0]))
+ return h.lvl(), h.typ(), int(uint64(h.len()) - uint64(l)), nil
+}
+
+// Marshal marshals the control message at the head on w, and returns
+// the next control message.
+func (m ControlMessage) Marshal(lvl, typ int, data []byte) (ControlMessage, error) {
+ l := len(data)
+ if len(m) < ControlMessageSpace(l) {
+ return nil, errors.New("short message")
+ }
+ h := (*cmsghdr)(unsafe.Pointer(&m[0]))
+ h.set(controlMessageLen(l), lvl, typ)
+ if l > 0 {
+ copy(m.Data(l), data)
+ }
+ return m.Next(l), nil
+}
+
+// Parse parses w as a single or multiple control messages.
+//
+// Parse works for both standard and compatible messages.
+func (m ControlMessage) Parse() ([]ControlMessage, error) {
+ var ms []ControlMessage
+ for len(m) >= controlHeaderLen() {
+ h := (*cmsghdr)(unsafe.Pointer(&m[0]))
+ l := h.len()
+ if uint64(l) < uint64(controlHeaderLen()) {
+ return nil, errors.New("invalid message length")
+ }
+ if uint64(l) > uint64(len(m)) {
+ return nil, errors.New("short buffer")
+ }
+ // On message reception:
+ //
+ // |<- ControlMessageSpace --------------->|
+ // |<- controlMessageLen ---------->| |
+ // |<- controlHeaderLen ->| | |
+ // +---------------+------+---------+------+
+ // | Header | PadH | Data | PadD |
+ // +---------------+------+---------+------+
+ //
+ // On compatible message reception:
+ //
+ // | ... |<- controlMessageLen ----------->|
+ // | ... |<- controlHeaderLen ->| |
+ // +-----+---------------+------+----------+
+ // | ... | Header | PadH | Data |
+ // +-----+---------------+------+----------+
+ ms = append(ms, ControlMessage(m[:l]))
+ ll := l - controlHeaderLen()
+ if len(m) >= ControlMessageSpace(ll) {
+ m = m[ControlMessageSpace(ll):]
+ } else {
+ m = m[controlMessageLen(ll):]
+ }
+ }
+ return ms, nil
+}
+
+// NewControlMessage returns a new stream of control messages.
+func NewControlMessage(dataLen []int) ControlMessage {
+ var l int
+ for i := range dataLen {
+ l += ControlMessageSpace(dataLen[i])
+ }
+ return make([]byte, l)
+}
+
+// A Message represents an IO message.
+type Message struct {
+ // When writing, the Buffers field must contain at least one
+ // byte to write.
+ // When reading, the Buffers field will always contain a byte
+ // to read.
+ Buffers [][]byte
+
+ // OOB contains protocol-specific control or miscellaneous
+ // ancillary data known as out-of-band data.
+ OOB []byte
+
+ // Addr specifies a destination address when writing.
+ // It can be nil when the underlying protocol of the raw
+ // connection uses connection-oriented communication.
+ // After a successful read, it may contain the source address
+ // on the received packet.
+ Addr net.Addr
+
+ N int // # of bytes read or written from/to Buffers
+ NN int // # of bytes read or written from/to OOB
+ Flags int // protocol-specific information on the received message
+}
+
+// RecvMsg wraps recvmsg system call.
+//
+// The provided flags is a set of platform-dependent flags, such as
+// syscall.MSG_PEEK.
+func (c *Conn) RecvMsg(m *Message, flags int) error {
+ return c.recvMsg(m, flags)
+}
+
+// SendMsg wraps sendmsg system call.
+//
+// The provided flags is a set of platform-dependent flags, such as
+// syscall.MSG_DONTROUTE.
+func (c *Conn) SendMsg(m *Message, flags int) error {
+ return c.sendMsg(m, flags)
+}
+
+// RecvMsgs wraps recvmmsg system call.
+//
+// It returns the number of processed messages.
+//
+// The provided flags is a set of platform-dependent flags, such as
+// syscall.MSG_PEEK.
+//
+// Only Linux supports this.
+func (c *Conn) RecvMsgs(ms []Message, flags int) (int, error) {
+ return c.recvMsgs(ms, flags)
+}
+
+// SendMsgs wraps sendmmsg system call.
+//
+// It returns the number of processed messages.
+//
+// The provided flags is a set of platform-dependent flags, such as
+// syscall.MSG_DONTROUTE.
+//
+// Only Linux supports this.
+func (c *Conn) SendMsgs(ms []Message, flags int) (int, error) {
+ return c.sendMsgs(ms, flags)
+}
diff --git a/vendor/golang.org/x/net/internal/socket/socket_go1_9_test.go b/vendor/golang.org/x/net/internal/socket/socket_go1_9_test.go
new file mode 100644
index 0000000..109fed7
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/socket_go1_9_test.go
@@ -0,0 +1,256 @@
+// 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
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+
+package socket_test
+
+import (
+ "bytes"
+ "fmt"
+ "net"
+ "runtime"
+ "testing"
+
+ "golang.org/x/net/internal/nettest"
+ "golang.org/x/net/internal/socket"
+)
+
+type mockControl struct {
+ Level int
+ Type int
+ Data []byte
+}
+
+func TestControlMessage(t *testing.T) {
+ for _, tt := range []struct {
+ cs []mockControl
+ }{
+ {
+ []mockControl{
+ {Level: 1, Type: 1},
+ },
+ },
+ {
+ []mockControl{
+ {Level: 2, Type: 2, Data: []byte{0xfe}},
+ },
+ },
+ {
+ []mockControl{
+ {Level: 3, Type: 3, Data: []byte{0xfe, 0xff, 0xff, 0xfe}},
+ },
+ },
+ {
+ []mockControl{
+ {Level: 4, Type: 4, Data: []byte{0xfe, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xfe}},
+ },
+ },
+ {
+ []mockControl{
+ {Level: 4, Type: 4, Data: []byte{0xfe, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xfe}},
+ {Level: 2, Type: 2, Data: []byte{0xfe}},
+ },
+ },
+ } {
+ var w []byte
+ var tailPadLen int
+ mm := socket.NewControlMessage([]int{0})
+ for i, c := range tt.cs {
+ m := socket.NewControlMessage([]int{len(c.Data)})
+ l := len(m) - len(mm)
+ if i == len(tt.cs)-1 && l > len(c.Data) {
+ tailPadLen = l - len(c.Data)
+ }
+ w = append(w, m...)
+ }
+
+ var err error
+ ww := make([]byte, len(w))
+ copy(ww, w)
+ m := socket.ControlMessage(ww)
+ for _, c := range tt.cs {
+ if err = m.MarshalHeader(c.Level, c.Type, len(c.Data)); err != nil {
+ t.Fatalf("(%v).MarshalHeader() = %v", tt.cs, err)
+ }
+ copy(m.Data(len(c.Data)), c.Data)
+ m = m.Next(len(c.Data))
+ }
+ m = socket.ControlMessage(w)
+ for _, c := range tt.cs {
+ m, err = m.Marshal(c.Level, c.Type, c.Data)
+ if err != nil {
+ t.Fatalf("(%v).Marshal() = %v", tt.cs, err)
+ }
+ }
+ if !bytes.Equal(ww, w) {
+ t.Fatalf("got %#v; want %#v", ww, w)
+ }
+
+ ws := [][]byte{w}
+ if tailPadLen > 0 {
+ // Test a message with no tail padding.
+ nopad := w[:len(w)-tailPadLen]
+ ws = append(ws, [][]byte{nopad}...)
+ }
+ for _, w := range ws {
+ ms, err := socket.ControlMessage(w).Parse()
+ if err != nil {
+ t.Fatalf("(%v).Parse() = %v", tt.cs, err)
+ }
+ for i, m := range ms {
+ lvl, typ, dataLen, err := m.ParseHeader()
+ if err != nil {
+ t.Fatalf("(%v).ParseHeader() = %v", tt.cs, err)
+ }
+ if lvl != tt.cs[i].Level || typ != tt.cs[i].Type || dataLen != len(tt.cs[i].Data) {
+ t.Fatalf("%v: got %d, %d, %d; want %d, %d, %d", tt.cs[i], lvl, typ, dataLen, tt.cs[i].Level, tt.cs[i].Type, len(tt.cs[i].Data))
+ }
+ }
+ }
+ }
+}
+
+func TestUDP(t *testing.T) {
+ c, err := nettest.NewLocalPacketListener("udp")
+ if err != nil {
+ t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+
+ t.Run("Message", func(t *testing.T) {
+ testUDPMessage(t, c.(net.Conn))
+ })
+ switch runtime.GOOS {
+ case "linux":
+ t.Run("Messages", func(t *testing.T) {
+ testUDPMessages(t, c.(net.Conn))
+ })
+ }
+}
+
+func testUDPMessage(t *testing.T, c net.Conn) {
+ cc, err := socket.NewConn(c)
+ if err != nil {
+ t.Fatal(err)
+ }
+ data := []byte("HELLO-R-U-THERE")
+ wm := socket.Message{
+ Buffers: bytes.SplitAfter(data, []byte("-")),
+ Addr: c.LocalAddr(),
+ }
+ if err := cc.SendMsg(&wm, 0); err != nil {
+ t.Fatal(err)
+ }
+ b := make([]byte, 32)
+ rm := socket.Message{
+ Buffers: [][]byte{b[:1], b[1:3], b[3:7], b[7:11], b[11:]},
+ }
+ if err := cc.RecvMsg(&rm, 0); err != nil {
+ t.Fatal(err)
+ }
+ if !bytes.Equal(b[:rm.N], data) {
+ t.Fatalf("got %#v; want %#v", b[:rm.N], data)
+ }
+}
+
+func testUDPMessages(t *testing.T, c net.Conn) {
+ cc, err := socket.NewConn(c)
+ if err != nil {
+ t.Fatal(err)
+ }
+ data := []byte("HELLO-R-U-THERE")
+ wmbs := bytes.SplitAfter(data, []byte("-"))
+ wms := []socket.Message{
+ {Buffers: wmbs[:1], Addr: c.LocalAddr()},
+ {Buffers: wmbs[1:], Addr: c.LocalAddr()},
+ }
+ n, err := cc.SendMsgs(wms, 0)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if n != len(wms) {
+ t.Fatalf("got %d; want %d", n, len(wms))
+ }
+ b := make([]byte, 32)
+ rmbs := [][][]byte{{b[:len(wmbs[0])]}, {b[len(wmbs[0]):]}}
+ rms := []socket.Message{
+ {Buffers: rmbs[0]},
+ {Buffers: rmbs[1]},
+ }
+ n, err = cc.RecvMsgs(rms, 0)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if n != len(rms) {
+ t.Fatalf("got %d; want %d", n, len(rms))
+ }
+ nn := 0
+ for i := 0; i < n; i++ {
+ nn += rms[i].N
+ }
+ if !bytes.Equal(b[:nn], data) {
+ t.Fatalf("got %#v; want %#v", b[:nn], data)
+ }
+}
+
+func BenchmarkUDP(b *testing.B) {
+ c, err := nettest.NewLocalPacketListener("udp")
+ if err != nil {
+ b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+ cc, err := socket.NewConn(c.(net.Conn))
+ if err != nil {
+ b.Fatal(err)
+ }
+ data := []byte("HELLO-R-U-THERE")
+ wm := socket.Message{
+ Buffers: [][]byte{data},
+ Addr: c.LocalAddr(),
+ }
+ rm := socket.Message{
+ Buffers: [][]byte{make([]byte, 128)},
+ OOB: make([]byte, 128),
+ }
+
+ for M := 1; M <= 1<<9; M = M << 1 {
+ b.Run(fmt.Sprintf("Iter-%d", M), func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ for j := 0; j < M; j++ {
+ if err := cc.SendMsg(&wm, 0); err != nil {
+ b.Fatal(err)
+ }
+ if err := cc.RecvMsg(&rm, 0); err != nil {
+ b.Fatal(err)
+ }
+ }
+ }
+ })
+ switch runtime.GOOS {
+ case "linux":
+ wms := make([]socket.Message, M)
+ for i := range wms {
+ wms[i].Buffers = [][]byte{data}
+ wms[i].Addr = c.LocalAddr()
+ }
+ rms := make([]socket.Message, M)
+ for i := range rms {
+ rms[i].Buffers = [][]byte{make([]byte, 128)}
+ rms[i].OOB = make([]byte, 128)
+ }
+ b.Run(fmt.Sprintf("Batch-%d", M), func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := cc.SendMsgs(wms, 0); err != nil {
+ b.Fatal(err)
+ }
+ if _, err := cc.RecvMsgs(rms, 0); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ }
+ }
+}
diff --git a/vendor/golang.org/x/net/internal/socket/socket_test.go b/vendor/golang.org/x/net/internal/socket/socket_test.go
new file mode 100644
index 0000000..bf3751b
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/socket_test.go
@@ -0,0 +1,46 @@
+// 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 darwin dragonfly freebsd linux netbsd openbsd solaris windows
+
+package socket_test
+
+import (
+ "net"
+ "runtime"
+ "syscall"
+ "testing"
+
+ "golang.org/x/net/internal/nettest"
+ "golang.org/x/net/internal/socket"
+)
+
+func TestSocket(t *testing.T) {
+ t.Run("Option", func(t *testing.T) {
+ testSocketOption(t, &socket.Option{Level: syscall.SOL_SOCKET, Name: syscall.SO_RCVBUF, Len: 4})
+ })
+}
+
+func testSocketOption(t *testing.T, so *socket.Option) {
+ c, err := nettest.NewLocalPacketListener("udp")
+ if err != nil {
+ t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+ cc, err := socket.NewConn(c.(net.Conn))
+ if err != nil {
+ t.Fatal(err)
+ }
+ const N = 2048
+ if err := so.SetInt(cc, N); err != nil {
+ t.Fatal(err)
+ }
+ n, err := so.GetInt(cc)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if n < N {
+ t.Fatalf("got %d; want greater than or equal to %d", n, N)
+ }
+}
diff --git a/vendor/golang.org/x/net/internal/socket/sys.go b/vendor/golang.org/x/net/internal/socket/sys.go
new file mode 100644
index 0000000..4f0eead
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys.go
@@ -0,0 +1,33 @@
+// 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 socket
+
+import (
+ "encoding/binary"
+ "unsafe"
+)
+
+var (
+ // NativeEndian is the machine native endian implementation of
+ // ByteOrder.
+ NativeEndian binary.ByteOrder
+
+ kernelAlign int
+)
+
+func init() {
+ i := uint32(1)
+ b := (*[4]byte)(unsafe.Pointer(&i))
+ if b[0] == 1 {
+ NativeEndian = binary.LittleEndian
+ } else {
+ NativeEndian = binary.BigEndian
+ }
+ kernelAlign = probeProtocolStack()
+}
+
+func roundup(l int) int {
+ return (l + kernelAlign - 1) & ^(kernelAlign - 1)
+}
diff --git a/vendor/golang.org/x/net/internal/socket/sys_bsd.go b/vendor/golang.org/x/net/internal/socket/sys_bsd.go
new file mode 100644
index 0000000..f13e14f
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_bsd.go
@@ -0,0 +1,17 @@
+// 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 darwin dragonfly freebsd openbsd
+
+package socket
+
+import "errors"
+
+func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
+ return 0, errors.New("not implemented")
+}
+
+func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
+ return 0, errors.New("not implemented")
+}
diff --git a/vendor/golang.org/x/net/internal/socket/sys_bsdvar.go b/vendor/golang.org/x/net/internal/socket/sys_bsdvar.go
new file mode 100644
index 0000000..f723fa3
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_bsdvar.go
@@ -0,0 +1,14 @@
+// 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 freebsd netbsd openbsd
+
+package socket
+
+import "unsafe"
+
+func probeProtocolStack() int {
+ var p uintptr
+ return int(unsafe.Sizeof(p))
+}
diff --git a/vendor/golang.org/x/net/internal/socket/sys_darwin.go b/vendor/golang.org/x/net/internal/socket/sys_darwin.go
new file mode 100644
index 0000000..b17d223
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_darwin.go
@@ -0,0 +1,7 @@
+// 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 socket
+
+func probeProtocolStack() int { return 4 }
diff --git a/vendor/golang.org/x/net/internal/socket/sys_dragonfly.go b/vendor/golang.org/x/net/internal/socket/sys_dragonfly.go
new file mode 100644
index 0000000..b17d223
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_dragonfly.go
@@ -0,0 +1,7 @@
+// 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 socket
+
+func probeProtocolStack() int { return 4 }
diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux.go b/vendor/golang.org/x/net/internal/socket/sys_linux.go
new file mode 100644
index 0000000..1559521
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_linux.go
@@ -0,0 +1,27 @@
+// 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 linux,!s390x,!386
+
+package socket
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+func probeProtocolStack() int {
+ var p uintptr
+ return int(unsafe.Sizeof(p))
+}
+
+func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
+ n, _, errno := syscall.Syscall6(sysRECVMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0)
+ return int(n), errnoErr(errno)
+}
+
+func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
+ n, _, errno := syscall.Syscall6(sysSENDMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0)
+ return int(n), errnoErr(errno)
+}
diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_386.go b/vendor/golang.org/x/net/internal/socket/sys_linux_386.go
new file mode 100644
index 0000000..235b2cc
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_linux_386.go
@@ -0,0 +1,55 @@
+// 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 socket
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+func probeProtocolStack() int { return 4 }
+
+const (
+ sysSETSOCKOPT = 0xe
+ sysGETSOCKOPT = 0xf
+ sysSENDMSG = 0x10
+ sysRECVMSG = 0x11
+ sysRECVMMSG = 0x13
+ sysSENDMMSG = 0x14
+)
+
+func socketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno)
+func rawsocketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno)
+
+func getsockopt(s uintptr, level, name int, b []byte) (int, error) {
+ l := uint32(len(b))
+ _, errno := socketcall(sysGETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(unsafe.Pointer(&l)), 0)
+ return int(l), errnoErr(errno)
+}
+
+func setsockopt(s uintptr, level, name int, b []byte) error {
+ _, errno := socketcall(sysSETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0)
+ return errnoErr(errno)
+}
+
+func recvmsg(s uintptr, h *msghdr, flags int) (int, error) {
+ n, errno := socketcall(sysRECVMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0)
+ return int(n), errnoErr(errno)
+}
+
+func sendmsg(s uintptr, h *msghdr, flags int) (int, error) {
+ n, errno := socketcall(sysSENDMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0)
+ return int(n), errnoErr(errno)
+}
+
+func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
+ n, errno := socketcall(sysRECVMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0)
+ return int(n), errnoErr(errno)
+}
+
+func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
+ n, errno := socketcall(sysSENDMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0)
+ return int(n), errnoErr(errno)
+}
diff --git a/vendor/golang.org/x/net/ipv4/sys_linux_386.s b/vendor/golang.org/x/net/internal/socket/sys_linux_386.s
similarity index 77%
rename from vendor/golang.org/x/net/ipv4/sys_linux_386.s
rename to vendor/golang.org/x/net/internal/socket/sys_linux_386.s
index b85551a..93e7d75 100644
--- a/vendor/golang.org/x/net/ipv4/sys_linux_386.s
+++ b/vendor/golang.org/x/net/internal/socket/sys_linux_386.s
@@ -6,3 +6,6 @@
TEXT ·socketcall(SB),NOSPLIT,$0-36
JMP syscall·socketcall(SB)
+
+TEXT ·rawsocketcall(SB),NOSPLIT,$0-36
+ JMP syscall·rawsocketcall(SB)
diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go b/vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go
new file mode 100644
index 0000000..9decee2
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go
@@ -0,0 +1,10 @@
+// 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 socket
+
+const (
+ sysRECVMMSG = 0x12b
+ sysSENDMMSG = 0x133
+)
diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_arm.go b/vendor/golang.org/x/net/internal/socket/sys_linux_arm.go
new file mode 100644
index 0000000..d753b43
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_linux_arm.go
@@ -0,0 +1,10 @@
+// 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 socket
+
+const (
+ sysRECVMMSG = 0x16d
+ sysSENDMMSG = 0x176
+)
diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go b/vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go
new file mode 100644
index 0000000..b670894
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go
@@ -0,0 +1,10 @@
+// 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 socket
+
+const (
+ sysRECVMMSG = 0xf3
+ sysSENDMMSG = 0x10d
+)
diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_mips.go b/vendor/golang.org/x/net/internal/socket/sys_linux_mips.go
new file mode 100644
index 0000000..9c0d740
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_linux_mips.go
@@ -0,0 +1,10 @@
+// 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 socket
+
+const (
+ sysRECVMMSG = 0x10ef
+ sysSENDMMSG = 0x10f7
+)
diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go b/vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go
new file mode 100644
index 0000000..071a4ab
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go
@@ -0,0 +1,10 @@
+// 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 socket
+
+const (
+ sysRECVMMSG = 0x14ae
+ sysSENDMMSG = 0x14b6
+)
diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go b/vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go
new file mode 100644
index 0000000..071a4ab
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go
@@ -0,0 +1,10 @@
+// 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 socket
+
+const (
+ sysRECVMMSG = 0x14ae
+ sysSENDMMSG = 0x14b6
+)
diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go b/vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go
new file mode 100644
index 0000000..9c0d740
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go
@@ -0,0 +1,10 @@
+// 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 socket
+
+const (
+ sysRECVMMSG = 0x10ef
+ sysSENDMMSG = 0x10f7
+)
diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go b/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go
new file mode 100644
index 0000000..21c1e3f
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go
@@ -0,0 +1,10 @@
+// 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 socket
+
+const (
+ sysRECVMMSG = 0x157
+ sysSENDMMSG = 0x15d
+)
diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go b/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go
new file mode 100644
index 0000000..21c1e3f
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go
@@ -0,0 +1,10 @@
+// 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 socket
+
+const (
+ sysRECVMMSG = 0x157
+ sysSENDMMSG = 0x15d
+)
diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go b/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go
new file mode 100644
index 0000000..327979e
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go
@@ -0,0 +1,55 @@
+// 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 socket
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+func probeProtocolStack() int { return 8 }
+
+const (
+ sysSETSOCKOPT = 0xe
+ sysGETSOCKOPT = 0xf
+ sysSENDMSG = 0x10
+ sysRECVMSG = 0x11
+ sysRECVMMSG = 0x13
+ sysSENDMMSG = 0x14
+)
+
+func socketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno)
+func rawsocketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno)
+
+func getsockopt(s uintptr, level, name int, b []byte) (int, error) {
+ l := uint32(len(b))
+ _, errno := socketcall(sysGETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(unsafe.Pointer(&l)), 0)
+ return int(l), errnoErr(errno)
+}
+
+func setsockopt(s uintptr, level, name int, b []byte) error {
+ _, errno := socketcall(sysSETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0)
+ return errnoErr(errno)
+}
+
+func recvmsg(s uintptr, h *msghdr, flags int) (int, error) {
+ n, errno := socketcall(sysRECVMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0)
+ return int(n), errnoErr(errno)
+}
+
+func sendmsg(s uintptr, h *msghdr, flags int) (int, error) {
+ n, errno := socketcall(sysSENDMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0)
+ return int(n), errnoErr(errno)
+}
+
+func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
+ n, errno := socketcall(sysRECVMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0)
+ return int(n), errnoErr(errno)
+}
+
+func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
+ n, errno := socketcall(sysSENDMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0)
+ return int(n), errnoErr(errno)
+}
diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s b/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s
new file mode 100644
index 0000000..06d7562
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s
@@ -0,0 +1,11 @@
+// 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.
+
+#include "textflag.h"
+
+TEXT ·socketcall(SB),NOSPLIT,$0-72
+ JMP syscall·socketcall(SB)
+
+TEXT ·rawsocketcall(SB),NOSPLIT,$0-72
+ JMP syscall·rawsocketcall(SB)
diff --git a/vendor/golang.org/x/net/internal/socket/sys_netbsd.go b/vendor/golang.org/x/net/internal/socket/sys_netbsd.go
new file mode 100644
index 0000000..431851c
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_netbsd.go
@@ -0,0 +1,25 @@
+// 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 socket
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+const (
+ sysRECVMMSG = 0x1db
+ sysSENDMMSG = 0x1dc
+)
+
+func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
+ n, _, errno := syscall.Syscall6(sysRECVMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0)
+ return int(n), errnoErr(errno)
+}
+
+func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
+ n, _, errno := syscall.Syscall6(sysSENDMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0)
+ return int(n), errnoErr(errno)
+}
diff --git a/vendor/golang.org/x/net/internal/socket/sys_posix.go b/vendor/golang.org/x/net/internal/socket/sys_posix.go
new file mode 100644
index 0000000..9a0dbcf
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_posix.go
@@ -0,0 +1,168 @@
+// 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
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
+
+package socket
+
+import (
+ "encoding/binary"
+ "errors"
+ "net"
+ "runtime"
+ "strconv"
+ "sync"
+ "time"
+)
+
+func marshalInetAddr(a net.Addr) []byte {
+ switch a := a.(type) {
+ case *net.TCPAddr:
+ return marshalSockaddr(a.IP, a.Port, a.Zone)
+ case *net.UDPAddr:
+ return marshalSockaddr(a.IP, a.Port, a.Zone)
+ case *net.IPAddr:
+ return marshalSockaddr(a.IP, 0, a.Zone)
+ default:
+ return nil
+ }
+}
+
+func marshalSockaddr(ip net.IP, port int, zone string) []byte {
+ if ip4 := ip.To4(); ip4 != nil {
+ b := make([]byte, sizeofSockaddrInet)
+ switch runtime.GOOS {
+ case "linux", "solaris", "windows":
+ NativeEndian.PutUint16(b[:2], uint16(sysAF_INET))
+ default:
+ b[0] = sizeofSockaddrInet
+ b[1] = sysAF_INET
+ }
+ binary.BigEndian.PutUint16(b[2:4], uint16(port))
+ copy(b[4:8], ip4)
+ return b
+ }
+ if ip6 := ip.To16(); ip6 != nil && ip.To4() == nil {
+ b := make([]byte, sizeofSockaddrInet6)
+ switch runtime.GOOS {
+ case "linux", "solaris", "windows":
+ NativeEndian.PutUint16(b[:2], uint16(sysAF_INET6))
+ default:
+ b[0] = sizeofSockaddrInet6
+ b[1] = sysAF_INET6
+ }
+ binary.BigEndian.PutUint16(b[2:4], uint16(port))
+ copy(b[8:24], ip6)
+ if zone != "" {
+ NativeEndian.PutUint32(b[24:28], uint32(zoneCache.index(zone)))
+ }
+ return b
+ }
+ return nil
+}
+
+func parseInetAddr(b []byte, network string) (net.Addr, error) {
+ if len(b) < 2 {
+ return nil, errors.New("invalid address")
+ }
+ var af int
+ switch runtime.GOOS {
+ case "linux", "solaris", "windows":
+ af = int(NativeEndian.Uint16(b[:2]))
+ default:
+ af = int(b[1])
+ }
+ var ip net.IP
+ var zone string
+ if af == sysAF_INET {
+ if len(b) < sizeofSockaddrInet {
+ return nil, errors.New("short address")
+ }
+ ip = make(net.IP, net.IPv4len)
+ copy(ip, b[4:8])
+ }
+ if af == sysAF_INET6 {
+ if len(b) < sizeofSockaddrInet6 {
+ return nil, errors.New("short address")
+ }
+ ip = make(net.IP, net.IPv6len)
+ copy(ip, b[8:24])
+ if id := int(NativeEndian.Uint32(b[24:28])); id > 0 {
+ zone = zoneCache.name(id)
+ }
+ }
+ switch network {
+ case "tcp", "tcp4", "tcp6":
+ return &net.TCPAddr{IP: ip, Port: int(binary.BigEndian.Uint16(b[2:4])), Zone: zone}, nil
+ case "udp", "udp4", "udp6":
+ return &net.UDPAddr{IP: ip, Port: int(binary.BigEndian.Uint16(b[2:4])), Zone: zone}, nil
+ default:
+ return &net.IPAddr{IP: ip, Zone: zone}, nil
+ }
+}
+
+// An ipv6ZoneCache represents a cache holding partial network
+// interface information. It is used for reducing the cost of IPv6
+// addressing scope zone resolution.
+//
+// Multiple names sharing the index are managed by first-come
+// first-served basis for consistency.
+type ipv6ZoneCache struct {
+ sync.RWMutex // guard the following
+ lastFetched time.Time // last time routing information was fetched
+ toIndex map[string]int // interface name to its index
+ toName map[int]string // interface index to its name
+}
+
+var zoneCache = ipv6ZoneCache{
+ toIndex: make(map[string]int),
+ toName: make(map[int]string),
+}
+
+func (zc *ipv6ZoneCache) update(ift []net.Interface) {
+ zc.Lock()
+ defer zc.Unlock()
+ now := time.Now()
+ if zc.lastFetched.After(now.Add(-60 * time.Second)) {
+ return
+ }
+ zc.lastFetched = now
+ if len(ift) == 0 {
+ var err error
+ if ift, err = net.Interfaces(); err != nil {
+ return
+ }
+ }
+ zc.toIndex = make(map[string]int, len(ift))
+ zc.toName = make(map[int]string, len(ift))
+ for _, ifi := range ift {
+ zc.toIndex[ifi.Name] = ifi.Index
+ if _, ok := zc.toName[ifi.Index]; !ok {
+ zc.toName[ifi.Index] = ifi.Name
+ }
+ }
+}
+
+func (zc *ipv6ZoneCache) name(zone int) string {
+ zoneCache.update(nil)
+ zoneCache.RLock()
+ defer zoneCache.RUnlock()
+ name, ok := zoneCache.toName[zone]
+ if !ok {
+ name = strconv.Itoa(zone)
+ }
+ return name
+}
+
+func (zc *ipv6ZoneCache) index(zone string) int {
+ zoneCache.update(nil)
+ zoneCache.RLock()
+ defer zoneCache.RUnlock()
+ index, ok := zoneCache.toIndex[zone]
+ if !ok {
+ index, _ = strconv.Atoi(zone)
+ }
+ return index
+}
diff --git a/vendor/golang.org/x/net/internal/socket/sys_solaris.go b/vendor/golang.org/x/net/internal/socket/sys_solaris.go
new file mode 100644
index 0000000..cced74e
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_solaris.go
@@ -0,0 +1,71 @@
+// 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 socket
+
+import (
+ "errors"
+ "runtime"
+ "syscall"
+ "unsafe"
+)
+
+func probeProtocolStack() int {
+ switch runtime.GOARCH {
+ case "amd64":
+ return 4
+ default:
+ var p uintptr
+ return int(unsafe.Sizeof(p))
+ }
+}
+
+//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so"
+//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so"
+//go:cgo_import_dynamic libc___xnet_recvmsg __xnet_recvmsg "libsocket.so"
+//go:cgo_import_dynamic libc___xnet_sendmsg __xnet_sendmsg "libsocket.so"
+
+//go:linkname procGetsockopt libc___xnet_getsockopt
+//go:linkname procSetsockopt libc_setsockopt
+//go:linkname procRecvmsg libc___xnet_recvmsg
+//go:linkname procSendmsg libc___xnet_sendmsg
+
+var (
+ procGetsockopt uintptr
+ procSetsockopt uintptr
+ procRecvmsg uintptr
+ procSendmsg uintptr
+)
+
+func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno)
+func rawSysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno)
+
+func getsockopt(s uintptr, level, name int, b []byte) (int, error) {
+ l := uint32(len(b))
+ _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procGetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(unsafe.Pointer(&l)), 0)
+ return int(l), errnoErr(errno)
+}
+
+func setsockopt(s uintptr, level, name int, b []byte) error {
+ _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procSetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0)
+ return errnoErr(errno)
+}
+
+func recvmsg(s uintptr, h *msghdr, flags int) (int, error) {
+ n, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procRecvmsg)), 3, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0)
+ return int(n), errnoErr(errno)
+}
+
+func sendmsg(s uintptr, h *msghdr, flags int) (int, error) {
+ n, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procSendmsg)), 3, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0)
+ return int(n), errnoErr(errno)
+}
+
+func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
+ return 0, errors.New("not implemented")
+}
+
+func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
+ return 0, errors.New("not implemented")
+}
diff --git a/vendor/golang.org/x/net/ipv6/sys_solaris_amd64.s b/vendor/golang.org/x/net/internal/socket/sys_solaris_amd64.s
similarity index 66%
rename from vendor/golang.org/x/net/ipv6/sys_solaris_amd64.s
rename to vendor/golang.org/x/net/internal/socket/sys_solaris_amd64.s
index 39d76af..a18ac5e 100644
--- a/vendor/golang.org/x/net/ipv6/sys_solaris_amd64.s
+++ b/vendor/golang.org/x/net/internal/socket/sys_solaris_amd64.s
@@ -4,5 +4,8 @@
#include "textflag.h"
-TEXT ·sysvicall6(SB),NOSPLIT,$0-88
+TEXT ·sysvicall6(SB),NOSPLIT,$0-88
JMP syscall·sysvicall6(SB)
+
+TEXT ·rawSysvicall6(SB),NOSPLIT,$0-88
+ JMP syscall·rawSysvicall6(SB)
diff --git a/vendor/golang.org/x/net/internal/socket/sys_stub.go b/vendor/golang.org/x/net/internal/socket/sys_stub.go
new file mode 100644
index 0000000..d9f06d0
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_stub.go
@@ -0,0 +1,64 @@
+// 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 !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows
+
+package socket
+
+import (
+ "errors"
+ "net"
+ "runtime"
+ "unsafe"
+)
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0xa
+
+ sysSOCK_RAW = 0x3
+)
+
+func probeProtocolStack() int {
+ switch runtime.GOARCH {
+ case "amd64p32", "mips64p32":
+ return 4
+ default:
+ var p uintptr
+ return int(unsafe.Sizeof(p))
+ }
+}
+
+func marshalInetAddr(ip net.IP, port int, zone string) []byte {
+ return nil
+}
+
+func parseInetAddr(b []byte, network string) (net.Addr, error) {
+ return nil, errors.New("not implemented")
+}
+
+func getsockopt(s uintptr, level, name int, b []byte) (int, error) {
+ return 0, errors.New("not implemented")
+}
+
+func setsockopt(s uintptr, level, name int, b []byte) error {
+ return errors.New("not implemented")
+}
+
+func recvmsg(s uintptr, h *msghdr, flags int) (int, error) {
+ return 0, errors.New("not implemented")
+}
+
+func sendmsg(s uintptr, h *msghdr, flags int) (int, error) {
+ return 0, errors.New("not implemented")
+}
+
+func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
+ return 0, errors.New("not implemented")
+}
+
+func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
+ return 0, errors.New("not implemented")
+}
diff --git a/vendor/golang.org/x/net/internal/socket/sys_unix.go b/vendor/golang.org/x/net/internal/socket/sys_unix.go
new file mode 100644
index 0000000..18eba30
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_unix.go
@@ -0,0 +1,33 @@
+// 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 darwin dragonfly freebsd linux,!s390x,!386 netbsd openbsd
+
+package socket
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+func getsockopt(s uintptr, level, name int, b []byte) (int, error) {
+ l := uint32(len(b))
+ _, _, errno := syscall.Syscall6(syscall.SYS_GETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(unsafe.Pointer(&l)), 0)
+ return int(l), errnoErr(errno)
+}
+
+func setsockopt(s uintptr, level, name int, b []byte) error {
+ _, _, errno := syscall.Syscall6(syscall.SYS_SETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0)
+ return errnoErr(errno)
+}
+
+func recvmsg(s uintptr, h *msghdr, flags int) (int, error) {
+ n, _, errno := syscall.Syscall(syscall.SYS_RECVMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags))
+ return int(n), errnoErr(errno)
+}
+
+func sendmsg(s uintptr, h *msghdr, flags int) (int, error) {
+ n, _, errno := syscall.Syscall(syscall.SYS_SENDMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags))
+ return int(n), errnoErr(errno)
+}
diff --git a/vendor/golang.org/x/net/internal/socket/sys_windows.go b/vendor/golang.org/x/net/internal/socket/sys_windows.go
new file mode 100644
index 0000000..54a470e
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/sys_windows.go
@@ -0,0 +1,70 @@
+// 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 socket
+
+import (
+ "errors"
+ "syscall"
+ "unsafe"
+)
+
+func probeProtocolStack() int {
+ var p uintptr
+ return int(unsafe.Sizeof(p))
+}
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0x17
+
+ sysSOCK_RAW = 0x3
+)
+
+type sockaddrInet struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]uint8
+}
+
+type sockaddrInet6 struct {
+ Family uint16
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
+
+func getsockopt(s uintptr, level, name int, b []byte) (int, error) {
+ l := uint32(len(b))
+ err := syscall.Getsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(unsafe.Pointer(&b[0])), (*int32)(unsafe.Pointer(&l)))
+ return int(l), err
+}
+
+func setsockopt(s uintptr, level, name int, b []byte) error {
+ return syscall.Setsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(unsafe.Pointer(&b[0])), int32(len(b)))
+}
+
+func recvmsg(s uintptr, h *msghdr, flags int) (int, error) {
+ return 0, errors.New("not implemented")
+}
+
+func sendmsg(s uintptr, h *msghdr, flags int) (int, error) {
+ return 0, errors.New("not implemented")
+}
+
+func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
+ return 0, errors.New("not implemented")
+}
+
+func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
+ return 0, errors.New("not implemented")
+}
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go b/vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go
new file mode 100644
index 0000000..26f8fef
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go
@@ -0,0 +1,59 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_darwin.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0x1e
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint32
+}
+
+type msghdr struct {
+ Name *byte
+ Namelen uint32
+ Iov *iovec
+ Iovlen int32
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+type cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]int8
+}
+
+type sockaddrInet6 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x8
+ sizeofMsghdr = 0x1c
+ sizeofCmsghdr = 0xc
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go
new file mode 100644
index 0000000..e2987f7
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go
@@ -0,0 +1,61 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_darwin.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0x1e
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint64
+}
+
+type msghdr struct {
+ Name *byte
+ Namelen uint32
+ Pad_cgo_0 [4]byte
+ Iov *iovec
+ Iovlen int32
+ Pad_cgo_1 [4]byte
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+type cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]int8
+}
+
+type sockaddrInet6 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x10
+ sizeofMsghdr = 0x30
+ sizeofCmsghdr = 0xc
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go b/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go
new file mode 100644
index 0000000..26f8fef
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go
@@ -0,0 +1,59 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_darwin.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0x1e
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint32
+}
+
+type msghdr struct {
+ Name *byte
+ Namelen uint32
+ Iov *iovec
+ Iovlen int32
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+type cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]int8
+}
+
+type sockaddrInet6 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x8
+ sizeofMsghdr = 0x1c
+ sizeofCmsghdr = 0xc
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go
new file mode 100644
index 0000000..c582abd
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go
@@ -0,0 +1,61 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_dragonfly.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0x1c
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint64
+}
+
+type msghdr struct {
+ Name *byte
+ Namelen uint32
+ Pad_cgo_0 [4]byte
+ Iov *iovec
+ Iovlen int32
+ Pad_cgo_1 [4]byte
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+type cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]int8
+}
+
+type sockaddrInet6 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x10
+ sizeofMsghdr = 0x30
+ sizeofCmsghdr = 0xc
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go
new file mode 100644
index 0000000..04a2488
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go
@@ -0,0 +1,59 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_freebsd.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0x1c
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint32
+}
+
+type msghdr struct {
+ Name *byte
+ Namelen uint32
+ Iov *iovec
+ Iovlen int32
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+type cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]int8
+}
+
+type sockaddrInet6 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x8
+ sizeofMsghdr = 0x1c
+ sizeofCmsghdr = 0xc
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go
new file mode 100644
index 0000000..35c7cb9
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go
@@ -0,0 +1,61 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_freebsd.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0x1c
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint64
+}
+
+type msghdr struct {
+ Name *byte
+ Namelen uint32
+ Pad_cgo_0 [4]byte
+ Iov *iovec
+ Iovlen int32
+ Pad_cgo_1 [4]byte
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+type cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]int8
+}
+
+type sockaddrInet6 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x10
+ sizeofMsghdr = 0x30
+ sizeofCmsghdr = 0xc
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go
new file mode 100644
index 0000000..04a2488
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go
@@ -0,0 +1,59 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_freebsd.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0x1c
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint32
+}
+
+type msghdr struct {
+ Name *byte
+ Namelen uint32
+ Iov *iovec
+ Iovlen int32
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+type cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]int8
+}
+
+type sockaddrInet6 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x8
+ sizeofMsghdr = 0x1c
+ sizeofCmsghdr = 0xc
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go
new file mode 100644
index 0000000..4302069
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go
@@ -0,0 +1,63 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_linux.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0xa
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint32
+}
+
+type msghdr struct {
+ Name *byte
+ Namelen uint32
+ Iov *iovec
+ Iovlen uint32
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+type mmsghdr struct {
+ Hdr msghdr
+ Len uint32
+}
+
+type cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ X__pad [8]uint8
+}
+
+type sockaddrInet6 struct {
+ Family uint16
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x8
+ sizeofMsghdr = 0x1c
+ sizeofMmsghdr = 0x20
+ sizeofCmsghdr = 0xc
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go
new file mode 100644
index 0000000..1502f6c
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go
@@ -0,0 +1,66 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_linux.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0xa
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint64
+}
+
+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
+}
+
+type mmsghdr struct {
+ Hdr msghdr
+ Len uint32
+ Pad_cgo_0 [4]byte
+}
+
+type cmsghdr struct {
+ Len uint64
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ X__pad [8]uint8
+}
+
+type sockaddrInet6 struct {
+ Family uint16
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x10
+ sizeofMsghdr = 0x38
+ sizeofMmsghdr = 0x40
+ sizeofCmsghdr = 0x10
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go
new file mode 100644
index 0000000..4302069
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go
@@ -0,0 +1,63 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_linux.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0xa
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint32
+}
+
+type msghdr struct {
+ Name *byte
+ Namelen uint32
+ Iov *iovec
+ Iovlen uint32
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+type mmsghdr struct {
+ Hdr msghdr
+ Len uint32
+}
+
+type cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ X__pad [8]uint8
+}
+
+type sockaddrInet6 struct {
+ Family uint16
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x8
+ sizeofMsghdr = 0x1c
+ sizeofMmsghdr = 0x20
+ sizeofCmsghdr = 0xc
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go
new file mode 100644
index 0000000..1502f6c
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go
@@ -0,0 +1,66 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_linux.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0xa
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint64
+}
+
+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
+}
+
+type mmsghdr struct {
+ Hdr msghdr
+ Len uint32
+ Pad_cgo_0 [4]byte
+}
+
+type cmsghdr struct {
+ Len uint64
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ X__pad [8]uint8
+}
+
+type sockaddrInet6 struct {
+ Family uint16
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x10
+ sizeofMsghdr = 0x38
+ sizeofMmsghdr = 0x40
+ sizeofCmsghdr = 0x10
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go
new file mode 100644
index 0000000..4302069
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go
@@ -0,0 +1,63 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_linux.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0xa
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint32
+}
+
+type msghdr struct {
+ Name *byte
+ Namelen uint32
+ Iov *iovec
+ Iovlen uint32
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+type mmsghdr struct {
+ Hdr msghdr
+ Len uint32
+}
+
+type cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ X__pad [8]uint8
+}
+
+type sockaddrInet6 struct {
+ Family uint16
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x8
+ sizeofMsghdr = 0x1c
+ sizeofMmsghdr = 0x20
+ sizeofCmsghdr = 0xc
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go
new file mode 100644
index 0000000..1502f6c
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go
@@ -0,0 +1,66 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_linux.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0xa
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint64
+}
+
+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
+}
+
+type mmsghdr struct {
+ Hdr msghdr
+ Len uint32
+ Pad_cgo_0 [4]byte
+}
+
+type cmsghdr struct {
+ Len uint64
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ X__pad [8]uint8
+}
+
+type sockaddrInet6 struct {
+ Family uint16
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x10
+ sizeofMsghdr = 0x38
+ sizeofMmsghdr = 0x40
+ sizeofCmsghdr = 0x10
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go
new file mode 100644
index 0000000..1502f6c
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go
@@ -0,0 +1,66 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_linux.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0xa
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint64
+}
+
+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
+}
+
+type mmsghdr struct {
+ Hdr msghdr
+ Len uint32
+ Pad_cgo_0 [4]byte
+}
+
+type cmsghdr struct {
+ Len uint64
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ X__pad [8]uint8
+}
+
+type sockaddrInet6 struct {
+ Family uint16
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x10
+ sizeofMsghdr = 0x38
+ sizeofMmsghdr = 0x40
+ sizeofCmsghdr = 0x10
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go
new file mode 100644
index 0000000..4302069
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go
@@ -0,0 +1,63 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_linux.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0xa
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint32
+}
+
+type msghdr struct {
+ Name *byte
+ Namelen uint32
+ Iov *iovec
+ Iovlen uint32
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+type mmsghdr struct {
+ Hdr msghdr
+ Len uint32
+}
+
+type cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ X__pad [8]uint8
+}
+
+type sockaddrInet6 struct {
+ Family uint16
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x8
+ sizeofMsghdr = 0x1c
+ sizeofMmsghdr = 0x20
+ sizeofCmsghdr = 0xc
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go
new file mode 100644
index 0000000..1502f6c
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go
@@ -0,0 +1,66 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_linux.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0xa
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint64
+}
+
+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
+}
+
+type mmsghdr struct {
+ Hdr msghdr
+ Len uint32
+ Pad_cgo_0 [4]byte
+}
+
+type cmsghdr struct {
+ Len uint64
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ X__pad [8]uint8
+}
+
+type sockaddrInet6 struct {
+ Family uint16
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x10
+ sizeofMsghdr = 0x38
+ sizeofMmsghdr = 0x40
+ sizeofCmsghdr = 0x10
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go
new file mode 100644
index 0000000..1502f6c
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go
@@ -0,0 +1,66 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_linux.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0xa
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint64
+}
+
+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
+}
+
+type mmsghdr struct {
+ Hdr msghdr
+ Len uint32
+ Pad_cgo_0 [4]byte
+}
+
+type cmsghdr struct {
+ Len uint64
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ X__pad [8]uint8
+}
+
+type sockaddrInet6 struct {
+ Family uint16
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x10
+ sizeofMsghdr = 0x38
+ sizeofMmsghdr = 0x40
+ sizeofCmsghdr = 0x10
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go
new file mode 100644
index 0000000..1502f6c
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go
@@ -0,0 +1,66 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_linux.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0xa
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint64
+}
+
+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
+}
+
+type mmsghdr struct {
+ Hdr msghdr
+ Len uint32
+ Pad_cgo_0 [4]byte
+}
+
+type cmsghdr struct {
+ Len uint64
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ X__pad [8]uint8
+}
+
+type sockaddrInet6 struct {
+ Family uint16
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x10
+ sizeofMsghdr = 0x38
+ sizeofMmsghdr = 0x40
+ sizeofCmsghdr = 0x10
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go
new file mode 100644
index 0000000..db60491
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go
@@ -0,0 +1,65 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_netbsd.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0x18
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint32
+}
+
+type msghdr struct {
+ Name *byte
+ Namelen uint32
+ Iov *iovec
+ Iovlen int32
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+type mmsghdr struct {
+ Hdr msghdr
+ Len uint32
+}
+
+type cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]int8
+}
+
+type sockaddrInet6 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x8
+ sizeofMsghdr = 0x1c
+ sizeofMmsghdr = 0x20
+ sizeofCmsghdr = 0xc
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go
new file mode 100644
index 0000000..2a1a799
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go
@@ -0,0 +1,68 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_netbsd.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0x18
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint64
+}
+
+type msghdr struct {
+ Name *byte
+ Namelen uint32
+ Pad_cgo_0 [4]byte
+ Iov *iovec
+ Iovlen int32
+ Pad_cgo_1 [4]byte
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+type mmsghdr struct {
+ Hdr msghdr
+ Len uint32
+ Pad_cgo_0 [4]byte
+}
+
+type cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]int8
+}
+
+type sockaddrInet6 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x10
+ sizeofMsghdr = 0x30
+ sizeofMmsghdr = 0x40
+ sizeofCmsghdr = 0xc
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go
new file mode 100644
index 0000000..206ea2d
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go
@@ -0,0 +1,59 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_netbsd.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0x18
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint32
+}
+
+type msghdr struct {
+ Name *byte
+ Namelen uint32
+ Iov *iovec
+ Iovlen int32
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+type cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]int8
+}
+
+type sockaddrInet6 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x8
+ sizeofMsghdr = 0x1c
+ sizeofCmsghdr = 0xc
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go
new file mode 100644
index 0000000..1c83636
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go
@@ -0,0 +1,59 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_openbsd.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0x18
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint32
+}
+
+type msghdr struct {
+ Name *byte
+ Namelen uint32
+ Iov *iovec
+ Iovlen uint32
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+type cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]int8
+}
+
+type sockaddrInet6 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x8
+ sizeofMsghdr = 0x1c
+ sizeofCmsghdr = 0xc
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go
new file mode 100644
index 0000000..a6c0bf4
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go
@@ -0,0 +1,61 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_openbsd.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0x18
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint64
+}
+
+type msghdr struct {
+ Name *byte
+ Namelen uint32
+ Pad_cgo_0 [4]byte
+ Iov *iovec
+ Iovlen uint32
+ Pad_cgo_1 [4]byte
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+type cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]int8
+}
+
+type sockaddrInet6 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x10
+ sizeofMsghdr = 0x30
+ sizeofCmsghdr = 0xc
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go
new file mode 100644
index 0000000..1c83636
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go
@@ -0,0 +1,59 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_openbsd.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0x18
+
+ sysSOCK_RAW = 0x3
+)
+
+type iovec struct {
+ Base *byte
+ Len uint32
+}
+
+type msghdr struct {
+ Name *byte
+ Namelen uint32
+ Iov *iovec
+ Iovlen uint32
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+type cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]int8
+}
+
+type sockaddrInet6 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+const (
+ sizeofIovec = 0x8
+ sizeofMsghdr = 0x1c
+ sizeofCmsghdr = 0xc
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go
new file mode 100644
index 0000000..327c632
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go
@@ -0,0 +1,60 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_solaris.go
+
+package socket
+
+const (
+ sysAF_UNSPEC = 0x0
+ sysAF_INET = 0x2
+ sysAF_INET6 = 0x1a
+
+ sysSOCK_RAW = 0x4
+)
+
+type iovec struct {
+ Base *int8
+ Len uint64
+}
+
+type msghdr struct {
+ Name *byte
+ Namelen uint32
+ Pad_cgo_0 [4]byte
+ Iov *iovec
+ Iovlen int32
+ Pad_cgo_1 [4]byte
+ Accrights *int8
+ Accrightslen int32
+ Pad_cgo_2 [4]byte
+}
+
+type cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type sockaddrInet struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]int8
+}
+
+type sockaddrInet6 struct {
+ Family uint16
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+ X__sin6_src_id uint32
+}
+
+const (
+ sizeofIovec = 0x10
+ sizeofMsghdr = 0x30
+ sizeofCmsghdr = 0xc
+
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x20
+)
diff --git a/vendor/golang.org/x/net/internal/timeseries/timeseries.go b/vendor/golang.org/x/net/internal/timeseries/timeseries.go
index 1119f34..685f0e7 100644
--- a/vendor/golang.org/x/net/internal/timeseries/timeseries.go
+++ b/vendor/golang.org/x/net/internal/timeseries/timeseries.go
@@ -371,7 +371,7 @@ func (ts *timeSeries) ComputeRange(start, finish time.Time, num int) []Observabl
}
}
- // Failed to find a level that covers the desired range. So just
+ // Failed to find a level that covers the desired range. So just
// extract from the last level, even if it doesn't cover the entire
// desired range.
ts.extract(ts.levels[len(ts.levels)-1], start, finish, num, results)
diff --git a/vendor/golang.org/x/net/ipv4/batch.go b/vendor/golang.org/x/net/ipv4/batch.go
new file mode 100644
index 0000000..b445499
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv4/batch.go
@@ -0,0 +1,191 @@
+// 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 ipv4
+
+import (
+ "net"
+ "runtime"
+ "syscall"
+
+ "golang.org/x/net/internal/socket"
+)
+
+// BUG(mikio): On Windows, the ReadBatch and WriteBatch methods of
+// PacketConn are not implemented.
+
+// BUG(mikio): On Windows, the ReadBatch and WriteBatch methods of
+// RawConn are not implemented.
+
+// A Message represents an IO message.
+//
+// type Message struct {
+// Buffers [][]byte
+// OOB []byte
+// Addr net.Addr
+// N int
+// NN int
+// Flags int
+// }
+//
+// The Buffers fields represents a list of contiguous buffers, which
+// can be used for vectored IO, for example, putting a header and a
+// payload in each slice.
+// When writing, the Buffers field must contain at least one byte to
+// write.
+// When reading, the Buffers field will always contain a byte to read.
+//
+// The OOB field contains protocol-specific control or miscellaneous
+// ancillary data known as out-of-band data.
+// It can be nil when not required.
+//
+// The Addr field specifies a destination address when writing.
+// It can be nil when the underlying protocol of the endpoint uses
+// connection-oriented communication.
+// After a successful read, it may contain the source address on the
+// received packet.
+//
+// The N field indicates the number of bytes read or written from/to
+// Buffers.
+//
+// The NN field indicates the number of bytes read or written from/to
+// OOB.
+//
+// The Flags field contains protocol-specific information on the
+// received message.
+type Message = socket.Message
+
+// ReadBatch reads a batch of messages.
+//
+// The provided flags is a set of platform-dependent flags, such as
+// syscall.MSG_PEEK.
+//
+// On a successful read it returns the number of messages received, up
+// to len(ms).
+//
+// On Linux, a batch read will be optimized.
+// On other platforms, this method will read only a single message.
+//
+// Unlike the ReadFrom method, it doesn't strip the IPv4 header
+// followed by option headers from the received IPv4 datagram when the
+// underlying transport is net.IPConn. Each Buffers field of Message
+// must be large enough to accommodate an IPv4 header and option
+// headers.
+func (c *payloadHandler) ReadBatch(ms []Message, flags int) (int, error) {
+ if !c.ok() {
+ return 0, syscall.EINVAL
+ }
+ switch runtime.GOOS {
+ case "linux":
+ n, err := c.RecvMsgs([]socket.Message(ms), flags)
+ if err != nil {
+ err = &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ }
+ return n, err
+ default:
+ n := 1
+ err := c.RecvMsg(&ms[0], flags)
+ if err != nil {
+ n = 0
+ err = &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ }
+ return n, err
+ }
+}
+
+// WriteBatch writes a batch of messages.
+//
+// The provided flags is a set of platform-dependent flags, such as
+// syscall.MSG_DONTROUTE.
+//
+// It returns the number of messages written on a successful write.
+//
+// On Linux, a batch write will be optimized.
+// On other platforms, this method will write only a single message.
+func (c *payloadHandler) WriteBatch(ms []Message, flags int) (int, error) {
+ if !c.ok() {
+ return 0, syscall.EINVAL
+ }
+ switch runtime.GOOS {
+ case "linux":
+ n, err := c.SendMsgs([]socket.Message(ms), flags)
+ if err != nil {
+ err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ }
+ return n, err
+ default:
+ n := 1
+ err := c.SendMsg(&ms[0], flags)
+ if err != nil {
+ n = 0
+ err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ }
+ return n, err
+ }
+}
+
+// ReadBatch reads a batch of messages.
+//
+// The provided flags is a set of platform-dependent flags, such as
+// syscall.MSG_PEEK.
+//
+// On a successful read it returns the number of messages received, up
+// to len(ms).
+//
+// On Linux, a batch read will be optimized.
+// On other platforms, this method will read only a single message.
+func (c *packetHandler) ReadBatch(ms []Message, flags int) (int, error) {
+ if !c.ok() {
+ return 0, syscall.EINVAL
+ }
+ switch runtime.GOOS {
+ case "linux":
+ n, err := c.RecvMsgs([]socket.Message(ms), flags)
+ if err != nil {
+ err = &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err}
+ }
+ return n, err
+ default:
+ n := 1
+ err := c.RecvMsg(&ms[0], flags)
+ if err != nil {
+ n = 0
+ err = &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err}
+ }
+ return n, err
+ }
+}
+
+// WriteBatch writes a batch of messages.
+//
+// The provided flags is a set of platform-dependent flags, such as
+// syscall.MSG_DONTROUTE.
+//
+// It returns the number of messages written on a successful write.
+//
+// On Linux, a batch write will be optimized.
+// On other platforms, this method will write only a single message.
+func (c *packetHandler) WriteBatch(ms []Message, flags int) (int, error) {
+ if !c.ok() {
+ return 0, syscall.EINVAL
+ }
+ switch runtime.GOOS {
+ case "linux":
+ n, err := c.SendMsgs([]socket.Message(ms), flags)
+ if err != nil {
+ err = &net.OpError{Op: "write", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err}
+ }
+ return n, err
+ default:
+ n := 1
+ err := c.SendMsg(&ms[0], flags)
+ if err != nil {
+ n = 0
+ err = &net.OpError{Op: "write", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err}
+ }
+ return n, err
+ }
+}
diff --git a/vendor/golang.org/x/net/ipv4/bpfopt_linux.go b/vendor/golang.org/x/net/ipv4/bpfopt_linux.go
deleted file mode 100644
index 2d626d9..0000000
--- a/vendor/golang.org/x/net/ipv4/bpfopt_linux.go
+++ /dev/null
@@ -1,28 +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.
-
-package ipv4
-
-import (
- "os"
- "unsafe"
-
- "golang.org/x/net/bpf"
- "golang.org/x/net/internal/netreflect"
-)
-
-// SetBPF attaches a BPF program to the connection.
-//
-// Only supported on Linux.
-func (c *dgramOpt) SetBPF(filter []bpf.RawInstruction) error {
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
- }
- prog := sockFProg{
- Len: uint16(len(filter)),
- Filter: (*sockFilter)(unsafe.Pointer(&filter[0])),
- }
- return os.NewSyscallError("setsockopt", setsockopt(s, sysSOL_SOCKET, sysSO_ATTACH_FILTER, unsafe.Pointer(&prog), uint32(unsafe.Sizeof(prog))))
-}
diff --git a/vendor/golang.org/x/net/ipv4/bpfopt_stub.go b/vendor/golang.org/x/net/ipv4/bpfopt_stub.go
deleted file mode 100644
index c4a8481..0000000
--- a/vendor/golang.org/x/net/ipv4/bpfopt_stub.go
+++ /dev/null
@@ -1,16 +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 !linux
-
-package ipv4
-
-import "golang.org/x/net/bpf"
-
-// SetBPF attaches a BPF program to the connection.
-//
-// Only supported on Linux.
-func (c *dgramOpt) SetBPF(filter []bpf.RawInstruction) error {
- return errOpNoSupport
-}
diff --git a/vendor/golang.org/x/net/ipv4/control.go b/vendor/golang.org/x/net/ipv4/control.go
index da4da2d..fc99327 100644
--- a/vendor/golang.org/x/net/ipv4/control.go
+++ b/vendor/golang.org/x/net/ipv4/control.go
@@ -8,6 +8,9 @@ import (
"fmt"
"net"
"sync"
+
+ "golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
type rawOpt struct {
@@ -51,6 +54,77 @@ func (cm *ControlMessage) String() string {
return fmt.Sprintf("ttl=%d src=%v dst=%v ifindex=%d", cm.TTL, cm.Src, cm.Dst, cm.IfIndex)
}
+// Marshal returns the binary encoding of cm.
+func (cm *ControlMessage) Marshal() []byte {
+ if cm == nil {
+ return nil
+ }
+ var m socket.ControlMessage
+ if ctlOpts[ctlPacketInfo].name > 0 && (cm.Src.To4() != nil || cm.IfIndex > 0) {
+ m = socket.NewControlMessage([]int{ctlOpts[ctlPacketInfo].length})
+ }
+ if len(m) > 0 {
+ ctlOpts[ctlPacketInfo].marshal(m, cm)
+ }
+ return m
+}
+
+// Parse parses b as a control message and stores the result in cm.
+func (cm *ControlMessage) Parse(b []byte) error {
+ ms, err := socket.ControlMessage(b).Parse()
+ if err != nil {
+ return err
+ }
+ for _, m := range ms {
+ lvl, typ, l, err := m.ParseHeader()
+ if err != nil {
+ return err
+ }
+ if lvl != iana.ProtocolIP {
+ continue
+ }
+ switch typ {
+ case ctlOpts[ctlTTL].name:
+ ctlOpts[ctlTTL].parse(cm, m.Data(l))
+ case ctlOpts[ctlDst].name:
+ ctlOpts[ctlDst].parse(cm, m.Data(l))
+ case ctlOpts[ctlInterface].name:
+ ctlOpts[ctlInterface].parse(cm, m.Data(l))
+ case ctlOpts[ctlPacketInfo].name:
+ ctlOpts[ctlPacketInfo].parse(cm, m.Data(l))
+ }
+ }
+ return nil
+}
+
+// NewControlMessage returns a new control message.
+//
+// The returned message is large enough for options specified by cf.
+func NewControlMessage(cf ControlFlags) []byte {
+ opt := rawOpt{cflags: cf}
+ var l int
+ if opt.isset(FlagTTL) && ctlOpts[ctlTTL].name > 0 {
+ l += socket.ControlMessageSpace(ctlOpts[ctlTTL].length)
+ }
+ if ctlOpts[ctlPacketInfo].name > 0 {
+ if opt.isset(FlagSrc | FlagDst | FlagInterface) {
+ l += socket.ControlMessageSpace(ctlOpts[ctlPacketInfo].length)
+ }
+ } else {
+ if opt.isset(FlagDst) && ctlOpts[ctlDst].name > 0 {
+ l += socket.ControlMessageSpace(ctlOpts[ctlDst].length)
+ }
+ if opt.isset(FlagInterface) && ctlOpts[ctlInterface].name > 0 {
+ l += socket.ControlMessageSpace(ctlOpts[ctlInterface].length)
+ }
+ }
+ var b []byte
+ if l > 0 {
+ b = make([]byte, l)
+ }
+ return b
+}
+
// Ancillary data socket options
const (
ctlTTL = iota // header field
diff --git a/vendor/golang.org/x/net/ipv4/control_bsd.go b/vendor/golang.org/x/net/ipv4/control_bsd.go
index 3f27f99..77e7ad5 100644
--- a/vendor/golang.org/x/net/ipv4/control_bsd.go
+++ b/vendor/golang.org/x/net/ipv4/control_bsd.go
@@ -12,26 +12,26 @@ import (
"unsafe"
"golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
func marshalDst(b []byte, cm *ControlMessage) []byte {
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
- m.Level = iana.ProtocolIP
- m.Type = sysIP_RECVDSTADDR
- m.SetLen(syscall.CmsgLen(net.IPv4len))
- return b[syscall.CmsgSpace(net.IPv4len):]
+ m := socket.ControlMessage(b)
+ m.MarshalHeader(iana.ProtocolIP, sysIP_RECVDSTADDR, net.IPv4len)
+ return m.Next(net.IPv4len)
}
func parseDst(cm *ControlMessage, b []byte) {
- cm.Dst = b[:net.IPv4len]
+ if len(cm.Dst) < net.IPv4len {
+ cm.Dst = make(net.IP, net.IPv4len)
+ }
+ copy(cm.Dst, b[:net.IPv4len])
}
func marshalInterface(b []byte, cm *ControlMessage) []byte {
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
- m.Level = iana.ProtocolIP
- m.Type = sysIP_RECVIF
- m.SetLen(syscall.CmsgLen(syscall.SizeofSockaddrDatalink))
- return b[syscall.CmsgSpace(syscall.SizeofSockaddrDatalink):]
+ m := socket.ControlMessage(b)
+ m.MarshalHeader(iana.ProtocolIP, sysIP_RECVIF, syscall.SizeofSockaddrDatalink)
+ return m.Next(syscall.SizeofSockaddrDatalink)
}
func parseInterface(cm *ControlMessage, b []byte) {
diff --git a/vendor/golang.org/x/net/ipv4/control_pktinfo.go b/vendor/golang.org/x/net/ipv4/control_pktinfo.go
index 9ed9773..425338f 100644
--- a/vendor/golang.org/x/net/ipv4/control_pktinfo.go
+++ b/vendor/golang.org/x/net/ipv4/control_pktinfo.go
@@ -7,19 +7,18 @@
package ipv4
import (
- "syscall"
+ "net"
"unsafe"
"golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
func marshalPacketInfo(b []byte, cm *ControlMessage) []byte {
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
- m.Level = iana.ProtocolIP
- m.Type = sysIP_PKTINFO
- m.SetLen(syscall.CmsgLen(sizeofInetPktinfo))
+ m := socket.ControlMessage(b)
+ m.MarshalHeader(iana.ProtocolIP, sysIP_PKTINFO, sizeofInetPktinfo)
if cm != nil {
- pi := (*inetPktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
+ pi := (*inetPktinfo)(unsafe.Pointer(&m.Data(sizeofInetPktinfo)[0]))
if ip := cm.Src.To4(); ip != nil {
copy(pi.Spec_dst[:], ip)
}
@@ -27,11 +26,14 @@ func marshalPacketInfo(b []byte, cm *ControlMessage) []byte {
pi.setIfindex(cm.IfIndex)
}
}
- return b[syscall.CmsgSpace(sizeofInetPktinfo):]
+ return m.Next(sizeofInetPktinfo)
}
func parsePacketInfo(cm *ControlMessage, b []byte) {
pi := (*inetPktinfo)(unsafe.Pointer(&b[0]))
cm.IfIndex = int(pi.Ifindex)
- cm.Dst = pi.Addr[:]
+ if len(cm.Dst) < net.IPv4len {
+ cm.Dst = make(net.IP, net.IPv4len)
+ }
+ copy(cm.Dst, pi.Addr[:])
}
diff --git a/vendor/golang.org/x/net/ipv4/control_stub.go b/vendor/golang.org/x/net/ipv4/control_stub.go
index 27e618b..5a2f7d8 100644
--- a/vendor/golang.org/x/net/ipv4/control_stub.go
+++ b/vendor/golang.org/x/net/ipv4/control_stub.go
@@ -2,22 +2,12 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build nacl plan9
+// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows
package ipv4
-func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
+import "golang.org/x/net/internal/socket"
+
+func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error {
return errOpNoSupport
}
-
-func newControlMessage(opt *rawOpt) []byte {
- return nil
-}
-
-func parseControlMessage(b []byte) (*ControlMessage, error) {
- return nil, errOpNoSupport
-}
-
-func marshalControlMessage(cm *ControlMessage) []byte {
- return nil
-}
diff --git a/vendor/golang.org/x/net/ipv4/control_unix.go b/vendor/golang.org/x/net/ipv4/control_unix.go
index 25ef661..e1ae816 100644
--- a/vendor/golang.org/x/net/ipv4/control_unix.go
+++ b/vendor/golang.org/x/net/ipv4/control_unix.go
@@ -7,18 +7,17 @@
package ipv4
import (
- "os"
- "syscall"
"unsafe"
"golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
-func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
+func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error {
opt.Lock()
defer opt.Unlock()
- if cf&FlagTTL != 0 && sockOpts[ssoReceiveTTL].name > 0 {
- if err := setInt(s, &sockOpts[ssoReceiveTTL], boolint(on)); err != nil {
+ if so, ok := sockOpts[ssoReceiveTTL]; ok && cf&FlagTTL != 0 {
+ if err := so.SetInt(c, boolint(on)); err != nil {
return err
}
if on {
@@ -27,9 +26,9 @@ func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
opt.clear(FlagTTL)
}
}
- if sockOpts[ssoPacketInfo].name > 0 {
+ if so, ok := sockOpts[ssoPacketInfo]; ok {
if cf&(FlagSrc|FlagDst|FlagInterface) != 0 {
- if err := setInt(s, &sockOpts[ssoPacketInfo], boolint(on)); err != nil {
+ if err := so.SetInt(c, boolint(on)); err != nil {
return err
}
if on {
@@ -39,8 +38,8 @@ func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
}
}
} else {
- if cf&FlagDst != 0 && sockOpts[ssoReceiveDst].name > 0 {
- if err := setInt(s, &sockOpts[ssoReceiveDst], boolint(on)); err != nil {
+ if so, ok := sockOpts[ssoReceiveDst]; ok && cf&FlagDst != 0 {
+ if err := so.SetInt(c, boolint(on)); err != nil {
return err
}
if on {
@@ -49,8 +48,8 @@ func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
opt.clear(FlagDst)
}
}
- if cf&FlagInterface != 0 && sockOpts[ssoReceiveInterface].name > 0 {
- if err := setInt(s, &sockOpts[ssoReceiveInterface], boolint(on)); err != nil {
+ if so, ok := sockOpts[ssoReceiveInterface]; ok && cf&FlagInterface != 0 {
+ if err := so.SetInt(c, boolint(on)); err != nil {
return err
}
if on {
@@ -63,84 +62,10 @@ func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
return nil
}
-func newControlMessage(opt *rawOpt) (oob []byte) {
- opt.RLock()
- var l int
- if opt.isset(FlagTTL) && ctlOpts[ctlTTL].name > 0 {
- l += syscall.CmsgSpace(ctlOpts[ctlTTL].length)
- }
- if ctlOpts[ctlPacketInfo].name > 0 {
- if opt.isset(FlagSrc | FlagDst | FlagInterface) {
- l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length)
- }
- } else {
- if opt.isset(FlagDst) && ctlOpts[ctlDst].name > 0 {
- l += syscall.CmsgSpace(ctlOpts[ctlDst].length)
- }
- if opt.isset(FlagInterface) && ctlOpts[ctlInterface].name > 0 {
- l += syscall.CmsgSpace(ctlOpts[ctlInterface].length)
- }
- }
- if l > 0 {
- oob = make([]byte, l)
- }
- opt.RUnlock()
- return
-}
-
-func parseControlMessage(b []byte) (*ControlMessage, error) {
- if len(b) == 0 {
- return nil, nil
- }
- cmsgs, err := syscall.ParseSocketControlMessage(b)
- if err != nil {
- return nil, os.NewSyscallError("parse socket control message", err)
- }
- cm := &ControlMessage{}
- for _, m := range cmsgs {
- if m.Header.Level != iana.ProtocolIP {
- continue
- }
- switch int(m.Header.Type) {
- case ctlOpts[ctlTTL].name:
- ctlOpts[ctlTTL].parse(cm, m.Data[:])
- case ctlOpts[ctlDst].name:
- ctlOpts[ctlDst].parse(cm, m.Data[:])
- case ctlOpts[ctlInterface].name:
- ctlOpts[ctlInterface].parse(cm, m.Data[:])
- case ctlOpts[ctlPacketInfo].name:
- ctlOpts[ctlPacketInfo].parse(cm, m.Data[:])
- }
- }
- return cm, nil
-}
-
-func marshalControlMessage(cm *ControlMessage) (oob []byte) {
- if cm == nil {
- return nil
- }
- var l int
- pktinfo := false
- if ctlOpts[ctlPacketInfo].name > 0 && (cm.Src.To4() != nil || cm.IfIndex > 0) {
- pktinfo = true
- l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length)
- }
- if l > 0 {
- oob = make([]byte, l)
- b := oob
- if pktinfo {
- b = ctlOpts[ctlPacketInfo].marshal(b, cm)
- }
- }
- return
-}
-
func marshalTTL(b []byte, cm *ControlMessage) []byte {
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
- m.Level = iana.ProtocolIP
- m.Type = sysIP_RECVTTL
- m.SetLen(syscall.CmsgLen(1))
- return b[syscall.CmsgSpace(1):]
+ m := socket.ControlMessage(b)
+ m.MarshalHeader(iana.ProtocolIP, sysIP_RECVTTL, 1)
+ return m.Next(1)
}
func parseTTL(cm *ControlMessage, b []byte) {
diff --git a/vendor/golang.org/x/net/ipv4/control_windows.go b/vendor/golang.org/x/net/ipv4/control_windows.go
index b27407d..ce55c66 100644
--- a/vendor/golang.org/x/net/ipv4/control_windows.go
+++ b/vendor/golang.org/x/net/ipv4/control_windows.go
@@ -4,24 +4,13 @@
package ipv4
-import "syscall"
+import (
+ "syscall"
-func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
+ "golang.org/x/net/internal/socket"
+)
+
+func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error {
// TODO(mikio): implement this
return syscall.EWINDOWS
}
-
-func newControlMessage(opt *rawOpt) []byte {
- // TODO(mikio): implement this
- return nil
-}
-
-func parseControlMessage(b []byte) (*ControlMessage, error) {
- // TODO(mikio): implement this
- return nil, syscall.EWINDOWS
-}
-
-func marshalControlMessage(cm *ControlMessage) []byte {
- // TODO(mikio): implement this
- return nil
-}
diff --git a/vendor/golang.org/x/net/ipv4/defs_linux.go b/vendor/golang.org/x/net/ipv4/defs_linux.go
index 31dfa09..beb1107 100644
--- a/vendor/golang.org/x/net/ipv4/defs_linux.go
+++ b/vendor/golang.org/x/net/ipv4/defs_linux.go
@@ -93,6 +93,8 @@ const (
sizeofGroupSourceReq = C.sizeof_struct_group_source_req
sizeofICMPFilter = C.sizeof_struct_icmp_filter
+
+ sizeofSockFprog = C.sizeof_struct_sock_fprog
)
type kernelSockaddrStorage C.struct___kernel_sockaddr_storage
diff --git a/vendor/golang.org/x/net/ipv4/dgramopt_posix.go b/vendor/golang.org/x/net/ipv4/dgramopt.go
similarity index 69%
rename from vendor/golang.org/x/net/ipv4/dgramopt_posix.go
rename to vendor/golang.org/x/net/ipv4/dgramopt.go
index fbc5df1..54d77d5 100644
--- a/vendor/golang.org/x/net/ipv4/dgramopt_posix.go
+++ b/vendor/golang.org/x/net/ipv4/dgramopt.go
@@ -2,15 +2,13 @@
// 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 windows
-
package ipv4
import (
"net"
"syscall"
- "golang.org/x/net/internal/netreflect"
+ "golang.org/x/net/bpf"
)
// MulticastTTL returns the time-to-live field value for outgoing
@@ -19,11 +17,11 @@ func (c *dgramOpt) MulticastTTL() (int, error) {
if !c.ok() {
return 0, syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return 0, err
+ so, ok := sockOpts[ssoMulticastTTL]
+ if !ok {
+ return 0, errOpNoSupport
}
- return getInt(s, &sockOpts[ssoMulticastTTL])
+ return so.GetInt(c.Conn)
}
// SetMulticastTTL sets the time-to-live field value for future
@@ -32,11 +30,11 @@ func (c *dgramOpt) SetMulticastTTL(ttl int) error {
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoMulticastTTL]
+ if !ok {
+ return errOpNoSupport
}
- return setInt(s, &sockOpts[ssoMulticastTTL], ttl)
+ return so.SetInt(c.Conn, ttl)
}
// MulticastInterface returns the default interface for multicast
@@ -45,11 +43,11 @@ func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
if !c.ok() {
return nil, syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return nil, err
+ so, ok := sockOpts[ssoMulticastInterface]
+ if !ok {
+ return nil, errOpNoSupport
}
- return getInterface(s, &sockOpts[ssoMulticastInterface])
+ return so.getMulticastInterface(c.Conn)
}
// SetMulticastInterface sets the default interface for future
@@ -58,11 +56,11 @@ func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoMulticastInterface]
+ if !ok {
+ return errOpNoSupport
}
- return setInterface(s, &sockOpts[ssoMulticastInterface], ifi)
+ return so.setMulticastInterface(c.Conn, ifi)
}
// MulticastLoopback reports whether transmitted multicast packets
@@ -71,11 +69,11 @@ func (c *dgramOpt) MulticastLoopback() (bool, error) {
if !c.ok() {
return false, syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return false, err
+ so, ok := sockOpts[ssoMulticastLoopback]
+ if !ok {
+ return false, errOpNoSupport
}
- on, err := getInt(s, &sockOpts[ssoMulticastLoopback])
+ on, err := so.GetInt(c.Conn)
if err != nil {
return false, err
}
@@ -88,11 +86,11 @@ func (c *dgramOpt) SetMulticastLoopback(on bool) error {
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoMulticastLoopback]
+ if !ok {
+ return errOpNoSupport
}
- return setInt(s, &sockOpts[ssoMulticastLoopback], boolint(on))
+ return so.SetInt(c.Conn, boolint(on))
}
// JoinGroup joins the group address group on the interface ifi.
@@ -108,15 +106,15 @@ func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error {
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoJoinGroup]
+ if !ok {
+ return errOpNoSupport
}
grp := netAddrToIP4(group)
if grp == nil {
return errMissingAddress
}
- return setGroup(s, &sockOpts[ssoJoinGroup], ifi, grp)
+ return so.setGroup(c.Conn, ifi, grp)
}
// LeaveGroup leaves the group address group on the interface ifi
@@ -126,15 +124,15 @@ func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoLeaveGroup]
+ if !ok {
+ return errOpNoSupport
}
grp := netAddrToIP4(group)
if grp == nil {
return errMissingAddress
}
- return setGroup(s, &sockOpts[ssoLeaveGroup], ifi, grp)
+ return so.setGroup(c.Conn, ifi, grp)
}
// JoinSourceSpecificGroup joins the source-specific group comprising
@@ -147,9 +145,9 @@ func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoJoinSourceGroup]
+ if !ok {
+ return errOpNoSupport
}
grp := netAddrToIP4(group)
if grp == nil {
@@ -159,7 +157,7 @@ func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net
if src == nil {
return errMissingAddress
}
- return setSourceGroup(s, &sockOpts[ssoJoinSourceGroup], ifi, grp, src)
+ return so.setSourceGroup(c.Conn, ifi, grp, src)
}
// LeaveSourceSpecificGroup leaves the source-specific group on the
@@ -168,9 +166,9 @@ func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source ne
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoLeaveSourceGroup]
+ if !ok {
+ return errOpNoSupport
}
grp := netAddrToIP4(group)
if grp == nil {
@@ -180,7 +178,7 @@ func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source ne
if src == nil {
return errMissingAddress
}
- return setSourceGroup(s, &sockOpts[ssoLeaveSourceGroup], ifi, grp, src)
+ return so.setSourceGroup(c.Conn, ifi, grp, src)
}
// ExcludeSourceSpecificGroup excludes the source-specific group from
@@ -190,9 +188,9 @@ func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoBlockSourceGroup]
+ if !ok {
+ return errOpNoSupport
}
grp := netAddrToIP4(group)
if grp == nil {
@@ -202,7 +200,7 @@ func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source
if src == nil {
return errMissingAddress
}
- return setSourceGroup(s, &sockOpts[ssoBlockSourceGroup], ifi, grp, src)
+ return so.setSourceGroup(c.Conn, ifi, grp, src)
}
// IncludeSourceSpecificGroup includes the excluded source-specific
@@ -211,9 +209,9 @@ func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoUnblockSourceGroup]
+ if !ok {
+ return errOpNoSupport
}
grp := netAddrToIP4(group)
if grp == nil {
@@ -223,7 +221,7 @@ func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source
if src == nil {
return errMissingAddress
}
- return setSourceGroup(s, &sockOpts[ssoUnblockSourceGroup], ifi, grp, src)
+ return so.setSourceGroup(c.Conn, ifi, grp, src)
}
// ICMPFilter returns an ICMP filter.
@@ -232,11 +230,11 @@ func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) {
if !c.ok() {
return nil, syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return nil, err
+ so, ok := sockOpts[ssoICMPFilter]
+ if !ok {
+ return nil, errOpNoSupport
}
- return getICMPFilter(s, &sockOpts[ssoICMPFilter])
+ return so.getICMPFilter(c.Conn)
}
// SetICMPFilter deploys the ICMP filter.
@@ -245,9 +243,23 @@ func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error {
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoICMPFilter]
+ if !ok {
+ return errOpNoSupport
}
- return setICMPFilter(s, &sockOpts[ssoICMPFilter], f)
+ return so.setICMPFilter(c.Conn, f)
+}
+
+// SetBPF attaches a BPF program to the connection.
+//
+// Only supported on Linux.
+func (c *dgramOpt) SetBPF(filter []bpf.RawInstruction) error {
+ if !c.ok() {
+ return syscall.EINVAL
+ }
+ so, ok := sockOpts[ssoAttachFilter]
+ if !ok {
+ return errOpNoSupport
+ }
+ return so.setBPF(c.Conn, filter)
}
diff --git a/vendor/golang.org/x/net/ipv4/dgramopt_stub.go b/vendor/golang.org/x/net/ipv4/dgramopt_stub.go
deleted file mode 100644
index f6b867f..0000000
--- a/vendor/golang.org/x/net/ipv4/dgramopt_stub.go
+++ /dev/null
@@ -1,106 +0,0 @@
-// 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 nacl plan9
-
-package ipv4
-
-import "net"
-
-// MulticastTTL returns the time-to-live field value for outgoing
-// multicast packets.
-func (c *dgramOpt) MulticastTTL() (int, error) {
- return 0, errOpNoSupport
-}
-
-// SetMulticastTTL sets the time-to-live field value for future
-// outgoing multicast packets.
-func (c *dgramOpt) SetMulticastTTL(ttl int) error {
- return errOpNoSupport
-}
-
-// MulticastInterface returns the default interface for multicast
-// packet transmissions.
-func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
- return nil, errOpNoSupport
-}
-
-// SetMulticastInterface sets the default interface for future
-// multicast packet transmissions.
-func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
- return errOpNoSupport
-}
-
-// MulticastLoopback reports whether transmitted multicast packets
-// should be copied and send back to the originator.
-func (c *dgramOpt) MulticastLoopback() (bool, error) {
- return false, errOpNoSupport
-}
-
-// SetMulticastLoopback sets whether transmitted multicast packets
-// should be copied and send back to the originator.
-func (c *dgramOpt) SetMulticastLoopback(on bool) error {
- return errOpNoSupport
-}
-
-// JoinGroup joins the group address group on the interface ifi.
-// By default all sources that can cast data to group are accepted.
-// It's possible to mute and unmute data transmission from a specific
-// source by using ExcludeSourceSpecificGroup and
-// IncludeSourceSpecificGroup.
-// JoinGroup uses the system assigned multicast interface when ifi is
-// nil, although this is not recommended because the assignment
-// depends on platforms and sometimes it might require routing
-// configuration.
-func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error {
- return errOpNoSupport
-}
-
-// LeaveGroup leaves the group address group on the interface ifi
-// regardless of whether the group is any-source group or
-// source-specific group.
-func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
- return errOpNoSupport
-}
-
-// JoinSourceSpecificGroup joins the source-specific group comprising
-// group and source on the interface ifi.
-// JoinSourceSpecificGroup uses the system assigned multicast
-// interface when ifi is nil, although this is not recommended because
-// the assignment depends on platforms and sometimes it might require
-// routing configuration.
-func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
- return errOpNoSupport
-}
-
-// LeaveSourceSpecificGroup leaves the source-specific group on the
-// interface ifi.
-func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
- return errOpNoSupport
-}
-
-// ExcludeSourceSpecificGroup excludes the source-specific group from
-// the already joined any-source groups by JoinGroup on the interface
-// ifi.
-func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
- return errOpNoSupport
-}
-
-// IncludeSourceSpecificGroup includes the excluded source-specific
-// group by ExcludeSourceSpecificGroup again on the interface ifi.
-func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
- return errOpNoSupport
-}
-
-// ICMPFilter returns an ICMP filter.
-// Currently only Linux supports this.
-func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) {
- return nil, errOpNoSupport
-}
-
-// SetICMPFilter deploys the ICMP filter.
-// Currently only Linux supports this.
-func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error {
- return errOpNoSupport
-}
diff --git a/vendor/golang.org/x/net/ipv4/doc.go b/vendor/golang.org/x/net/ipv4/doc.go
index d893750..b43935a 100644
--- a/vendor/golang.org/x/net/ipv4/doc.go
+++ b/vendor/golang.org/x/net/ipv4/doc.go
@@ -21,10 +21,10 @@
//
// The options for unicasting are available for net.TCPConn,
// net.UDPConn and net.IPConn which are created as network connections
-// that use the IPv4 transport. When a single TCP connection carrying
+// that use the IPv4 transport. When a single TCP connection carrying
// a data flow of multiple packets needs to indicate the flow is
-// important, ipv4.Conn is used to set the type-of-service field on
-// the IPv4 header for each packet.
+// important, Conn is used to set the type-of-service field on the
+// IPv4 header for each packet.
//
// ln, err := net.Listen("tcp4", "0.0.0.0:1024")
// if err != nil {
@@ -56,7 +56,7 @@
//
// The options for multicasting are available for net.UDPConn and
// net.IPconn which are created as network connections that use the
-// IPv4 transport. A few network facilities must be prepared before
+// IPv4 transport. A few network facilities must be prepared before
// you begin multicasting, at a minimum joining network interfaces and
// multicast groups.
//
@@ -80,7 +80,7 @@
// defer c.Close()
//
// Second, the application joins multicast groups, starts listening to
-// the groups on the specified network interfaces. Note that the
+// the groups on the specified network interfaces. Note that the
// service port for transport layer protocol does not matter with this
// operation as joining groups affects only network and link layer
// protocols, such as IPv4 and Ethernet.
@@ -94,10 +94,10 @@
// }
//
// The application might set per packet control message transmissions
-// between the protocol stack within the kernel. When the application
+// between the protocol stack within the kernel. When the application
// needs a destination address on an incoming packet,
-// SetControlMessage of ipv4.PacketConn is used to enable control
-// message transmissions.
+// SetControlMessage of PacketConn is used to enable control message
+// transmissions.
//
// if err := p.SetControlMessage(ipv4.FlagDst, true); err != nil {
// // error handling
@@ -145,7 +145,7 @@
// More multicasting
//
// An application that uses PacketConn or RawConn may join multiple
-// multicast groups. For example, a UDP listener with port 1024 might
+// multicast groups. For example, a UDP listener with port 1024 might
// join two different groups across over two different network
// interfaces by using:
//
@@ -166,7 +166,7 @@
// }
//
// It is possible for multiple UDP listeners that listen on the same
-// UDP port to join the same multicast group. The net package will
+// UDP port to join the same multicast group. The net package will
// provide a socket that listens to a wildcard address with reusable
// UDP port when an appropriate multicast address prefix is passed to
// the net.ListenPacket or net.ListenUDP.
diff --git a/vendor/golang.org/x/net/ipv4/endpoint.go b/vendor/golang.org/x/net/ipv4/endpoint.go
index 01c4e39..2ab8773 100644
--- a/vendor/golang.org/x/net/ipv4/endpoint.go
+++ b/vendor/golang.org/x/net/ipv4/endpoint.go
@@ -9,7 +9,7 @@ import (
"syscall"
"time"
- "golang.org/x/net/internal/netreflect"
+ "golang.org/x/net/internal/socket"
)
// BUG(mikio): On Windows, the JoinSourceSpecificGroup,
@@ -25,21 +25,22 @@ type Conn struct {
}
type genericOpt struct {
- net.Conn
+ *socket.Conn
}
func (c *genericOpt) ok() bool { return c != nil && c.Conn != nil }
// NewConn returns a new Conn.
func NewConn(c net.Conn) *Conn {
+ cc, _ := socket.NewConn(c)
return &Conn{
- genericOpt: genericOpt{Conn: c},
+ genericOpt: genericOpt{Conn: cc},
}
}
// A PacketConn represents a packet network endpoint that uses the
-// IPv4 transport. It is used to control several IP-level socket
-// options including multicasting. It also provides datagram based
+// IPv4 transport. It is used to control several IP-level socket
+// options including multicasting. It also provides datagram based
// network I/O methods specific to the IPv4 and higher layer protocols
// such as UDP.
type PacketConn struct {
@@ -49,21 +50,17 @@ type PacketConn struct {
}
type dgramOpt struct {
- net.PacketConn
+ *socket.Conn
}
-func (c *dgramOpt) ok() bool { return c != nil && c.PacketConn != nil }
+func (c *dgramOpt) ok() bool { return c != nil && c.Conn != nil }
// SetControlMessage sets the per packet IP-level socket options.
func (c *PacketConn) SetControlMessage(cf ControlFlags, on bool) error {
if !c.payloadHandler.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.dgramOpt.PacketConn)
- if err != nil {
- return err
- }
- return setControlMessage(s, &c.payloadHandler.rawOpt, cf, on)
+ return setControlMessage(c.dgramOpt.Conn, &c.payloadHandler.rawOpt, cf, on)
}
// SetDeadline sets the read and write deadlines associated with the
@@ -104,22 +101,18 @@ func (c *PacketConn) Close() error {
// NewPacketConn returns a new PacketConn using c as its underlying
// transport.
func NewPacketConn(c net.PacketConn) *PacketConn {
+ cc, _ := socket.NewConn(c.(net.Conn))
p := &PacketConn{
- genericOpt: genericOpt{Conn: c.(net.Conn)},
- dgramOpt: dgramOpt{PacketConn: c},
- payloadHandler: payloadHandler{PacketConn: c},
- }
- if _, ok := c.(*net.IPConn); ok && sockOpts[ssoStripHeader].name > 0 {
- if s, err := netreflect.PacketSocketOf(c); err == nil {
- setInt(s, &sockOpts[ssoStripHeader], boolint(true))
- }
+ genericOpt: genericOpt{Conn: cc},
+ dgramOpt: dgramOpt{Conn: cc},
+ payloadHandler: payloadHandler{PacketConn: c, Conn: cc},
}
return p
}
// A RawConn represents a packet network endpoint that uses the IPv4
-// transport. It is used to control several IP-level socket options
-// including IPv4 header manipulation. It also provides datagram
+// transport. It is used to control several IP-level socket options
+// including IPv4 header manipulation. It also provides datagram
// based network I/O methods specific to the IPv4 and higher layer
// protocols that handle IPv4 datagram directly such as OSPF, GRE.
type RawConn struct {
@@ -133,11 +126,7 @@ func (c *RawConn) SetControlMessage(cf ControlFlags, on bool) error {
if !c.packetHandler.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.dgramOpt.PacketConn)
- if err != nil {
- return err
- }
- return setControlMessage(s, &c.packetHandler.rawOpt, cf, on)
+ return setControlMessage(c.dgramOpt.Conn, &c.packetHandler.rawOpt, cf, on)
}
// SetDeadline sets the read and write deadlines associated with the
@@ -146,7 +135,7 @@ func (c *RawConn) SetDeadline(t time.Time) error {
if !c.packetHandler.ok() {
return syscall.EINVAL
}
- return c.packetHandler.c.SetDeadline(t)
+ return c.packetHandler.IPConn.SetDeadline(t)
}
// SetReadDeadline sets the read deadline associated with the
@@ -155,7 +144,7 @@ func (c *RawConn) SetReadDeadline(t time.Time) error {
if !c.packetHandler.ok() {
return syscall.EINVAL
}
- return c.packetHandler.c.SetReadDeadline(t)
+ return c.packetHandler.IPConn.SetReadDeadline(t)
}
// SetWriteDeadline sets the write deadline associated with the
@@ -164,7 +153,7 @@ func (c *RawConn) SetWriteDeadline(t time.Time) error {
if !c.packetHandler.ok() {
return syscall.EINVAL
}
- return c.packetHandler.c.SetWriteDeadline(t)
+ return c.packetHandler.IPConn.SetWriteDeadline(t)
}
// Close closes the endpoint.
@@ -172,22 +161,26 @@ func (c *RawConn) Close() error {
if !c.packetHandler.ok() {
return syscall.EINVAL
}
- return c.packetHandler.c.Close()
+ return c.packetHandler.IPConn.Close()
}
// NewRawConn returns a new RawConn using c as its underlying
// transport.
func NewRawConn(c net.PacketConn) (*RawConn, error) {
- r := &RawConn{
- genericOpt: genericOpt{Conn: c.(net.Conn)},
- dgramOpt: dgramOpt{PacketConn: c},
- packetHandler: packetHandler{c: c.(*net.IPConn)},
- }
- s, err := netreflect.PacketSocketOf(c)
+ cc, err := socket.NewConn(c.(net.Conn))
if err != nil {
return nil, err
}
- if err := setInt(s, &sockOpts[ssoHeaderPrepend], boolint(true)); err != nil {
+ r := &RawConn{
+ genericOpt: genericOpt{Conn: cc},
+ dgramOpt: dgramOpt{Conn: cc},
+ packetHandler: packetHandler{IPConn: c.(*net.IPConn), Conn: cc},
+ }
+ so, ok := sockOpts[ssoHeaderPrepend]
+ if !ok {
+ return nil, errOpNoSupport
+ }
+ if err := so.SetInt(r.dgramOpt.Conn, boolint(true)); err != nil {
return nil, err
}
return r, nil
diff --git a/vendor/golang.org/x/net/ipv4/genericopt_posix.go b/vendor/golang.org/x/net/ipv4/genericopt.go
similarity index 59%
rename from vendor/golang.org/x/net/ipv4/genericopt_posix.go
rename to vendor/golang.org/x/net/ipv4/genericopt.go
index 58168b7..119bf84 100644
--- a/vendor/golang.org/x/net/ipv4/genericopt_posix.go
+++ b/vendor/golang.org/x/net/ipv4/genericopt.go
@@ -2,26 +2,20 @@
// 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 windows
-
package ipv4
-import (
- "syscall"
-
- "golang.org/x/net/internal/netreflect"
-)
+import "syscall"
// TOS returns the type-of-service field value for outgoing packets.
func (c *genericOpt) TOS() (int, error) {
if !c.ok() {
return 0, syscall.EINVAL
}
- s, err := netreflect.SocketOf(c.Conn)
- if err != nil {
- return 0, err
+ so, ok := sockOpts[ssoTOS]
+ if !ok {
+ return 0, errOpNoSupport
}
- return getInt(s, &sockOpts[ssoTOS])
+ return so.GetInt(c.Conn)
}
// SetTOS sets the type-of-service field value for future outgoing
@@ -30,11 +24,11 @@ func (c *genericOpt) SetTOS(tos int) error {
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.SocketOf(c.Conn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoTOS]
+ if !ok {
+ return errOpNoSupport
}
- return setInt(s, &sockOpts[ssoTOS], tos)
+ return so.SetInt(c.Conn, tos)
}
// TTL returns the time-to-live field value for outgoing packets.
@@ -42,11 +36,11 @@ func (c *genericOpt) TTL() (int, error) {
if !c.ok() {
return 0, syscall.EINVAL
}
- s, err := netreflect.SocketOf(c.Conn)
- if err != nil {
- return 0, err
+ so, ok := sockOpts[ssoTTL]
+ if !ok {
+ return 0, errOpNoSupport
}
- return getInt(s, &sockOpts[ssoTTL])
+ return so.GetInt(c.Conn)
}
// SetTTL sets the time-to-live field value for future outgoing
@@ -55,9 +49,9 @@ func (c *genericOpt) SetTTL(ttl int) error {
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.SocketOf(c.Conn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoTTL]
+ if !ok {
+ return errOpNoSupport
}
- return setInt(s, &sockOpts[ssoTTL], ttl)
+ return so.SetInt(c.Conn, ttl)
}
diff --git a/vendor/golang.org/x/net/ipv4/genericopt_stub.go b/vendor/golang.org/x/net/ipv4/genericopt_stub.go
deleted file mode 100644
index 661a4d1..0000000
--- a/vendor/golang.org/x/net/ipv4/genericopt_stub.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// 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 nacl plan9
-
-package ipv4
-
-// TOS returns the type-of-service field value for outgoing packets.
-func (c *genericOpt) TOS() (int, error) {
- return 0, errOpNoSupport
-}
-
-// SetTOS sets the type-of-service field value for future outgoing
-// packets.
-func (c *genericOpt) SetTOS(tos int) error {
- return errOpNoSupport
-}
-
-// TTL returns the time-to-live field value for outgoing packets.
-func (c *genericOpt) TTL() (int, error) {
- return 0, errOpNoSupport
-}
-
-// SetTTL sets the time-to-live field value for future outgoing
-// packets.
-func (c *genericOpt) SetTTL(ttl int) error {
- return errOpNoSupport
-}
diff --git a/vendor/golang.org/x/net/ipv4/header.go b/vendor/golang.org/x/net/ipv4/header.go
index 6dc26d4..8bb0f0f 100644
--- a/vendor/golang.org/x/net/ipv4/header.go
+++ b/vendor/golang.org/x/net/ipv4/header.go
@@ -10,6 +10,8 @@ import (
"net"
"runtime"
"syscall"
+
+ "golang.org/x/net/internal/socket"
)
const (
@@ -49,7 +51,7 @@ func (h *Header) String() string {
return fmt.Sprintf("ver=%d hdrlen=%d tos=%#x totallen=%d id=%#x flags=%#x fragoff=%#x ttl=%d proto=%d cksum=%#x src=%v dst=%v", h.Version, h.Len, h.TOS, h.TotalLen, h.ID, h.Flags, h.FragOff, h.TTL, h.Protocol, h.Checksum, h.Src, h.Dst)
}
-// Marshal returns the binary encoding of the IPv4 header h.
+// Marshal returns the binary encoding of h.
func (h *Header) Marshal() ([]byte, error) {
if h == nil {
return nil, syscall.EINVAL
@@ -64,12 +66,12 @@ func (h *Header) Marshal() ([]byte, error) {
flagsAndFragOff := (h.FragOff & 0x1fff) | int(h.Flags<<13)
switch runtime.GOOS {
case "darwin", "dragonfly", "netbsd":
- nativeEndian.PutUint16(b[2:4], uint16(h.TotalLen))
- nativeEndian.PutUint16(b[6:8], uint16(flagsAndFragOff))
+ socket.NativeEndian.PutUint16(b[2:4], uint16(h.TotalLen))
+ socket.NativeEndian.PutUint16(b[6:8], uint16(flagsAndFragOff))
case "freebsd":
if freebsdVersion < 1100000 {
- nativeEndian.PutUint16(b[2:4], uint16(h.TotalLen))
- nativeEndian.PutUint16(b[6:8], uint16(flagsAndFragOff))
+ socket.NativeEndian.PutUint16(b[2:4], uint16(h.TotalLen))
+ socket.NativeEndian.PutUint16(b[6:8], uint16(flagsAndFragOff))
} else {
binary.BigEndian.PutUint16(b[2:4], uint16(h.TotalLen))
binary.BigEndian.PutUint16(b[6:8], uint16(flagsAndFragOff))
@@ -96,37 +98,35 @@ func (h *Header) Marshal() ([]byte, error) {
return b, nil
}
-// ParseHeader parses b as an IPv4 header.
-func ParseHeader(b []byte) (*Header, error) {
- if len(b) < HeaderLen {
- return nil, errHeaderTooShort
+// Parse parses b as an IPv4 header and sotres the result in h.
+func (h *Header) Parse(b []byte) error {
+ if h == nil || len(b) < HeaderLen {
+ return errHeaderTooShort
}
hdrlen := int(b[0]&0x0f) << 2
if hdrlen > len(b) {
- return nil, errBufferTooShort
- }
- h := &Header{
- Version: int(b[0] >> 4),
- Len: hdrlen,
- TOS: int(b[1]),
- ID: int(binary.BigEndian.Uint16(b[4:6])),
- TTL: int(b[8]),
- Protocol: int(b[9]),
- Checksum: int(binary.BigEndian.Uint16(b[10:12])),
- Src: net.IPv4(b[12], b[13], b[14], b[15]),
- Dst: net.IPv4(b[16], b[17], b[18], b[19]),
+ return errBufferTooShort
}
+ h.Version = int(b[0] >> 4)
+ h.Len = hdrlen
+ h.TOS = int(b[1])
+ h.ID = int(binary.BigEndian.Uint16(b[4:6]))
+ h.TTL = int(b[8])
+ h.Protocol = int(b[9])
+ h.Checksum = int(binary.BigEndian.Uint16(b[10:12]))
+ h.Src = net.IPv4(b[12], b[13], b[14], b[15])
+ h.Dst = net.IPv4(b[16], b[17], b[18], b[19])
switch runtime.GOOS {
case "darwin", "dragonfly", "netbsd":
- h.TotalLen = int(nativeEndian.Uint16(b[2:4])) + hdrlen
- h.FragOff = int(nativeEndian.Uint16(b[6:8]))
+ h.TotalLen = int(socket.NativeEndian.Uint16(b[2:4])) + hdrlen
+ h.FragOff = int(socket.NativeEndian.Uint16(b[6:8]))
case "freebsd":
if freebsdVersion < 1100000 {
- h.TotalLen = int(nativeEndian.Uint16(b[2:4]))
+ h.TotalLen = int(socket.NativeEndian.Uint16(b[2:4]))
if freebsdVersion < 1000000 {
h.TotalLen += hdrlen
}
- h.FragOff = int(nativeEndian.Uint16(b[6:8]))
+ h.FragOff = int(socket.NativeEndian.Uint16(b[6:8]))
} else {
h.TotalLen = int(binary.BigEndian.Uint16(b[2:4]))
h.FragOff = int(binary.BigEndian.Uint16(b[6:8]))
@@ -137,9 +137,23 @@ func ParseHeader(b []byte) (*Header, error) {
}
h.Flags = HeaderFlags(h.FragOff&0xe000) >> 13
h.FragOff = h.FragOff & 0x1fff
- if hdrlen-HeaderLen > 0 {
- h.Options = make([]byte, hdrlen-HeaderLen)
- copy(h.Options, b[HeaderLen:])
+ optlen := hdrlen - HeaderLen
+ if optlen > 0 && len(b) >= hdrlen {
+ if cap(h.Options) < optlen {
+ h.Options = make([]byte, optlen)
+ } else {
+ h.Options = h.Options[:optlen]
+ }
+ copy(h.Options, b[HeaderLen:hdrlen])
+ }
+ return nil
+}
+
+// ParseHeader parses b as an IPv4 header.
+func ParseHeader(b []byte) (*Header, error) {
+ h := new(Header)
+ if err := h.Parse(b); err != nil {
+ return nil, err
}
return h, nil
}
diff --git a/vendor/golang.org/x/net/ipv4/header_test.go b/vendor/golang.org/x/net/ipv4/header_test.go
index cdf27fd..a246aee 100644
--- a/vendor/golang.org/x/net/ipv4/header_test.go
+++ b/vendor/golang.org/x/net/ipv4/header_test.go
@@ -12,141 +12,217 @@ import (
"runtime"
"strings"
"testing"
+
+ "golang.org/x/net/internal/socket"
)
type headerTest struct {
- wireHeaderFromKernel [HeaderLen]byte
- wireHeaderToKernel [HeaderLen]byte
- wireHeaderFromTradBSDKernel [HeaderLen]byte
- wireHeaderToTradBSDKernel [HeaderLen]byte
- wireHeaderFromFreeBSD10Kernel [HeaderLen]byte
- wireHeaderToFreeBSD10Kernel [HeaderLen]byte
+ wireHeaderFromKernel []byte
+ wireHeaderToKernel []byte
+ wireHeaderFromTradBSDKernel []byte
+ wireHeaderToTradBSDKernel []byte
+ wireHeaderFromFreeBSD10Kernel []byte
+ wireHeaderToFreeBSD10Kernel []byte
*Header
}
-var headerLittleEndianTest = headerTest{
+var headerLittleEndianTests = []headerTest{
// TODO(mikio): Add platform dependent wire header formats when
// we support new platforms.
- wireHeaderFromKernel: [HeaderLen]byte{
- 0x45, 0x01, 0xbe, 0xef,
- 0xca, 0xfe, 0x45, 0xdc,
- 0xff, 0x01, 0xde, 0xad,
- 172, 16, 254, 254,
- 192, 168, 0, 1,
+ {
+ wireHeaderFromKernel: []byte{
+ 0x45, 0x01, 0xbe, 0xef,
+ 0xca, 0xfe, 0x45, 0xdc,
+ 0xff, 0x01, 0xde, 0xad,
+ 172, 16, 254, 254,
+ 192, 168, 0, 1,
+ },
+ wireHeaderToKernel: []byte{
+ 0x45, 0x01, 0xbe, 0xef,
+ 0xca, 0xfe, 0x45, 0xdc,
+ 0xff, 0x01, 0xde, 0xad,
+ 172, 16, 254, 254,
+ 192, 168, 0, 1,
+ },
+ wireHeaderFromTradBSDKernel: []byte{
+ 0x45, 0x01, 0xdb, 0xbe,
+ 0xca, 0xfe, 0xdc, 0x45,
+ 0xff, 0x01, 0xde, 0xad,
+ 172, 16, 254, 254,
+ 192, 168, 0, 1,
+ },
+ wireHeaderToTradBSDKernel: []byte{
+ 0x45, 0x01, 0xef, 0xbe,
+ 0xca, 0xfe, 0xdc, 0x45,
+ 0xff, 0x01, 0xde, 0xad,
+ 172, 16, 254, 254,
+ 192, 168, 0, 1,
+ },
+ wireHeaderFromFreeBSD10Kernel: []byte{
+ 0x45, 0x01, 0xef, 0xbe,
+ 0xca, 0xfe, 0xdc, 0x45,
+ 0xff, 0x01, 0xde, 0xad,
+ 172, 16, 254, 254,
+ 192, 168, 0, 1,
+ },
+ wireHeaderToFreeBSD10Kernel: []byte{
+ 0x45, 0x01, 0xef, 0xbe,
+ 0xca, 0xfe, 0xdc, 0x45,
+ 0xff, 0x01, 0xde, 0xad,
+ 172, 16, 254, 254,
+ 192, 168, 0, 1,
+ },
+ Header: &Header{
+ Version: Version,
+ Len: HeaderLen,
+ TOS: 1,
+ TotalLen: 0xbeef,
+ ID: 0xcafe,
+ Flags: DontFragment,
+ FragOff: 1500,
+ TTL: 255,
+ Protocol: 1,
+ Checksum: 0xdead,
+ Src: net.IPv4(172, 16, 254, 254),
+ Dst: net.IPv4(192, 168, 0, 1),
+ },
},
- wireHeaderToKernel: [HeaderLen]byte{
- 0x45, 0x01, 0xbe, 0xef,
- 0xca, 0xfe, 0x45, 0xdc,
- 0xff, 0x01, 0xde, 0xad,
- 172, 16, 254, 254,
- 192, 168, 0, 1,
- },
- wireHeaderFromTradBSDKernel: [HeaderLen]byte{
- 0x45, 0x01, 0xdb, 0xbe,
- 0xca, 0xfe, 0xdc, 0x45,
- 0xff, 0x01, 0xde, 0xad,
- 172, 16, 254, 254,
- 192, 168, 0, 1,
- },
- wireHeaderToTradBSDKernel: [HeaderLen]byte{
- 0x45, 0x01, 0xef, 0xbe,
- 0xca, 0xfe, 0xdc, 0x45,
- 0xff, 0x01, 0xde, 0xad,
- 172, 16, 254, 254,
- 192, 168, 0, 1,
- },
- wireHeaderFromFreeBSD10Kernel: [HeaderLen]byte{
- 0x45, 0x01, 0xef, 0xbe,
- 0xca, 0xfe, 0xdc, 0x45,
- 0xff, 0x01, 0xde, 0xad,
- 172, 16, 254, 254,
- 192, 168, 0, 1,
- },
- wireHeaderToFreeBSD10Kernel: [HeaderLen]byte{
- 0x45, 0x01, 0xef, 0xbe,
- 0xca, 0xfe, 0xdc, 0x45,
- 0xff, 0x01, 0xde, 0xad,
- 172, 16, 254, 254,
- 192, 168, 0, 1,
- },
- Header: &Header{
- Version: Version,
- Len: HeaderLen,
- TOS: 1,
- TotalLen: 0xbeef,
- ID: 0xcafe,
- Flags: DontFragment,
- FragOff: 1500,
- TTL: 255,
- Protocol: 1,
- Checksum: 0xdead,
- Src: net.IPv4(172, 16, 254, 254),
- Dst: net.IPv4(192, 168, 0, 1),
+
+ // with option headers
+ {
+ wireHeaderFromKernel: []byte{
+ 0x46, 0x01, 0xbe, 0xf3,
+ 0xca, 0xfe, 0x45, 0xdc,
+ 0xff, 0x01, 0xde, 0xad,
+ 172, 16, 254, 254,
+ 192, 168, 0, 1,
+ 0xff, 0xfe, 0xfe, 0xff,
+ },
+ wireHeaderToKernel: []byte{
+ 0x46, 0x01, 0xbe, 0xf3,
+ 0xca, 0xfe, 0x45, 0xdc,
+ 0xff, 0x01, 0xde, 0xad,
+ 172, 16, 254, 254,
+ 192, 168, 0, 1,
+ 0xff, 0xfe, 0xfe, 0xff,
+ },
+ wireHeaderFromTradBSDKernel: []byte{
+ 0x46, 0x01, 0xdb, 0xbe,
+ 0xca, 0xfe, 0xdc, 0x45,
+ 0xff, 0x01, 0xde, 0xad,
+ 172, 16, 254, 254,
+ 192, 168, 0, 1,
+ 0xff, 0xfe, 0xfe, 0xff,
+ },
+ wireHeaderToTradBSDKernel: []byte{
+ 0x46, 0x01, 0xf3, 0xbe,
+ 0xca, 0xfe, 0xdc, 0x45,
+ 0xff, 0x01, 0xde, 0xad,
+ 172, 16, 254, 254,
+ 192, 168, 0, 1,
+ 0xff, 0xfe, 0xfe, 0xff,
+ },
+ wireHeaderFromFreeBSD10Kernel: []byte{
+ 0x46, 0x01, 0xf3, 0xbe,
+ 0xca, 0xfe, 0xdc, 0x45,
+ 0xff, 0x01, 0xde, 0xad,
+ 172, 16, 254, 254,
+ 192, 168, 0, 1,
+ 0xff, 0xfe, 0xfe, 0xff,
+ },
+ wireHeaderToFreeBSD10Kernel: []byte{
+ 0x46, 0x01, 0xf3, 0xbe,
+ 0xca, 0xfe, 0xdc, 0x45,
+ 0xff, 0x01, 0xde, 0xad,
+ 172, 16, 254, 254,
+ 192, 168, 0, 1,
+ 0xff, 0xfe, 0xfe, 0xff,
+ },
+ Header: &Header{
+ Version: Version,
+ Len: HeaderLen + 4,
+ TOS: 1,
+ TotalLen: 0xbef3,
+ ID: 0xcafe,
+ Flags: DontFragment,
+ FragOff: 1500,
+ TTL: 255,
+ Protocol: 1,
+ Checksum: 0xdead,
+ Src: net.IPv4(172, 16, 254, 254),
+ Dst: net.IPv4(192, 168, 0, 1),
+ Options: []byte{0xff, 0xfe, 0xfe, 0xff},
+ },
},
}
func TestMarshalHeader(t *testing.T) {
- tt := &headerLittleEndianTest
- if nativeEndian != binary.LittleEndian {
+ if socket.NativeEndian != binary.LittleEndian {
t.Skip("no test for non-little endian machine yet")
}
- b, err := tt.Header.Marshal()
- if err != nil {
- t.Fatal(err)
- }
- var wh []byte
- switch runtime.GOOS {
- case "darwin", "dragonfly", "netbsd":
- wh = tt.wireHeaderToTradBSDKernel[:]
- case "freebsd":
- switch {
- case freebsdVersion < 1000000:
- wh = tt.wireHeaderToTradBSDKernel[:]
- case 1000000 <= freebsdVersion && freebsdVersion < 1100000:
- wh = tt.wireHeaderToFreeBSD10Kernel[:]
- default:
- wh = tt.wireHeaderToKernel[:]
+ for _, tt := range headerLittleEndianTests {
+ b, err := tt.Header.Marshal()
+ if err != nil {
+ t.Fatal(err)
+ }
+ var wh []byte
+ switch runtime.GOOS {
+ case "darwin", "dragonfly", "netbsd":
+ wh = tt.wireHeaderToTradBSDKernel
+ case "freebsd":
+ switch {
+ case freebsdVersion < 1000000:
+ wh = tt.wireHeaderToTradBSDKernel
+ case 1000000 <= freebsdVersion && freebsdVersion < 1100000:
+ wh = tt.wireHeaderToFreeBSD10Kernel
+ default:
+ wh = tt.wireHeaderToKernel
+ }
+ default:
+ wh = tt.wireHeaderToKernel
+ }
+ if !bytes.Equal(b, wh) {
+ t.Fatalf("got %#v; want %#v", b, wh)
}
- default:
- wh = tt.wireHeaderToKernel[:]
- }
- if !bytes.Equal(b, wh) {
- t.Fatalf("got %#v; want %#v", b, wh)
}
}
func TestParseHeader(t *testing.T) {
- tt := &headerLittleEndianTest
- if nativeEndian != binary.LittleEndian {
+ if socket.NativeEndian != binary.LittleEndian {
t.Skip("no test for big endian machine yet")
}
- var wh []byte
- switch runtime.GOOS {
- case "darwin", "dragonfly", "netbsd":
- wh = tt.wireHeaderFromTradBSDKernel[:]
- case "freebsd":
- switch {
- case freebsdVersion < 1000000:
- wh = tt.wireHeaderFromTradBSDKernel[:]
- case 1000000 <= freebsdVersion && freebsdVersion < 1100000:
- wh = tt.wireHeaderFromFreeBSD10Kernel[:]
+ for _, tt := range headerLittleEndianTests {
+ var wh []byte
+ switch runtime.GOOS {
+ case "darwin", "dragonfly", "netbsd":
+ wh = tt.wireHeaderFromTradBSDKernel
+ case "freebsd":
+ switch {
+ case freebsdVersion < 1000000:
+ wh = tt.wireHeaderFromTradBSDKernel
+ case 1000000 <= freebsdVersion && freebsdVersion < 1100000:
+ wh = tt.wireHeaderFromFreeBSD10Kernel
+ default:
+ wh = tt.wireHeaderFromKernel
+ }
default:
- wh = tt.wireHeaderFromKernel[:]
+ wh = tt.wireHeaderFromKernel
+ }
+ h, err := ParseHeader(wh)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if err := h.Parse(wh); err != nil {
+ t.Fatal(err)
+ }
+ if !reflect.DeepEqual(h, tt.Header) {
+ t.Fatalf("got %#v; want %#v", h, tt.Header)
+ }
+ s := h.String()
+ if strings.Contains(s, ",") {
+ t.Fatalf("should be space-separated values: %s", s)
}
- default:
- wh = tt.wireHeaderFromKernel[:]
- }
- h, err := ParseHeader(wh)
- if err != nil {
- t.Fatal(err)
- }
- if !reflect.DeepEqual(h, tt.Header) {
- t.Fatalf("got %#v; want %#v", h, tt.Header)
- }
- s := h.String()
- if strings.Contains(s, ",") {
- t.Fatalf("should be space-separated values: %s", s)
}
}
diff --git a/vendor/golang.org/x/net/ipv4/helper.go b/vendor/golang.org/x/net/ipv4/helper.go
index 0838979..5f747a4 100644
--- a/vendor/golang.org/x/net/ipv4/helper.go
+++ b/vendor/golang.org/x/net/ipv4/helper.go
@@ -5,10 +5,8 @@
package ipv4
import (
- "encoding/binary"
"errors"
"net"
- "unsafe"
)
var (
@@ -23,20 +21,8 @@ var (
// See http://www.freebsd.org/doc/en/books/porters-handbook/freebsd-versions.html.
freebsdVersion uint32
-
- nativeEndian binary.ByteOrder
)
-func init() {
- i := uint32(1)
- b := (*[4]byte)(unsafe.Pointer(&i))
- if b[0] == 1 {
- nativeEndian = binary.LittleEndian
- } else {
- nativeEndian = binary.BigEndian
- }
-}
-
func boolint(b bool) int {
if b {
return 1
diff --git a/vendor/golang.org/x/net/ipv4/packet.go b/vendor/golang.org/x/net/ipv4/packet.go
index cb7ccf5..f00f5b0 100644
--- a/vendor/golang.org/x/net/ipv4/packet.go
+++ b/vendor/golang.org/x/net/ipv4/packet.go
@@ -7,6 +7,8 @@ package ipv4
import (
"net"
"syscall"
+
+ "golang.org/x/net/internal/socket"
)
// BUG(mikio): On Windows, the ReadFrom and WriteTo methods of RawConn
@@ -14,38 +16,21 @@ import (
// A packetHandler represents the IPv4 datagram handler.
type packetHandler struct {
- c *net.IPConn
+ *net.IPConn
+ *socket.Conn
rawOpt
}
-func (c *packetHandler) ok() bool { return c != nil && c.c != nil }
+func (c *packetHandler) ok() bool { return c != nil && c.IPConn != nil && c.Conn != nil }
// ReadFrom reads an IPv4 datagram from the endpoint c, copying the
-// datagram into b. It returns the received datagram as the IPv4
+// datagram into b. It returns the received datagram as the IPv4
// header h, the payload p and the control message cm.
func (c *packetHandler) ReadFrom(b []byte) (h *Header, p []byte, cm *ControlMessage, err error) {
if !c.ok() {
return nil, nil, nil, syscall.EINVAL
}
- oob := newControlMessage(&c.rawOpt)
- n, oobn, _, src, err := c.c.ReadMsgIP(b, oob)
- if err != nil {
- return nil, nil, nil, err
- }
- var hs []byte
- if hs, p, err = slicePacket(b[:n]); err != nil {
- return nil, nil, nil, err
- }
- if h, err = ParseHeader(hs); err != nil {
- return nil, nil, nil, err
- }
- if cm, err = parseControlMessage(oob[:oobn]); err != nil {
- return nil, nil, nil, err
- }
- if src != nil && cm != nil {
- cm.Src = src.IP
- }
- return
+ return c.readFrom(b)
}
func slicePacket(b []byte) (h, p []byte, err error) {
@@ -57,14 +42,14 @@ func slicePacket(b []byte) (h, p []byte, err error) {
}
// WriteTo writes an IPv4 datagram through the endpoint c, copying the
-// datagram from the IPv4 header h and the payload p. The control
+// datagram from the IPv4 header h and the payload p. The control
// message cm allows the datagram path and the outgoing interface to be
-// specified. Currently only Darwin and Linux support this. The cm
+// specified. Currently only Darwin and Linux support this. The cm
// may be nil if control of the outgoing datagram is not required.
//
// The IPv4 header h must contain appropriate fields that include:
//
-// Version = ipv4.Version
+// Version =
// Len =
// TOS =
// TotalLen =
@@ -80,21 +65,5 @@ func (c *packetHandler) WriteTo(h *Header, p []byte, cm *ControlMessage) error {
if !c.ok() {
return syscall.EINVAL
}
- oob := marshalControlMessage(cm)
- wh, err := h.Marshal()
- if err != nil {
- return err
- }
- dst := &net.IPAddr{}
- if cm != nil {
- if ip := cm.Dst.To4(); ip != nil {
- dst.IP = ip
- }
- }
- if dst.IP == nil {
- dst.IP = h.Dst
- }
- wh = append(wh, p...)
- _, _, err = c.c.WriteMsgIP(wh, oob, dst)
- return err
+ return c.writeTo(h, p, cm)
}
diff --git a/vendor/golang.org/x/net/ipv4/packet_go1_8.go b/vendor/golang.org/x/net/ipv4/packet_go1_8.go
new file mode 100644
index 0000000..b47d186
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv4/packet_go1_8.go
@@ -0,0 +1,56 @@
+// 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 !go1.9
+
+package ipv4
+
+import "net"
+
+func (c *packetHandler) readFrom(b []byte) (h *Header, p []byte, cm *ControlMessage, err error) {
+ c.rawOpt.RLock()
+ oob := NewControlMessage(c.rawOpt.cflags)
+ c.rawOpt.RUnlock()
+ n, nn, _, src, err := c.ReadMsgIP(b, oob)
+ if err != nil {
+ return nil, nil, nil, err
+ }
+ var hs []byte
+ if hs, p, err = slicePacket(b[:n]); err != nil {
+ return nil, nil, nil, err
+ }
+ if h, err = ParseHeader(hs); err != nil {
+ return nil, nil, nil, err
+ }
+ if nn > 0 {
+ cm = new(ControlMessage)
+ if err := cm.Parse(oob[:nn]); err != nil {
+ return nil, nil, nil, err
+ }
+ }
+ if src != nil && cm != nil {
+ cm.Src = src.IP
+ }
+ return
+}
+
+func (c *packetHandler) writeTo(h *Header, p []byte, cm *ControlMessage) error {
+ oob := cm.Marshal()
+ wh, err := h.Marshal()
+ if err != nil {
+ return err
+ }
+ dst := new(net.IPAddr)
+ if cm != nil {
+ if ip := cm.Dst.To4(); ip != nil {
+ dst.IP = ip
+ }
+ }
+ if dst.IP == nil {
+ dst.IP = h.Dst
+ }
+ wh = append(wh, p...)
+ _, _, err = c.WriteMsgIP(wh, oob, dst)
+ return err
+}
diff --git a/vendor/golang.org/x/net/ipv4/packet_go1_9.go b/vendor/golang.org/x/net/ipv4/packet_go1_9.go
new file mode 100644
index 0000000..285fdb0
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv4/packet_go1_9.go
@@ -0,0 +1,67 @@
+// 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 ipv4
+
+import (
+ "net"
+
+ "golang.org/x/net/internal/socket"
+)
+
+func (c *packetHandler) readFrom(b []byte) (h *Header, p []byte, cm *ControlMessage, err error) {
+ c.rawOpt.RLock()
+ m := socket.Message{
+ Buffers: [][]byte{b},
+ OOB: NewControlMessage(c.rawOpt.cflags),
+ }
+ c.rawOpt.RUnlock()
+ if err := c.RecvMsg(&m, 0); err != nil {
+ return nil, nil, nil, &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err}
+ }
+ var hs []byte
+ if hs, p, err = slicePacket(b[:m.N]); err != nil {
+ return nil, nil, nil, &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err}
+ }
+ if h, err = ParseHeader(hs); err != nil {
+ return nil, nil, nil, &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err}
+ }
+ if m.NN > 0 {
+ cm = new(ControlMessage)
+ if err := cm.Parse(m.OOB[:m.NN]); err != nil {
+ return nil, nil, nil, &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err}
+ }
+ }
+ if src, ok := m.Addr.(*net.IPAddr); ok && cm != nil {
+ cm.Src = src.IP
+ }
+ return
+}
+
+func (c *packetHandler) writeTo(h *Header, p []byte, cm *ControlMessage) error {
+ m := socket.Message{
+ OOB: cm.Marshal(),
+ }
+ wh, err := h.Marshal()
+ if err != nil {
+ return err
+ }
+ m.Buffers = [][]byte{wh, p}
+ dst := new(net.IPAddr)
+ if cm != nil {
+ if ip := cm.Dst.To4(); ip != nil {
+ dst.IP = ip
+ }
+ }
+ if dst.IP == nil {
+ dst.IP = h.Dst
+ }
+ m.Addr = dst
+ if err := c.SendMsg(&m, 0); err != nil {
+ return &net.OpError{Op: "write", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err}
+ }
+ return nil
+}
diff --git a/vendor/golang.org/x/net/ipv4/payload.go b/vendor/golang.org/x/net/ipv4/payload.go
index be130e4..f95f811 100644
--- a/vendor/golang.org/x/net/ipv4/payload.go
+++ b/vendor/golang.org/x/net/ipv4/payload.go
@@ -4,7 +4,11 @@
package ipv4
-import "net"
+import (
+ "net"
+
+ "golang.org/x/net/internal/socket"
+)
// BUG(mikio): On Windows, the ControlMessage for ReadFrom and WriteTo
// methods of PacketConn is not implemented.
@@ -12,7 +16,8 @@ import "net"
// A payloadHandler represents the IPv4 datagram payload handler.
type payloadHandler struct {
net.PacketConn
+ *socket.Conn
rawOpt
}
-func (c *payloadHandler) ok() bool { return c != nil && c.PacketConn != nil }
+func (c *payloadHandler) ok() bool { return c != nil && c.PacketConn != nil && c.Conn != nil }
diff --git a/vendor/golang.org/x/net/ipv4/payload_cmsg.go b/vendor/golang.org/x/net/ipv4/payload_cmsg.go
index 9bcde8f..3f06d76 100644
--- a/vendor/golang.org/x/net/ipv4/payload_cmsg.go
+++ b/vendor/golang.org/x/net/ipv4/payload_cmsg.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 !plan9,!windows
+// +build !nacl,!plan9,!windows
package ipv4
@@ -12,70 +12,25 @@ import (
)
// ReadFrom reads a payload of the received IPv4 datagram, from the
-// endpoint c, copying the payload into b. It returns the number of
+// endpoint c, copying the payload into b. It returns the number of
// bytes copied into b, the control message cm and the source address
// src of the received datagram.
func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) {
if !c.ok() {
return 0, nil, nil, syscall.EINVAL
}
- oob := newControlMessage(&c.rawOpt)
- var oobn int
- switch c := c.PacketConn.(type) {
- case *net.UDPConn:
- if n, oobn, _, src, err = c.ReadMsgUDP(b, oob); err != nil {
- return 0, nil, nil, err
- }
- case *net.IPConn:
- if sockOpts[ssoStripHeader].name > 0 {
- if n, oobn, _, src, err = c.ReadMsgIP(b, oob); err != nil {
- return 0, nil, nil, err
- }
- } else {
- nb := make([]byte, maxHeaderLen+len(b))
- if n, oobn, _, src, err = c.ReadMsgIP(nb, oob); err != nil {
- return 0, nil, nil, err
- }
- hdrlen := int(nb[0]&0x0f) << 2
- copy(b, nb[hdrlen:])
- n -= hdrlen
- }
- default:
- return 0, nil, nil, errInvalidConnType
- }
- if cm, err = parseControlMessage(oob[:oobn]); err != nil {
- return 0, nil, nil, err
- }
- if cm != nil {
- cm.Src = netAddrToIP4(src)
- }
- return
+ return c.readFrom(b)
}
// WriteTo writes a payload of the IPv4 datagram, to the destination
-// address dst through the endpoint c, copying the payload from b. It
-// returns the number of bytes written. The control message cm allows
+// address dst through the endpoint c, copying the payload from b. It
+// returns the number of bytes written. The control message cm allows
// the datagram path and the outgoing interface to be specified.
-// Currently only Darwin and Linux support this. The cm may be nil if
+// Currently only Darwin and Linux support this. The cm may be nil if
// control of the outgoing datagram is not required.
func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) {
if !c.ok() {
return 0, syscall.EINVAL
}
- oob := marshalControlMessage(cm)
- if dst == nil {
- return 0, errMissingAddress
- }
- switch c := c.PacketConn.(type) {
- case *net.UDPConn:
- n, _, err = c.WriteMsgUDP(b, oob, dst.(*net.UDPAddr))
- case *net.IPConn:
- n, _, err = c.WriteMsgIP(b, oob, dst.(*net.IPAddr))
- default:
- return 0, errInvalidConnType
- }
- if err != nil {
- return 0, err
- }
- return
+ return c.writeTo(b, cm, dst)
}
diff --git a/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_8.go b/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_8.go
new file mode 100644
index 0000000..0a9c33a
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_8.go
@@ -0,0 +1,59 @@
+// 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 !go1.9
+// +build !nacl,!plan9,!windows
+
+package ipv4
+
+import "net"
+
+func (c *payloadHandler) readFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) {
+ c.rawOpt.RLock()
+ oob := NewControlMessage(c.rawOpt.cflags)
+ c.rawOpt.RUnlock()
+ var nn int
+ switch c := c.PacketConn.(type) {
+ case *net.UDPConn:
+ if n, nn, _, src, err = c.ReadMsgUDP(b, oob); err != nil {
+ return 0, nil, nil, err
+ }
+ case *net.IPConn:
+ nb := make([]byte, maxHeaderLen+len(b))
+ if n, nn, _, src, err = c.ReadMsgIP(nb, oob); err != nil {
+ return 0, nil, nil, err
+ }
+ hdrlen := int(nb[0]&0x0f) << 2
+ copy(b, nb[hdrlen:])
+ n -= hdrlen
+ default:
+ return 0, nil, nil, &net.OpError{Op: "read", Net: c.LocalAddr().Network(), Source: c.LocalAddr(), Err: errInvalidConnType}
+ }
+ if nn > 0 {
+ cm = new(ControlMessage)
+ if err = cm.Parse(oob[:nn]); err != nil {
+ return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ }
+ }
+ if cm != nil {
+ cm.Src = netAddrToIP4(src)
+ }
+ return
+}
+
+func (c *payloadHandler) writeTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) {
+ oob := cm.Marshal()
+ if dst == nil {
+ return 0, &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: errMissingAddress}
+ }
+ switch c := c.PacketConn.(type) {
+ case *net.UDPConn:
+ n, _, err = c.WriteMsgUDP(b, oob, dst.(*net.UDPAddr))
+ case *net.IPConn:
+ n, _, err = c.WriteMsgIP(b, oob, dst.(*net.IPAddr))
+ default:
+ return 0, &net.OpError{Op: "write", Net: c.LocalAddr().Network(), Source: c.LocalAddr(), Err: errInvalidConnType}
+ }
+ return
+}
diff --git a/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_9.go b/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_9.go
new file mode 100644
index 0000000..e697f35
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_9.go
@@ -0,0 +1,67 @@
+// 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
+// +build !nacl,!plan9,!windows
+
+package ipv4
+
+import (
+ "net"
+
+ "golang.org/x/net/internal/socket"
+)
+
+func (c *payloadHandler) readFrom(b []byte) (int, *ControlMessage, net.Addr, error) {
+ c.rawOpt.RLock()
+ m := socket.Message{
+ OOB: NewControlMessage(c.rawOpt.cflags),
+ }
+ c.rawOpt.RUnlock()
+ switch c.PacketConn.(type) {
+ case *net.UDPConn:
+ m.Buffers = [][]byte{b}
+ if err := c.RecvMsg(&m, 0); err != nil {
+ return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ }
+ case *net.IPConn:
+ h := make([]byte, HeaderLen)
+ m.Buffers = [][]byte{h, b}
+ if err := c.RecvMsg(&m, 0); err != nil {
+ return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ }
+ hdrlen := int(h[0]&0x0f) << 2
+ if hdrlen > len(h) {
+ d := hdrlen - len(h)
+ copy(b, b[d:])
+ m.N -= d
+ } else {
+ m.N -= hdrlen
+ }
+ default:
+ return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: errInvalidConnType}
+ }
+ var cm *ControlMessage
+ if m.NN > 0 {
+ cm = new(ControlMessage)
+ if err := cm.Parse(m.OOB[:m.NN]); err != nil {
+ return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ }
+ cm.Src = netAddrToIP4(m.Addr)
+ }
+ return m.N, cm, m.Addr, nil
+}
+
+func (c *payloadHandler) writeTo(b []byte, cm *ControlMessage, dst net.Addr) (int, error) {
+ m := socket.Message{
+ Buffers: [][]byte{b},
+ OOB: cm.Marshal(),
+ Addr: dst,
+ }
+ err := c.SendMsg(&m, 0)
+ if err != nil {
+ err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ }
+ return m.N, err
+}
diff --git a/vendor/golang.org/x/net/ipv4/payload_nocmsg.go b/vendor/golang.org/x/net/ipv4/payload_nocmsg.go
index 6f1b402..3926de7 100644
--- a/vendor/golang.org/x/net/ipv4/payload_nocmsg.go
+++ b/vendor/golang.org/x/net/ipv4/payload_nocmsg.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 plan9 windows
+// +build nacl plan9 windows
package ipv4
@@ -12,7 +12,7 @@ import (
)
// ReadFrom reads a payload of the received IPv4 datagram, from the
-// endpoint c, copying the payload into b. It returns the number of
+// endpoint c, copying the payload into b. It returns the number of
// bytes copied into b, the control message cm and the source address
// src of the received datagram.
func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) {
@@ -26,10 +26,10 @@ func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.
}
// WriteTo writes a payload of the IPv4 datagram, to the destination
-// address dst through the endpoint c, copying the payload from b. It
-// returns the number of bytes written. The control message cm allows
+// address dst through the endpoint c, copying the payload from b. It
+// returns the number of bytes written. The control message cm allows
// the datagram path and the outgoing interface to be specified.
-// Currently only Darwin and Linux support this. The cm may be nil if
+// Currently only Darwin and Linux support this. The cm may be nil if
// control of the outgoing datagram is not required.
func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) {
if !c.ok() {
diff --git a/vendor/golang.org/x/net/ipv4/readwrite_go1_8_test.go b/vendor/golang.org/x/net/ipv4/readwrite_go1_8_test.go
new file mode 100644
index 0000000..1cd926e
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv4/readwrite_go1_8_test.go
@@ -0,0 +1,248 @@
+// 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 !go1.9
+
+package ipv4_test
+
+import (
+ "bytes"
+ "fmt"
+ "net"
+ "runtime"
+ "strings"
+ "sync"
+ "testing"
+
+ "golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/nettest"
+ "golang.org/x/net/ipv4"
+)
+
+func BenchmarkPacketConnReadWriteUnicast(b *testing.B) {
+ switch runtime.GOOS {
+ case "nacl", "plan9", "windows":
+ b.Skipf("not supported on %s", runtime.GOOS)
+ }
+
+ payload := []byte("HELLO-R-U-THERE")
+ iph, err := (&ipv4.Header{
+ Version: ipv4.Version,
+ Len: ipv4.HeaderLen,
+ TotalLen: ipv4.HeaderLen + len(payload),
+ TTL: 1,
+ Protocol: iana.ProtocolReserved,
+ Src: net.IPv4(192, 0, 2, 1),
+ Dst: net.IPv4(192, 0, 2, 254),
+ }).Marshal()
+ if err != nil {
+ b.Fatal(err)
+ }
+ greh := []byte{0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}
+ datagram := append(greh, append(iph, payload...)...)
+ bb := make([]byte, 128)
+ cm := ipv4.ControlMessage{
+ Src: net.IPv4(127, 0, 0, 1),
+ }
+ if ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback); ifi != nil {
+ cm.IfIndex = ifi.Index
+ }
+
+ b.Run("UDP", func(b *testing.B) {
+ c, err := nettest.NewLocalPacketListener("udp4")
+ if err != nil {
+ b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+ p := ipv4.NewPacketConn(c)
+ dst := c.LocalAddr()
+ cf := ipv4.FlagTTL | ipv4.FlagInterface
+ if err := p.SetControlMessage(cf, true); err != nil {
+ b.Fatal(err)
+ }
+ b.Run("Net", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := c.WriteTo(payload, dst); err != nil {
+ b.Fatal(err)
+ }
+ if _, _, err := c.ReadFrom(bb); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ b.Run("ToFrom", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := p.WriteTo(payload, &cm, dst); err != nil {
+ b.Fatal(err)
+ }
+ if _, _, _, err := p.ReadFrom(bb); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ })
+ b.Run("IP", func(b *testing.B) {
+ switch runtime.GOOS {
+ case "netbsd":
+ b.Skip("need to configure gre on netbsd")
+ case "openbsd":
+ b.Skip("net.inet.gre.allow=0 by default on openbsd")
+ }
+
+ c, err := net.ListenPacket(fmt.Sprintf("ip4:%d", iana.ProtocolGRE), "127.0.0.1")
+ if err != nil {
+ b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+ p := ipv4.NewPacketConn(c)
+ dst := c.LocalAddr()
+ cf := ipv4.FlagTTL | ipv4.FlagInterface
+ if err := p.SetControlMessage(cf, true); err != nil {
+ b.Fatal(err)
+ }
+ b.Run("Net", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := c.WriteTo(datagram, dst); err != nil {
+ b.Fatal(err)
+ }
+ if _, _, err := c.ReadFrom(bb); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ b.Run("ToFrom", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := p.WriteTo(datagram, &cm, dst); err != nil {
+ b.Fatal(err)
+ }
+ if _, _, _, err := p.ReadFrom(bb); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ })
+}
+
+func TestPacketConnConcurrentReadWriteUnicast(t *testing.T) {
+ switch runtime.GOOS {
+ case "nacl", "plan9", "windows":
+ t.Skipf("not supported on %s", runtime.GOOS)
+ }
+
+ payload := []byte("HELLO-R-U-THERE")
+ iph, err := (&ipv4.Header{
+ Version: ipv4.Version,
+ Len: ipv4.HeaderLen,
+ TotalLen: ipv4.HeaderLen + len(payload),
+ TTL: 1,
+ Protocol: iana.ProtocolReserved,
+ Src: net.IPv4(192, 0, 2, 1),
+ Dst: net.IPv4(192, 0, 2, 254),
+ }).Marshal()
+ if err != nil {
+ t.Fatal(err)
+ }
+ greh := []byte{0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}
+ datagram := append(greh, append(iph, payload...)...)
+
+ t.Run("UDP", func(t *testing.T) {
+ c, err := nettest.NewLocalPacketListener("udp4")
+ if err != nil {
+ t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+ p := ipv4.NewPacketConn(c)
+ t.Run("ToFrom", func(t *testing.T) {
+ testPacketConnConcurrentReadWriteUnicast(t, p, payload, c.LocalAddr())
+ })
+ })
+ t.Run("IP", func(t *testing.T) {
+ switch runtime.GOOS {
+ case "netbsd":
+ t.Skip("need to configure gre on netbsd")
+ case "openbsd":
+ t.Skip("net.inet.gre.allow=0 by default on openbsd")
+ }
+
+ c, err := net.ListenPacket(fmt.Sprintf("ip4:%d", iana.ProtocolGRE), "127.0.0.1")
+ if err != nil {
+ t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+ p := ipv4.NewPacketConn(c)
+ t.Run("ToFrom", func(t *testing.T) {
+ testPacketConnConcurrentReadWriteUnicast(t, p, datagram, c.LocalAddr())
+ })
+ })
+}
+
+func testPacketConnConcurrentReadWriteUnicast(t *testing.T, p *ipv4.PacketConn, data []byte, dst net.Addr) {
+ ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
+ cf := ipv4.FlagTTL | ipv4.FlagSrc | ipv4.FlagDst | ipv4.FlagInterface
+
+ if err := p.SetControlMessage(cf, true); err != nil { // probe before test
+ if nettest.ProtocolNotSupported(err) {
+ t.Skipf("not supported on %s", runtime.GOOS)
+ }
+ t.Fatal(err)
+ }
+
+ var wg sync.WaitGroup
+ reader := func() {
+ defer wg.Done()
+ b := make([]byte, 128)
+ n, cm, _, err := p.ReadFrom(b)
+ if err != nil {
+ t.Error(err)
+ return
+ }
+ if !bytes.Equal(b[:n], data) {
+ t.Errorf("got %#v; want %#v", b[:n], data)
+ return
+ }
+ s := cm.String()
+ if strings.Contains(s, ",") {
+ t.Errorf("should be space-separated values: %s", s)
+ return
+ }
+ }
+ writer := func(toggle bool) {
+ defer wg.Done()
+ cm := ipv4.ControlMessage{
+ Src: net.IPv4(127, 0, 0, 1),
+ }
+ if ifi != nil {
+ cm.IfIndex = ifi.Index
+ }
+ if err := p.SetControlMessage(cf, toggle); err != nil {
+ t.Error(err)
+ return
+ }
+ n, err := p.WriteTo(data, &cm, dst)
+ if err != nil {
+ t.Error(err)
+ return
+ }
+ if n != len(data) {
+ t.Errorf("got %d; want %d", n, len(data))
+ return
+ }
+ }
+
+ const N = 10
+ wg.Add(N)
+ for i := 0; i < N; i++ {
+ go reader()
+ }
+ wg.Add(2 * N)
+ for i := 0; i < 2*N; i++ {
+ go writer(i%2 != 0)
+
+ }
+ wg.Add(N)
+ for i := 0; i < N; i++ {
+ go reader()
+ }
+ wg.Wait()
+}
diff --git a/vendor/golang.org/x/net/ipv4/readwrite_go1_9_test.go b/vendor/golang.org/x/net/ipv4/readwrite_go1_9_test.go
new file mode 100644
index 0000000..365de02
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv4/readwrite_go1_9_test.go
@@ -0,0 +1,388 @@
+// 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 ipv4_test
+
+import (
+ "bytes"
+ "fmt"
+ "net"
+ "runtime"
+ "strings"
+ "sync"
+ "testing"
+
+ "golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/nettest"
+ "golang.org/x/net/ipv4"
+)
+
+func BenchmarkPacketConnReadWriteUnicast(b *testing.B) {
+ switch runtime.GOOS {
+ case "nacl", "plan9", "windows":
+ b.Skipf("not supported on %s", runtime.GOOS)
+ }
+
+ payload := []byte("HELLO-R-U-THERE")
+ iph, err := (&ipv4.Header{
+ Version: ipv4.Version,
+ Len: ipv4.HeaderLen,
+ TotalLen: ipv4.HeaderLen + len(payload),
+ TTL: 1,
+ Protocol: iana.ProtocolReserved,
+ Src: net.IPv4(192, 0, 2, 1),
+ Dst: net.IPv4(192, 0, 2, 254),
+ }).Marshal()
+ if err != nil {
+ b.Fatal(err)
+ }
+ greh := []byte{0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}
+ datagram := append(greh, append(iph, payload...)...)
+ bb := make([]byte, 128)
+ cm := ipv4.ControlMessage{
+ Src: net.IPv4(127, 0, 0, 1),
+ }
+ if ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback); ifi != nil {
+ cm.IfIndex = ifi.Index
+ }
+
+ b.Run("UDP", func(b *testing.B) {
+ c, err := nettest.NewLocalPacketListener("udp4")
+ if err != nil {
+ b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+ p := ipv4.NewPacketConn(c)
+ dst := c.LocalAddr()
+ cf := ipv4.FlagTTL | ipv4.FlagInterface
+ if err := p.SetControlMessage(cf, true); err != nil {
+ b.Fatal(err)
+ }
+ wms := []ipv4.Message{
+ {
+ Buffers: [][]byte{payload},
+ Addr: dst,
+ OOB: cm.Marshal(),
+ },
+ }
+ rms := []ipv4.Message{
+ {
+ Buffers: [][]byte{bb},
+ OOB: ipv4.NewControlMessage(cf),
+ },
+ }
+ b.Run("Net", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := c.WriteTo(payload, dst); err != nil {
+ b.Fatal(err)
+ }
+ if _, _, err := c.ReadFrom(bb); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ b.Run("ToFrom", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := p.WriteTo(payload, &cm, dst); err != nil {
+ b.Fatal(err)
+ }
+ if _, _, _, err := p.ReadFrom(bb); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ b.Run("Batch", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := p.WriteBatch(wms, 0); err != nil {
+ b.Fatal(err)
+ }
+ if _, err := p.ReadBatch(rms, 0); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ })
+ b.Run("IP", func(b *testing.B) {
+ switch runtime.GOOS {
+ case "netbsd":
+ b.Skip("need to configure gre on netbsd")
+ case "openbsd":
+ b.Skip("net.inet.gre.allow=0 by default on openbsd")
+ }
+
+ c, err := net.ListenPacket(fmt.Sprintf("ip4:%d", iana.ProtocolGRE), "127.0.0.1")
+ if err != nil {
+ b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+ p := ipv4.NewPacketConn(c)
+ dst := c.LocalAddr()
+ cf := ipv4.FlagTTL | ipv4.FlagInterface
+ if err := p.SetControlMessage(cf, true); err != nil {
+ b.Fatal(err)
+ }
+ wms := []ipv4.Message{
+ {
+ Buffers: [][]byte{datagram},
+ Addr: dst,
+ OOB: cm.Marshal(),
+ },
+ }
+ rms := []ipv4.Message{
+ {
+ Buffers: [][]byte{bb},
+ OOB: ipv4.NewControlMessage(cf),
+ },
+ }
+ b.Run("Net", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := c.WriteTo(datagram, dst); err != nil {
+ b.Fatal(err)
+ }
+ if _, _, err := c.ReadFrom(bb); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ b.Run("ToFrom", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := p.WriteTo(datagram, &cm, dst); err != nil {
+ b.Fatal(err)
+ }
+ if _, _, _, err := p.ReadFrom(bb); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ b.Run("Batch", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := p.WriteBatch(wms, 0); err != nil {
+ b.Fatal(err)
+ }
+ if _, err := p.ReadBatch(rms, 0); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ })
+}
+
+func TestPacketConnConcurrentReadWriteUnicast(t *testing.T) {
+ switch runtime.GOOS {
+ case "nacl", "plan9", "windows":
+ t.Skipf("not supported on %s", runtime.GOOS)
+ }
+
+ payload := []byte("HELLO-R-U-THERE")
+ iph, err := (&ipv4.Header{
+ Version: ipv4.Version,
+ Len: ipv4.HeaderLen,
+ TotalLen: ipv4.HeaderLen + len(payload),
+ TTL: 1,
+ Protocol: iana.ProtocolReserved,
+ Src: net.IPv4(192, 0, 2, 1),
+ Dst: net.IPv4(192, 0, 2, 254),
+ }).Marshal()
+ if err != nil {
+ t.Fatal(err)
+ }
+ greh := []byte{0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}
+ datagram := append(greh, append(iph, payload...)...)
+
+ t.Run("UDP", func(t *testing.T) {
+ c, err := nettest.NewLocalPacketListener("udp4")
+ if err != nil {
+ t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+ p := ipv4.NewPacketConn(c)
+ t.Run("ToFrom", func(t *testing.T) {
+ testPacketConnConcurrentReadWriteUnicast(t, p, payload, c.LocalAddr(), false)
+ })
+ t.Run("Batch", func(t *testing.T) {
+ testPacketConnConcurrentReadWriteUnicast(t, p, payload, c.LocalAddr(), true)
+ })
+ })
+ t.Run("IP", func(t *testing.T) {
+ switch runtime.GOOS {
+ case "netbsd":
+ t.Skip("need to configure gre on netbsd")
+ case "openbsd":
+ t.Skip("net.inet.gre.allow=0 by default on openbsd")
+ }
+
+ c, err := net.ListenPacket(fmt.Sprintf("ip4:%d", iana.ProtocolGRE), "127.0.0.1")
+ if err != nil {
+ t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+ p := ipv4.NewPacketConn(c)
+ t.Run("ToFrom", func(t *testing.T) {
+ testPacketConnConcurrentReadWriteUnicast(t, p, datagram, c.LocalAddr(), false)
+ })
+ t.Run("Batch", func(t *testing.T) {
+ testPacketConnConcurrentReadWriteUnicast(t, p, datagram, c.LocalAddr(), true)
+ })
+ })
+}
+
+func testPacketConnConcurrentReadWriteUnicast(t *testing.T, p *ipv4.PacketConn, data []byte, dst net.Addr, batch bool) {
+ ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
+ cf := ipv4.FlagTTL | ipv4.FlagSrc | ipv4.FlagDst | ipv4.FlagInterface
+
+ if err := p.SetControlMessage(cf, true); err != nil { // probe before test
+ if nettest.ProtocolNotSupported(err) {
+ t.Skipf("not supported on %s", runtime.GOOS)
+ }
+ t.Fatal(err)
+ }
+
+ var wg sync.WaitGroup
+ reader := func() {
+ defer wg.Done()
+ b := make([]byte, 128)
+ n, cm, _, err := p.ReadFrom(b)
+ if err != nil {
+ t.Error(err)
+ return
+ }
+ if !bytes.Equal(b[:n], data) {
+ t.Errorf("got %#v; want %#v", b[:n], data)
+ return
+ }
+ s := cm.String()
+ if strings.Contains(s, ",") {
+ t.Errorf("should be space-separated values: %s", s)
+ return
+ }
+ }
+ batchReader := func() {
+ defer wg.Done()
+ ms := []ipv4.Message{
+ {
+ Buffers: [][]byte{make([]byte, 128)},
+ OOB: ipv4.NewControlMessage(cf),
+ },
+ }
+ n, err := p.ReadBatch(ms, 0)
+ if err != nil {
+ t.Error(err)
+ return
+ }
+ if n != len(ms) {
+ t.Errorf("got %d; want %d", n, len(ms))
+ return
+ }
+ var cm ipv4.ControlMessage
+ if err := cm.Parse(ms[0].OOB[:ms[0].NN]); err != nil {
+ t.Error(err)
+ return
+ }
+ var b []byte
+ if _, ok := dst.(*net.IPAddr); ok {
+ var h ipv4.Header
+ if err := h.Parse(ms[0].Buffers[0][:ms[0].N]); err != nil {
+ t.Error(err)
+ return
+ }
+ b = ms[0].Buffers[0][h.Len:ms[0].N]
+ } else {
+ b = ms[0].Buffers[0][:ms[0].N]
+ }
+ if !bytes.Equal(b, data) {
+ t.Errorf("got %#v; want %#v", b, data)
+ return
+ }
+ s := cm.String()
+ if strings.Contains(s, ",") {
+ t.Errorf("should be space-separated values: %s", s)
+ return
+ }
+ }
+ writer := func(toggle bool) {
+ defer wg.Done()
+ cm := ipv4.ControlMessage{
+ Src: net.IPv4(127, 0, 0, 1),
+ }
+ if ifi != nil {
+ cm.IfIndex = ifi.Index
+ }
+ if err := p.SetControlMessage(cf, toggle); err != nil {
+ t.Error(err)
+ return
+ }
+ n, err := p.WriteTo(data, &cm, dst)
+ if err != nil {
+ t.Error(err)
+ return
+ }
+ if n != len(data) {
+ t.Errorf("got %d; want %d", n, len(data))
+ return
+ }
+ }
+ batchWriter := func(toggle bool) {
+ defer wg.Done()
+ cm := ipv4.ControlMessage{
+ Src: net.IPv4(127, 0, 0, 1),
+ }
+ if ifi != nil {
+ cm.IfIndex = ifi.Index
+ }
+ if err := p.SetControlMessage(cf, toggle); err != nil {
+ t.Error(err)
+ return
+ }
+ ms := []ipv4.Message{
+ {
+ Buffers: [][]byte{data},
+ OOB: cm.Marshal(),
+ Addr: dst,
+ },
+ }
+ n, err := p.WriteBatch(ms, 0)
+ if err != nil {
+ t.Error(err)
+ return
+ }
+ if n != len(ms) {
+ t.Errorf("got %d; want %d", n, len(ms))
+ return
+ }
+ if ms[0].N != len(data) {
+ t.Errorf("got %d; want %d", ms[0].N, len(data))
+ return
+ }
+ }
+
+ const N = 10
+ wg.Add(N)
+ for i := 0; i < N; i++ {
+ if batch {
+ go batchReader()
+ } else {
+ go reader()
+ }
+ }
+ wg.Add(2 * N)
+ for i := 0; i < 2*N; i++ {
+ if batch {
+ go batchWriter(i%2 != 0)
+ } else {
+ go writer(i%2 != 0)
+ }
+
+ }
+ wg.Add(N)
+ for i := 0; i < N; i++ {
+ if batch {
+ go batchReader()
+ } else {
+ go reader()
+ }
+ }
+ wg.Wait()
+}
diff --git a/vendor/golang.org/x/net/ipv4/sockopt.go b/vendor/golang.org/x/net/ipv4/sockopt.go
index ace37d3..22e90c0 100644
--- a/vendor/golang.org/x/net/ipv4/sockopt.go
+++ b/vendor/golang.org/x/net/ipv4/sockopt.go
@@ -4,6 +4,8 @@
package ipv4
+import "golang.org/x/net/internal/socket"
+
// Sticky socket options
const (
ssoTOS = iota // header field for unicast packet
@@ -24,16 +26,12 @@ const (
ssoLeaveSourceGroup // source-specific multicast
ssoBlockSourceGroup // any-source or source-specific multicast
ssoUnblockSourceGroup // any-source or source-specific multicast
- ssoMax
+ ssoAttachFilter // attach BPF for filtering inbound traffic
)
// Sticky socket option value types
const (
- ssoTypeByte = iota + 1
- ssoTypeInt
- ssoTypeInterface
- ssoTypeICMPFilter
- ssoTypeIPMreq
+ ssoTypeIPMreq = iota + 1
ssoTypeIPMreqn
ssoTypeGroupReq
ssoTypeGroupSourceReq
@@ -41,6 +39,6 @@ const (
// A sockOpt represents a binding for sticky socket option.
type sockOpt struct {
- name int // option name, must be equal or greater than 1
- typ int // option value type, must be equal or greater than 1
+ socket.Option
+ typ int // hint for option value type; optional
}
diff --git a/vendor/golang.org/x/net/ipv4/sockopt_asmreq_posix.go b/vendor/golang.org/x/net/ipv4/sockopt_asmreq_posix.go
deleted file mode 100644
index 2259a39..0000000
--- a/vendor/golang.org/x/net/ipv4/sockopt_asmreq_posix.go
+++ /dev/null
@@ -1,46 +0,0 @@
-// 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 darwin dragonfly freebsd netbsd openbsd solaris windows
-
-package ipv4
-
-import (
- "net"
- "os"
- "unsafe"
-
- "golang.org/x/net/internal/iana"
-)
-
-func setsockoptIPMreq(s uintptr, name int, ifi *net.Interface, grp net.IP) error {
- mreq := ipMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3]}}
- if err := setIPMreqInterface(&mreq, ifi); err != nil {
- return err
- }
- return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolIP, name, unsafe.Pointer(&mreq), sizeofIPMreq))
-}
-
-func getsockoptInterface(s uintptr, name int) (*net.Interface, error) {
- var b [4]byte
- l := uint32(4)
- if err := getsockopt(s, iana.ProtocolIP, name, unsafe.Pointer(&b[0]), &l); err != nil {
- return nil, os.NewSyscallError("getsockopt", err)
- }
- ifi, err := netIP4ToInterface(net.IPv4(b[0], b[1], b[2], b[3]))
- if err != nil {
- return nil, err
- }
- return ifi, nil
-}
-
-func setsockoptInterface(s uintptr, name int, ifi *net.Interface) error {
- ip, err := netInterfaceToIP4(ifi)
- if err != nil {
- return err
- }
- var b [4]byte
- copy(b[:], ip)
- return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolIP, name, unsafe.Pointer(&b[0]), uint32(4)))
-}
diff --git a/vendor/golang.org/x/net/ipv4/sockopt_asmreq_stub.go b/vendor/golang.org/x/net/ipv4/sockopt_asmreq_stub.go
deleted file mode 100644
index e655635..0000000
--- a/vendor/golang.org/x/net/ipv4/sockopt_asmreq_stub.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// 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 !darwin,!dragonfly,!freebsd,!netbsd,!openbsd,!solaris,!windows
-
-package ipv4
-
-import "net"
-
-func setsockoptIPMreq(s uintptr, name int, ifi *net.Interface, grp net.IP) error {
- return errOpNoSupport
-}
-
-func getsockoptInterface(s uintptr, name int) (*net.Interface, error) {
- return nil, errOpNoSupport
-}
-
-func setsockoptInterface(s uintptr, name int, ifi *net.Interface) error {
- return errOpNoSupport
-}
diff --git a/vendor/golang.org/x/net/ipv4/sockopt_posix.go b/vendor/golang.org/x/net/ipv4/sockopt_posix.go
index d806803..e96955b 100644
--- a/vendor/golang.org/x/net/ipv4/sockopt_posix.go
+++ b/vendor/golang.org/x/net/ipv4/sockopt_posix.go
@@ -8,115 +8,64 @@ package ipv4
import (
"net"
- "os"
"unsafe"
- "golang.org/x/net/internal/iana"
+ "golang.org/x/net/bpf"
+ "golang.org/x/net/internal/socket"
)
-func getInt(s uintptr, opt *sockOpt) (int, error) {
- if opt.name < 1 || (opt.typ != ssoTypeByte && opt.typ != ssoTypeInt) {
- return 0, errOpNoSupport
- }
- var i int32
- var b byte
- p := unsafe.Pointer(&i)
- l := uint32(4)
- if opt.typ == ssoTypeByte {
- p = unsafe.Pointer(&b)
- l = 1
- }
- if err := getsockopt(s, iana.ProtocolIP, opt.name, p, &l); err != nil {
- return 0, os.NewSyscallError("getsockopt", err)
- }
- if opt.typ == ssoTypeByte {
- return int(b), nil
- }
- return int(i), nil
-}
-
-func setInt(s uintptr, opt *sockOpt, v int) error {
- if opt.name < 1 || (opt.typ != ssoTypeByte && opt.typ != ssoTypeInt) {
- return errOpNoSupport
- }
- i := int32(v)
- var b byte
- p := unsafe.Pointer(&i)
- l := uint32(4)
- if opt.typ == ssoTypeByte {
- b = byte(v)
- p = unsafe.Pointer(&b)
- l = 1
- }
- return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolIP, opt.name, p, l))
-}
-
-func getInterface(s uintptr, opt *sockOpt) (*net.Interface, error) {
- if opt.name < 1 {
- return nil, errOpNoSupport
- }
- switch opt.typ {
- case ssoTypeInterface:
- return getsockoptInterface(s, opt.name)
+func (so *sockOpt) getMulticastInterface(c *socket.Conn) (*net.Interface, error) {
+ switch so.typ {
case ssoTypeIPMreqn:
- return getsockoptIPMreqn(s, opt.name)
+ return so.getIPMreqn(c)
default:
- return nil, errOpNoSupport
+ return so.getMulticastIf(c)
}
}
-func setInterface(s uintptr, opt *sockOpt, ifi *net.Interface) error {
- if opt.name < 1 {
- return errOpNoSupport
- }
- switch opt.typ {
- case ssoTypeInterface:
- return setsockoptInterface(s, opt.name, ifi)
+func (so *sockOpt) setMulticastInterface(c *socket.Conn, ifi *net.Interface) error {
+ switch so.typ {
case ssoTypeIPMreqn:
- return setsockoptIPMreqn(s, opt.name, ifi, nil)
+ return so.setIPMreqn(c, ifi, nil)
default:
- return errOpNoSupport
+ return so.setMulticastIf(c, ifi)
}
}
-func getICMPFilter(s uintptr, opt *sockOpt) (*ICMPFilter, error) {
- if opt.name < 1 || opt.typ != ssoTypeICMPFilter {
+func (so *sockOpt) getICMPFilter(c *socket.Conn) (*ICMPFilter, error) {
+ b := make([]byte, so.Len)
+ n, err := so.Get(c, b)
+ if err != nil {
+ return nil, err
+ }
+ if n != sizeofICMPFilter {
return nil, errOpNoSupport
}
- var f ICMPFilter
- l := uint32(sizeofICMPFilter)
- if err := getsockopt(s, iana.ProtocolReserved, opt.name, unsafe.Pointer(&f.icmpFilter), &l); err != nil {
- return nil, os.NewSyscallError("getsockopt", err)
- }
- return &f, nil
+ return (*ICMPFilter)(unsafe.Pointer(&b[0])), nil
}
-func setICMPFilter(s uintptr, opt *sockOpt, f *ICMPFilter) error {
- if opt.name < 1 || opt.typ != ssoTypeICMPFilter {
- return errOpNoSupport
- }
- return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolReserved, opt.name, unsafe.Pointer(&f.icmpFilter), sizeofICMPFilter))
+func (so *sockOpt) setICMPFilter(c *socket.Conn, f *ICMPFilter) error {
+ b := (*[sizeofICMPFilter]byte)(unsafe.Pointer(f))[:sizeofICMPFilter]
+ return so.Set(c, b)
}
-func setGroup(s uintptr, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
- if opt.name < 1 {
- return errOpNoSupport
- }
- switch opt.typ {
+func (so *sockOpt) setGroup(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
+ switch so.typ {
case ssoTypeIPMreq:
- return setsockoptIPMreq(s, opt.name, ifi, grp)
+ return so.setIPMreq(c, ifi, grp)
case ssoTypeIPMreqn:
- return setsockoptIPMreqn(s, opt.name, ifi, grp)
+ return so.setIPMreqn(c, ifi, grp)
case ssoTypeGroupReq:
- return setsockoptGroupReq(s, opt.name, ifi, grp)
+ return so.setGroupReq(c, ifi, grp)
default:
return errOpNoSupport
}
}
-func setSourceGroup(s uintptr, opt *sockOpt, ifi *net.Interface, grp, src net.IP) error {
- if opt.name < 1 || opt.typ != ssoTypeGroupSourceReq {
- return errOpNoSupport
- }
- return setsockoptGroupSourceReq(s, opt.name, ifi, grp, src)
+func (so *sockOpt) setSourceGroup(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error {
+ return so.setGroupSourceReq(c, ifi, grp, src)
+}
+
+func (so *sockOpt) setBPF(c *socket.Conn, f []bpf.RawInstruction) error {
+ return so.setAttachFilter(c, f)
}
diff --git a/vendor/golang.org/x/net/ipv4/sockopt_stub.go b/vendor/golang.org/x/net/ipv4/sockopt_stub.go
index 4ff6099..23249b7 100644
--- a/vendor/golang.org/x/net/ipv4/sockopt_stub.go
+++ b/vendor/golang.org/x/net/ipv4/sockopt_stub.go
@@ -2,10 +2,41 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build nacl plan9
+// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows
package ipv4
-func setInt(s uintptr, opt *sockOpt, v int) error {
+import (
+ "net"
+
+ "golang.org/x/net/bpf"
+ "golang.org/x/net/internal/socket"
+)
+
+func (so *sockOpt) getMulticastInterface(c *socket.Conn) (*net.Interface, error) {
+ return nil, errOpNoSupport
+}
+
+func (so *sockOpt) setMulticastInterface(c *socket.Conn, ifi *net.Interface) error {
+ return errOpNoSupport
+}
+
+func (so *sockOpt) getICMPFilter(c *socket.Conn) (*ICMPFilter, error) {
+ return nil, errOpNoSupport
+}
+
+func (so *sockOpt) setICMPFilter(c *socket.Conn, f *ICMPFilter) error {
+ return errOpNoSupport
+}
+
+func (so *sockOpt) setGroup(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
+ return errOpNoSupport
+}
+
+func (so *sockOpt) setSourceGroup(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error {
+ return errOpNoSupport
+}
+
+func (so *sockOpt) setBPF(c *socket.Conn, f []bpf.RawInstruction) error {
return errOpNoSupport
}
diff --git a/vendor/golang.org/x/net/ipv4/sockopt_asmreq.go b/vendor/golang.org/x/net/ipv4/sys_asmreq.go
similarity index 65%
rename from vendor/golang.org/x/net/ipv4/sockopt_asmreq.go
rename to vendor/golang.org/x/net/ipv4/sys_asmreq.go
index 8092f1d..0388cba 100644
--- a/vendor/golang.org/x/net/ipv4/sockopt_asmreq.go
+++ b/vendor/golang.org/x/net/ipv4/sys_asmreq.go
@@ -6,7 +6,43 @@
package ipv4
-import "net"
+import (
+ "net"
+ "unsafe"
+
+ "golang.org/x/net/internal/socket"
+)
+
+func (so *sockOpt) setIPMreq(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
+ mreq := ipMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3]}}
+ if err := setIPMreqInterface(&mreq, ifi); err != nil {
+ return err
+ }
+ b := (*[sizeofIPMreq]byte)(unsafe.Pointer(&mreq))[:sizeofIPMreq]
+ return so.Set(c, b)
+}
+
+func (so *sockOpt) getMulticastIf(c *socket.Conn) (*net.Interface, error) {
+ var b [4]byte
+ if _, err := so.Get(c, b[:]); err != nil {
+ return nil, err
+ }
+ ifi, err := netIP4ToInterface(net.IPv4(b[0], b[1], b[2], b[3]))
+ if err != nil {
+ return nil, err
+ }
+ return ifi, nil
+}
+
+func (so *sockOpt) setMulticastIf(c *socket.Conn, ifi *net.Interface) error {
+ ip, err := netInterfaceToIP4(ifi)
+ if err != nil {
+ return err
+ }
+ var b [4]byte
+ copy(b[:], ip)
+ return so.Set(c, b[:])
+}
func setIPMreqInterface(mreq *ipMreq, ifi *net.Interface) error {
if ifi == nil {
diff --git a/vendor/golang.org/x/net/ipv4/sys_asmreq_stub.go b/vendor/golang.org/x/net/ipv4/sys_asmreq_stub.go
new file mode 100644
index 0000000..f391920
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv4/sys_asmreq_stub.go
@@ -0,0 +1,25 @@
+// 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 !darwin,!dragonfly,!freebsd,!netbsd,!openbsd,!solaris,!windows
+
+package ipv4
+
+import (
+ "net"
+
+ "golang.org/x/net/internal/socket"
+)
+
+func (so *sockOpt) setIPMreq(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
+ return errOpNoSupport
+}
+
+func (so *sockOpt) getMulticastIf(c *socket.Conn) (*net.Interface, error) {
+ return nil, errOpNoSupport
+}
+
+func (so *sockOpt) setMulticastIf(c *socket.Conn, ifi *net.Interface) error {
+ return errOpNoSupport
+}
diff --git a/vendor/golang.org/x/net/ipv4/sockopt_asmreqn_unix.go b/vendor/golang.org/x/net/ipv4/sys_asmreqn.go
similarity index 52%
rename from vendor/golang.org/x/net/ipv4/sockopt_asmreqn_unix.go
rename to vendor/golang.org/x/net/ipv4/sys_asmreqn.go
index 92daffb..1f24f69 100644
--- a/vendor/golang.org/x/net/ipv4/sockopt_asmreqn_unix.go
+++ b/vendor/golang.org/x/net/ipv4/sys_asmreqn.go
@@ -8,18 +8,17 @@ package ipv4
import (
"net"
- "os"
"unsafe"
- "golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
-func getsockoptIPMreqn(s uintptr, name int) (*net.Interface, error) {
- var mreqn ipMreqn
- l := uint32(sizeofIPMreqn)
- if err := getsockopt(s, iana.ProtocolIP, name, unsafe.Pointer(&mreqn), &l); err != nil {
- return nil, os.NewSyscallError("getsockopt", err)
+func (so *sockOpt) getIPMreqn(c *socket.Conn) (*net.Interface, error) {
+ b := make([]byte, so.Len)
+ if _, err := so.Get(c, b); err != nil {
+ return nil, err
}
+ mreqn := (*ipMreqn)(unsafe.Pointer(&b[0]))
if mreqn.Ifindex == 0 {
return nil, nil
}
@@ -30,7 +29,7 @@ func getsockoptIPMreqn(s uintptr, name int) (*net.Interface, error) {
return ifi, nil
}
-func setsockoptIPMreqn(s uintptr, name int, ifi *net.Interface, grp net.IP) error {
+func (so *sockOpt) setIPMreqn(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
var mreqn ipMreqn
if ifi != nil {
mreqn.Ifindex = int32(ifi.Index)
@@ -38,5 +37,6 @@ func setsockoptIPMreqn(s uintptr, name int, ifi *net.Interface, grp net.IP) erro
if grp != nil {
mreqn.Multiaddr = [4]byte{grp[0], grp[1], grp[2], grp[3]}
}
- return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolIP, name, unsafe.Pointer(&mreqn), sizeofIPMreqn))
+ b := (*[sizeofIPMreqn]byte)(unsafe.Pointer(&mreqn))[:sizeofIPMreqn]
+ return so.Set(c, b)
}
diff --git a/vendor/golang.org/x/net/ipv4/sockopt_asmreqn_stub.go b/vendor/golang.org/x/net/ipv4/sys_asmreqn_stub.go
similarity index 55%
rename from vendor/golang.org/x/net/ipv4/sockopt_asmreqn_stub.go
rename to vendor/golang.org/x/net/ipv4/sys_asmreqn_stub.go
index 0c7f0f8..0711d3d 100644
--- a/vendor/golang.org/x/net/ipv4/sockopt_asmreqn_stub.go
+++ b/vendor/golang.org/x/net/ipv4/sys_asmreqn_stub.go
@@ -6,12 +6,16 @@
package ipv4
-import "net"
+import (
+ "net"
-func getsockoptIPMreqn(s uintptr, name int) (*net.Interface, error) {
+ "golang.org/x/net/internal/socket"
+)
+
+func (so *sockOpt) getIPMreqn(c *socket.Conn) (*net.Interface, error) {
return nil, errOpNoSupport
}
-func setsockoptIPMreqn(s uintptr, name int, ifi *net.Interface, grp net.IP) error {
+func (so *sockOpt) setIPMreqn(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
return errOpNoSupport
}
diff --git a/vendor/golang.org/x/net/ipv4/sys_bpf.go b/vendor/golang.org/x/net/ipv4/sys_bpf.go
new file mode 100644
index 0000000..9f30b73
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv4/sys_bpf.go
@@ -0,0 +1,23 @@
+// 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 linux
+
+package ipv4
+
+import (
+ "unsafe"
+
+ "golang.org/x/net/bpf"
+ "golang.org/x/net/internal/socket"
+)
+
+func (so *sockOpt) setAttachFilter(c *socket.Conn, f []bpf.RawInstruction) error {
+ prog := sockFProg{
+ Len: uint16(len(f)),
+ Filter: (*sockFilter)(unsafe.Pointer(&f[0])),
+ }
+ b := (*[sizeofSockFprog]byte)(unsafe.Pointer(&prog))[:sizeofSockFprog]
+ return so.Set(c, b)
+}
diff --git a/vendor/golang.org/x/net/ipv4/sys_bpf_stub.go b/vendor/golang.org/x/net/ipv4/sys_bpf_stub.go
new file mode 100644
index 0000000..9a21320
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv4/sys_bpf_stub.go
@@ -0,0 +1,16 @@
+// 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 !linux
+
+package ipv4
+
+import (
+ "golang.org/x/net/bpf"
+ "golang.org/x/net/internal/socket"
+)
+
+func (so *sockOpt) setAttachFilter(c *socket.Conn, f []bpf.RawInstruction) error {
+ return errOpNoSupport
+}
diff --git a/vendor/golang.org/x/net/ipv4/sys_bsd.go b/vendor/golang.org/x/net/ipv4/sys_bsd.go
index 203033d..58256dd 100644
--- a/vendor/golang.org/x/net/ipv4/sys_bsd.go
+++ b/vendor/golang.org/x/net/ipv4/sys_bsd.go
@@ -2,13 +2,16 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build dragonfly netbsd
+// +build netbsd openbsd
package ipv4
import (
"net"
"syscall"
+
+ "golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
var (
@@ -18,17 +21,17 @@ var (
ctlInterface: {sysIP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface},
}
- sockOpts = [ssoMax]sockOpt{
- ssoTOS: {sysIP_TOS, ssoTypeInt},
- ssoTTL: {sysIP_TTL, ssoTypeInt},
- ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeByte},
- ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface},
- ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt},
- ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt},
- ssoReceiveDst: {sysIP_RECVDSTADDR, ssoTypeInt},
- ssoReceiveInterface: {sysIP_RECVIF, ssoTypeInt},
- ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt},
- ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreq},
- ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreq},
+ sockOpts = map[int]*sockOpt{
+ ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TOS, Len: 4}},
+ ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TTL, Len: 4}},
+ ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_TTL, Len: 1}},
+ ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: 4}},
+ ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_LOOP, Len: 1}},
+ ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVTTL, Len: 4}},
+ ssoReceiveDst: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVDSTADDR, Len: 4}},
+ ssoReceiveInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVIF, Len: 4}},
+ ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_HDRINCL, Len: 4}},
+ ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_ADD_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq},
+ ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_DROP_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq},
}
)
diff --git a/vendor/golang.org/x/net/ipv4/sys_darwin.go b/vendor/golang.org/x/net/ipv4/sys_darwin.go
index bc69414..e8fb191 100644
--- a/vendor/golang.org/x/net/ipv4/sys_darwin.go
+++ b/vendor/golang.org/x/net/ipv4/sys_darwin.go
@@ -6,8 +6,13 @@ package ipv4
import (
"net"
+ "strconv"
+ "strings"
"syscall"
"unsafe"
+
+ "golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
var (
@@ -17,60 +22,52 @@ var (
ctlInterface: {sysIP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface},
}
- sockOpts = [ssoMax]sockOpt{
- ssoTOS: {sysIP_TOS, ssoTypeInt},
- ssoTTL: {sysIP_TTL, ssoTypeInt},
- ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeByte},
- ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface},
- ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt},
- ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt},
- ssoReceiveDst: {sysIP_RECVDSTADDR, ssoTypeInt},
- ssoReceiveInterface: {sysIP_RECVIF, ssoTypeInt},
- ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt},
- ssoStripHeader: {sysIP_STRIPHDR, ssoTypeInt},
- ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreq},
- ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreq},
+ sockOpts = map[int]*sockOpt{
+ ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TOS, Len: 4}},
+ ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TTL, Len: 4}},
+ ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_TTL, Len: 1}},
+ ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: 4}},
+ ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_LOOP, Len: 4}},
+ ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVTTL, Len: 4}},
+ ssoReceiveDst: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVDSTADDR, Len: 4}},
+ ssoReceiveInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVIF, Len: 4}},
+ ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_HDRINCL, Len: 4}},
+ ssoStripHeader: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_STRIPHDR, Len: 4}},
+ ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_ADD_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq},
+ ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_DROP_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq},
}
)
func init() {
// Seems like kern.osreldate is veiled on latest OS X. We use
// kern.osrelease instead.
- osver, err := syscall.Sysctl("kern.osrelease")
+ s, err := syscall.Sysctl("kern.osrelease")
if err != nil {
return
}
- var i int
- for i = range osver {
- if osver[i] == '.' {
- break
- }
+ ss := strings.Split(s, ".")
+ if len(ss) == 0 {
+ return
}
// The IP_PKTINFO and protocol-independent multicast API were
- // introduced in OS X 10.7 (Darwin 11.0.0). But it looks like
- // those features require OS X 10.8 (Darwin 12.0.0) and above.
+ // introduced in OS X 10.7 (Darwin 11). But it looks like
+ // those features require OS X 10.8 (Darwin 12) or above.
// See http://support.apple.com/kb/HT1633.
- if i > 2 || i == 2 && osver[0] >= '1' && osver[1] >= '2' {
- ctlOpts[ctlPacketInfo].name = sysIP_PKTINFO
- ctlOpts[ctlPacketInfo].length = sizeofInetPktinfo
- ctlOpts[ctlPacketInfo].marshal = marshalPacketInfo
- ctlOpts[ctlPacketInfo].parse = parsePacketInfo
- sockOpts[ssoPacketInfo].name = sysIP_RECVPKTINFO
- sockOpts[ssoPacketInfo].typ = ssoTypeInt
- sockOpts[ssoMulticastInterface].typ = ssoTypeIPMreqn
- sockOpts[ssoJoinGroup].name = sysMCAST_JOIN_GROUP
- sockOpts[ssoJoinGroup].typ = ssoTypeGroupReq
- sockOpts[ssoLeaveGroup].name = sysMCAST_LEAVE_GROUP
- sockOpts[ssoLeaveGroup].typ = ssoTypeGroupReq
- sockOpts[ssoJoinSourceGroup].name = sysMCAST_JOIN_SOURCE_GROUP
- sockOpts[ssoJoinSourceGroup].typ = ssoTypeGroupSourceReq
- sockOpts[ssoLeaveSourceGroup].name = sysMCAST_LEAVE_SOURCE_GROUP
- sockOpts[ssoLeaveSourceGroup].typ = ssoTypeGroupSourceReq
- sockOpts[ssoBlockSourceGroup].name = sysMCAST_BLOCK_SOURCE
- sockOpts[ssoBlockSourceGroup].typ = ssoTypeGroupSourceReq
- sockOpts[ssoUnblockSourceGroup].name = sysMCAST_UNBLOCK_SOURCE
- sockOpts[ssoUnblockSourceGroup].typ = ssoTypeGroupSourceReq
+ if mjver, err := strconv.Atoi(ss[0]); err != nil || mjver < 12 {
+ return
}
+ ctlOpts[ctlPacketInfo].name = sysIP_PKTINFO
+ ctlOpts[ctlPacketInfo].length = sizeofInetPktinfo
+ ctlOpts[ctlPacketInfo].marshal = marshalPacketInfo
+ ctlOpts[ctlPacketInfo].parse = parsePacketInfo
+ sockOpts[ssoPacketInfo] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVPKTINFO, Len: 4}}
+ sockOpts[ssoMulticastInterface] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: sizeofIPMreqn}, typ: ssoTypeIPMreqn}
+ sockOpts[ssoJoinGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}
+ sockOpts[ssoLeaveGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}
+ sockOpts[ssoJoinSourceGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}
+ sockOpts[ssoLeaveSourceGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}
+ sockOpts[ssoBlockSourceGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}
+ sockOpts[ssoUnblockSourceGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}
}
func (pi *inetPktinfo) setIfindex(i int) {
diff --git a/vendor/golang.org/x/net/ipv4/sys_dragonfly.go b/vendor/golang.org/x/net/ipv4/sys_dragonfly.go
new file mode 100644
index 0000000..859764f
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv4/sys_dragonfly.go
@@ -0,0 +1,35 @@
+// 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 ipv4
+
+import (
+ "net"
+ "syscall"
+
+ "golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
+)
+
+var (
+ ctlOpts = [ctlMax]ctlOpt{
+ ctlTTL: {sysIP_RECVTTL, 1, marshalTTL, parseTTL},
+ ctlDst: {sysIP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst},
+ ctlInterface: {sysIP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface},
+ }
+
+ sockOpts = map[int]*sockOpt{
+ ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TOS, Len: 4}},
+ ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TTL, Len: 4}},
+ ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_TTL, Len: 1}},
+ ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: 4}},
+ ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_LOOP, Len: 4}},
+ ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVTTL, Len: 4}},
+ ssoReceiveDst: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVDSTADDR, Len: 4}},
+ ssoReceiveInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVIF, Len: 4}},
+ ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_HDRINCL, Len: 4}},
+ ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_ADD_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq},
+ ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_DROP_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq},
+ }
+)
diff --git a/vendor/golang.org/x/net/ipv4/sys_freebsd.go b/vendor/golang.org/x/net/ipv4/sys_freebsd.go
index fceffe9..b800324 100644
--- a/vendor/golang.org/x/net/ipv4/sys_freebsd.go
+++ b/vendor/golang.org/x/net/ipv4/sys_freebsd.go
@@ -10,6 +10,9 @@ import (
"strings"
"syscall"
"unsafe"
+
+ "golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
var (
@@ -19,29 +22,29 @@ var (
ctlInterface: {sysIP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface},
}
- sockOpts = [ssoMax]sockOpt{
- ssoTOS: {sysIP_TOS, ssoTypeInt},
- ssoTTL: {sysIP_TTL, ssoTypeInt},
- ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeByte},
- ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface},
- ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt},
- ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt},
- ssoReceiveDst: {sysIP_RECVDSTADDR, ssoTypeInt},
- ssoReceiveInterface: {sysIP_RECVIF, ssoTypeInt},
- ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt},
- ssoJoinGroup: {sysMCAST_JOIN_GROUP, ssoTypeGroupReq},
- ssoLeaveGroup: {sysMCAST_LEAVE_GROUP, ssoTypeGroupReq},
- ssoJoinSourceGroup: {sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq},
- ssoLeaveSourceGroup: {sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq},
- ssoBlockSourceGroup: {sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq},
- ssoUnblockSourceGroup: {sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq},
+ sockOpts = map[int]*sockOpt{
+ ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TOS, Len: 4}},
+ ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TTL, Len: 4}},
+ ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_TTL, Len: 1}},
+ ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: 4}},
+ ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_LOOP, Len: 4}},
+ ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVTTL, Len: 4}},
+ ssoReceiveDst: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVDSTADDR, Len: 4}},
+ ssoReceiveInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVIF, Len: 4}},
+ ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_HDRINCL, Len: 4}},
+ ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq},
+ ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq},
+ ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
}
)
func init() {
freebsdVersion, _ = syscall.SysctlUint32("kern.osreldate")
if freebsdVersion >= 1000000 {
- sockOpts[ssoMulticastInterface].typ = ssoTypeIPMreqn
+ sockOpts[ssoMulticastInterface] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: sizeofIPMreqn}, typ: ssoTypeIPMreqn}
}
if runtime.GOOS == "freebsd" && runtime.GOARCH == "386" {
archs, _ := syscall.Sysctl("kern.supported_archs")
diff --git a/vendor/golang.org/x/net/ipv4/sys_linux.go b/vendor/golang.org/x/net/ipv4/sys_linux.go
index c6c2a50..60defe1 100644
--- a/vendor/golang.org/x/net/ipv4/sys_linux.go
+++ b/vendor/golang.org/x/net/ipv4/sys_linux.go
@@ -8,6 +8,9 @@ import (
"net"
"syscall"
"unsafe"
+
+ "golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
var (
@@ -16,22 +19,23 @@ var (
ctlPacketInfo: {sysIP_PKTINFO, sizeofInetPktinfo, marshalPacketInfo, parsePacketInfo},
}
- sockOpts = [ssoMax]sockOpt{
- ssoTOS: {sysIP_TOS, ssoTypeInt},
- ssoTTL: {sysIP_TTL, ssoTypeInt},
- ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeInt},
- ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeIPMreqn},
- ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt},
- ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt},
- ssoPacketInfo: {sysIP_PKTINFO, ssoTypeInt},
- ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt},
- ssoICMPFilter: {sysICMP_FILTER, ssoTypeICMPFilter},
- ssoJoinGroup: {sysMCAST_JOIN_GROUP, ssoTypeGroupReq},
- ssoLeaveGroup: {sysMCAST_LEAVE_GROUP, ssoTypeGroupReq},
- ssoJoinSourceGroup: {sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq},
- ssoLeaveSourceGroup: {sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq},
- ssoBlockSourceGroup: {sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq},
- ssoUnblockSourceGroup: {sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq},
+ sockOpts = map[int]*sockOpt{
+ ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TOS, Len: 4}},
+ ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TTL, Len: 4}},
+ ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_TTL, Len: 4}},
+ ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: sizeofIPMreqn}, typ: ssoTypeIPMreqn},
+ ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_LOOP, Len: 4}},
+ ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVTTL, Len: 4}},
+ ssoPacketInfo: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_PKTINFO, Len: 4}},
+ ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_HDRINCL, Len: 4}},
+ ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolReserved, Name: sysICMP_FILTER, Len: sizeofICMPFilter}},
+ ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq},
+ ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq},
+ ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoAttachFilter: {Option: socket.Option{Level: sysSOL_SOCKET, Name: sysSO_ATTACH_FILTER, Len: sizeofSockFprog}},
}
)
diff --git a/vendor/golang.org/x/net/ipv4/sys_openbsd.go b/vendor/golang.org/x/net/ipv4/sys_openbsd.go
deleted file mode 100644
index d78083a..0000000
--- a/vendor/golang.org/x/net/ipv4/sys_openbsd.go
+++ /dev/null
@@ -1,32 +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 ipv4
-
-import (
- "net"
- "syscall"
-)
-
-var (
- ctlOpts = [ctlMax]ctlOpt{
- ctlTTL: {sysIP_RECVTTL, 1, marshalTTL, parseTTL},
- ctlDst: {sysIP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst},
- ctlInterface: {sysIP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface},
- }
-
- sockOpts = [ssoMax]sockOpt{
- ssoTOS: {sysIP_TOS, ssoTypeInt},
- ssoTTL: {sysIP_TTL, ssoTypeInt},
- ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeByte},
- ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface},
- ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeByte},
- ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt},
- ssoReceiveDst: {sysIP_RECVDSTADDR, ssoTypeInt},
- ssoReceiveInterface: {sysIP_RECVIF, ssoTypeInt},
- ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt},
- ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreq},
- ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreq},
- }
-)
diff --git a/vendor/golang.org/x/net/ipv4/sys_solaris.go b/vendor/golang.org/x/net/ipv4/sys_solaris.go
index 879f39e..832fef1 100644
--- a/vendor/golang.org/x/net/ipv4/sys_solaris.go
+++ b/vendor/golang.org/x/net/ipv4/sys_solaris.go
@@ -8,6 +8,9 @@ import (
"net"
"syscall"
"unsafe"
+
+ "golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
var (
@@ -16,21 +19,21 @@ var (
ctlPacketInfo: {sysIP_PKTINFO, sizeofInetPktinfo, marshalPacketInfo, parsePacketInfo},
}
- sockOpts = [ssoMax]sockOpt{
- ssoTOS: {sysIP_TOS, ssoTypeInt},
- ssoTTL: {sysIP_TTL, ssoTypeInt},
- ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeByte},
- ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface},
- ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeByte},
- ssoReceiveTTL: {sysIP_RECVTTL, ssoTypeInt},
- ssoPacketInfo: {sysIP_RECVPKTINFO, ssoTypeInt},
- ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt},
- ssoJoinGroup: {sysMCAST_JOIN_GROUP, ssoTypeGroupReq},
- ssoLeaveGroup: {sysMCAST_LEAVE_GROUP, ssoTypeGroupReq},
- ssoJoinSourceGroup: {sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq},
- ssoLeaveSourceGroup: {sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq},
- ssoBlockSourceGroup: {sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq},
- ssoUnblockSourceGroup: {sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq},
+ sockOpts = map[int]sockOpt{
+ ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TOS, Len: 4}},
+ ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TTL, Len: 4}},
+ ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_TTL, Len: 1}},
+ ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: 4}},
+ ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_LOOP, Len: 1}},
+ ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVTTL, Len: 4}},
+ ssoPacketInfo: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVPKTINFO, Len: 4}},
+ ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_HDRINCL, Len: 4}},
+ ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq},
+ ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq},
+ ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
}
)
diff --git a/vendor/golang.org/x/net/ipv4/sys_solaris_amd64.s b/vendor/golang.org/x/net/ipv4/sys_solaris_amd64.s
deleted file mode 100644
index 39d76af..0000000
--- a/vendor/golang.org/x/net/ipv4/sys_solaris_amd64.s
+++ /dev/null
@@ -1,8 +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.
-
-#include "textflag.h"
-
-TEXT ·sysvicall6(SB),NOSPLIT,$0-88
- JMP syscall·sysvicall6(SB)
diff --git a/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_unix.go b/vendor/golang.org/x/net/ipv4/sys_ssmreq.go
similarity index 54%
rename from vendor/golang.org/x/net/ipv4/sockopt_ssmreq_unix.go
rename to vendor/golang.org/x/net/ipv4/sys_ssmreq.go
index c9af55b..ae5704e 100644
--- a/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_unix.go
+++ b/vendor/golang.org/x/net/ipv4/sys_ssmreq.go
@@ -8,54 +8,47 @@ package ipv4
import (
"net"
- "os"
"unsafe"
- "golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
var freebsd32o64 bool
-func setsockoptGroupReq(s uintptr, name int, ifi *net.Interface, grp net.IP) error {
+func (so *sockOpt) setGroupReq(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
var gr groupReq
if ifi != nil {
gr.Interface = uint32(ifi.Index)
}
gr.setGroup(grp)
- var p unsafe.Pointer
- var l uint32
+ var b []byte
if freebsd32o64 {
var d [sizeofGroupReq + 4]byte
s := (*[sizeofGroupReq]byte)(unsafe.Pointer(&gr))
copy(d[:4], s[:4])
copy(d[8:], s[4:])
- p = unsafe.Pointer(&d[0])
- l = sizeofGroupReq + 4
+ b = d[:]
} else {
- p = unsafe.Pointer(&gr)
- l = sizeofGroupReq
+ b = (*[sizeofGroupReq]byte)(unsafe.Pointer(&gr))[:sizeofGroupReq]
}
- return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolIP, name, p, l))
+ return so.Set(c, b)
}
-func setsockoptGroupSourceReq(s uintptr, name int, ifi *net.Interface, grp, src net.IP) error {
+func (so *sockOpt) setGroupSourceReq(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error {
var gsr groupSourceReq
if ifi != nil {
gsr.Interface = uint32(ifi.Index)
}
gsr.setSourceGroup(grp, src)
- var p unsafe.Pointer
- var l uint32
+ var b []byte
if freebsd32o64 {
var d [sizeofGroupSourceReq + 4]byte
s := (*[sizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr))
copy(d[:4], s[:4])
copy(d[8:], s[4:])
- p = unsafe.Pointer(&d[0])
- l = sizeofGroupSourceReq + 4
+ b = d[:]
} else {
- p = unsafe.Pointer(&gsr)
- l = sizeofGroupSourceReq
+ b = (*[sizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr))[:sizeofGroupSourceReq]
}
- return os.NewSyscallError("setsockopt", setsockopt(s, iana.ProtocolIP, name, p, l))
+ return so.Set(c, b)
}
diff --git a/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_stub.go b/vendor/golang.org/x/net/ipv4/sys_ssmreq_stub.go
similarity index 52%
rename from vendor/golang.org/x/net/ipv4/sockopt_ssmreq_stub.go
rename to vendor/golang.org/x/net/ipv4/sys_ssmreq_stub.go
index 0287396..e6b7623 100644
--- a/vendor/golang.org/x/net/ipv4/sockopt_ssmreq_stub.go
+++ b/vendor/golang.org/x/net/ipv4/sys_ssmreq_stub.go
@@ -6,12 +6,16 @@
package ipv4
-import "net"
+import (
+ "net"
-func setsockoptGroupReq(s uintptr, name int, ifi *net.Interface, grp net.IP) error {
+ "golang.org/x/net/internal/socket"
+)
+
+func (so *sockOpt) setGroupReq(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
return errOpNoSupport
}
-func setsockoptGroupSourceReq(s uintptr, name int, ifi *net.Interface, grp, src net.IP) error {
+func (so *sockOpt) setGroupSourceReq(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error {
return errOpNoSupport
}
diff --git a/vendor/golang.org/x/net/ipv4/sys_stub.go b/vendor/golang.org/x/net/ipv4/sys_stub.go
index d6dd812..4f07647 100644
--- a/vendor/golang.org/x/net/ipv4/sys_stub.go
+++ b/vendor/golang.org/x/net/ipv4/sys_stub.go
@@ -2,12 +2,12 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build nacl plan9
+// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows
package ipv4
var (
ctlOpts = [ctlMax]ctlOpt{}
- sockOpts = [ssoMax]sockOpt{}
+ sockOpts = map[int]*sockOpt{}
)
diff --git a/vendor/golang.org/x/net/ipv4/sys_windows.go b/vendor/golang.org/x/net/ipv4/sys_windows.go
index fac00bd..b0913d5 100644
--- a/vendor/golang.org/x/net/ipv4/sys_windows.go
+++ b/vendor/golang.org/x/net/ipv4/sys_windows.go
@@ -4,6 +4,11 @@
package ipv4
+import (
+ "golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
+)
+
const (
// See ws2tcpip.h.
sysIP_OPTIONS = 0x1
@@ -45,15 +50,15 @@ type ipMreqSource struct {
var (
ctlOpts = [ctlMax]ctlOpt{}
- sockOpts = [ssoMax]sockOpt{
- ssoTOS: {sysIP_TOS, ssoTypeInt},
- ssoTTL: {sysIP_TTL, ssoTypeInt},
- ssoMulticastTTL: {sysIP_MULTICAST_TTL, ssoTypeInt},
- ssoMulticastInterface: {sysIP_MULTICAST_IF, ssoTypeInterface},
- ssoMulticastLoopback: {sysIP_MULTICAST_LOOP, ssoTypeInt},
- ssoHeaderPrepend: {sysIP_HDRINCL, ssoTypeInt},
- ssoJoinGroup: {sysIP_ADD_MEMBERSHIP, ssoTypeIPMreq},
- ssoLeaveGroup: {sysIP_DROP_MEMBERSHIP, ssoTypeIPMreq},
+ sockOpts = map[int]*sockOpt{
+ ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TOS, Len: 4}},
+ ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TTL, Len: 4}},
+ ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_TTL, Len: 4}},
+ ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: 4}},
+ ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_LOOP, Len: 4}},
+ ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_HDRINCL, Len: 4}},
+ ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_ADD_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq},
+ ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_DROP_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq},
}
)
diff --git a/vendor/golang.org/x/net/ipv4/syscall_linux_386.go b/vendor/golang.org/x/net/ipv4/syscall_linux_386.go
deleted file mode 100644
index 84f60bf..0000000
--- a/vendor/golang.org/x/net/ipv4/syscall_linux_386.go
+++ /dev/null
@@ -1,31 +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 ipv4
-
-import (
- "syscall"
- "unsafe"
-)
-
-const (
- sysGETSOCKOPT = 0xf
- sysSETSOCKOPT = 0xe
-)
-
-func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno)
-
-func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error {
- if _, errno := socketcall(sysGETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(v), uintptr(unsafe.Pointer(l)), 0); errno != 0 {
- return error(errno)
- }
- return nil
-}
-
-func setsockopt(s uintptr, level, name int, v unsafe.Pointer, l uint32) error {
- if _, errno := socketcall(sysSETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(v), uintptr(l), 0); errno != 0 {
- return error(errno)
- }
- return nil
-}
diff --git a/vendor/golang.org/x/net/ipv4/syscall_solaris.go b/vendor/golang.org/x/net/ipv4/syscall_solaris.go
deleted file mode 100644
index 8b0e1e4..0000000
--- a/vendor/golang.org/x/net/ipv4/syscall_solaris.go
+++ /dev/null
@@ -1,38 +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.
-
-package ipv4
-
-import (
- "syscall"
- "unsafe"
-)
-
-//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so"
-//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so"
-
-//go:linkname procGetsockopt libc___xnet_getsockopt
-//go:linkname procSetsockopt libc_setsockopt
-
-var (
- procGetsockopt uintptr
- procSetsockopt uintptr
-)
-
-func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno)
-
-func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error {
- _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procGetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(v), uintptr(unsafe.Pointer(l)), 0)
- if errno != 0 {
- return error(errno)
- }
- return nil
-}
-
-func setsockopt(s uintptr, level, name int, v unsafe.Pointer, l uint32) error {
- if _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procSetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(v), uintptr(l), 0); errno != 0 {
- return error(errno)
- }
- return nil
-}
diff --git a/vendor/golang.org/x/net/ipv4/syscall_unix.go b/vendor/golang.org/x/net/ipv4/syscall_unix.go
deleted file mode 100644
index d952763..0000000
--- a/vendor/golang.org/x/net/ipv4/syscall_unix.go
+++ /dev/null
@@ -1,26 +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.
-
-// +build darwin dragonfly freebsd linux,!386 netbsd openbsd
-
-package ipv4
-
-import (
- "syscall"
- "unsafe"
-)
-
-func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error {
- if _, _, errno := syscall.Syscall6(syscall.SYS_GETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(v), uintptr(unsafe.Pointer(l)), 0); errno != 0 {
- return error(errno)
- }
- return nil
-}
-
-func setsockopt(s uintptr, level, name int, v unsafe.Pointer, l uint32) error {
- if _, _, errno := syscall.Syscall6(syscall.SYS_SETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(v), uintptr(l), 0); errno != 0 {
- return error(errno)
- }
- return nil
-}
diff --git a/vendor/golang.org/x/net/ipv4/syscall_windows.go b/vendor/golang.org/x/net/ipv4/syscall_windows.go
deleted file mode 100644
index 0f42d22..0000000
--- a/vendor/golang.org/x/net/ipv4/syscall_windows.go
+++ /dev/null
@@ -1,18 +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.
-
-package ipv4
-
-import (
- "syscall"
- "unsafe"
-)
-
-func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error {
- return syscall.Getsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(v), (*int32)(unsafe.Pointer(l)))
-}
-
-func setsockopt(s uintptr, level, name int, v unsafe.Pointer, l uint32) error {
- return syscall.Setsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(v), int32(l))
-}
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_386.go b/vendor/golang.org/x/net/ipv4/zsys_linux_386.go
index 4da6720..c0260f0 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_386.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_386.go
@@ -70,6 +70,8 @@ const (
sizeofGroupSourceReq = 0x104
sizeofICMPFilter = 0x4
+
+ sizeofSockFprog = 0x8
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go
index 65945bb..9c967ea 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go
@@ -70,6 +70,8 @@ const (
sizeofGroupSourceReq = 0x108
sizeofICMPFilter = 0x4
+
+ sizeofSockFprog = 0x10
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go b/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go
index 4da6720..c0260f0 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go
@@ -70,6 +70,8 @@ const (
sizeofGroupSourceReq = 0x104
sizeofICMPFilter = 0x4
+
+ sizeofSockFprog = 0x8
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go
index 65945bb..9c967ea 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go
@@ -70,6 +70,8 @@ const (
sizeofGroupSourceReq = 0x108
sizeofICMPFilter = 0x4
+
+ sizeofSockFprog = 0x10
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go
index 4da6720..c0260f0 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go
@@ -70,6 +70,8 @@ const (
sizeofGroupSourceReq = 0x104
sizeofICMPFilter = 0x4
+
+ sizeofSockFprog = 0x8
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go
index 65945bb..9c967ea 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go
@@ -70,6 +70,8 @@ const (
sizeofGroupSourceReq = 0x108
sizeofICMPFilter = 0x4
+
+ sizeofSockFprog = 0x10
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go
index 65945bb..9c967ea 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go
@@ -70,6 +70,8 @@ const (
sizeofGroupSourceReq = 0x108
sizeofICMPFilter = 0x4
+
+ sizeofSockFprog = 0x10
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go b/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go
index 4da6720..c0260f0 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go
@@ -70,6 +70,8 @@ const (
sizeofGroupSourceReq = 0x104
sizeofICMPFilter = 0x4
+
+ sizeofSockFprog = 0x8
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go
index b825a18..f65bd9a 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go
@@ -70,6 +70,8 @@ const (
sizeofGroupSourceReq = 0x104
sizeofICMPFilter = 0x4
+
+ sizeofSockFprog = 0x8
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go
index 65945bb..9c967ea 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go
@@ -70,6 +70,8 @@ const (
sizeofGroupSourceReq = 0x108
sizeofICMPFilter = 0x4
+
+ sizeofSockFprog = 0x10
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go
index 65945bb..9c967ea 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go
@@ -70,6 +70,8 @@ const (
sizeofGroupSourceReq = 0x108
sizeofICMPFilter = 0x4
+
+ sizeofSockFprog = 0x10
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go b/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go
index 65945bb..9c967ea 100644
--- a/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go
+++ b/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go
@@ -70,6 +70,8 @@ const (
sizeofGroupSourceReq = 0x108
sizeofICMPFilter = 0x4
+
+ sizeofSockFprog = 0x10
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv6/batch.go b/vendor/golang.org/x/net/ipv6/batch.go
new file mode 100644
index 0000000..4f5fe68
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv6/batch.go
@@ -0,0 +1,119 @@
+// 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 ipv6
+
+import (
+ "net"
+ "runtime"
+ "syscall"
+
+ "golang.org/x/net/internal/socket"
+)
+
+// BUG(mikio): On Windows, the ReadBatch and WriteBatch methods of
+// PacketConn are not implemented.
+
+// A Message represents an IO message.
+//
+// type Message struct {
+// Buffers [][]byte
+// OOB []byte
+// Addr net.Addr
+// N int
+// NN int
+// Flags int
+// }
+//
+// The Buffers fields represents a list of contiguous buffers, which
+// can be used for vectored IO, for example, putting a header and a
+// payload in each slice.
+// When writing, the Buffers field must contain at least one byte to
+// write.
+// When reading, the Buffers field will always contain a byte to read.
+//
+// The OOB field contains protocol-specific control or miscellaneous
+// ancillary data known as out-of-band data.
+// It can be nil when not required.
+//
+// The Addr field specifies a destination address when writing.
+// It can be nil when the underlying protocol of the endpoint uses
+// connection-oriented communication.
+// After a successful read, it may contain the source address on the
+// received packet.
+//
+// The N field indicates the number of bytes read or written from/to
+// Buffers.
+//
+// The NN field indicates the number of bytes read or written from/to
+// OOB.
+//
+// The Flags field contains protocol-specific information on the
+// received message.
+type Message = socket.Message
+
+// ReadBatch reads a batch of messages.
+//
+// The provided flags is a set of platform-dependent flags, such as
+// syscall.MSG_PEEK.
+//
+// On a successful read it returns the number of messages received, up
+// to len(ms).
+//
+// On Linux, a batch read will be optimized.
+// On other platforms, this method will read only a single message.
+func (c *payloadHandler) ReadBatch(ms []Message, flags int) (int, error) {
+ if !c.ok() {
+ return 0, syscall.EINVAL
+ }
+ switch runtime.GOOS {
+ case "linux":
+ n, err := c.RecvMsgs([]socket.Message(ms), flags)
+ if err != nil {
+ err = &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ }
+ return n, err
+ default:
+ n := 1
+ err := c.RecvMsg(&ms[0], flags)
+ if err != nil {
+ n = 0
+ err = &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ }
+ return n, err
+ }
+}
+
+// WriteBatch writes a batch of messages.
+//
+// The provided flags is a set of platform-dependent flags, such as
+// syscall.MSG_DONTROUTE.
+//
+// It returns the number of messages written on a successful write.
+//
+// On Linux, a batch write will be optimized.
+// On other platforms, this method will write only a single message.
+func (c *payloadHandler) WriteBatch(ms []Message, flags int) (int, error) {
+ if !c.ok() {
+ return 0, syscall.EINVAL
+ }
+ switch runtime.GOOS {
+ case "linux":
+ n, err := c.SendMsgs([]socket.Message(ms), flags)
+ if err != nil {
+ err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ }
+ return n, err
+ default:
+ n := 1
+ err := c.SendMsg(&ms[0], flags)
+ if err != nil {
+ n = 0
+ err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ }
+ return n, err
+ }
+}
diff --git a/vendor/golang.org/x/net/ipv6/bpfopt_linux.go b/vendor/golang.org/x/net/ipv6/bpfopt_linux.go
deleted file mode 100644
index daf7ea8..0000000
--- a/vendor/golang.org/x/net/ipv6/bpfopt_linux.go
+++ /dev/null
@@ -1,28 +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.
-
-package ipv6
-
-import (
- "os"
- "unsafe"
-
- "golang.org/x/net/bpf"
- "golang.org/x/net/internal/netreflect"
-)
-
-// SetBPF attaches a BPF program to the connection.
-//
-// Only supported on Linux.
-func (c *dgramOpt) SetBPF(filter []bpf.RawInstruction) error {
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
- }
- prog := sockFProg{
- Len: uint16(len(filter)),
- Filter: (*sockFilter)(unsafe.Pointer(&filter[0])),
- }
- return os.NewSyscallError("setsockopt", setsockopt(s, sysSOL_SOCKET, sysSO_ATTACH_FILTER, unsafe.Pointer(&prog), uint32(unsafe.Sizeof(prog))))
-}
diff --git a/vendor/golang.org/x/net/ipv6/bpfopt_stub.go b/vendor/golang.org/x/net/ipv6/bpfopt_stub.go
deleted file mode 100644
index 2e4de5f..0000000
--- a/vendor/golang.org/x/net/ipv6/bpfopt_stub.go
+++ /dev/null
@@ -1,16 +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 !linux
-
-package ipv6
-
-import "golang.org/x/net/bpf"
-
-// SetBPF attaches a BPF program to the connection.
-//
-// Only supported on Linux.
-func (c *dgramOpt) SetBPF(filter []bpf.RawInstruction) error {
- return errOpNoSupport
-}
diff --git a/vendor/golang.org/x/net/ipv6/control.go b/vendor/golang.org/x/net/ipv6/control.go
index 56303f0..fe78818 100644
--- a/vendor/golang.org/x/net/ipv6/control.go
+++ b/vendor/golang.org/x/net/ipv6/control.go
@@ -8,10 +8,13 @@ import (
"fmt"
"net"
"sync"
+
+ "golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
// Note that RFC 3542 obsoletes RFC 2292 but OS X Snow Leopard and the
-// former still support RFC 2292 only. Please be aware that almost
+// former still support RFC 2292 only. Please be aware that almost
// all protocol implementations prohibit using a combination of RFC
// 2292 and RFC 3542 for some practical reasons.
@@ -66,6 +69,105 @@ func (cm *ControlMessage) String() string {
return fmt.Sprintf("tclass=%#x hoplim=%d src=%v dst=%v ifindex=%d nexthop=%v mtu=%d", cm.TrafficClass, cm.HopLimit, cm.Src, cm.Dst, cm.IfIndex, cm.NextHop, cm.MTU)
}
+// Marshal returns the binary encoding of cm.
+func (cm *ControlMessage) Marshal() []byte {
+ if cm == nil {
+ return nil
+ }
+ var l int
+ tclass := false
+ if ctlOpts[ctlTrafficClass].name > 0 && cm.TrafficClass > 0 {
+ tclass = true
+ l += socket.ControlMessageSpace(ctlOpts[ctlTrafficClass].length)
+ }
+ hoplimit := false
+ if ctlOpts[ctlHopLimit].name > 0 && cm.HopLimit > 0 {
+ hoplimit = true
+ l += socket.ControlMessageSpace(ctlOpts[ctlHopLimit].length)
+ }
+ pktinfo := false
+ if ctlOpts[ctlPacketInfo].name > 0 && (cm.Src.To16() != nil && cm.Src.To4() == nil || cm.IfIndex > 0) {
+ pktinfo = true
+ l += socket.ControlMessageSpace(ctlOpts[ctlPacketInfo].length)
+ }
+ nexthop := false
+ if ctlOpts[ctlNextHop].name > 0 && cm.NextHop.To16() != nil && cm.NextHop.To4() == nil {
+ nexthop = true
+ l += socket.ControlMessageSpace(ctlOpts[ctlNextHop].length)
+ }
+ var b []byte
+ if l > 0 {
+ b = make([]byte, l)
+ bb := b
+ if tclass {
+ bb = ctlOpts[ctlTrafficClass].marshal(bb, cm)
+ }
+ if hoplimit {
+ bb = ctlOpts[ctlHopLimit].marshal(bb, cm)
+ }
+ if pktinfo {
+ bb = ctlOpts[ctlPacketInfo].marshal(bb, cm)
+ }
+ if nexthop {
+ bb = ctlOpts[ctlNextHop].marshal(bb, cm)
+ }
+ }
+ return b
+}
+
+// Parse parses b as a control message and stores the result in cm.
+func (cm *ControlMessage) Parse(b []byte) error {
+ ms, err := socket.ControlMessage(b).Parse()
+ if err != nil {
+ return err
+ }
+ for _, m := range ms {
+ lvl, typ, l, err := m.ParseHeader()
+ if err != nil {
+ return err
+ }
+ if lvl != iana.ProtocolIPv6 {
+ continue
+ }
+ switch typ {
+ case ctlOpts[ctlTrafficClass].name:
+ ctlOpts[ctlTrafficClass].parse(cm, m.Data(l))
+ case ctlOpts[ctlHopLimit].name:
+ ctlOpts[ctlHopLimit].parse(cm, m.Data(l))
+ case ctlOpts[ctlPacketInfo].name:
+ ctlOpts[ctlPacketInfo].parse(cm, m.Data(l))
+ case ctlOpts[ctlPathMTU].name:
+ ctlOpts[ctlPathMTU].parse(cm, m.Data(l))
+ }
+ }
+ return nil
+}
+
+// NewControlMessage returns a new control message.
+//
+// The returned message is large enough for options specified by cf.
+func NewControlMessage(cf ControlFlags) []byte {
+ opt := rawOpt{cflags: cf}
+ var l int
+ if opt.isset(FlagTrafficClass) && ctlOpts[ctlTrafficClass].name > 0 {
+ l += socket.ControlMessageSpace(ctlOpts[ctlTrafficClass].length)
+ }
+ if opt.isset(FlagHopLimit) && ctlOpts[ctlHopLimit].name > 0 {
+ l += socket.ControlMessageSpace(ctlOpts[ctlHopLimit].length)
+ }
+ if opt.isset(flagPacketInfo) && ctlOpts[ctlPacketInfo].name > 0 {
+ l += socket.ControlMessageSpace(ctlOpts[ctlPacketInfo].length)
+ }
+ if opt.isset(FlagPathMTU) && ctlOpts[ctlPathMTU].name > 0 {
+ l += socket.ControlMessageSpace(ctlOpts[ctlPathMTU].length)
+ }
+ var b []byte
+ if l > 0 {
+ b = make([]byte, l)
+ }
+ return b
+}
+
// Ancillary data socket options
const (
ctlTrafficClass = iota // header field
diff --git a/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go b/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go
index d1693af..1cf3901 100644
--- a/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go
+++ b/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go
@@ -7,31 +7,26 @@
package ipv6
import (
- "syscall"
"unsafe"
"golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
func marshal2292HopLimit(b []byte, cm *ControlMessage) []byte {
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
- m.Level = iana.ProtocolIPv6
- m.Type = sysIPV6_2292HOPLIMIT
- m.SetLen(syscall.CmsgLen(4))
+ m := socket.ControlMessage(b)
+ m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_2292HOPLIMIT, 4)
if cm != nil {
- data := b[syscall.CmsgLen(0):]
- nativeEndian.PutUint32(data[:4], uint32(cm.HopLimit))
+ nativeEndian.PutUint32(m.Data(4), uint32(cm.HopLimit))
}
- return b[syscall.CmsgSpace(4):]
+ return m.Next(4)
}
func marshal2292PacketInfo(b []byte, cm *ControlMessage) []byte {
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
- m.Level = iana.ProtocolIPv6
- m.Type = sysIPV6_2292PKTINFO
- m.SetLen(syscall.CmsgLen(sizeofInet6Pktinfo))
+ m := socket.ControlMessage(b)
+ m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_2292PKTINFO, sizeofInet6Pktinfo)
if cm != nil {
- pi := (*inet6Pktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
+ pi := (*inet6Pktinfo)(unsafe.Pointer(&m.Data(sizeofInet6Pktinfo)[0]))
if ip := cm.Src.To16(); ip != nil && ip.To4() == nil {
copy(pi.Addr[:], ip)
}
@@ -39,17 +34,15 @@ func marshal2292PacketInfo(b []byte, cm *ControlMessage) []byte {
pi.setIfindex(cm.IfIndex)
}
}
- return b[syscall.CmsgSpace(sizeofInet6Pktinfo):]
+ return m.Next(sizeofInet6Pktinfo)
}
func marshal2292NextHop(b []byte, cm *ControlMessage) []byte {
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
- m.Level = iana.ProtocolIPv6
- m.Type = sysIPV6_2292NEXTHOP
- m.SetLen(syscall.CmsgLen(sizeofSockaddrInet6))
+ m := socket.ControlMessage(b)
+ m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_2292NEXTHOP, sizeofSockaddrInet6)
if cm != nil {
- sa := (*sockaddrInet6)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
+ sa := (*sockaddrInet6)(unsafe.Pointer(&m.Data(sizeofSockaddrInet6)[0]))
sa.setSockaddr(cm.NextHop, cm.IfIndex)
}
- return b[syscall.CmsgSpace(sizeofSockaddrInet6):]
+ return m.Next(sizeofSockaddrInet6)
}
diff --git a/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go b/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go
index 2800df4..62cded6 100644
--- a/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go
+++ b/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go
@@ -7,22 +7,20 @@
package ipv6
import (
- "syscall"
+ "net"
"unsafe"
"golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
func marshalTrafficClass(b []byte, cm *ControlMessage) []byte {
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
- m.Level = iana.ProtocolIPv6
- m.Type = sysIPV6_TCLASS
- m.SetLen(syscall.CmsgLen(4))
+ m := socket.ControlMessage(b)
+ m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_TCLASS, 4)
if cm != nil {
- data := b[syscall.CmsgLen(0):]
- nativeEndian.PutUint32(data[:4], uint32(cm.TrafficClass))
+ nativeEndian.PutUint32(m.Data(4), uint32(cm.TrafficClass))
}
- return b[syscall.CmsgSpace(4):]
+ return m.Next(4)
}
func parseTrafficClass(cm *ControlMessage, b []byte) {
@@ -30,15 +28,12 @@ func parseTrafficClass(cm *ControlMessage, b []byte) {
}
func marshalHopLimit(b []byte, cm *ControlMessage) []byte {
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
- m.Level = iana.ProtocolIPv6
- m.Type = sysIPV6_HOPLIMIT
- m.SetLen(syscall.CmsgLen(4))
+ m := socket.ControlMessage(b)
+ m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_HOPLIMIT, 4)
if cm != nil {
- data := b[syscall.CmsgLen(0):]
- nativeEndian.PutUint32(data[:4], uint32(cm.HopLimit))
+ nativeEndian.PutUint32(m.Data(4), uint32(cm.HopLimit))
}
- return b[syscall.CmsgSpace(4):]
+ return m.Next(4)
}
func parseHopLimit(cm *ControlMessage, b []byte) {
@@ -46,12 +41,10 @@ func parseHopLimit(cm *ControlMessage, b []byte) {
}
func marshalPacketInfo(b []byte, cm *ControlMessage) []byte {
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
- m.Level = iana.ProtocolIPv6
- m.Type = sysIPV6_PKTINFO
- m.SetLen(syscall.CmsgLen(sizeofInet6Pktinfo))
+ m := socket.ControlMessage(b)
+ m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_PKTINFO, sizeofInet6Pktinfo)
if cm != nil {
- pi := (*inet6Pktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
+ pi := (*inet6Pktinfo)(unsafe.Pointer(&m.Data(sizeofInet6Pktinfo)[0]))
if ip := cm.Src.To16(); ip != nil && ip.To4() == nil {
copy(pi.Addr[:], ip)
}
@@ -59,41 +52,43 @@ func marshalPacketInfo(b []byte, cm *ControlMessage) []byte {
pi.setIfindex(cm.IfIndex)
}
}
- return b[syscall.CmsgSpace(sizeofInet6Pktinfo):]
+ return m.Next(sizeofInet6Pktinfo)
}
func parsePacketInfo(cm *ControlMessage, b []byte) {
pi := (*inet6Pktinfo)(unsafe.Pointer(&b[0]))
- cm.Dst = pi.Addr[:]
+ if len(cm.Dst) < net.IPv6len {
+ cm.Dst = make(net.IP, net.IPv6len)
+ }
+ copy(cm.Dst, pi.Addr[:])
cm.IfIndex = int(pi.Ifindex)
}
func marshalNextHop(b []byte, cm *ControlMessage) []byte {
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
- m.Level = iana.ProtocolIPv6
- m.Type = sysIPV6_NEXTHOP
- m.SetLen(syscall.CmsgLen(sizeofSockaddrInet6))
+ m := socket.ControlMessage(b)
+ m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_NEXTHOP, sizeofSockaddrInet6)
if cm != nil {
- sa := (*sockaddrInet6)(unsafe.Pointer(&b[syscall.CmsgLen(0)]))
+ sa := (*sockaddrInet6)(unsafe.Pointer(&m.Data(sizeofSockaddrInet6)[0]))
sa.setSockaddr(cm.NextHop, cm.IfIndex)
}
- return b[syscall.CmsgSpace(sizeofSockaddrInet6):]
+ return m.Next(sizeofSockaddrInet6)
}
func parseNextHop(cm *ControlMessage, b []byte) {
}
func marshalPathMTU(b []byte, cm *ControlMessage) []byte {
- m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))
- m.Level = iana.ProtocolIPv6
- m.Type = sysIPV6_PATHMTU
- m.SetLen(syscall.CmsgLen(sizeofIPv6Mtuinfo))
- return b[syscall.CmsgSpace(sizeofIPv6Mtuinfo):]
+ m := socket.ControlMessage(b)
+ m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_PATHMTU, sizeofIPv6Mtuinfo)
+ return m.Next(sizeofIPv6Mtuinfo)
}
func parsePathMTU(cm *ControlMessage, b []byte) {
mi := (*ipv6Mtuinfo)(unsafe.Pointer(&b[0]))
- cm.Dst = mi.Addr.Addr[:]
+ if len(cm.Dst) < net.IPv6len {
+ cm.Dst = make(net.IP, net.IPv6len)
+ }
+ copy(cm.Dst, mi.Addr.Addr[:])
cm.IfIndex = int(mi.Addr.Scope_id)
cm.MTU = int(mi.Mtu)
}
diff --git a/vendor/golang.org/x/net/ipv6/control_stub.go b/vendor/golang.org/x/net/ipv6/control_stub.go
index 24b40a8..a045f28 100644
--- a/vendor/golang.org/x/net/ipv6/control_stub.go
+++ b/vendor/golang.org/x/net/ipv6/control_stub.go
@@ -2,22 +2,12 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build nacl plan9
+// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows
package ipv6
-func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
+import "golang.org/x/net/internal/socket"
+
+func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error {
return errOpNoSupport
}
-
-func newControlMessage(opt *rawOpt) (oob []byte) {
- return nil
-}
-
-func parseControlMessage(b []byte) (*ControlMessage, error) {
- return nil, errOpNoSupport
-}
-
-func marshalControlMessage(cm *ControlMessage) (oob []byte) {
- return nil
-}
diff --git a/vendor/golang.org/x/net/ipv6/control_unix.go b/vendor/golang.org/x/net/ipv6/control_unix.go
index 7bd4210..6651506 100644
--- a/vendor/golang.org/x/net/ipv6/control_unix.go
+++ b/vendor/golang.org/x/net/ipv6/control_unix.go
@@ -6,18 +6,13 @@
package ipv6
-import (
- "os"
- "syscall"
+import "golang.org/x/net/internal/socket"
- "golang.org/x/net/internal/iana"
-)
-
-func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
+func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error {
opt.Lock()
defer opt.Unlock()
- if cf&FlagTrafficClass != 0 && sockOpts[ssoReceiveTrafficClass].name > 0 {
- if err := setInt(s, &sockOpts[ssoReceiveTrafficClass], boolint(on)); err != nil {
+ if so, ok := sockOpts[ssoReceiveTrafficClass]; ok && cf&FlagTrafficClass != 0 {
+ if err := so.SetInt(c, boolint(on)); err != nil {
return err
}
if on {
@@ -26,8 +21,8 @@ func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
opt.clear(FlagTrafficClass)
}
}
- if cf&FlagHopLimit != 0 && sockOpts[ssoReceiveHopLimit].name > 0 {
- if err := setInt(s, &sockOpts[ssoReceiveHopLimit], boolint(on)); err != nil {
+ if so, ok := sockOpts[ssoReceiveHopLimit]; ok && cf&FlagHopLimit != 0 {
+ if err := so.SetInt(c, boolint(on)); err != nil {
return err
}
if on {
@@ -36,8 +31,8 @@ func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
opt.clear(FlagHopLimit)
}
}
- if cf&flagPacketInfo != 0 && sockOpts[ssoReceivePacketInfo].name > 0 {
- if err := setInt(s, &sockOpts[ssoReceivePacketInfo], boolint(on)); err != nil {
+ if so, ok := sockOpts[ssoReceivePacketInfo]; ok && cf&flagPacketInfo != 0 {
+ if err := so.SetInt(c, boolint(on)); err != nil {
return err
}
if on {
@@ -46,8 +41,8 @@ func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
opt.clear(cf & flagPacketInfo)
}
}
- if cf&FlagPathMTU != 0 && sockOpts[ssoReceivePathMTU].name > 0 {
- if err := setInt(s, &sockOpts[ssoReceivePathMTU], boolint(on)); err != nil {
+ if so, ok := sockOpts[ssoReceivePathMTU]; ok && cf&FlagPathMTU != 0 {
+ if err := so.SetInt(c, boolint(on)); err != nil {
return err
}
if on {
@@ -58,96 +53,3 @@ func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
}
return nil
}
-
-func newControlMessage(opt *rawOpt) (oob []byte) {
- opt.RLock()
- var l int
- if opt.isset(FlagTrafficClass) && ctlOpts[ctlTrafficClass].name > 0 {
- l += syscall.CmsgSpace(ctlOpts[ctlTrafficClass].length)
- }
- if opt.isset(FlagHopLimit) && ctlOpts[ctlHopLimit].name > 0 {
- l += syscall.CmsgSpace(ctlOpts[ctlHopLimit].length)
- }
- if opt.isset(flagPacketInfo) && ctlOpts[ctlPacketInfo].name > 0 {
- l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length)
- }
- if opt.isset(FlagPathMTU) && ctlOpts[ctlPathMTU].name > 0 {
- l += syscall.CmsgSpace(ctlOpts[ctlPathMTU].length)
- }
- if l > 0 {
- oob = make([]byte, l)
- }
- opt.RUnlock()
- return
-}
-
-func parseControlMessage(b []byte) (*ControlMessage, error) {
- if len(b) == 0 {
- return nil, nil
- }
- cmsgs, err := syscall.ParseSocketControlMessage(b)
- if err != nil {
- return nil, os.NewSyscallError("parse socket control message", err)
- }
- cm := &ControlMessage{}
- for _, m := range cmsgs {
- if m.Header.Level != iana.ProtocolIPv6 {
- continue
- }
- switch int(m.Header.Type) {
- case ctlOpts[ctlTrafficClass].name:
- ctlOpts[ctlTrafficClass].parse(cm, m.Data[:])
- case ctlOpts[ctlHopLimit].name:
- ctlOpts[ctlHopLimit].parse(cm, m.Data[:])
- case ctlOpts[ctlPacketInfo].name:
- ctlOpts[ctlPacketInfo].parse(cm, m.Data[:])
- case ctlOpts[ctlPathMTU].name:
- ctlOpts[ctlPathMTU].parse(cm, m.Data[:])
- }
- }
- return cm, nil
-}
-
-func marshalControlMessage(cm *ControlMessage) (oob []byte) {
- if cm == nil {
- return
- }
- var l int
- tclass := false
- if ctlOpts[ctlTrafficClass].name > 0 && cm.TrafficClass > 0 {
- tclass = true
- l += syscall.CmsgSpace(ctlOpts[ctlTrafficClass].length)
- }
- hoplimit := false
- if ctlOpts[ctlHopLimit].name > 0 && cm.HopLimit > 0 {
- hoplimit = true
- l += syscall.CmsgSpace(ctlOpts[ctlHopLimit].length)
- }
- pktinfo := false
- if ctlOpts[ctlPacketInfo].name > 0 && (cm.Src.To16() != nil && cm.Src.To4() == nil || cm.IfIndex > 0) {
- pktinfo = true
- l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length)
- }
- nexthop := false
- if ctlOpts[ctlNextHop].name > 0 && cm.NextHop.To16() != nil && cm.NextHop.To4() == nil {
- nexthop = true
- l += syscall.CmsgSpace(ctlOpts[ctlNextHop].length)
- }
- if l > 0 {
- oob = make([]byte, l)
- b := oob
- if tclass {
- b = ctlOpts[ctlTrafficClass].marshal(b, cm)
- }
- if hoplimit {
- b = ctlOpts[ctlHopLimit].marshal(b, cm)
- }
- if pktinfo {
- b = ctlOpts[ctlPacketInfo].marshal(b, cm)
- }
- if nexthop {
- b = ctlOpts[ctlNextHop].marshal(b, cm)
- }
- }
- return
-}
diff --git a/vendor/golang.org/x/net/ipv6/control_windows.go b/vendor/golang.org/x/net/ipv6/control_windows.go
index feef6ab..ef2563b 100644
--- a/vendor/golang.org/x/net/ipv6/control_windows.go
+++ b/vendor/golang.org/x/net/ipv6/control_windows.go
@@ -4,24 +4,13 @@
package ipv6
-import "syscall"
+import (
+ "syscall"
-func setControlMessage(s uintptr, opt *rawOpt, cf ControlFlags, on bool) error {
+ "golang.org/x/net/internal/socket"
+)
+
+func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error {
// TODO(mikio): implement this
return syscall.EWINDOWS
}
-
-func newControlMessage(opt *rawOpt) (oob []byte) {
- // TODO(mikio): implement this
- return nil
-}
-
-func parseControlMessage(b []byte) (*ControlMessage, error) {
- // TODO(mikio): implement this
- return nil, syscall.EWINDOWS
-}
-
-func marshalControlMessage(cm *ControlMessage) (oob []byte) {
- // TODO(mikio): implement this
- return nil
-}
diff --git a/vendor/golang.org/x/net/ipv6/defs_linux.go b/vendor/golang.org/x/net/ipv6/defs_linux.go
index 8a967fd..3308cb2 100644
--- a/vendor/golang.org/x/net/ipv6/defs_linux.go
+++ b/vendor/golang.org/x/net/ipv6/defs_linux.go
@@ -120,6 +120,8 @@ const (
sizeofGroupSourceReq = C.sizeof_struct_group_source_req
sizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
+
+ sizeofSockFprog = C.sizeof_struct_sock_fprog
)
type kernelSockaddrStorage C.struct___kernel_sockaddr_storage
diff --git a/vendor/golang.org/x/net/ipv6/dgramopt_posix.go b/vendor/golang.org/x/net/ipv6/dgramopt.go
similarity index 68%
rename from vendor/golang.org/x/net/ipv6/dgramopt_posix.go
rename to vendor/golang.org/x/net/ipv6/dgramopt.go
index 5714308..703dafe 100644
--- a/vendor/golang.org/x/net/ipv6/dgramopt_posix.go
+++ b/vendor/golang.org/x/net/ipv6/dgramopt.go
@@ -2,15 +2,13 @@
// 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 windows
-
package ipv6
import (
"net"
"syscall"
- "golang.org/x/net/internal/netreflect"
+ "golang.org/x/net/bpf"
)
// MulticastHopLimit returns the hop limit field value for outgoing
@@ -19,11 +17,11 @@ func (c *dgramOpt) MulticastHopLimit() (int, error) {
if !c.ok() {
return 0, syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return 0, err
+ so, ok := sockOpts[ssoMulticastHopLimit]
+ if !ok {
+ return 0, errOpNoSupport
}
- return getInt(s, &sockOpts[ssoMulticastHopLimit])
+ return so.GetInt(c.Conn)
}
// SetMulticastHopLimit sets the hop limit field value for future
@@ -32,11 +30,11 @@ func (c *dgramOpt) SetMulticastHopLimit(hoplim int) error {
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoMulticastHopLimit]
+ if !ok {
+ return errOpNoSupport
}
- return setInt(s, &sockOpts[ssoMulticastHopLimit], hoplim)
+ return so.SetInt(c.Conn, hoplim)
}
// MulticastInterface returns the default interface for multicast
@@ -45,11 +43,11 @@ func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
if !c.ok() {
return nil, syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return nil, err
+ so, ok := sockOpts[ssoMulticastInterface]
+ if !ok {
+ return nil, errOpNoSupport
}
- return getInterface(s, &sockOpts[ssoMulticastInterface])
+ return so.getMulticastInterface(c.Conn)
}
// SetMulticastInterface sets the default interface for future
@@ -58,11 +56,11 @@ func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoMulticastInterface]
+ if !ok {
+ return errOpNoSupport
}
- return setInterface(s, &sockOpts[ssoMulticastInterface], ifi)
+ return so.setMulticastInterface(c.Conn, ifi)
}
// MulticastLoopback reports whether transmitted multicast packets
@@ -71,11 +69,11 @@ func (c *dgramOpt) MulticastLoopback() (bool, error) {
if !c.ok() {
return false, syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return false, err
+ so, ok := sockOpts[ssoMulticastLoopback]
+ if !ok {
+ return false, errOpNoSupport
}
- on, err := getInt(s, &sockOpts[ssoMulticastLoopback])
+ on, err := so.GetInt(c.Conn)
if err != nil {
return false, err
}
@@ -88,11 +86,11 @@ func (c *dgramOpt) SetMulticastLoopback(on bool) error {
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoMulticastLoopback]
+ if !ok {
+ return errOpNoSupport
}
- return setInt(s, &sockOpts[ssoMulticastLoopback], boolint(on))
+ return so.SetInt(c.Conn, boolint(on))
}
// JoinGroup joins the group address group on the interface ifi.
@@ -108,15 +106,15 @@ func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error {
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoJoinGroup]
+ if !ok {
+ return errOpNoSupport
}
grp := netAddrToIP16(group)
if grp == nil {
return errMissingAddress
}
- return setGroup(s, &sockOpts[ssoJoinGroup], ifi, grp)
+ return so.setGroup(c.Conn, ifi, grp)
}
// LeaveGroup leaves the group address group on the interface ifi
@@ -126,15 +124,15 @@ func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoLeaveGroup]
+ if !ok {
+ return errOpNoSupport
}
grp := netAddrToIP16(group)
if grp == nil {
return errMissingAddress
}
- return setGroup(s, &sockOpts[ssoLeaveGroup], ifi, grp)
+ return so.setGroup(c.Conn, ifi, grp)
}
// JoinSourceSpecificGroup joins the source-specific group comprising
@@ -147,9 +145,9 @@ func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoJoinSourceGroup]
+ if !ok {
+ return errOpNoSupport
}
grp := netAddrToIP16(group)
if grp == nil {
@@ -159,7 +157,7 @@ func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net
if src == nil {
return errMissingAddress
}
- return setSourceGroup(s, &sockOpts[ssoJoinSourceGroup], ifi, grp, src)
+ return so.setSourceGroup(c.Conn, ifi, grp, src)
}
// LeaveSourceSpecificGroup leaves the source-specific group on the
@@ -168,9 +166,9 @@ func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source ne
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoLeaveSourceGroup]
+ if !ok {
+ return errOpNoSupport
}
grp := netAddrToIP16(group)
if grp == nil {
@@ -180,7 +178,7 @@ func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source ne
if src == nil {
return errMissingAddress
}
- return setSourceGroup(s, &sockOpts[ssoLeaveSourceGroup], ifi, grp, src)
+ return so.setSourceGroup(c.Conn, ifi, grp, src)
}
// ExcludeSourceSpecificGroup excludes the source-specific group from
@@ -190,9 +188,9 @@ func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoBlockSourceGroup]
+ if !ok {
+ return errOpNoSupport
}
grp := netAddrToIP16(group)
if grp == nil {
@@ -202,7 +200,7 @@ func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source
if src == nil {
return errMissingAddress
}
- return setSourceGroup(s, &sockOpts[ssoBlockSourceGroup], ifi, grp, src)
+ return so.setSourceGroup(c.Conn, ifi, grp, src)
}
// IncludeSourceSpecificGroup includes the excluded source-specific
@@ -211,9 +209,9 @@ func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoUnblockSourceGroup]
+ if !ok {
+ return errOpNoSupport
}
grp := netAddrToIP16(group)
if grp == nil {
@@ -223,22 +221,22 @@ func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source
if src == nil {
return errMissingAddress
}
- return setSourceGroup(s, &sockOpts[ssoUnblockSourceGroup], ifi, grp, src)
+ return so.setSourceGroup(c.Conn, ifi, grp, src)
}
// Checksum reports whether the kernel will compute, store or verify a
-// checksum for both incoming and outgoing packets. If on is true, it
+// checksum for both incoming and outgoing packets. If on is true, it
// returns an offset in bytes into the data of where the checksum
// field is located.
func (c *dgramOpt) Checksum() (on bool, offset int, err error) {
if !c.ok() {
return false, 0, syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return false, 0, err
+ so, ok := sockOpts[ssoChecksum]
+ if !ok {
+ return false, 0, errOpNoSupport
}
- offset, err = getInt(s, &sockOpts[ssoChecksum])
+ offset, err = so.GetInt(c.Conn)
if err != nil {
return false, 0, err
}
@@ -248,21 +246,21 @@ func (c *dgramOpt) Checksum() (on bool, offset int, err error) {
return true, offset, nil
}
-// SetChecksum enables the kernel checksum processing. If on is ture,
+// SetChecksum enables the kernel checksum processing. If on is ture,
// the offset should be an offset in bytes into the data of where the
// checksum field is located.
func (c *dgramOpt) SetChecksum(on bool, offset int) error {
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoChecksum]
+ if !ok {
+ return errOpNoSupport
}
if !on {
offset = -1
}
- return setInt(s, &sockOpts[ssoChecksum], offset)
+ return so.SetInt(c.Conn, offset)
}
// ICMPFilter returns an ICMP filter.
@@ -270,11 +268,11 @@ func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) {
if !c.ok() {
return nil, syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return nil, err
+ so, ok := sockOpts[ssoICMPFilter]
+ if !ok {
+ return nil, errOpNoSupport
}
- return getICMPFilter(s, &sockOpts[ssoICMPFilter])
+ return so.getICMPFilter(c.Conn)
}
// SetICMPFilter deploys the ICMP filter.
@@ -282,9 +280,23 @@ func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error {
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.PacketConn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoICMPFilter]
+ if !ok {
+ return errOpNoSupport
}
- return setICMPFilter(s, &sockOpts[ssoICMPFilter], f)
+ return so.setICMPFilter(c.Conn, f)
+}
+
+// SetBPF attaches a BPF program to the connection.
+//
+// Only supported on Linux.
+func (c *dgramOpt) SetBPF(filter []bpf.RawInstruction) error {
+ if !c.ok() {
+ return syscall.EINVAL
+ }
+ so, ok := sockOpts[ssoAttachFilter]
+ if !ok {
+ return errOpNoSupport
+ }
+ return so.setBPF(c.Conn, filter)
}
diff --git a/vendor/golang.org/x/net/ipv6/dgramopt_stub.go b/vendor/golang.org/x/net/ipv6/dgramopt_stub.go
deleted file mode 100644
index bc3290a..0000000
--- a/vendor/golang.org/x/net/ipv6/dgramopt_stub.go
+++ /dev/null
@@ -1,119 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build nacl plan9
-
-package ipv6
-
-import "net"
-
-// MulticastHopLimit returns the hop limit field value for outgoing
-// multicast packets.
-func (c *dgramOpt) MulticastHopLimit() (int, error) {
- return 0, errOpNoSupport
-}
-
-// SetMulticastHopLimit sets the hop limit field value for future
-// outgoing multicast packets.
-func (c *dgramOpt) SetMulticastHopLimit(hoplim int) error {
- return errOpNoSupport
-}
-
-// MulticastInterface returns the default interface for multicast
-// packet transmissions.
-func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
- return nil, errOpNoSupport
-}
-
-// SetMulticastInterface sets the default interface for future
-// multicast packet transmissions.
-func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
- return errOpNoSupport
-}
-
-// MulticastLoopback reports whether transmitted multicast packets
-// should be copied and send back to the originator.
-func (c *dgramOpt) MulticastLoopback() (bool, error) {
- return false, errOpNoSupport
-}
-
-// SetMulticastLoopback sets whether transmitted multicast packets
-// should be copied and send back to the originator.
-func (c *dgramOpt) SetMulticastLoopback(on bool) error {
- return errOpNoSupport
-}
-
-// JoinGroup joins the group address group on the interface ifi.
-// By default all sources that can cast data to group are accepted.
-// It's possible to mute and unmute data transmission from a specific
-// source by using ExcludeSourceSpecificGroup and
-// IncludeSourceSpecificGroup.
-// JoinGroup uses the system assigned multicast interface when ifi is
-// nil, although this is not recommended because the assignment
-// depends on platforms and sometimes it might require routing
-// configuration.
-func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error {
- return errOpNoSupport
-}
-
-// LeaveGroup leaves the group address group on the interface ifi
-// regardless of whether the group is any-source group or
-// source-specific group.
-func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
- return errOpNoSupport
-}
-
-// JoinSourceSpecificGroup joins the source-specific group comprising
-// group and source on the interface ifi.
-// JoinSourceSpecificGroup uses the system assigned multicast
-// interface when ifi is nil, although this is not recommended because
-// the assignment depends on platforms and sometimes it might require
-// routing configuration.
-func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
- return errOpNoSupport
-}
-
-// LeaveSourceSpecificGroup leaves the source-specific group on the
-// interface ifi.
-func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
- return errOpNoSupport
-}
-
-// ExcludeSourceSpecificGroup excludes the source-specific group from
-// the already joined any-source groups by JoinGroup on the interface
-// ifi.
-func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
- return errOpNoSupport
-}
-
-// IncludeSourceSpecificGroup includes the excluded source-specific
-// group by ExcludeSourceSpecificGroup again on the interface ifi.
-func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error {
- return errOpNoSupport
-}
-
-// Checksum reports whether the kernel will compute, store or verify a
-// checksum for both incoming and outgoing packets. If on is true, it
-// returns an offset in bytes into the data of where the checksum
-// field is located.
-func (c *dgramOpt) Checksum() (on bool, offset int, err error) {
- return false, 0, errOpNoSupport
-}
-
-// SetChecksum enables the kernel checksum processing. If on is ture,
-// the offset should be an offset in bytes into the data of where the
-// checksum field is located.
-func (c *dgramOpt) SetChecksum(on bool, offset int) error {
- return errOpNoSupport
-}
-
-// ICMPFilter returns an ICMP filter.
-func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) {
- return nil, errOpNoSupport
-}
-
-// SetICMPFilter deploys the ICMP filter.
-func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error {
- return errOpNoSupport
-}
diff --git a/vendor/golang.org/x/net/ipv6/doc.go b/vendor/golang.org/x/net/ipv6/doc.go
index 52d2c3d..eaa24c5 100644
--- a/vendor/golang.org/x/net/ipv6/doc.go
+++ b/vendor/golang.org/x/net/ipv6/doc.go
@@ -22,10 +22,10 @@
//
// The options for unicasting are available for net.TCPConn,
// net.UDPConn and net.IPConn which are created as network connections
-// that use the IPv6 transport. When a single TCP connection carrying
+// that use the IPv6 transport. When a single TCP connection carrying
// a data flow of multiple packets needs to indicate the flow is
-// important, ipv6.Conn is used to set the traffic class field on the
-// IPv6 header for each packet.
+// important, Conn is used to set the traffic class field on the IPv6
+// header for each packet.
//
// ln, err := net.Listen("tcp6", "[::]:1024")
// if err != nil {
@@ -57,7 +57,7 @@
//
// The options for multicasting are available for net.UDPConn and
// net.IPconn which are created as network connections that use the
-// IPv6 transport. A few network facilities must be prepared before
+// IPv6 transport. A few network facilities must be prepared before
// you begin multicasting, at a minimum joining network interfaces and
// multicast groups.
//
@@ -81,7 +81,7 @@
// defer c.Close()
//
// Second, the application joins multicast groups, starts listening to
-// the groups on the specified network interfaces. Note that the
+// the groups on the specified network interfaces. Note that the
// service port for transport layer protocol does not matter with this
// operation as joining groups affects only network and link layer
// protocols, such as IPv6 and Ethernet.
@@ -95,10 +95,10 @@
// }
//
// The application might set per packet control message transmissions
-// between the protocol stack within the kernel. When the application
+// between the protocol stack within the kernel. When the application
// needs a destination address on an incoming packet,
-// SetControlMessage of ipv6.PacketConn is used to enable control
-// message transmissions.
+// SetControlMessage of PacketConn is used to enable control message
+// transmissions.
//
// if err := p.SetControlMessage(ipv6.FlagDst, true); err != nil {
// // error handling
@@ -144,7 +144,7 @@
// More multicasting
//
// An application that uses PacketConn may join multiple multicast
-// groups. For example, a UDP listener with port 1024 might join two
+// groups. For example, a UDP listener with port 1024 might join two
// different groups across over two different network interfaces by
// using:
//
@@ -165,7 +165,7 @@
// }
//
// It is possible for multiple UDP listeners that listen on the same
-// UDP port to join the same multicast group. The net package will
+// UDP port to join the same multicast group. The net package will
// provide a socket that listens to a wildcard address with reusable
// UDP port when an appropriate multicast address prefix is passed to
// the net.ListenPacket or net.ListenUDP.
diff --git a/vendor/golang.org/x/net/ipv6/endpoint.go b/vendor/golang.org/x/net/ipv6/endpoint.go
index f6a68ab..0624c17 100644
--- a/vendor/golang.org/x/net/ipv6/endpoint.go
+++ b/vendor/golang.org/x/net/ipv6/endpoint.go
@@ -9,7 +9,7 @@ import (
"syscall"
"time"
- "golang.org/x/net/internal/netreflect"
+ "golang.org/x/net/internal/socket"
)
// BUG(mikio): On Windows, the JoinSourceSpecificGroup,
@@ -25,7 +25,7 @@ type Conn struct {
}
type genericOpt struct {
- net.Conn
+ *socket.Conn
}
func (c *genericOpt) ok() bool { return c != nil && c.Conn != nil }
@@ -33,14 +33,14 @@ func (c *genericOpt) ok() bool { return c != nil && c.Conn != nil }
// PathMTU returns a path MTU value for the destination associated
// with the endpoint.
func (c *Conn) PathMTU() (int, error) {
- if !c.genericOpt.ok() {
+ if !c.ok() {
return 0, syscall.EINVAL
}
- s, err := netreflect.SocketOf(c.genericOpt.Conn)
- if err != nil {
- return 0, err
+ so, ok := sockOpts[ssoPathMTU]
+ if !ok {
+ return 0, errOpNoSupport
}
- _, mtu, err := getMTUInfo(s, &sockOpts[ssoPathMTU])
+ _, mtu, err := so.getMTUInfo(c.Conn)
if err != nil {
return 0, err
}
@@ -49,14 +49,15 @@ func (c *Conn) PathMTU() (int, error) {
// NewConn returns a new Conn.
func NewConn(c net.Conn) *Conn {
+ cc, _ := socket.NewConn(c)
return &Conn{
- genericOpt: genericOpt{Conn: c},
+ genericOpt: genericOpt{Conn: cc},
}
}
// A PacketConn represents a packet network endpoint that uses IPv6
-// transport. It is used to control several IP-level socket options
-// including IPv6 header manipulation. It also provides datagram
+// transport. It is used to control several IP-level socket options
+// including IPv6 header manipulation. It also provides datagram
// based network I/O methods specific to the IPv6 and higher layer
// protocols such as OSPF, GRE, and UDP.
type PacketConn struct {
@@ -66,10 +67,10 @@ type PacketConn struct {
}
type dgramOpt struct {
- net.PacketConn
+ *socket.Conn
}
-func (c *dgramOpt) ok() bool { return c != nil && c.PacketConn != nil }
+func (c *dgramOpt) ok() bool { return c != nil && c.Conn != nil }
// SetControlMessage allows to receive the per packet basis IP-level
// socket options.
@@ -77,11 +78,7 @@ func (c *PacketConn) SetControlMessage(cf ControlFlags, on bool) error {
if !c.payloadHandler.ok() {
return syscall.EINVAL
}
- s, err := netreflect.PacketSocketOf(c.dgramOpt.PacketConn)
- if err != nil {
- return err
- }
- return setControlMessage(s, &c.payloadHandler.rawOpt, cf, on)
+ return setControlMessage(c.dgramOpt.Conn, &c.payloadHandler.rawOpt, cf, on)
}
// SetDeadline sets the read and write deadlines associated with the
@@ -122,9 +119,10 @@ func (c *PacketConn) Close() error {
// NewPacketConn returns a new PacketConn using c as its underlying
// transport.
func NewPacketConn(c net.PacketConn) *PacketConn {
+ cc, _ := socket.NewConn(c.(net.Conn))
return &PacketConn{
- genericOpt: genericOpt{Conn: c.(net.Conn)},
- dgramOpt: dgramOpt{PacketConn: c},
- payloadHandler: payloadHandler{PacketConn: c},
+ genericOpt: genericOpt{Conn: cc},
+ dgramOpt: dgramOpt{Conn: cc},
+ payloadHandler: payloadHandler{PacketConn: c, Conn: cc},
}
}
diff --git a/vendor/golang.org/x/net/ipv6/genericopt_posix.go b/vendor/golang.org/x/net/ipv6/genericopt.go
similarity index 59%
rename from vendor/golang.org/x/net/ipv6/genericopt_posix.go
rename to vendor/golang.org/x/net/ipv6/genericopt.go
index 0a8d988..e9dbc2e 100644
--- a/vendor/golang.org/x/net/ipv6/genericopt_posix.go
+++ b/vendor/golang.org/x/net/ipv6/genericopt.go
@@ -2,15 +2,9 @@
// 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 windows
-
package ipv6
-import (
- "syscall"
-
- "golang.org/x/net/internal/netreflect"
-)
+import "syscall"
// TrafficClass returns the traffic class field value for outgoing
// packets.
@@ -18,11 +12,11 @@ func (c *genericOpt) TrafficClass() (int, error) {
if !c.ok() {
return 0, syscall.EINVAL
}
- s, err := netreflect.SocketOf(c.Conn)
- if err != nil {
- return 0, err
+ so, ok := sockOpts[ssoTrafficClass]
+ if !ok {
+ return 0, errOpNoSupport
}
- return getInt(s, &sockOpts[ssoTrafficClass])
+ return so.GetInt(c.Conn)
}
// SetTrafficClass sets the traffic class field value for future
@@ -31,11 +25,11 @@ func (c *genericOpt) SetTrafficClass(tclass int) error {
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.SocketOf(c.Conn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoTrafficClass]
+ if !ok {
+ return errOpNoSupport
}
- return setInt(s, &sockOpts[ssoTrafficClass], tclass)
+ return so.SetInt(c.Conn, tclass)
}
// HopLimit returns the hop limit field value for outgoing packets.
@@ -43,11 +37,11 @@ func (c *genericOpt) HopLimit() (int, error) {
if !c.ok() {
return 0, syscall.EINVAL
}
- s, err := netreflect.SocketOf(c.Conn)
- if err != nil {
- return 0, err
+ so, ok := sockOpts[ssoHopLimit]
+ if !ok {
+ return 0, errOpNoSupport
}
- return getInt(s, &sockOpts[ssoHopLimit])
+ return so.GetInt(c.Conn)
}
// SetHopLimit sets the hop limit field value for future outgoing
@@ -56,9 +50,9 @@ func (c *genericOpt) SetHopLimit(hoplim int) error {
if !c.ok() {
return syscall.EINVAL
}
- s, err := netreflect.SocketOf(c.Conn)
- if err != nil {
- return err
+ so, ok := sockOpts[ssoHopLimit]
+ if !ok {
+ return errOpNoSupport
}
- return setInt(s, &sockOpts[ssoHopLimit], hoplim)
+ return so.SetInt(c.Conn, hoplim)
}
diff --git a/vendor/golang.org/x/net/ipv6/genericopt_stub.go b/vendor/golang.org/x/net/ipv6/genericopt_stub.go
deleted file mode 100644
index 9dfc57d..0000000
--- a/vendor/golang.org/x/net/ipv6/genericopt_stub.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build nacl plan9
-
-package ipv6
-
-// TrafficClass returns the traffic class field value for outgoing
-// packets.
-func (c *genericOpt) TrafficClass() (int, error) {
- return 0, errOpNoSupport
-}
-
-// SetTrafficClass sets the traffic class field value for future
-// outgoing packets.
-func (c *genericOpt) SetTrafficClass(tclass int) error {
- return errOpNoSupport
-}
-
-// HopLimit returns the hop limit field value for outgoing packets.
-func (c *genericOpt) HopLimit() (int, error) {
- return 0, errOpNoSupport
-}
-
-// SetHopLimit sets the hop limit field value for future outgoing
-// packets.
-func (c *genericOpt) SetHopLimit(hoplim int) error {
- return errOpNoSupport
-}
diff --git a/vendor/golang.org/x/net/ipv6/icmp.go b/vendor/golang.org/x/net/ipv6/icmp.go
index df9e4fb..ff21d10 100644
--- a/vendor/golang.org/x/net/ipv6/icmp.go
+++ b/vendor/golang.org/x/net/ipv6/icmp.go
@@ -6,6 +6,9 @@ package ipv6
import "golang.org/x/net/internal/iana"
+// BUG(mikio): On Windows, methods related to ICMPFilter are not
+// implemented.
+
// An ICMPType represents a type of ICMP message.
type ICMPType int
diff --git a/vendor/golang.org/x/net/ipv6/icmp_stub.go b/vendor/golang.org/x/net/ipv6/icmp_stub.go
index 3cd84e1..c4b9be6 100644
--- a/vendor/golang.org/x/net/ipv6/icmp_stub.go
+++ b/vendor/golang.org/x/net/ipv6/icmp_stub.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 nacl plan9
+// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows
package ipv6
diff --git a/vendor/golang.org/x/net/ipv6/payload.go b/vendor/golang.org/x/net/ipv6/payload.go
index d9f8225..a8197f1 100644
--- a/vendor/golang.org/x/net/ipv6/payload.go
+++ b/vendor/golang.org/x/net/ipv6/payload.go
@@ -4,7 +4,11 @@
package ipv6
-import "net"
+import (
+ "net"
+
+ "golang.org/x/net/internal/socket"
+)
// BUG(mikio): On Windows, the ControlMessage for ReadFrom and WriteTo
// methods of PacketConn is not implemented.
@@ -12,7 +16,8 @@ import "net"
// A payloadHandler represents the IPv6 datagram payload handler.
type payloadHandler struct {
net.PacketConn
+ *socket.Conn
rawOpt
}
-func (c *payloadHandler) ok() bool { return c != nil && c.PacketConn != nil }
+func (c *payloadHandler) ok() bool { return c != nil && c.PacketConn != nil && c.Conn != nil }
diff --git a/vendor/golang.org/x/net/ipv6/payload_cmsg.go b/vendor/golang.org/x/net/ipv6/payload_cmsg.go
index 3a33585..4ee4b06 100644
--- a/vendor/golang.org/x/net/ipv6/payload_cmsg.go
+++ b/vendor/golang.org/x/net/ipv6/payload_cmsg.go
@@ -12,59 +12,24 @@ import (
)
// ReadFrom reads a payload of the received IPv6 datagram, from the
-// endpoint c, copying the payload into b. It returns the number of
+// endpoint c, copying the payload into b. It returns the number of
// bytes copied into b, the control message cm and the source address
// src of the received datagram.
func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) {
if !c.ok() {
return 0, nil, nil, syscall.EINVAL
}
- oob := newControlMessage(&c.rawOpt)
- var oobn int
- switch c := c.PacketConn.(type) {
- case *net.UDPConn:
- if n, oobn, _, src, err = c.ReadMsgUDP(b, oob); err != nil {
- return 0, nil, nil, err
- }
- case *net.IPConn:
- if n, oobn, _, src, err = c.ReadMsgIP(b, oob); err != nil {
- return 0, nil, nil, err
- }
- default:
- return 0, nil, nil, errInvalidConnType
- }
- if cm, err = parseControlMessage(oob[:oobn]); err != nil {
- return 0, nil, nil, err
- }
- if cm != nil {
- cm.Src = netAddrToIP16(src)
- }
- return
+ return c.readFrom(b)
}
// WriteTo writes a payload of the IPv6 datagram, to the destination
-// address dst through the endpoint c, copying the payload from b. It
-// returns the number of bytes written. The control message cm allows
-// the IPv6 header fields and the datagram path to be specified. The
+// address dst through the endpoint c, copying the payload from b. It
+// returns the number of bytes written. The control message cm allows
+// the IPv6 header fields and the datagram path to be specified. The
// cm may be nil if control of the outgoing datagram is not required.
func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) {
if !c.ok() {
return 0, syscall.EINVAL
}
- oob := marshalControlMessage(cm)
- if dst == nil {
- return 0, errMissingAddress
- }
- switch c := c.PacketConn.(type) {
- case *net.UDPConn:
- n, _, err = c.WriteMsgUDP(b, oob, dst.(*net.UDPAddr))
- case *net.IPConn:
- n, _, err = c.WriteMsgIP(b, oob, dst.(*net.IPAddr))
- default:
- return 0, errInvalidConnType
- }
- if err != nil {
- return 0, err
- }
- return
+ return c.writeTo(b, cm, dst)
}
diff --git a/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_8.go b/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_8.go
new file mode 100644
index 0000000..431cff4
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_8.go
@@ -0,0 +1,55 @@
+// 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 !go1.9
+// +build !nacl,!plan9,!windows
+
+package ipv6
+
+import "net"
+
+func (c *payloadHandler) readFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) {
+ c.rawOpt.RLock()
+ oob := NewControlMessage(c.rawOpt.cflags)
+ c.rawOpt.RUnlock()
+ var nn int
+ switch c := c.PacketConn.(type) {
+ case *net.UDPConn:
+ if n, nn, _, src, err = c.ReadMsgUDP(b, oob); err != nil {
+ return 0, nil, nil, err
+ }
+ case *net.IPConn:
+ if n, nn, _, src, err = c.ReadMsgIP(b, oob); err != nil {
+ return 0, nil, nil, err
+ }
+ default:
+ return 0, nil, nil, &net.OpError{Op: "read", Net: c.LocalAddr().Network(), Source: c.LocalAddr(), Err: errInvalidConnType}
+ }
+ if nn > 0 {
+ cm = new(ControlMessage)
+ if err = cm.Parse(oob[:nn]); err != nil {
+ return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ }
+ }
+ if cm != nil {
+ cm.Src = netAddrToIP16(src)
+ }
+ return
+}
+
+func (c *payloadHandler) writeTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) {
+ oob := cm.Marshal()
+ if dst == nil {
+ return 0, &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: errMissingAddress}
+ }
+ switch c := c.PacketConn.(type) {
+ case *net.UDPConn:
+ n, _, err = c.WriteMsgUDP(b, oob, dst.(*net.UDPAddr))
+ case *net.IPConn:
+ n, _, err = c.WriteMsgIP(b, oob, dst.(*net.IPAddr))
+ default:
+ return 0, &net.OpError{Op: "write", Net: c.LocalAddr().Network(), Source: c.LocalAddr(), Err: errInvalidConnType}
+ }
+ return
+}
diff --git a/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_9.go b/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_9.go
new file mode 100644
index 0000000..4072c58
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_9.go
@@ -0,0 +1,57 @@
+// 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
+// +build !nacl,!plan9,!windows
+
+package ipv6
+
+import (
+ "net"
+
+ "golang.org/x/net/internal/socket"
+)
+
+func (c *payloadHandler) readFrom(b []byte) (int, *ControlMessage, net.Addr, error) {
+ c.rawOpt.RLock()
+ m := socket.Message{
+ Buffers: [][]byte{b},
+ OOB: NewControlMessage(c.rawOpt.cflags),
+ }
+ c.rawOpt.RUnlock()
+ switch c.PacketConn.(type) {
+ case *net.UDPConn:
+ if err := c.RecvMsg(&m, 0); err != nil {
+ return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ }
+ case *net.IPConn:
+ if err := c.RecvMsg(&m, 0); err != nil {
+ return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ }
+ default:
+ return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: errInvalidConnType}
+ }
+ var cm *ControlMessage
+ if m.NN > 0 {
+ cm = new(ControlMessage)
+ if err := cm.Parse(m.OOB[:m.NN]); err != nil {
+ return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ }
+ cm.Src = netAddrToIP16(m.Addr)
+ }
+ return m.N, cm, m.Addr, nil
+}
+
+func (c *payloadHandler) writeTo(b []byte, cm *ControlMessage, dst net.Addr) (int, error) {
+ m := socket.Message{
+ Buffers: [][]byte{b},
+ OOB: cm.Marshal(),
+ Addr: dst,
+ }
+ err := c.SendMsg(&m, 0)
+ if err != nil {
+ err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err}
+ }
+ return m.N, err
+}
diff --git a/vendor/golang.org/x/net/ipv6/payload_nocmsg.go b/vendor/golang.org/x/net/ipv6/payload_nocmsg.go
index 9731cba..99a4354 100644
--- a/vendor/golang.org/x/net/ipv6/payload_nocmsg.go
+++ b/vendor/golang.org/x/net/ipv6/payload_nocmsg.go
@@ -12,7 +12,7 @@ import (
)
// ReadFrom reads a payload of the received IPv6 datagram, from the
-// endpoint c, copying the payload into b. It returns the number of
+// endpoint c, copying the payload into b. It returns the number of
// bytes copied into b, the control message cm and the source address
// src of the received datagram.
func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) {
@@ -26,9 +26,9 @@ func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.
}
// WriteTo writes a payload of the IPv6 datagram, to the destination
-// address dst through the endpoint c, copying the payload from b. It
-// returns the number of bytes written. The control message cm allows
-// the IPv6 header fields and the datagram path to be specified. The
+// address dst through the endpoint c, copying the payload from b. It
+// returns the number of bytes written. The control message cm allows
+// the IPv6 header fields and the datagram path to be specified. The
// cm may be nil if control of the outgoing datagram is not required.
func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) {
if !c.ok() {
diff --git a/vendor/golang.org/x/net/ipv6/readwrite_go1_8_test.go b/vendor/golang.org/x/net/ipv6/readwrite_go1_8_test.go
new file mode 100644
index 0000000..c11d92a
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv6/readwrite_go1_8_test.go
@@ -0,0 +1,242 @@
+// 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 !go1.9
+
+package ipv6_test
+
+import (
+ "bytes"
+ "fmt"
+ "net"
+ "runtime"
+ "strings"
+ "sync"
+ "testing"
+
+ "golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/nettest"
+ "golang.org/x/net/ipv6"
+)
+
+func BenchmarkPacketConnReadWriteUnicast(b *testing.B) {
+ switch runtime.GOOS {
+ case "nacl", "plan9", "windows":
+ b.Skipf("not supported on %s", runtime.GOOS)
+ }
+
+ payload := []byte("HELLO-R-U-THERE")
+ iph := []byte{
+ 0x69, 0x8b, 0xee, 0xf1, 0xca, 0xfe, 0xff, 0x01,
+ 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ }
+ greh := []byte{0x00, 0x00, 0x86, 0xdd, 0x00, 0x00, 0x00, 0x00}
+ datagram := append(greh, append(iph, payload...)...)
+ bb := make([]byte, 128)
+ cm := ipv6.ControlMessage{
+ TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced,
+ HopLimit: 1,
+ Src: net.IPv6loopback,
+ }
+ if ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback); ifi != nil {
+ cm.IfIndex = ifi.Index
+ }
+
+ b.Run("UDP", func(b *testing.B) {
+ c, err := nettest.NewLocalPacketListener("udp6")
+ if err != nil {
+ b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+ p := ipv6.NewPacketConn(c)
+ dst := c.LocalAddr()
+ cf := ipv6.FlagHopLimit | ipv6.FlagInterface
+ if err := p.SetControlMessage(cf, true); err != nil {
+ b.Fatal(err)
+ }
+ b.Run("Net", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := c.WriteTo(payload, dst); err != nil {
+ b.Fatal(err)
+ }
+ if _, _, err := c.ReadFrom(bb); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ b.Run("ToFrom", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := p.WriteTo(payload, &cm, dst); err != nil {
+ b.Fatal(err)
+ }
+ if _, _, _, err := p.ReadFrom(bb); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ })
+ b.Run("IP", func(b *testing.B) {
+ switch runtime.GOOS {
+ case "netbsd":
+ b.Skip("need to configure gre on netbsd")
+ case "openbsd":
+ b.Skip("net.inet.gre.allow=0 by default on openbsd")
+ }
+
+ c, err := net.ListenPacket(fmt.Sprintf("ip6:%d", iana.ProtocolGRE), "::1")
+ if err != nil {
+ b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+ p := ipv6.NewPacketConn(c)
+ dst := c.LocalAddr()
+ cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU
+ if err := p.SetControlMessage(cf, true); err != nil {
+ b.Fatal(err)
+ }
+ b.Run("Net", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := c.WriteTo(datagram, dst); err != nil {
+ b.Fatal(err)
+ }
+ if _, _, err := c.ReadFrom(bb); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ b.Run("ToFrom", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := p.WriteTo(datagram, &cm, dst); err != nil {
+ b.Fatal(err)
+ }
+ if _, _, _, err := p.ReadFrom(bb); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ })
+}
+
+func TestPacketConnConcurrentReadWriteUnicast(t *testing.T) {
+ switch runtime.GOOS {
+ case "nacl", "plan9", "windows":
+ t.Skipf("not supported on %s", runtime.GOOS)
+ }
+
+ payload := []byte("HELLO-R-U-THERE")
+ iph := []byte{
+ 0x69, 0x8b, 0xee, 0xf1, 0xca, 0xfe, 0xff, 0x01,
+ 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ }
+ greh := []byte{0x00, 0x00, 0x86, 0xdd, 0x00, 0x00, 0x00, 0x00}
+ datagram := append(greh, append(iph, payload...)...)
+
+ t.Run("UDP", func(t *testing.T) {
+ c, err := nettest.NewLocalPacketListener("udp6")
+ if err != nil {
+ t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+ p := ipv6.NewPacketConn(c)
+ t.Run("ToFrom", func(t *testing.T) {
+ testPacketConnConcurrentReadWriteUnicast(t, p, payload, c.LocalAddr())
+ })
+ })
+ t.Run("IP", func(t *testing.T) {
+ switch runtime.GOOS {
+ case "netbsd":
+ t.Skip("need to configure gre on netbsd")
+ case "openbsd":
+ t.Skip("net.inet.gre.allow=0 by default on openbsd")
+ }
+
+ c, err := net.ListenPacket(fmt.Sprintf("ip6:%d", iana.ProtocolGRE), "::1")
+ if err != nil {
+ t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+ p := ipv6.NewPacketConn(c)
+ t.Run("ToFrom", func(t *testing.T) {
+ testPacketConnConcurrentReadWriteUnicast(t, p, datagram, c.LocalAddr())
+ })
+ })
+}
+
+func testPacketConnConcurrentReadWriteUnicast(t *testing.T, p *ipv6.PacketConn, data []byte, dst net.Addr) {
+ ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback)
+ cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU
+
+ if err := p.SetControlMessage(cf, true); err != nil { // probe before test
+ if nettest.ProtocolNotSupported(err) {
+ t.Skipf("not supported on %s", runtime.GOOS)
+ }
+ t.Fatal(err)
+ }
+
+ var wg sync.WaitGroup
+ reader := func() {
+ defer wg.Done()
+ b := make([]byte, 128)
+ n, cm, _, err := p.ReadFrom(b)
+ if err != nil {
+ t.Error(err)
+ return
+ }
+ if !bytes.Equal(b[:n], data) {
+ t.Errorf("got %#v; want %#v", b[:n], data)
+ return
+ }
+ s := cm.String()
+ if strings.Contains(s, ",") {
+ t.Errorf("should be space-separated values: %s", s)
+ return
+ }
+ }
+ writer := func(toggle bool) {
+ defer wg.Done()
+ cm := ipv6.ControlMessage{
+ TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced,
+ HopLimit: 1,
+ Src: net.IPv6loopback,
+ }
+ if ifi != nil {
+ cm.IfIndex = ifi.Index
+ }
+ if err := p.SetControlMessage(cf, toggle); err != nil {
+ t.Error(err)
+ return
+ }
+ n, err := p.WriteTo(data, &cm, dst)
+ if err != nil {
+ t.Error(err)
+ return
+ }
+ if n != len(data) {
+ t.Errorf("got %d; want %d", n, len(data))
+ return
+ }
+ }
+
+ const N = 10
+ wg.Add(N)
+ for i := 0; i < N; i++ {
+ go reader()
+ }
+ wg.Add(2 * N)
+ for i := 0; i < 2*N; i++ {
+ go writer(i%2 != 0)
+
+ }
+ wg.Add(N)
+ for i := 0; i < N; i++ {
+ go reader()
+ }
+ wg.Wait()
+}
diff --git a/vendor/golang.org/x/net/ipv6/readwrite_go1_9_test.go b/vendor/golang.org/x/net/ipv6/readwrite_go1_9_test.go
new file mode 100644
index 0000000..e2fd733
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv6/readwrite_go1_9_test.go
@@ -0,0 +1,373 @@
+// 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 ipv6_test
+
+import (
+ "bytes"
+ "fmt"
+ "net"
+ "runtime"
+ "strings"
+ "sync"
+ "testing"
+
+ "golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/nettest"
+ "golang.org/x/net/ipv6"
+)
+
+func BenchmarkPacketConnReadWriteUnicast(b *testing.B) {
+ switch runtime.GOOS {
+ case "nacl", "plan9", "windows":
+ b.Skipf("not supported on %s", runtime.GOOS)
+ }
+
+ payload := []byte("HELLO-R-U-THERE")
+ iph := []byte{
+ 0x69, 0x8b, 0xee, 0xf1, 0xca, 0xfe, 0xff, 0x01,
+ 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ }
+ greh := []byte{0x00, 0x00, 0x86, 0xdd, 0x00, 0x00, 0x00, 0x00}
+ datagram := append(greh, append(iph, payload...)...)
+ bb := make([]byte, 128)
+ cm := ipv6.ControlMessage{
+ TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced,
+ HopLimit: 1,
+ Src: net.IPv6loopback,
+ }
+ if ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback); ifi != nil {
+ cm.IfIndex = ifi.Index
+ }
+
+ b.Run("UDP", func(b *testing.B) {
+ c, err := nettest.NewLocalPacketListener("udp6")
+ if err != nil {
+ b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+ p := ipv6.NewPacketConn(c)
+ dst := c.LocalAddr()
+ cf := ipv6.FlagHopLimit | ipv6.FlagInterface
+ if err := p.SetControlMessage(cf, true); err != nil {
+ b.Fatal(err)
+ }
+ wms := []ipv6.Message{
+ {
+ Buffers: [][]byte{payload},
+ Addr: dst,
+ OOB: cm.Marshal(),
+ },
+ }
+ rms := []ipv6.Message{
+ {
+ Buffers: [][]byte{bb},
+ OOB: ipv6.NewControlMessage(cf),
+ },
+ }
+ b.Run("Net", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := c.WriteTo(payload, dst); err != nil {
+ b.Fatal(err)
+ }
+ if _, _, err := c.ReadFrom(bb); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ b.Run("ToFrom", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := p.WriteTo(payload, &cm, dst); err != nil {
+ b.Fatal(err)
+ }
+ if _, _, _, err := p.ReadFrom(bb); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ b.Run("Batch", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := p.WriteBatch(wms, 0); err != nil {
+ b.Fatal(err)
+ }
+ if _, err := p.ReadBatch(rms, 0); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ })
+ b.Run("IP", func(b *testing.B) {
+ switch runtime.GOOS {
+ case "netbsd":
+ b.Skip("need to configure gre on netbsd")
+ case "openbsd":
+ b.Skip("net.inet.gre.allow=0 by default on openbsd")
+ }
+
+ c, err := net.ListenPacket(fmt.Sprintf("ip6:%d", iana.ProtocolGRE), "::1")
+ if err != nil {
+ b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+ p := ipv6.NewPacketConn(c)
+ dst := c.LocalAddr()
+ cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU
+ if err := p.SetControlMessage(cf, true); err != nil {
+ b.Fatal(err)
+ }
+ wms := []ipv6.Message{
+ {
+ Buffers: [][]byte{datagram},
+ Addr: dst,
+ OOB: cm.Marshal(),
+ },
+ }
+ rms := []ipv6.Message{
+ {
+ Buffers: [][]byte{bb},
+ OOB: ipv6.NewControlMessage(cf),
+ },
+ }
+ b.Run("Net", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := c.WriteTo(datagram, dst); err != nil {
+ b.Fatal(err)
+ }
+ if _, _, err := c.ReadFrom(bb); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ b.Run("ToFrom", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := p.WriteTo(datagram, &cm, dst); err != nil {
+ b.Fatal(err)
+ }
+ if _, _, _, err := p.ReadFrom(bb); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ b.Run("Batch", func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ if _, err := p.WriteBatch(wms, 0); err != nil {
+ b.Fatal(err)
+ }
+ if _, err := p.ReadBatch(rms, 0); err != nil {
+ b.Fatal(err)
+ }
+ }
+ })
+ })
+}
+
+func TestPacketConnConcurrentReadWriteUnicast(t *testing.T) {
+ switch runtime.GOOS {
+ case "nacl", "plan9", "windows":
+ t.Skipf("not supported on %s", runtime.GOOS)
+ }
+
+ payload := []byte("HELLO-R-U-THERE")
+ iph := []byte{
+ 0x69, 0x8b, 0xee, 0xf1, 0xca, 0xfe, 0xff, 0x01,
+ 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ }
+ greh := []byte{0x00, 0x00, 0x86, 0xdd, 0x00, 0x00, 0x00, 0x00}
+ datagram := append(greh, append(iph, payload...)...)
+
+ t.Run("UDP", func(t *testing.T) {
+ c, err := nettest.NewLocalPacketListener("udp6")
+ if err != nil {
+ t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+ p := ipv6.NewPacketConn(c)
+ t.Run("ToFrom", func(t *testing.T) {
+ testPacketConnConcurrentReadWriteUnicast(t, p, payload, c.LocalAddr(), false)
+ })
+ t.Run("Batch", func(t *testing.T) {
+ testPacketConnConcurrentReadWriteUnicast(t, p, payload, c.LocalAddr(), true)
+ })
+ })
+ t.Run("IP", func(t *testing.T) {
+ switch runtime.GOOS {
+ case "netbsd":
+ t.Skip("need to configure gre on netbsd")
+ case "openbsd":
+ t.Skip("net.inet.gre.allow=0 by default on openbsd")
+ }
+
+ c, err := net.ListenPacket(fmt.Sprintf("ip6:%d", iana.ProtocolGRE), "::1")
+ if err != nil {
+ t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err)
+ }
+ defer c.Close()
+ p := ipv6.NewPacketConn(c)
+ t.Run("ToFrom", func(t *testing.T) {
+ testPacketConnConcurrentReadWriteUnicast(t, p, datagram, c.LocalAddr(), false)
+ })
+ t.Run("Batch", func(t *testing.T) {
+ testPacketConnConcurrentReadWriteUnicast(t, p, datagram, c.LocalAddr(), true)
+ })
+ })
+}
+
+func testPacketConnConcurrentReadWriteUnicast(t *testing.T, p *ipv6.PacketConn, data []byte, dst net.Addr, batch bool) {
+ ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback)
+ cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU
+
+ if err := p.SetControlMessage(cf, true); err != nil { // probe before test
+ if nettest.ProtocolNotSupported(err) {
+ t.Skipf("not supported on %s", runtime.GOOS)
+ }
+ t.Fatal(err)
+ }
+
+ var wg sync.WaitGroup
+ reader := func() {
+ defer wg.Done()
+ b := make([]byte, 128)
+ n, cm, _, err := p.ReadFrom(b)
+ if err != nil {
+ t.Error(err)
+ return
+ }
+ if !bytes.Equal(b[:n], data) {
+ t.Errorf("got %#v; want %#v", b[:n], data)
+ return
+ }
+ s := cm.String()
+ if strings.Contains(s, ",") {
+ t.Errorf("should be space-separated values: %s", s)
+ return
+ }
+ }
+ batchReader := func() {
+ defer wg.Done()
+ ms := []ipv6.Message{
+ {
+ Buffers: [][]byte{make([]byte, 128)},
+ OOB: ipv6.NewControlMessage(cf),
+ },
+ }
+ n, err := p.ReadBatch(ms, 0)
+ if err != nil {
+ t.Error(err)
+ return
+ }
+ if n != len(ms) {
+ t.Errorf("got %d; want %d", n, len(ms))
+ return
+ }
+ var cm ipv6.ControlMessage
+ if err := cm.Parse(ms[0].OOB[:ms[0].NN]); err != nil {
+ t.Error(err)
+ return
+ }
+ b := ms[0].Buffers[0][:ms[0].N]
+ if !bytes.Equal(b, data) {
+ t.Errorf("got %#v; want %#v", b, data)
+ return
+ }
+ s := cm.String()
+ if strings.Contains(s, ",") {
+ t.Errorf("should be space-separated values: %s", s)
+ return
+ }
+ }
+ writer := func(toggle bool) {
+ defer wg.Done()
+ cm := ipv6.ControlMessage{
+ TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced,
+ HopLimit: 1,
+ Src: net.IPv6loopback,
+ }
+ if ifi != nil {
+ cm.IfIndex = ifi.Index
+ }
+ if err := p.SetControlMessage(cf, toggle); err != nil {
+ t.Error(err)
+ return
+ }
+ n, err := p.WriteTo(data, &cm, dst)
+ if err != nil {
+ t.Error(err)
+ return
+ }
+ if n != len(data) {
+ t.Errorf("got %d; want %d", n, len(data))
+ return
+ }
+ }
+ batchWriter := func(toggle bool) {
+ defer wg.Done()
+ cm := ipv6.ControlMessage{
+ TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced,
+ HopLimit: 1,
+ Src: net.IPv6loopback,
+ }
+ if ifi != nil {
+ cm.IfIndex = ifi.Index
+ }
+ if err := p.SetControlMessage(cf, toggle); err != nil {
+ t.Error(err)
+ return
+ }
+ ms := []ipv6.Message{
+ {
+ Buffers: [][]byte{data},
+ OOB: cm.Marshal(),
+ Addr: dst,
+ },
+ }
+ n, err := p.WriteBatch(ms, 0)
+ if err != nil {
+ t.Error(err)
+ return
+ }
+ if n != len(ms) {
+ t.Errorf("got %d; want %d", n, len(ms))
+ return
+ }
+ if ms[0].N != len(data) {
+ t.Errorf("got %d; want %d", ms[0].N, len(data))
+ return
+ }
+ }
+
+ const N = 10
+ wg.Add(N)
+ for i := 0; i < N; i++ {
+ if batch {
+ go batchReader()
+ } else {
+ go reader()
+ }
+ }
+ wg.Add(2 * N)
+ for i := 0; i < 2*N; i++ {
+ if batch {
+ go batchWriter(i%2 != 0)
+ } else {
+ go writer(i%2 != 0)
+ }
+ }
+ wg.Add(N)
+ for i := 0; i < N; i++ {
+ if batch {
+ go batchReader()
+ } else {
+ go reader()
+ }
+ }
+ wg.Wait()
+}
diff --git a/vendor/golang.org/x/net/ipv6/sockopt.go b/vendor/golang.org/x/net/ipv6/sockopt.go
index f0cfc2f..cc3907d 100644
--- a/vendor/golang.org/x/net/ipv6/sockopt.go
+++ b/vendor/golang.org/x/net/ipv6/sockopt.go
@@ -4,6 +4,8 @@
package ipv6
+import "golang.org/x/net/internal/socket"
+
// Sticky socket options
const (
ssoTrafficClass = iota // header field for unicast packet, RFC 3542
@@ -24,23 +26,18 @@ const (
ssoLeaveSourceGroup // source-specific multicast
ssoBlockSourceGroup // any-source or source-specific multicast
ssoUnblockSourceGroup // any-source or source-specific multicast
- ssoMax
+ ssoAttachFilter // attach BPF for filtering inbound traffic
)
// Sticky socket option value types
const (
- ssoTypeInt = iota + 1
- ssoTypeInterface
- ssoTypeICMPFilter
- ssoTypeMTUInfo
- ssoTypeIPMreq
+ ssoTypeIPMreq = iota + 1
ssoTypeGroupReq
ssoTypeGroupSourceReq
)
// A sockOpt represents a binding for sticky socket option.
type sockOpt struct {
- level int // option level
- name int // option name, must be equal or greater than 1
- typ int // option value type, must be equal or greater than 1
+ socket.Option
+ typ int // hint for option value type; optional
}
diff --git a/vendor/golang.org/x/net/ipv6/sockopt_posix.go b/vendor/golang.org/x/net/ipv6/sockopt_posix.go
index e0a3fa6..0eac86e 100644
--- a/vendor/golang.org/x/net/ipv6/sockopt_posix.go
+++ b/vendor/golang.org/x/net/ipv6/sockopt_posix.go
@@ -8,88 +8,55 @@ package ipv6
import (
"net"
- "os"
"unsafe"
+
+ "golang.org/x/net/bpf"
+ "golang.org/x/net/internal/socket"
)
-func getInt(s uintptr, opt *sockOpt) (int, error) {
- if opt.name < 1 || opt.typ != ssoTypeInt {
- return 0, errOpNoSupport
- }
- var i int32
- l := uint32(4)
- if err := getsockopt(s, opt.level, opt.name, unsafe.Pointer(&i), &l); err != nil {
- return 0, os.NewSyscallError("getsockopt", err)
- }
- return int(i), nil
-}
-
-func setInt(s uintptr, opt *sockOpt, v int) error {
- if opt.name < 1 || opt.typ != ssoTypeInt {
- return errOpNoSupport
- }
- i := int32(v)
- return os.NewSyscallError("setsockopt", setsockopt(s, opt.level, opt.name, unsafe.Pointer(&i), 4))
-}
-
-func getInterface(s uintptr, opt *sockOpt) (*net.Interface, error) {
- if opt.name < 1 || opt.typ != ssoTypeInterface {
- return nil, errOpNoSupport
- }
- var i int32
- l := uint32(4)
- if err := getsockopt(s, opt.level, opt.name, unsafe.Pointer(&i), &l); err != nil {
- return nil, os.NewSyscallError("getsockopt", err)
- }
- if i == 0 {
- return nil, nil
- }
- ifi, err := net.InterfaceByIndex(int(i))
+func (so *sockOpt) getMulticastInterface(c *socket.Conn) (*net.Interface, error) {
+ n, err := so.GetInt(c)
if err != nil {
return nil, err
}
- return ifi, nil
+ return net.InterfaceByIndex(n)
}
-func setInterface(s uintptr, opt *sockOpt, ifi *net.Interface) error {
- if opt.name < 1 || opt.typ != ssoTypeInterface {
- return errOpNoSupport
- }
- var i int32
+func (so *sockOpt) setMulticastInterface(c *socket.Conn, ifi *net.Interface) error {
+ var n int
if ifi != nil {
- i = int32(ifi.Index)
+ n = ifi.Index
}
- return os.NewSyscallError("setsockopt", setsockopt(s, opt.level, opt.name, unsafe.Pointer(&i), 4))
+ return so.SetInt(c, n)
}
-func getICMPFilter(s uintptr, opt *sockOpt) (*ICMPFilter, error) {
- if opt.name < 1 || opt.typ != ssoTypeICMPFilter {
+func (so *sockOpt) getICMPFilter(c *socket.Conn) (*ICMPFilter, error) {
+ b := make([]byte, so.Len)
+ n, err := so.Get(c, b)
+ if err != nil {
+ return nil, err
+ }
+ if n != sizeofICMPv6Filter {
return nil, errOpNoSupport
}
- var f ICMPFilter
- l := uint32(sizeofICMPv6Filter)
- if err := getsockopt(s, opt.level, opt.name, unsafe.Pointer(&f.icmpv6Filter), &l); err != nil {
- return nil, os.NewSyscallError("getsockopt", err)
- }
- return &f, nil
+ return (*ICMPFilter)(unsafe.Pointer(&b[0])), nil
}
-func setICMPFilter(s uintptr, opt *sockOpt, f *ICMPFilter) error {
- if opt.name < 1 || opt.typ != ssoTypeICMPFilter {
- return errOpNoSupport
- }
- return os.NewSyscallError("setsockopt", setsockopt(s, opt.level, opt.name, unsafe.Pointer(&f.icmpv6Filter), sizeofICMPv6Filter))
+func (so *sockOpt) setICMPFilter(c *socket.Conn, f *ICMPFilter) error {
+ b := (*[sizeofICMPv6Filter]byte)(unsafe.Pointer(f))[:sizeofICMPv6Filter]
+ return so.Set(c, b)
}
-func getMTUInfo(s uintptr, opt *sockOpt) (*net.Interface, int, error) {
- if opt.name < 1 || opt.typ != ssoTypeMTUInfo {
+func (so *sockOpt) getMTUInfo(c *socket.Conn) (*net.Interface, int, error) {
+ b := make([]byte, so.Len)
+ n, err := so.Get(c, b)
+ if err != nil {
+ return nil, 0, err
+ }
+ if n != sizeofIPv6Mtuinfo {
return nil, 0, errOpNoSupport
}
- var mi ipv6Mtuinfo
- l := uint32(sizeofIPv6Mtuinfo)
- if err := getsockopt(s, opt.level, opt.name, unsafe.Pointer(&mi), &l); err != nil {
- return nil, 0, os.NewSyscallError("getsockopt", err)
- }
+ mi := (*ipv6Mtuinfo)(unsafe.Pointer(&b[0]))
if mi.Addr.Scope_id == 0 {
return nil, int(mi.Mtu), nil
}
@@ -100,23 +67,21 @@ func getMTUInfo(s uintptr, opt *sockOpt) (*net.Interface, int, error) {
return ifi, int(mi.Mtu), nil
}
-func setGroup(s uintptr, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
- if opt.name < 1 {
- return errOpNoSupport
- }
- switch opt.typ {
+func (so *sockOpt) setGroup(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
+ switch so.typ {
case ssoTypeIPMreq:
- return setsockoptIPMreq(s, opt, ifi, grp)
+ return so.setIPMreq(c, ifi, grp)
case ssoTypeGroupReq:
- return setsockoptGroupReq(s, opt, ifi, grp)
+ return so.setGroupReq(c, ifi, grp)
default:
return errOpNoSupport
}
}
-func setSourceGroup(s uintptr, opt *sockOpt, ifi *net.Interface, grp, src net.IP) error {
- if opt.name < 1 || opt.typ != ssoTypeGroupSourceReq {
- return errOpNoSupport
- }
- return setsockoptGroupSourceReq(s, opt, ifi, grp, src)
+func (so *sockOpt) setSourceGroup(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error {
+ return so.setGroupSourceReq(c, ifi, grp, src)
+}
+
+func (so *sockOpt) setBPF(c *socket.Conn, f []bpf.RawInstruction) error {
+ return so.setAttachFilter(c, f)
}
diff --git a/vendor/golang.org/x/net/ipv6/sockopt_stub.go b/vendor/golang.org/x/net/ipv6/sockopt_stub.go
index 6d59a00..1f4a273 100644
--- a/vendor/golang.org/x/net/ipv6/sockopt_stub.go
+++ b/vendor/golang.org/x/net/ipv6/sockopt_stub.go
@@ -2,12 +2,45 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build nacl plan9
+// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows
package ipv6
-import "net"
+import (
+ "net"
-func getMTUInfo(s uintptr, opt *sockOpt) (*net.Interface, int, error) {
+ "golang.org/x/net/bpf"
+ "golang.org/x/net/internal/socket"
+)
+
+func (so *sockOpt) getMulticastInterface(c *socket.Conn) (*net.Interface, error) {
+ return nil, errOpNoSupport
+}
+
+func (so *sockOpt) setMulticastInterface(c *socket.Conn, ifi *net.Interface) error {
+ return errOpNoSupport
+}
+
+func (so *sockOpt) getICMPFilter(c *socket.Conn) (*ICMPFilter, error) {
+ return nil, errOpNoSupport
+}
+
+func (so *sockOpt) setICMPFilter(c *socket.Conn, f *ICMPFilter) error {
+ return errOpNoSupport
+}
+
+func (so *sockOpt) getMTUInfo(c *socket.Conn) (*net.Interface, int, error) {
return nil, 0, errOpNoSupport
}
+
+func (so *sockOpt) setGroup(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
+ return errOpNoSupport
+}
+
+func (so *sockOpt) setSourceGroup(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error {
+ return errOpNoSupport
+}
+
+func (so *sockOpt) setBPF(c *socket.Conn, f []bpf.RawInstruction) error {
+ return errOpNoSupport
+}
diff --git a/vendor/golang.org/x/net/ipv6/sockopt_asmreq_posix.go b/vendor/golang.org/x/net/ipv6/sys_asmreq.go
similarity index 63%
rename from vendor/golang.org/x/net/ipv6/sockopt_asmreq_posix.go
rename to vendor/golang.org/x/net/ipv6/sys_asmreq.go
index cd36739..b0510c0 100644
--- a/vendor/golang.org/x/net/ipv6/sockopt_asmreq_posix.go
+++ b/vendor/golang.org/x/net/ipv6/sys_asmreq.go
@@ -8,15 +8,17 @@ package ipv6
import (
"net"
- "os"
"unsafe"
+
+ "golang.org/x/net/internal/socket"
)
-func setsockoptIPMreq(s uintptr, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
+func (so *sockOpt) setIPMreq(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
var mreq ipv6Mreq
copy(mreq.Multiaddr[:], grp)
if ifi != nil {
mreq.setIfindex(ifi.Index)
}
- return os.NewSyscallError("setsockopt", setsockopt(s, opt.level, opt.name, unsafe.Pointer(&mreq), sizeofIPv6Mreq))
+ b := (*[sizeofIPv6Mreq]byte)(unsafe.Pointer(&mreq))[:sizeofIPv6Mreq]
+ return so.Set(c, b)
}
diff --git a/vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go b/vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go
new file mode 100644
index 0000000..eece961
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go
@@ -0,0 +1,17 @@
+// 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 !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows
+
+package ipv6
+
+import (
+ "net"
+
+ "golang.org/x/net/internal/socket"
+)
+
+func (so *sockOpt) setIPMreq(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
+ return errOpNoSupport
+}
diff --git a/vendor/golang.org/x/net/ipv6/sys_bpf.go b/vendor/golang.org/x/net/ipv6/sys_bpf.go
new file mode 100644
index 0000000..b2dbcb2
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv6/sys_bpf.go
@@ -0,0 +1,23 @@
+// 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 linux
+
+package ipv6
+
+import (
+ "unsafe"
+
+ "golang.org/x/net/bpf"
+ "golang.org/x/net/internal/socket"
+)
+
+func (so *sockOpt) setAttachFilter(c *socket.Conn, f []bpf.RawInstruction) error {
+ prog := sockFProg{
+ Len: uint16(len(f)),
+ Filter: (*sockFilter)(unsafe.Pointer(&f[0])),
+ }
+ b := (*[sizeofSockFprog]byte)(unsafe.Pointer(&prog))[:sizeofSockFprog]
+ return so.Set(c, b)
+}
diff --git a/vendor/golang.org/x/net/ipv6/sys_bpf_stub.go b/vendor/golang.org/x/net/ipv6/sys_bpf_stub.go
new file mode 100644
index 0000000..676bea5
--- /dev/null
+++ b/vendor/golang.org/x/net/ipv6/sys_bpf_stub.go
@@ -0,0 +1,16 @@
+// 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 !linux
+
+package ipv6
+
+import (
+ "golang.org/x/net/bpf"
+ "golang.org/x/net/internal/socket"
+)
+
+func (so *sockOpt) setAttachFilter(c *socket.Conn, f []bpf.RawInstruction) error {
+ return errOpNoSupport
+}
diff --git a/vendor/golang.org/x/net/ipv6/sys_bsd.go b/vendor/golang.org/x/net/ipv6/sys_bsd.go
index c22f8ac..e416eaa 100644
--- a/vendor/golang.org/x/net/ipv6/sys_bsd.go
+++ b/vendor/golang.org/x/net/ipv6/sys_bsd.go
@@ -11,6 +11,7 @@ import (
"syscall"
"golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
var (
@@ -22,21 +23,21 @@ var (
ctlPathMTU: {sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU},
}
- sockOpts = [ssoMax]sockOpt{
- ssoTrafficClass: {iana.ProtocolIPv6, sysIPV6_TCLASS, ssoTypeInt},
- ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt},
- ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface},
- ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt},
- ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt},
- ssoReceiveTrafficClass: {iana.ProtocolIPv6, sysIPV6_RECVTCLASS, ssoTypeInt},
- ssoReceiveHopLimit: {iana.ProtocolIPv6, sysIPV6_RECVHOPLIMIT, ssoTypeInt},
- ssoReceivePacketInfo: {iana.ProtocolIPv6, sysIPV6_RECVPKTINFO, ssoTypeInt},
- ssoReceivePathMTU: {iana.ProtocolIPv6, sysIPV6_RECVPATHMTU, ssoTypeInt},
- ssoPathMTU: {iana.ProtocolIPv6, sysIPV6_PATHMTU, ssoTypeMTUInfo},
- ssoChecksum: {iana.ProtocolIPv6, sysIPV6_CHECKSUM, ssoTypeInt},
- ssoICMPFilter: {iana.ProtocolIPv6ICMP, sysICMP6_FILTER, ssoTypeICMPFilter},
- ssoJoinGroup: {iana.ProtocolIPv6, sysIPV6_JOIN_GROUP, ssoTypeIPMreq},
- ssoLeaveGroup: {iana.ProtocolIPv6, sysIPV6_LEAVE_GROUP, ssoTypeIPMreq},
+ sockOpts = map[int]*sockOpt{
+ ssoTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_TCLASS, Len: 4}},
+ ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_UNICAST_HOPS, Len: 4}},
+ ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_IF, Len: 4}},
+ ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_HOPS, Len: 4}},
+ ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_LOOP, Len: 4}},
+ ssoReceiveTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVTCLASS, Len: 4}},
+ ssoReceiveHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVHOPLIMIT, Len: 4}},
+ ssoReceivePacketInfo: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPKTINFO, Len: 4}},
+ ssoReceivePathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPATHMTU, Len: 4}},
+ ssoPathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_PATHMTU, Len: sizeofIPv6Mtuinfo}},
+ ssoChecksum: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_CHECKSUM, Len: 4}},
+ ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolIPv6ICMP, Name: sysICMP6_FILTER, Len: sizeofICMPv6Filter}},
+ ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_JOIN_GROUP, Len: sizeofIPv6Mreq}, typ: ssoTypeIPMreq},
+ ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_LEAVE_GROUP, Len: sizeofIPv6Mreq}, typ: ssoTypeIPMreq},
}
)
diff --git a/vendor/golang.org/x/net/ipv6/sys_darwin.go b/vendor/golang.org/x/net/ipv6/sys_darwin.go
index ffcc9d4..e3d0443 100644
--- a/vendor/golang.org/x/net/ipv6/sys_darwin.go
+++ b/vendor/golang.org/x/net/ipv6/sys_darwin.go
@@ -12,6 +12,7 @@ import (
"unsafe"
"golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
var (
@@ -20,17 +21,17 @@ var (
ctlPacketInfo: {sysIPV6_2292PKTINFO, sizeofInet6Pktinfo, marshal2292PacketInfo, parsePacketInfo},
}
- sockOpts = [ssoMax]sockOpt{
- ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt},
- ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface},
- ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt},
- ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt},
- ssoReceiveHopLimit: {iana.ProtocolIPv6, sysIPV6_2292HOPLIMIT, ssoTypeInt},
- ssoReceivePacketInfo: {iana.ProtocolIPv6, sysIPV6_2292PKTINFO, ssoTypeInt},
- ssoChecksum: {iana.ProtocolIPv6, sysIPV6_CHECKSUM, ssoTypeInt},
- ssoICMPFilter: {iana.ProtocolIPv6ICMP, sysICMP6_FILTER, ssoTypeICMPFilter},
- ssoJoinGroup: {iana.ProtocolIPv6, sysIPV6_JOIN_GROUP, ssoTypeIPMreq},
- ssoLeaveGroup: {iana.ProtocolIPv6, sysIPV6_LEAVE_GROUP, ssoTypeIPMreq},
+ sockOpts = map[int]*sockOpt{
+ ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_UNICAST_HOPS, Len: 4}},
+ ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_IF, Len: 4}},
+ ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_HOPS, Len: 4}},
+ ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_LOOP, Len: 4}},
+ ssoReceiveHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_2292HOPLIMIT, Len: 4}},
+ ssoReceivePacketInfo: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_2292PKTINFO, Len: 4}},
+ ssoChecksum: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_CHECKSUM, Len: 4}},
+ ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolIPv6ICMP, Name: sysICMP6_FILTER, Len: sizeofICMPv6Filter}},
+ ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_JOIN_GROUP, Len: sizeofIPv6Mreq}, typ: ssoTypeIPMreq},
+ ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_LEAVE_GROUP, Len: sizeofIPv6Mreq}, typ: ssoTypeIPMreq},
}
)
@@ -57,18 +58,18 @@ func init() {
ctlOpts[ctlPacketInfo] = ctlOpt{sysIPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo}
ctlOpts[ctlNextHop] = ctlOpt{sysIPV6_NEXTHOP, sizeofSockaddrInet6, marshalNextHop, parseNextHop}
ctlOpts[ctlPathMTU] = ctlOpt{sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU}
- sockOpts[ssoTrafficClass] = sockOpt{iana.ProtocolIPv6, sysIPV6_TCLASS, ssoTypeInt}
- sockOpts[ssoReceiveTrafficClass] = sockOpt{iana.ProtocolIPv6, sysIPV6_RECVTCLASS, ssoTypeInt}
- sockOpts[ssoReceiveHopLimit] = sockOpt{iana.ProtocolIPv6, sysIPV6_RECVHOPLIMIT, ssoTypeInt}
- sockOpts[ssoReceivePacketInfo] = sockOpt{iana.ProtocolIPv6, sysIPV6_RECVPKTINFO, ssoTypeInt}
- sockOpts[ssoReceivePathMTU] = sockOpt{iana.ProtocolIPv6, sysIPV6_RECVPATHMTU, ssoTypeInt}
- sockOpts[ssoPathMTU] = sockOpt{iana.ProtocolIPv6, sysIPV6_PATHMTU, ssoTypeMTUInfo}
- sockOpts[ssoJoinGroup] = sockOpt{iana.ProtocolIPv6, sysMCAST_JOIN_GROUP, ssoTypeGroupReq}
- sockOpts[ssoLeaveGroup] = sockOpt{iana.ProtocolIPv6, sysMCAST_LEAVE_GROUP, ssoTypeGroupReq}
- sockOpts[ssoJoinSourceGroup] = sockOpt{iana.ProtocolIPv6, sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq}
- sockOpts[ssoLeaveSourceGroup] = sockOpt{iana.ProtocolIPv6, sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq}
- sockOpts[ssoBlockSourceGroup] = sockOpt{iana.ProtocolIPv6, sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq}
- sockOpts[ssoUnblockSourceGroup] = sockOpt{iana.ProtocolIPv6, sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq}
+ sockOpts[ssoTrafficClass] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_TCLASS, Len: 4}}
+ sockOpts[ssoReceiveTrafficClass] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVTCLASS, Len: 4}}
+ sockOpts[ssoReceiveHopLimit] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVHOPLIMIT, Len: 4}}
+ sockOpts[ssoReceivePacketInfo] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPKTINFO, Len: 4}}
+ sockOpts[ssoReceivePathMTU] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPATHMTU, Len: 4}}
+ sockOpts[ssoPathMTU] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_PATHMTU, Len: sizeofIPv6Mtuinfo}}
+ sockOpts[ssoJoinGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}
+ sockOpts[ssoLeaveGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}
+ sockOpts[ssoJoinSourceGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}
+ sockOpts[ssoLeaveSourceGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}
+ sockOpts[ssoBlockSourceGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}
+ sockOpts[ssoUnblockSourceGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}
}
func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) {
diff --git a/vendor/golang.org/x/net/ipv6/sys_freebsd.go b/vendor/golang.org/x/net/ipv6/sys_freebsd.go
index fd5204b..e9349dc 100644
--- a/vendor/golang.org/x/net/ipv6/sys_freebsd.go
+++ b/vendor/golang.org/x/net/ipv6/sys_freebsd.go
@@ -12,6 +12,7 @@ import (
"unsafe"
"golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
var (
@@ -23,25 +24,25 @@ var (
ctlPathMTU: {sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU},
}
- sockOpts = [ssoMax]sockOpt{
- ssoTrafficClass: {iana.ProtocolIPv6, sysIPV6_TCLASS, ssoTypeInt},
- ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt},
- ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface},
- ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt},
- ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt},
- ssoReceiveTrafficClass: {iana.ProtocolIPv6, sysIPV6_RECVTCLASS, ssoTypeInt},
- ssoReceiveHopLimit: {iana.ProtocolIPv6, sysIPV6_RECVHOPLIMIT, ssoTypeInt},
- ssoReceivePacketInfo: {iana.ProtocolIPv6, sysIPV6_RECVPKTINFO, ssoTypeInt},
- ssoReceivePathMTU: {iana.ProtocolIPv6, sysIPV6_RECVPATHMTU, ssoTypeInt},
- ssoPathMTU: {iana.ProtocolIPv6, sysIPV6_PATHMTU, ssoTypeMTUInfo},
- ssoChecksum: {iana.ProtocolIPv6, sysIPV6_CHECKSUM, ssoTypeInt},
- ssoICMPFilter: {iana.ProtocolIPv6ICMP, sysICMP6_FILTER, ssoTypeICMPFilter},
- ssoJoinGroup: {iana.ProtocolIPv6, sysMCAST_JOIN_GROUP, ssoTypeGroupReq},
- ssoLeaveGroup: {iana.ProtocolIPv6, sysMCAST_LEAVE_GROUP, ssoTypeGroupReq},
- ssoJoinSourceGroup: {iana.ProtocolIPv6, sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq},
- ssoLeaveSourceGroup: {iana.ProtocolIPv6, sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq},
- ssoBlockSourceGroup: {iana.ProtocolIPv6, sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq},
- ssoUnblockSourceGroup: {iana.ProtocolIPv6, sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq},
+ sockOpts = map[int]sockOpt{
+ ssoTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_TCLASS, Len: 4}},
+ ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_UNICAST_HOPS, Len: 4}},
+ ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_IF, Len: 4}},
+ ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_HOPS, Len: 4}},
+ ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_LOOP, Len: 4}},
+ ssoReceiveTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVTCLASS, Len: 4}},
+ ssoReceiveHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVHOPLIMIT, Len: 4}},
+ ssoReceivePacketInfo: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPKTINFO, Len: 4}},
+ ssoReceivePathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPATHMTU, Len: 4}},
+ ssoPathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_PATHMTU, Len: sizeofIPv6Mtuinfo}},
+ ssoChecksum: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_CHECKSUM, Len: 4}},
+ ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolIPv6ICMP, Name: sysICMP6_FILTER, Len: sizeofICMPv6Filter}},
+ ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq},
+ ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq},
+ ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
}
)
diff --git a/vendor/golang.org/x/net/ipv6/sys_linux.go b/vendor/golang.org/x/net/ipv6/sys_linux.go
index 42f5f78..bc21810 100644
--- a/vendor/golang.org/x/net/ipv6/sys_linux.go
+++ b/vendor/golang.org/x/net/ipv6/sys_linux.go
@@ -10,6 +10,7 @@ import (
"unsafe"
"golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
var (
@@ -20,25 +21,26 @@ var (
ctlPathMTU: {sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU},
}
- sockOpts = [ssoMax]sockOpt{
- ssoTrafficClass: {iana.ProtocolIPv6, sysIPV6_TCLASS, ssoTypeInt},
- ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt},
- ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface},
- ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt},
- ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt},
- ssoReceiveTrafficClass: {iana.ProtocolIPv6, sysIPV6_RECVTCLASS, ssoTypeInt},
- ssoReceiveHopLimit: {iana.ProtocolIPv6, sysIPV6_RECVHOPLIMIT, ssoTypeInt},
- ssoReceivePacketInfo: {iana.ProtocolIPv6, sysIPV6_RECVPKTINFO, ssoTypeInt},
- ssoReceivePathMTU: {iana.ProtocolIPv6, sysIPV6_RECVPATHMTU, ssoTypeInt},
- ssoPathMTU: {iana.ProtocolIPv6, sysIPV6_PATHMTU, ssoTypeMTUInfo},
- ssoChecksum: {iana.ProtocolReserved, sysIPV6_CHECKSUM, ssoTypeInt},
- ssoICMPFilter: {iana.ProtocolIPv6ICMP, sysICMPV6_FILTER, ssoTypeICMPFilter},
- ssoJoinGroup: {iana.ProtocolIPv6, sysMCAST_JOIN_GROUP, ssoTypeGroupReq},
- ssoLeaveGroup: {iana.ProtocolIPv6, sysMCAST_LEAVE_GROUP, ssoTypeGroupReq},
- ssoJoinSourceGroup: {iana.ProtocolIPv6, sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq},
- ssoLeaveSourceGroup: {iana.ProtocolIPv6, sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq},
- ssoBlockSourceGroup: {iana.ProtocolIPv6, sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq},
- ssoUnblockSourceGroup: {iana.ProtocolIPv6, sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq},
+ sockOpts = map[int]*sockOpt{
+ ssoTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_TCLASS, Len: 4}},
+ ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_UNICAST_HOPS, Len: 4}},
+ ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_IF, Len: 4}},
+ ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_HOPS, Len: 4}},
+ ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_LOOP, Len: 4}},
+ ssoReceiveTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVTCLASS, Len: 4}},
+ ssoReceiveHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVHOPLIMIT, Len: 4}},
+ ssoReceivePacketInfo: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPKTINFO, Len: 4}},
+ ssoReceivePathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPATHMTU, Len: 4}},
+ ssoPathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_PATHMTU, Len: sizeofIPv6Mtuinfo}},
+ ssoChecksum: {Option: socket.Option{Level: iana.ProtocolReserved, Name: sysIPV6_CHECKSUM, Len: 4}},
+ ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolIPv6ICMP, Name: sysICMPV6_FILTER, Len: sizeofICMPv6Filter}},
+ ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq},
+ ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq},
+ ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoAttachFilter: {Option: socket.Option{Level: sysSOL_SOCKET, Name: sysSO_ATTACH_FILTER, Len: sizeofSockFprog}},
}
)
diff --git a/vendor/golang.org/x/net/ipv6/sys_linux_386.s b/vendor/golang.org/x/net/ipv6/sys_linux_386.s
deleted file mode 100644
index b85551a..0000000
--- a/vendor/golang.org/x/net/ipv6/sys_linux_386.s
+++ /dev/null
@@ -1,8 +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.
-
-#include "textflag.h"
-
-TEXT ·socketcall(SB),NOSPLIT,$0-36
- JMP syscall·socketcall(SB)
diff --git a/vendor/golang.org/x/net/ipv6/sys_solaris.go b/vendor/golang.org/x/net/ipv6/sys_solaris.go
index 9bd2d66..d348b5f 100644
--- a/vendor/golang.org/x/net/ipv6/sys_solaris.go
+++ b/vendor/golang.org/x/net/ipv6/sys_solaris.go
@@ -10,6 +10,7 @@ import (
"unsafe"
"golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
var (
@@ -21,25 +22,25 @@ var (
ctlPathMTU: {sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU},
}
- sockOpts = [ssoMax]sockOpt{
- ssoTrafficClass: {iana.ProtocolIPv6, sysIPV6_TCLASS, ssoTypeInt},
- ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt},
- ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface},
- ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt},
- ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt},
- ssoReceiveTrafficClass: {iana.ProtocolIPv6, sysIPV6_RECVTCLASS, ssoTypeInt},
- ssoReceiveHopLimit: {iana.ProtocolIPv6, sysIPV6_RECVHOPLIMIT, ssoTypeInt},
- ssoReceivePacketInfo: {iana.ProtocolIPv6, sysIPV6_RECVPKTINFO, ssoTypeInt},
- ssoReceivePathMTU: {iana.ProtocolIPv6, sysIPV6_RECVPATHMTU, ssoTypeInt},
- ssoPathMTU: {iana.ProtocolIPv6, sysIPV6_PATHMTU, ssoTypeMTUInfo},
- ssoChecksum: {iana.ProtocolIPv6, sysIPV6_CHECKSUM, ssoTypeInt},
- ssoICMPFilter: {iana.ProtocolIPv6ICMP, sysICMP6_FILTER, ssoTypeICMPFilter},
- ssoJoinGroup: {iana.ProtocolIPv6, sysMCAST_JOIN_GROUP, ssoTypeGroupReq},
- ssoLeaveGroup: {iana.ProtocolIPv6, sysMCAST_LEAVE_GROUP, ssoTypeGroupReq},
- ssoJoinSourceGroup: {iana.ProtocolIPv6, sysMCAST_JOIN_SOURCE_GROUP, ssoTypeGroupSourceReq},
- ssoLeaveSourceGroup: {iana.ProtocolIPv6, sysMCAST_LEAVE_SOURCE_GROUP, ssoTypeGroupSourceReq},
- ssoBlockSourceGroup: {iana.ProtocolIPv6, sysMCAST_BLOCK_SOURCE, ssoTypeGroupSourceReq},
- ssoUnblockSourceGroup: {iana.ProtocolIPv6, sysMCAST_UNBLOCK_SOURCE, ssoTypeGroupSourceReq},
+ sockOpts = map[int]*sockOpt{
+ ssoTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_TCLASS, Len: 4}},
+ ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_UNICAST_HOPS, Len: 4}},
+ ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_IF, Len: 4}},
+ ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_HOPS, Len: 4}},
+ ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_LOOP, Len: 4}},
+ ssoReceiveTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVTCLASS, Len: 4}},
+ ssoReceiveHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVHOPLIMIT, Len: 4}},
+ ssoReceivePacketInfo: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPKTINFO, Len: 4}},
+ ssoReceivePathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPATHMTU, Len: 4}},
+ ssoPathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_PATHMTU, Len: sizeofIPv6Mtuinfo}},
+ ssoChecksum: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_CHECKSUM, Len: 4}},
+ ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolIPv6ICMP, Name: sysICMP6_FILTER, Len: sizeofICMPv6Filter}},
+ ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq},
+ ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq},
+ ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
+ ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
}
)
diff --git a/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_unix.go b/vendor/golang.org/x/net/ipv6/sys_ssmreq.go
similarity index 55%
rename from vendor/golang.org/x/net/ipv6/sockopt_ssmreq_unix.go
rename to vendor/golang.org/x/net/ipv6/sys_ssmreq.go
index f3668ae..add8ccc 100644
--- a/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_unix.go
+++ b/vendor/golang.org/x/net/ipv6/sys_ssmreq.go
@@ -8,52 +8,47 @@ package ipv6
import (
"net"
- "os"
"unsafe"
+
+ "golang.org/x/net/internal/socket"
)
var freebsd32o64 bool
-func setsockoptGroupReq(s uintptr, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
+func (so *sockOpt) setGroupReq(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
var gr groupReq
if ifi != nil {
gr.Interface = uint32(ifi.Index)
}
gr.setGroup(grp)
- var p unsafe.Pointer
- var l uint32
+ var b []byte
if freebsd32o64 {
var d [sizeofGroupReq + 4]byte
s := (*[sizeofGroupReq]byte)(unsafe.Pointer(&gr))
copy(d[:4], s[:4])
copy(d[8:], s[4:])
- p = unsafe.Pointer(&d[0])
- l = sizeofGroupReq + 4
+ b = d[:]
} else {
- p = unsafe.Pointer(&gr)
- l = sizeofGroupReq
+ b = (*[sizeofGroupReq]byte)(unsafe.Pointer(&gr))[:sizeofGroupReq]
}
- return os.NewSyscallError("setsockopt", setsockopt(s, opt.level, opt.name, p, l))
+ return so.Set(c, b)
}
-func setsockoptGroupSourceReq(s uintptr, opt *sockOpt, ifi *net.Interface, grp, src net.IP) error {
+func (so *sockOpt) setGroupSourceReq(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error {
var gsr groupSourceReq
if ifi != nil {
gsr.Interface = uint32(ifi.Index)
}
gsr.setSourceGroup(grp, src)
- var p unsafe.Pointer
- var l uint32
+ var b []byte
if freebsd32o64 {
var d [sizeofGroupSourceReq + 4]byte
s := (*[sizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr))
copy(d[:4], s[:4])
copy(d[8:], s[4:])
- p = unsafe.Pointer(&d[0])
- l = sizeofGroupSourceReq + 4
+ b = d[:]
} else {
- p = unsafe.Pointer(&gsr)
- l = sizeofGroupSourceReq
+ b = (*[sizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr))[:sizeofGroupSourceReq]
}
- return os.NewSyscallError("setsockopt", setsockopt(s, opt.level, opt.name, p, l))
+ return so.Set(c, b)
}
diff --git a/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_stub.go b/vendor/golang.org/x/net/ipv6/sys_ssmreq_stub.go
similarity index 52%
rename from vendor/golang.org/x/net/ipv6/sockopt_ssmreq_stub.go
rename to vendor/golang.org/x/net/ipv6/sys_ssmreq_stub.go
index 1a88290..581ee49 100644
--- a/vendor/golang.org/x/net/ipv6/sockopt_ssmreq_stub.go
+++ b/vendor/golang.org/x/net/ipv6/sys_ssmreq_stub.go
@@ -6,12 +6,16 @@
package ipv6
-import "net"
+import (
+ "net"
-func setsockoptGroupReq(s uintptr, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
+ "golang.org/x/net/internal/socket"
+)
+
+func (so *sockOpt) setGroupReq(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
return errOpNoSupport
}
-func setsockoptGroupSourceReq(s uintptr, opt *sockOpt, ifi *net.Interface, grp, src net.IP) error {
+func (so *sockOpt) setGroupSourceReq(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error {
return errOpNoSupport
}
diff --git a/vendor/golang.org/x/net/ipv6/sys_stub.go b/vendor/golang.org/x/net/ipv6/sys_stub.go
index 7663bfc..b845388 100644
--- a/vendor/golang.org/x/net/ipv6/sys_stub.go
+++ b/vendor/golang.org/x/net/ipv6/sys_stub.go
@@ -2,12 +2,12 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build nacl plan9
+// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows
package ipv6
var (
ctlOpts = [ctlMax]ctlOpt{}
- sockOpts = [ssoMax]sockOpt{}
+ sockOpts = map[int]*sockOpt{}
)
diff --git a/vendor/golang.org/x/net/ipv6/sys_windows.go b/vendor/golang.org/x/net/ipv6/sys_windows.go
index 003c507..fc36b01 100644
--- a/vendor/golang.org/x/net/ipv6/sys_windows.go
+++ b/vendor/golang.org/x/net/ipv6/sys_windows.go
@@ -9,6 +9,7 @@ import (
"syscall"
"golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/socket"
)
const (
@@ -53,13 +54,13 @@ type icmpv6Filter struct {
var (
ctlOpts = [ctlMax]ctlOpt{}
- sockOpts = [ssoMax]sockOpt{
- ssoHopLimit: {iana.ProtocolIPv6, sysIPV6_UNICAST_HOPS, ssoTypeInt},
- ssoMulticastInterface: {iana.ProtocolIPv6, sysIPV6_MULTICAST_IF, ssoTypeInterface},
- ssoMulticastHopLimit: {iana.ProtocolIPv6, sysIPV6_MULTICAST_HOPS, ssoTypeInt},
- ssoMulticastLoopback: {iana.ProtocolIPv6, sysIPV6_MULTICAST_LOOP, ssoTypeInt},
- ssoJoinGroup: {iana.ProtocolIPv6, sysIPV6_JOIN_GROUP, ssoTypeIPMreq},
- ssoLeaveGroup: {iana.ProtocolIPv6, sysIPV6_LEAVE_GROUP, ssoTypeIPMreq},
+ sockOpts = map[int]*sockOpt{
+ ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_UNICAST_HOPS, Len: 4}},
+ ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_IF, Len: 4}},
+ ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_HOPS, Len: 4}},
+ ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_LOOP, Len: 4}},
+ ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_JOIN_GROUP, Len: sizeofIPv6Mreq}, typ: ssoTypeIPMreq},
+ ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_LEAVE_GROUP, Len: sizeofIPv6Mreq}, typ: ssoTypeIPMreq},
}
)
diff --git a/vendor/golang.org/x/net/ipv6/syscall_linux_386.go b/vendor/golang.org/x/net/ipv6/syscall_linux_386.go
deleted file mode 100644
index 5184dbe..0000000
--- a/vendor/golang.org/x/net/ipv6/syscall_linux_386.go
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2009 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ipv6
-
-import (
- "syscall"
- "unsafe"
-)
-
-const (
- sysGETSOCKOPT = 0xf
- sysSETSOCKOPT = 0xe
-)
-
-func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno)
-
-func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error {
- if _, errno := socketcall(sysGETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(v), uintptr(unsafe.Pointer(l)), 0); errno != 0 {
- return error(errno)
- }
- return nil
-}
-
-func setsockopt(s uintptr, level, name int, v unsafe.Pointer, l uint32) error {
- if _, errno := socketcall(sysSETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(v), uintptr(l), 0); errno != 0 {
- return error(errno)
- }
- return nil
-}
diff --git a/vendor/golang.org/x/net/ipv6/syscall_solaris.go b/vendor/golang.org/x/net/ipv6/syscall_solaris.go
deleted file mode 100644
index 2a5c8ee..0000000
--- a/vendor/golang.org/x/net/ipv6/syscall_solaris.go
+++ /dev/null
@@ -1,38 +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.
-
-package ipv6
-
-import (
- "syscall"
- "unsafe"
-)
-
-//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so"
-//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so"
-
-//go:linkname procGetsockopt libc___xnet_getsockopt
-//go:linkname procSetsockopt libc_setsockopt
-
-var (
- procGetsockopt uintptr
- procSetsockopt uintptr
-)
-
-func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno)
-
-func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error {
- _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procGetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(v), uintptr(unsafe.Pointer(l)), 0)
- if errno != 0 {
- return error(errno)
- }
- return nil
-}
-
-func setsockopt(s uintptr, level, name int, v unsafe.Pointer, l uint32) error {
- if _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procSetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(v), uintptr(l), 0); errno != 0 {
- return error(errno)
- }
- return nil
-}
diff --git a/vendor/golang.org/x/net/ipv6/syscall_unix.go b/vendor/golang.org/x/net/ipv6/syscall_unix.go
deleted file mode 100644
index 58a75b5..0000000
--- a/vendor/golang.org/x/net/ipv6/syscall_unix.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build darwin dragonfly freebsd linux,!386 netbsd openbsd
-
-package ipv6
-
-import (
- "syscall"
- "unsafe"
-)
-
-func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error {
- if _, _, errno := syscall.Syscall6(syscall.SYS_GETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(v), uintptr(unsafe.Pointer(l)), 0); errno != 0 {
- return error(errno)
- }
- return nil
-}
-
-func setsockopt(s uintptr, level, name int, v unsafe.Pointer, l uint32) error {
- if _, _, errno := syscall.Syscall6(syscall.SYS_SETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(v), uintptr(l), 0); errno != 0 {
- return error(errno)
- }
- return nil
-}
diff --git a/vendor/golang.org/x/net/ipv6/syscall_windows.go b/vendor/golang.org/x/net/ipv6/syscall_windows.go
deleted file mode 100644
index c1f649d..0000000
--- a/vendor/golang.org/x/net/ipv6/syscall_windows.go
+++ /dev/null
@@ -1,18 +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.
-
-package ipv6
-
-import (
- "syscall"
- "unsafe"
-)
-
-func getsockopt(s uintptr, level, name int, v unsafe.Pointer, l *uint32) error {
- return syscall.Getsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(v), (*int32)(unsafe.Pointer(l)))
-}
-
-func setsockopt(s uintptr, level, name int, v unsafe.Pointer, l uint32) error {
- return syscall.Setsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(v), int32(l))
-}
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_386.go b/vendor/golang.org/x/net/ipv6/zsys_linux_386.go
index f5a4109..73aa8c6 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_386.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_386.go
@@ -98,6 +98,8 @@ const (
sizeofGroupSourceReq = 0x104
sizeofICMPv6Filter = 0x20
+
+ sizeofSockFprog = 0x8
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go
index f9376b6..b64f015 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go
@@ -98,6 +98,8 @@ const (
sizeofGroupSourceReq = 0x108
sizeofICMPv6Filter = 0x20
+
+ sizeofSockFprog = 0x10
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go b/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go
index f5a4109..73aa8c6 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go
@@ -98,6 +98,8 @@ const (
sizeofGroupSourceReq = 0x104
sizeofICMPv6Filter = 0x20
+
+ sizeofSockFprog = 0x8
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go
index f9376b6..b64f015 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go
@@ -98,6 +98,8 @@ const (
sizeofGroupSourceReq = 0x108
sizeofICMPv6Filter = 0x20
+
+ sizeofSockFprog = 0x10
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go
index f5a4109..73aa8c6 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go
@@ -98,6 +98,8 @@ const (
sizeofGroupSourceReq = 0x104
sizeofICMPv6Filter = 0x20
+
+ sizeofSockFprog = 0x8
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go
index f9376b6..b64f015 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go
@@ -98,6 +98,8 @@ const (
sizeofGroupSourceReq = 0x108
sizeofICMPv6Filter = 0x20
+
+ sizeofSockFprog = 0x10
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go
index f9376b6..b64f015 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go
@@ -98,6 +98,8 @@ const (
sizeofGroupSourceReq = 0x108
sizeofICMPv6Filter = 0x20
+
+ sizeofSockFprog = 0x10
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go b/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go
index f5a4109..73aa8c6 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go
@@ -98,6 +98,8 @@ const (
sizeofGroupSourceReq = 0x104
sizeofICMPv6Filter = 0x20
+
+ sizeofSockFprog = 0x8
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go
index be2dbd6..c9bf6a8 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go
@@ -98,6 +98,8 @@ const (
sizeofGroupSourceReq = 0x104
sizeofICMPv6Filter = 0x20
+
+ sizeofSockFprog = 0x8
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go
index f9376b6..b64f015 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go
@@ -98,6 +98,8 @@ const (
sizeofGroupSourceReq = 0x108
sizeofICMPv6Filter = 0x20
+
+ sizeofSockFprog = 0x10
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go
index f9376b6..b64f015 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go
@@ -98,6 +98,8 @@ const (
sizeofGroupSourceReq = 0x108
sizeofICMPv6Filter = 0x20
+
+ sizeofSockFprog = 0x10
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go b/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go
index f9376b6..b64f015 100644
--- a/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go
+++ b/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go
@@ -98,6 +98,8 @@ const (
sizeofGroupSourceReq = 0x108
sizeofICMPv6Filter = 0x20
+
+ sizeofSockFprog = 0x10
)
type kernelSockaddrStorage struct {
diff --git a/vendor/golang.org/x/net/lif/address.go b/vendor/golang.org/x/net/lif/address.go
index f9b34ae..afb957f 100644
--- a/vendor/golang.org/x/net/lif/address.go
+++ b/vendor/golang.org/x/net/lif/address.go
@@ -67,7 +67,7 @@ func Addrs(af int, name string) ([]Addr, error) {
continue
}
sa := (*sockaddrStorage)(unsafe.Pointer(&lifr.Lifru[0]))
- l := int(littleEndian.Uint32(lifr.Lifru1[:4]))
+ l := int(nativeEndian.Uint32(lifr.Lifru1[:4]))
if l == 0 {
continue
}
@@ -77,7 +77,7 @@ func Addrs(af int, name string) ([]Addr, error) {
copy(a.IP[:], lifr.Lifru[4:8])
as = append(as, a)
case sysAF_INET6:
- a := &Inet6Addr{PrefixLen: l, ZoneID: int(littleEndian.Uint32(lifr.Lifru[24:28]))}
+ a := &Inet6Addr{PrefixLen: l, ZoneID: int(nativeEndian.Uint32(lifr.Lifru[24:28]))}
copy(a.IP[:], lifr.Lifru[8:24])
as = append(as, a)
}
diff --git a/vendor/golang.org/x/net/lif/address_test.go b/vendor/golang.org/x/net/lif/address_test.go
index f62ed93..a25f10b 100644
--- a/vendor/golang.org/x/net/lif/address_test.go
+++ b/vendor/golang.org/x/net/lif/address_test.go
@@ -78,15 +78,17 @@ type addrPack struct {
}
func addrPacks() ([]addrPack, error) {
+ var lastErr error
var aps []addrPack
for _, af := range [...]int{sysAF_UNSPEC, sysAF_INET, sysAF_INET6} {
as, err := Addrs(af, "")
if err != nil {
- return nil, err
+ lastErr = err
+ continue
}
aps = append(aps, addrPack{af: af, as: as})
}
- return aps, nil
+ return aps, lastErr
}
func TestAddrs(t *testing.T) {
diff --git a/vendor/golang.org/x/net/lif/binary.go b/vendor/golang.org/x/net/lif/binary.go
index aade9ea..738a94f 100644
--- a/vendor/golang.org/x/net/lif/binary.go
+++ b/vendor/golang.org/x/net/lif/binary.go
@@ -12,7 +12,10 @@ package lif
// library. Therefore the package set used in the package must be the
// same as net package.
-var littleEndian binaryLittleEndian
+var (
+ littleEndian binaryLittleEndian
+ bigEndian binaryBigEndian
+)
type binaryByteOrder interface {
Uint16([]byte) uint16
@@ -66,3 +69,47 @@ func (binaryLittleEndian) PutUint64(b []byte, v uint64) {
b[6] = byte(v >> 48)
b[7] = byte(v >> 56)
}
+
+type binaryBigEndian struct{}
+
+func (binaryBigEndian) Uint16(b []byte) uint16 {
+ _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
+ return uint16(b[1]) | uint16(b[0])<<8
+}
+
+func (binaryBigEndian) PutUint16(b []byte, v uint16) {
+ _ = b[1] // early bounds check to guarantee safety of writes below
+ b[0] = byte(v >> 8)
+ b[1] = byte(v)
+}
+
+func (binaryBigEndian) Uint32(b []byte) uint32 {
+ _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
+ return uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24
+}
+
+func (binaryBigEndian) PutUint32(b []byte, v uint32) {
+ _ = b[3] // early bounds check to guarantee safety of writes below
+ b[0] = byte(v >> 24)
+ b[1] = byte(v >> 16)
+ b[2] = byte(v >> 8)
+ b[3] = byte(v)
+}
+
+func (binaryBigEndian) Uint64(b []byte) uint64 {
+ _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
+ return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |
+ uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56
+}
+
+func (binaryBigEndian) PutUint64(b []byte, v uint64) {
+ _ = b[7] // early bounds check to guarantee safety of writes below
+ b[0] = byte(v >> 56)
+ b[1] = byte(v >> 48)
+ b[2] = byte(v >> 40)
+ b[3] = byte(v >> 32)
+ b[4] = byte(v >> 24)
+ b[5] = byte(v >> 16)
+ b[6] = byte(v >> 8)
+ b[7] = byte(v)
+}
diff --git a/vendor/golang.org/x/net/lif/defs_solaris.go b/vendor/golang.org/x/net/lif/defs_solaris.go
index 8b84ba5..02c1998 100644
--- a/vendor/golang.org/x/net/lif/defs_solaris.go
+++ b/vendor/golang.org/x/net/lif/defs_solaris.go
@@ -75,7 +75,7 @@ const (
sizeofLifIfinfoReq = C.sizeof_struct_lif_ifinfo_req
)
-type sysLifnum C.struct_lifnum
+type lifnum C.struct_lifnum
type lifreq C.struct_lifreq
diff --git a/vendor/golang.org/x/net/lif/link.go b/vendor/golang.org/x/net/lif/link.go
index 76fa6c6..913a53e 100644
--- a/vendor/golang.org/x/net/lif/link.go
+++ b/vendor/golang.org/x/net/lif/link.go
@@ -31,15 +31,15 @@ func (ll *Link) fetch(s uintptr) {
}
ioc := int64(sysSIOCGLIFINDEX)
if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil {
- ll.Index = int(littleEndian.Uint32(lifr.Lifru[:4]))
+ ll.Index = int(nativeEndian.Uint32(lifr.Lifru[:4]))
}
ioc = int64(sysSIOCGLIFFLAGS)
if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil {
- ll.Flags = int(littleEndian.Uint64(lifr.Lifru[:8]))
+ ll.Flags = int(nativeEndian.Uint64(lifr.Lifru[:8]))
}
ioc = int64(sysSIOCGLIFMTU)
if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil {
- ll.MTU = int(littleEndian.Uint32(lifr.Lifru[:4]))
+ ll.MTU = int(nativeEndian.Uint32(lifr.Lifru[:4]))
}
switch ll.Type {
case sysIFT_IPV4, sysIFT_IPV6, sysIFT_6TO4:
@@ -70,7 +70,7 @@ func Links(af int, name string) ([]Link, error) {
func links(eps []endpoint, name string) ([]Link, error) {
var lls []Link
- lifn := sysLifnum{Flags: sysLIFC_NOXMIT | sysLIFC_TEMPORARY | sysLIFC_ALLZONES | sysLIFC_UNDER_IPMP}
+ lifn := lifnum{Flags: sysLIFC_NOXMIT | sysLIFC_TEMPORARY | sysLIFC_ALLZONES | sysLIFC_UNDER_IPMP}
lifc := lifconf{Flags: sysLIFC_NOXMIT | sysLIFC_TEMPORARY | sysLIFC_ALLZONES | sysLIFC_UNDER_IPMP}
for _, ep := range eps {
lifn.Family = uint16(ep.af)
@@ -84,7 +84,11 @@ func links(eps []endpoint, name string) ([]Link, error) {
b := make([]byte, lifn.Count*sizeofLifreq)
lifc.Family = uint16(ep.af)
lifc.Len = lifn.Count * sizeofLifreq
- littleEndian.PutUint64(lifc.Lifcu[:], uint64(uintptr(unsafe.Pointer(&b[0]))))
+ if len(lifc.Lifcu) == 8 {
+ nativeEndian.PutUint64(lifc.Lifcu[:], uint64(uintptr(unsafe.Pointer(&b[0]))))
+ } else {
+ nativeEndian.PutUint32(lifc.Lifcu[:], uint32(uintptr(unsafe.Pointer(&b[0]))))
+ }
ioc = int64(sysSIOCGLIFCONF)
if err := ioctl(ep.s, uintptr(ioc), unsafe.Pointer(&lifc)); err != nil {
continue
diff --git a/vendor/golang.org/x/net/lif/link_test.go b/vendor/golang.org/x/net/lif/link_test.go
index 8fb2bf6..0cb9b95 100644
--- a/vendor/golang.org/x/net/lif/link_test.go
+++ b/vendor/golang.org/x/net/lif/link_test.go
@@ -21,15 +21,17 @@ type linkPack struct {
}
func linkPacks() ([]linkPack, error) {
+ var lastErr error
var lps []linkPack
for _, af := range [...]int{sysAF_UNSPEC, sysAF_INET, sysAF_INET6} {
lls, err := Links(af, "")
if err != nil {
- return nil, err
+ lastErr = err
+ continue
}
lps = append(lps, linkPack{af: af, lls: lls})
}
- return lps, nil
+ return lps, lastErr
}
func TestLinks(t *testing.T) {
diff --git a/vendor/golang.org/x/net/lif/sys.go b/vendor/golang.org/x/net/lif/sys.go
new file mode 100644
index 0000000..c896041
--- /dev/null
+++ b/vendor/golang.org/x/net/lif/sys.go
@@ -0,0 +1,21 @@
+// 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 solaris
+
+package lif
+
+import "unsafe"
+
+var nativeEndian binaryByteOrder
+
+func init() {
+ i := uint32(1)
+ b := (*[4]byte)(unsafe.Pointer(&i))
+ if b[0] == 1 {
+ nativeEndian = littleEndian
+ } else {
+ nativeEndian = bigEndian
+ }
+}
diff --git a/vendor/golang.org/x/net/lif/sys_solaris_amd64.s b/vendor/golang.org/x/net/lif/sys_solaris_amd64.s
index 1ebca37..39d76af 100644
--- a/vendor/golang.org/x/net/lif/sys_solaris_amd64.s
+++ b/vendor/golang.org/x/net/lif/sys_solaris_amd64.s
@@ -6,6 +6,3 @@
TEXT ·sysvicall6(SB),NOSPLIT,$0-88
JMP syscall·sysvicall6(SB)
-
-TEXT ·keepAlive(SB),NOSPLIT,$0
- RET
diff --git a/vendor/golang.org/x/net/lif/syscall.go b/vendor/golang.org/x/net/lif/syscall.go
index 5fe0736..aadab2e 100644
--- a/vendor/golang.org/x/net/lif/syscall.go
+++ b/vendor/golang.org/x/net/lif/syscall.go
@@ -19,13 +19,8 @@ var procIoctl uintptr
func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno)
-// TODO: replace with runtime.KeepAlive when available
-//go:noescape
-func keepAlive(p unsafe.Pointer)
-
func ioctl(s, ioc uintptr, arg unsafe.Pointer) error {
_, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procIoctl)), 3, s, ioc, uintptr(arg), 0, 0, 0)
- keepAlive(arg)
if errno != 0 {
return error(errno)
}
diff --git a/vendor/golang.org/x/net/lif/zsys_solaris_amd64.go b/vendor/golang.org/x/net/lif/zsys_solaris_amd64.go
index 94231c4..b5e999b 100644
--- a/vendor/golang.org/x/net/lif/zsys_solaris_amd64.go
+++ b/vendor/golang.org/x/net/lif/zsys_solaris_amd64.go
@@ -65,7 +65,7 @@ const (
sizeofLifIfinfoReq = 0x10
)
-type sysLifnum struct {
+type lifnum struct {
Family uint16
Pad_cgo_0 [2]byte
Flags int32
diff --git a/vendor/golang.org/x/net/nettest/conntest.go b/vendor/golang.org/x/net/nettest/conntest.go
index c246bbe..5bd3a8c 100644
--- a/vendor/golang.org/x/net/nettest/conntest.go
+++ b/vendor/golang.org/x/net/nettest/conntest.go
@@ -12,6 +12,7 @@ import (
"io/ioutil"
"math/rand"
"net"
+ "runtime"
"sync"
"testing"
"time"
@@ -341,6 +342,9 @@ func testCloseTimeout(t *testing.T, c1, c2 net.Conn) {
// testConcurrentMethods tests that the methods of net.Conn can safely
// be called concurrently.
func testConcurrentMethods(t *testing.T, c1, c2 net.Conn) {
+ if runtime.GOOS == "plan9" {
+ t.Skip("skipping on plan9; see https://golang.org/issue/20489")
+ }
go chunkedCopy(c2, c2)
// The results of the calls may be nonsensical, but this should
@@ -433,6 +437,7 @@ func resyncConn(t *testing.T, c net.Conn) {
}
if err != nil {
t.Errorf("unexpected Read error: %v", err)
+ break
}
}
if err := <-errCh; err != nil {
diff --git a/vendor/golang.org/x/net/nettest/conntest_test.go b/vendor/golang.org/x/net/nettest/conntest_test.go
index 23bd69f..9f9453f 100644
--- a/vendor/golang.org/x/net/nettest/conntest_test.go
+++ b/vendor/golang.org/x/net/nettest/conntest_test.go
@@ -7,64 +7,14 @@
package nettest
import (
- "fmt"
- "io/ioutil"
"net"
"os"
"runtime"
"testing"
+
+ "golang.org/x/net/internal/nettest"
)
-// testUnixAddr uses ioutil.TempFile to get a name that is unique.
-// It also uses /tmp directory in case it is prohibited to create UNIX
-// sockets in TMPDIR.
-func testUnixAddr() string {
- f, err := ioutil.TempFile("", "go-nettest")
- if err != nil {
- panic(err)
- }
- addr := f.Name()
- f.Close()
- os.Remove(addr)
- return addr
-}
-
-// testableNetwork reports whether network is testable on the current
-// platform configuration.
-// This is based on logic from standard library's net/platform_test.go.
-func testableNetwork(network string) bool {
- switch network {
- case "unix":
- switch runtime.GOOS {
- case "android", "nacl", "plan9", "windows":
- return false
- }
- if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") {
- return false
- }
- case "unixpacket":
- switch runtime.GOOS {
- case "android", "darwin", "nacl", "plan9", "windows", "freebsd":
- return false
- }
- }
- return true
-}
-
-func newLocalListener(network string) (net.Listener, error) {
- switch network {
- case "tcp":
- ln, err := net.Listen("tcp", "127.0.0.1:0")
- if err != nil {
- ln, err = net.Listen("tcp6", "[::1]:0")
- }
- return ln, err
- case "unix", "unixpacket":
- return net.Listen(network, testUnixAddr())
- }
- return nil, fmt.Errorf("%s is not supported", network)
-}
-
func TestTestConn(t *testing.T) {
tests := []struct{ name, network string }{
{"TCP", "tcp"},
@@ -74,12 +24,12 @@ func TestTestConn(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- if !testableNetwork(tt.network) {
+ if !nettest.TestableNetwork(tt.network) {
t.Skipf("not supported on %s", runtime.GOOS)
}
mp := func() (c1, c2 net.Conn, stop func(), err error) {
- ln, err := newLocalListener(tt.network)
+ ln, err := nettest.NewLocalListener(tt.network)
if err != nil {
return nil, nil, nil, err
}
diff --git a/vendor/golang.org/x/net/proxy/socks5.go b/vendor/golang.org/x/net/proxy/socks5.go
index 9b96282..973f57f 100644
--- a/vendor/golang.org/x/net/proxy/socks5.go
+++ b/vendor/golang.org/x/net/proxy/socks5.go
@@ -72,24 +72,28 @@ func (s *socks5) Dial(network, addr string) (net.Conn, error) {
if err != nil {
return nil, err
}
- closeConn := &conn
- defer func() {
- if closeConn != nil {
- (*closeConn).Close()
- }
- }()
-
- host, portStr, err := net.SplitHostPort(addr)
- if err != nil {
+ if err := s.connect(conn, addr); err != nil {
+ conn.Close()
return nil, err
}
+ return conn, nil
+}
+
+// connect takes an existing connection to a socks5 proxy server,
+// and commands the server to extend that connection to target,
+// which must be a canonical address with a host and port.
+func (s *socks5) connect(conn net.Conn, target string) error {
+ host, portStr, err := net.SplitHostPort(target)
+ if err != nil {
+ return err
+ }
port, err := strconv.Atoi(portStr)
if err != nil {
- return nil, errors.New("proxy: failed to parse port number: " + portStr)
+ return 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)
+ return errors.New("proxy: port number out of range: " + portStr)
}
// the size here is just an estimate
@@ -103,17 +107,17 @@ func (s *socks5) Dial(network, addr string) (net.Conn, error) {
}
if _, err := conn.Write(buf); err != nil {
- return nil, errors.New("proxy: failed to write greeting to SOCKS5 proxy at " + s.addr + ": " + err.Error())
+ return 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())
+ return 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])))
+ return 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")
+ return errors.New("proxy: SOCKS5 proxy at " + s.addr + " requires authentication")
}
if buf[1] == socks5AuthPassword {
@@ -125,15 +129,15 @@ func (s *socks5) Dial(network, addr string) (net.Conn, error) {
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())
+ return 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())
+ return 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")
+ return errors.New("proxy: SOCKS5 proxy at " + s.addr + " rejected username/password")
}
}
@@ -150,7 +154,7 @@ func (s *socks5) Dial(network, addr string) (net.Conn, error) {
buf = append(buf, ip...)
} else {
if len(host) > 255 {
- return nil, errors.New("proxy: destination hostname too long: " + host)
+ return errors.New("proxy: destination hostname too long: " + host)
}
buf = append(buf, socks5Domain)
buf = append(buf, byte(len(host)))
@@ -159,11 +163,11 @@ func (s *socks5) Dial(network, addr string) (net.Conn, error) {
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())
+ return 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())
+ return errors.New("proxy: failed to read connect reply from SOCKS5 proxy at " + s.addr + ": " + err.Error())
}
failure := "unknown error"
@@ -172,7 +176,7 @@ func (s *socks5) Dial(network, addr string) (net.Conn, error) {
}
if len(failure) > 0 {
- return nil, errors.New("proxy: SOCKS5 proxy at " + s.addr + " failed to connect: " + failure)
+ return errors.New("proxy: SOCKS5 proxy at " + s.addr + " failed to connect: " + failure)
}
bytesToDiscard := 0
@@ -184,11 +188,11 @@ func (s *socks5) Dial(network, addr string) (net.Conn, error) {
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())
+ return 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)
+ return errors.New("proxy: got unknown address type " + strconv.Itoa(int(buf[3])) + " from SOCKS5 proxy at " + s.addr)
}
if cap(buf) < bytesToDiscard {
@@ -197,14 +201,13 @@ func (s *socks5) Dial(network, addr string) (net.Conn, error) {
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())
+ return 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())
+ return errors.New("proxy: failed to read port from SOCKS5 proxy at " + s.addr + ": " + err.Error())
}
- closeConn = nil
- return conn, nil
+ return nil
}
diff --git a/vendor/golang.org/x/net/publicsuffix/table.go b/vendor/golang.org/x/net/publicsuffix/table.go
index bf20c03..5db1e69 100644
--- a/vendor/golang.org/x/net/publicsuffix/table.go
+++ b/vendor/golang.org/x/net/publicsuffix/table.go
@@ -2,7 +2,7 @@
package publicsuffix
-const version = "publicsuffix.org's public_suffix_list.dat, git revision 915565885d0fbd25caf7d8b339cd3478f558da94 (2016-10-19T08:16:09Z)"
+const version = "publicsuffix.org's public_suffix_list.dat, git revision 45a2bf8ef3e22000fbe4bfa5f9252db41d777001 (2017-01-18T01:04:06Z)"
const (
nodesBitsChildren = 9
@@ -23,446 +23,447 @@ const (
)
// numTLD is the number of top level domains.
-const numTLD = 1553
+const numTLD = 1554
// Text is the combined text of all labels.
-const text = "biellaakesvuemieleccebieszczadygeyachimatainaircraftraeumtgerade" +
- "alstahaugesunderseaportsinfolldalaskanittedallasalleasinglesango" +
- "ppdalinzaintuitateshinanomachintaifun-dnsaliaskimitsubatamicable" +
- "-modembetsukuinuyamanouchikuhokuryugasakitaurayasudabievatmallor" +
- "cadaquesanjotateyamabifukagawalmartatsunobihorologyuzhno-sakhali" +
- "nskaszubybikedagestangebilbaogakievenesannaninomiyakonojoshkar-o" +
- "lawabillustrationirasakinvestmentsannohelplfinancialipetskatowic" +
- "ebiobirdartcenterprisesakikuchikuseikarugapartmentsanokatsushika" +
- "beeldengeluidunloppacificasinore-og-uvdalivornobirkenesoddtangen" +
- "ovarabirthplacebjarkoybjerkreimdbalatinorddalillyonagoyastronomy" +
- "asustor-elvdalwaysdatabaseballangenoamishirasatochigiessenebakke" +
- "shibechambagriculturennebudapest-a-la-masionativeamericanantique" +
- "s3-ap-northeast-2bjugnieznordlandunsantabarbarablockbusternidupo" +
- "ntariobloombergbauernrtattoolsztynsettlersantacruzsantafedextras" +
- "pace-to-rentalstomakomaibarabloxcmsanukis-a-candidatebluedaplier" +
- "neustarhubalestrandabergamoarekeymachineues3-us-west-1bmoattachm" +
- "entsaotomeloyalistjordalshalsenishiazais-a-catererbmsapodhalewis" +
- "millerbmweirbnpparibaselburgloppenzaogashimadachicagoboatsapporo" +
- "bnrwfarmsteadurbanamexhibitionishigotsukisosakitagawabomloanswat" +
- "ch-and-clockerbondurhamburgmbhartiffanybonnishiharabookingminaka" +
- "michiharabootsaratovalleaostatoilomzaporizhzheguris-a-celticsfan" +
- "ishiizunazukis-a-chefarsundvrcambridgestonewyorkshirecreationish" +
- "ikatakayamatsuzakis-a-conservativefsncfdvrdnsiskinkyotobetsumida" +
- "tlanticateringebudejjuedischesapeakebayernurembergmodenakanotodd" +
- "enishikatsuragithubusercontentaxihuanishikawazukanazawaboschaeff" +
- "lerdalorenskogmxfinitybostikatsuyamaseratis-a-cpadoval-daostaval" +
- "leybostonakijinsekikogentingrimstadwgripebotanicalgardenishimera" +
- "botanicgardenishinomiyashironobotanybouncemerckmsdnipropetrovskl" +
- "eppalmspringsakerbounty-fullensakerrypropertiesardegnamsosnowiec" +
- "atholicheltenham-radio-openair-traffic-controlleyboutiquebecngri" +
- "wataraidyndns-ipamperedchefashionishinoomotegovtgorybozentsujiie" +
- "bradescorporationishinoshimatta-varjjatjeldsundyndns-mailotenkaw" +
- "abrandywinevalleybrasiliabresciabrindisibenikebristolgaulardalot" +
- "tebritishcolumbialowiezaganquannefrankfurtjmaxxxjaworznowtvalled" +
- "-aostavangerbroadcastleclerchelyabinskypescaravantaabroadwaybrok" +
- "e-itjometlifeinsurancebrokerbronnoysundyndns-office-on-the-webca" +
- "mpobassociatesardiniabrothermesaverdeatnuorockartuzybrowsersafet" +
- "ymarketsarlottokorozawabrumunddalouvreitjxn--0trq7p7nnishiokoppe" +
- "gardyndns-picsarpsborgroks-thisayamanashiibaghdadultkmaxxn--11b4" +
- "c3dyndns-remotegildeskalmykiabrunelblagdenesnaaseralingenkainana" +
- "ejrietisalatinabenoboribetsucksarufutsunomiyawakasaikaitakoelnis" +
- "hitosashimizunaminamiashigarabrusselsasayamabruxellesaseboknowsi" +
- "tallowiczest-le-patrondheimperiabryanskodjeepostfoldnavyatkakami" +
- "gaharabrynewhampshirebungoonordreisa-geekaufenishiwakis-a-cubicl" +
- "e-slavellinotteroybuskerudinewhollandyndns-servercellikes-piedmo" +
- "ntblancomeeresaskatchewanggouvicenzabuzenissandnessjoenissayokos" +
- "hibahikariwanumatakazakis-a-democratmpanamabuzzgradyndns-weberli" +
- "ncolnissedalucaniabwhalingrondarbzhitomirkutskydivingrongacomput" +
- "erhistoryofscience-fictioncomsecuritytacticschulezajskddielddanu" +
- "orrikuzentakatajirissagamiharacondoshichinohealth-carereformitak" +
- "eharaconferenceconstructionconsuladoharuhrconsultanthropologycon" +
- "sultingvollutskfhappoumuenchencontactoyotomiyazakis-a-geekgalaxy" +
- "contemporaryarteducationalchikugojomedio-campidano-mediocampidan" +
- "omediocontractorskenconventureshinodesashibetsuikinderoycookingc" +
- "hannelveruminamibosogndaluxembourgujolstercoolkuszippodlasiellak" +
- "asamatsudovre-eikercoopencraftoyotsukaidownloadcopenhagencyclope" +
- "dichernovtsykkylvenetogakushimotoganewmexicoldwarmiamiastalowa-w" +
- "oladbrokesassaris-a-designerimarumorimachidacorsicagliaridagawal" +
- "tercorvettenrightathomegoodschwarzgwangjuifminamidaitomangotemba" +
- "ixadacosenzamamibuilderschmidtre-gauldaluxurycostumedizinhistori" +
- "scheschweizjcbnluzerncouchpotatofriesciencecentersciencehistoryc" +
- "ouncilvivano-frankivskhabarovskhakassiacouponscientistockholmest" +
- "randcoursescjohnsoncq-acranbrookuwanalyticscotlandcreditcardcred" +
- "itunioncremonashorokanaiecrewiiheyaizuwakamatsubushikusakadogawa" +
- "cricketrzyncrimeacrotonewspapercrownprovidercrsvparaglidingulenc" +
- "ruisescrapper-sitecryptonomichigangwoncuisinellajollamericanexpr" +
- "essexyculturalcentertainmentoyouracuneocupcakecxn--1ctwolominama" +
- "takkofuefukihabororostrowwlkpmgunmarnardalcymruovatoystre-slidre" +
- "ttozawacyonabarussiacyouthdfcbankzlguovdageaidnufcfanfieldfiguer" +
- "estaurantozsdefilateliafilminamiechizenfinalfinancefineartservef" +
- "tparisor-fronfinlandfinnoyfirebaseapparliamentranbyfirenzefirest" +
- "onexus-east-1firmdaleirfjordfishingolffanservegame-serverisignfi" +
- "tjarqhachiojiyahikobeatservehalflifestylefitnessettlementrani-an" +
- "dria-barletta-trani-andriafjalerflesbergflickragerotikamakurazak" +
- "irkeneservehttparmaflightservehumourflirumansionserveirchiryukyu" +
- "ragifuchukotkakegawassamukawataricohdavvenjargausdaluccapitalone" +
- "wjerseyflogintogurafloraflorencefloridafloristanohatakaharulvikh" +
- "arkovalledaostavernflorokunohealthcareerserveminecraftraniandria" +
- "barlettatraniandriaflowerservemp3utilitiesquarezzoologicalvinkle" +
- "in-addrammenuernbergdyniabogadocscbggfareastcoastaldefence-burgj" +
- "emnes3-ap-northeast-1kappleaseating-organicbcg12000emmafanconaga" +
- "wakayamadridvagsoyericsson-aptibleangaviikadenaamesjevuemielno-i" +
- "p6flynnhubalsfjordiscountysnes3-us-west-2fndfoodnetworkshoppingf" +
- "or-ourfor-someetnedalfor-theaterforexrothruheredstoneforgotdnser" +
- "vep2parocherkasyzrankoshigayaltaijis-a-greenforli-cesena-forlice" +
- "senaforlikescandyndns-at-workinggrouparservepicservequakeforsale" +
- "irvikhersonforsandasuoloftranoyfortmissoulan-udefenseljordfortwo" +
- "rthachirogatakamoriokamikitayamatotakadaforuminamifuranofosneser" +
- "vesarcasmatartanddesignfotaruis-a-gurunzenfoxfordegreefreeboxost" +
- "rowiechitachinakagawatchandclockazimierz-dolnyfreemasonryfreibur" +
- "gfreightcmwildlifedjejuegoshikiminokamoenairlinedre-eikerfreseni" +
- "uscountryestateofdelawaredumbrellanbibaidarfribourgfriuli-v-giul" +
- "iafriuli-ve-giuliafriuli-vegiuliafriuli-venezia-giuliafriuli-ven" +
- "eziagiuliafriuli-vgiuliafriuliv-giuliafriulive-giuliafriulivegiu" +
- "liafriulivenezia-giuliafriuliveneziagiuliafriulivgiuliafrlfrogan" +
- "servicesettsurgeonshalloffamemergencyberlevagangaviikanonjis-a-h" +
- "ard-workerfrognfrolandfrom-akrehamnfrom-alfrom-arfrom-azpartis-a" +
- "-hunterfrom-capebretonamiasakuchinotsuchiurakawarszawashingtondc" +
- "lkhmelnitskiyamasfjordenfrom-collectionfrom-ctransportransurlfro" +
- "m-dchitosetogitsuldalucernefrom-dell-ogliastrakhanawafrom-flande" +
- "rsevastopolefrom-gafrom-higashiagatsumagoirminamiiselectrapaniim" +
- "imatakatoris-a-knightpointtokamachippubetsubetsugaruslivinghisto" +
- "ryfrom-iafrom-idfrom-ilfrom-incheonfrom-ksevenassisicilyfrom-kyo" +
- "wariasahikawafrom-lancashireggio-calabriafrom-manxn--1qqw23afrom" +
- "-mdfrom-meguromskoguchikuzenfrom-microsoftbankhmelnytskyivallee-" +
- "aosteroyfrom-mnfrom-mochizukirovogradoyfrom-msewilliamhillfrom-m" +
- "tnfrom-nchloefrom-ndfrom-nefrom-nhktravelchannelfrom-njcpartners" +
- "franziskanerdpolicefrom-nminamiizukamitondabayashiogamagoriziafr" +
- "om-nvalleeaosteigenfrom-nyfrom-ohkurafrom-oketohmaorivnefrom-orf" +
- "rom-paderbornfrom-pratohnoshoooshikamaishimofusartshangrilangeva" +
- "grarboretumbriafrom-ris-a-landscaperugiafrom-schoenbrunnfrom-sdf" +
- "rom-tnfrom-txn--2m4a15efrom-utazuerichardlillehammerfest-mon-blo" +
- "gueurovisionfrom-vaksdalfrom-vtravelersinsurancefrom-wafrom-wiel" +
- "unnerfrom-wvanylvenicefrom-wyfrosinonefrostalbansharis-a-lawyerf" +
- "royahabadajozoraholtalenvironmentalconservationfstavropolitienda" +
- "fujiiderafujikawaguchikonefujiminohtawaramotoineppubolognakaniik" +
- "awatanagurafujinomiyadafujiokayamapartsharpartyfujisatoshonairpo" +
- "rtland-4-salernogatagajobojis-a-liberalfujisawafujishiroishidaka" +
- "biratoridellogliastraderfujitsurugashimamateramodalenfujixeroxn-" +
- "-30rr7yfujiyoshidafukayabeardubaiduckdnshomebuiltrdfukuchiyamada" +
- "fukudominichocolatemasekazofukuis-a-libertarianfukumitsubishigak" +
- "iryuohadanoshiroomurafukuokazakisarazurewebsiteshikagamiishibuka" +
- "wafukuroishikarikaturindalfukusakishiwadafukuyamagatakahashimama" +
- "kisofukushimarburgfunabashiriuchinadafunagatakahatakaishimoichin" +
- "osekigaharafunahashikamiamakusatsumasendaisennangonohejis-a-linu" +
- "x-useranishiaritabashikaoizumizakitchenfundaciofuoiskujukuriyama" +
- "rcheapasadenaklodzkodairafuosskoczowinbaltimore-og-romsdalimited" +
- "iscoveryonaguniversityoriikashibatakashimarylhurstjohnaval-d-aos" +
- "ta-valleyukibestadishakotankashiharaukraanghkepnord-frontierepai" +
- "rbusantiquest-a-la-maisondre-landebusinessebyklefrakkestadds3-ap" +
- "-southeast-2furnitureggio-emilia-romagnakanojohanamakinoharafuru" +
- "biraquarellebesbyglandfurudonostiafurukawairtelecityeatshawaiiji" +
- "marugame-hostingfusodegaurafussaintlouis-a-anarchistoireggiocala" +
- "briafutabayamaguchinomigawafutboldlygoingnowhere-for-moregontrai" +
- "lroadfuttsurugiminamimakis-a-llamarylandfuturemailingfvgfyis-a-m" +
- "usicianfylkesbiblackfridayfyresdalhannanmokuizumodernhannovarese" +
- "rveblogspotrentino-a-adigehanyuzenhapmirhareidsbergenharstadharv" +
- "estcelebrationhasamarahasaminami-alpssells-itrentino-aadigehashb" +
- "anghasudahasura-appassenger-associationhasviklabudhabikinokawaba" +
- "rthaebaruminamiminowahatogayahoohatoyamazakitahiroshimarriottren" +
- "tino-alto-adigehatsukaichikaiseis-a-painteractivegarsheis-a-pats" +
- "fanhattfjelldalhayashimamotobuildinghazuminobusellsyourhomeipavi" +
- "ancargodaddyndns-at-homednshimonosekikawahboehringerikehelsinkit" +
- "akamiizumisanofidelitysvardollshimosuwalkis-a-personaltrainerhem" +
- "bygdsforbundhemneshimotsukehemsedalhepforgeherokussldheroyhgtvsh" +
- "imotsumahigashichichibungotakadatinghigashihiroshimanehigashiizu" +
- "mozakitakatakanezawahigashikagawahigashikagurasoedahigashikawaki" +
- "taaikitakyushuaiahigashikurumeiwamarshallstatebankmpspbamblebtim" +
- "netz-2higashimatsushimarinehigashimatsuyamakitaakitadaitoigawahi" +
- "gashimurayamalatvuopmidoris-a-photographerokuappfizerhigashinaru" +
- "sembokukitamidsundhigashinehigashiomihachimanchesterhigashiosaka" +
- "sayamamotorcycleshinichinanhigashishirakawamatakaokamikoaniikapp" +
- "ugliahigashisumiyoshikawaminamiaikitamotosumitakaginankokubunjis" +
- "-a-playerhigashitsunotogawahigashiurausukitanakagusukumoduminami" +
- "ogunicomcastresistancehigashiyamatokoriyamanakakogawahigashiyodo" +
- "gawahigashiyoshinogaris-a-republicancerresearchaeologicalifornia" +
- "hiraizumisatohobby-sitehirakatashinagawahiranairtraffichofunator" +
- "ientexpressatxn--1ck2e1balsanagochihayaakasakawaharavennagasakik" +
- "onaikawachinaganoharamcoalaheadjudaicaaarborteaches-yogasawaraci" +
- "ngroks-theatreemersongdalenviknakamuratakahamannortonsbergladelm" +
- "enhorstackspacekitagataiwanairguardigitalimanowarudaugustowadaeg" +
- "ubs3-ap-southeast-1hirarahiratsukagawahirayaitakarazukamiminersh" +
- "injournalismailillesandefjordhistorichouseshinjukumanohitachiomi" +
- "yaginowaniihamatamakawajimaritimodellinghitachiotagooglecodespot" +
- "rentino-altoadigehitoyoshimifunehitradinghjartdalhjelmelandholec" +
- "kobierzyceholidayhomelinuxn--32vp30hagakhanamigawahomesecurityma" +
- "ceratakasagoperaunitextileitungsenhomesecuritypccwindmillhomesen" +
- "seminehomeunixn--3bst00minamisanrikubetsupplyhondahoneywellbeing" +
- "zonehongorgehonjyoitakasakitashiobarahornindalhorseoulminamitane" +
- "hortendofinternetrentino-s-tirollagrigentomologyhoteleshinkamigo" +
- "toyohashimototalhotmailhoyangerhoylandetroitskokonoehumanitieshi" +
- "nshinotsurgeryhurdalhurumajis-a-rockstarachowicehyllestadhyogori" +
- "s-a-socialistmeindianapolis-a-bloggerhyugawarahyundaiwafunehzcho" +
- "nanbugattipschlesischesaudajgorajlchoshibuyachiyodavvesiidazaifu" +
- "daigodoesntexistanbullensvanguardyndns-wikindleikangerjlljmpharm" +
- "acienshiojirishirifujiedajnjelenia-gorajoyentrentino-sued-tirolj" +
- "oyokaichibahcavuotnagaraumalselvendrelljpmorganjpnchoyodobashich" +
- "ikashukujitawarajprshioyamemorialjuniperjurkristiansundkrodshera" +
- "dkrokstadelvaldaostarnbergkryminamiyamashirokawanabelgorodeokuma" +
- "torinokumejimassa-carrara-massacarraramassabunkyonanaoshimageand" +
- "soundandvisionkumenanyokkaichirurgiens-dentistes-en-francekunisa" +
- "kis-an-artistcgroupgfoggiakunitachiarailwaykunitomigusukumamotoy" +
- "amasoykunneppulawykunstsammlungkunstunddesignkuokgrouphdkureisen" +
- "kurgankurobelaudibleborkdalkurogimilitarykuroisoftwarendalenugku" +
- "romatsunais-an-engineeringkurotakikawasakis-an-entertainerkursko" +
- "mmunalforbundkushirogawakustanais-bykusupplieshiranukaniepcekutc" +
- "hanelkutnokuzbassnillfjordkuzumakis-certifiedogawarabikomaezakir" +
- "unorthwesternmutualkvafjordkvalsundkvamfamberkeleykvanangenkvine" +
- "sdalkvinnheradkviteseidskogkvitsoykwpspjelkavikommunemitourismol" +
- "anciamitoyoakemiuramiyazumiyotamanomjondalenmlbfanmonmouthagebos" +
- "tadmonstermonticellombardiamondshiraois-into-carshintomikasahara" +
- "montrealestatefarmequipmentrentino-suedtirolmonza-brianzaporizhz" +
- "hiamonza-e-della-brianzapposhiraokanmakiyokawaramonzabrianzaptok" +
- "yotangotpantheonsitemonzaebrianzaramonzaedellabrianzamoparachuti" +
- "ngmordoviajessheiminanomoriyamatsunomoriyoshiokamitsuemormoneymo" +
- "royamatsusakahoginozawaonsenmortgagemoscowindowshiratakahagivest" +
- "bytomaritimekeepingmoseushistorymosjoenmoskeneshishikuis-into-ca" +
- "rtoonshinyoshitomiokaneyamaxunusualpersonmosshisognemosvikomorot" +
- "sukamisunagawamoviemovistargardmtpchristmasakikugawatchesauherad" +
- "yndns-workisboringrossetouchijiwadeloittevadsoccertificationissh" +
- "ingugemtranakatsugawamuenstermugithubcloudusercontentrentinoa-ad" +
- "igemuikamogawamukochikushinonsenergymulhouservebeermunakatanemun" +
- "cieszynmuosattemuphiladelphiaareadmyblogsitemurmanskomvuxn--3ds4" +
- "43gmurotorcraftrentinoaadigemusashimurayamatsushigemusashinohara" +
- "museetrentinoalto-adigemuseumverenigingmutsuzawamutuellevangermy" +
- "dissentrentinoaltoadigemydrobofagemydshisuifuelmyeffectrentinos-" +
- "tirolmyfritzwinnershitaramamyftphilatelymykolaivarggatrentinosti" +
- "rolmymediapchromedicaltanissettaishinomakimobetsuliguriamyokoham" +
- "amatsudamypepsonyoursidedyn-o-saurecipesaro-urbino-pesarourbinop" +
- "esaromamurogawawioshizukuishimogosenmypetshizuokannamiharumyphot" +
- "oshibahccavuotnagareyamalvikongsbergmypsxn--3e0b707emysecurityca" +
- "merakermyshopblockshoujis-into-gamessinashikiwakunigamihamadamyt" +
- "is-a-bookkeepermincommbankomonomyvnchryslerpictetrentinosud-tiro" +
- "lpictureshowtimeteorapphoenixn--3oq18vl8pn36apiemontepilotshrira" +
- "mlidlugolekagaminogiftsienaplesigdalpimientaketomisatomskongsvin" +
- "gerpinkoninjamisonpioneerpippuphonefosshowapiszpittsburghofastly" +
- "piwatepizzapkonskowolayangroupharmacyshirahamatonbetsurgutsiracu" +
- "saitoshimaplanetariuminnesotaketakatsukis-foundationplantationpl" +
- "antsilkonsulatrobeepilepsydneyplatformintelligenceplaystationpla" +
- "zaplchungbukazunoplombardyndns-blogdnsimbirskonyvelolplumbingopm" +
- "npodzonepohlpoivronpokerpokrovskooris-a-techietis-a-soxfanpolkow" +
- "icepoltavalle-aostarostwodzislawitdkopervikomforbananarepublicar" +
- "toonartdecoffeedbackplaneappalacemreviewskrakoweddinglassassinat" +
- "ionalheritagematsubarakawagoeu-1pomorzeszowithgoogleapisa-hockey" +
- "nutrentinosudtirolpordenonepornporsangerporsanguideltajimicrolig" +
- "htingporsgrunnanpoznanpraxis-a-bruinsfanprdpreservationpresidiop" +
- "rgmrprimelhusgardenprincipeprivatizehealthinsuranceprochowicepro" +
- "ductionsimple-urlprofauskedsmokorsetagayasells-for-ulsandoyprogr" +
- "essivegasiaprojectrentinosued-tirolpromombetsurfbsbxn--1lqs03npr" +
- "opertyprotectionprotonetrentinosuedtirolprudentialpruszkowithyou" +
- "tubeneventoeidsvollprzeworskogptplusterptzpvtrentoyonakagyokutoy" +
- "akokamishihoronobeokaminoyamatsuris-leetrentino-stirolpwchungnam" +
- "dalseidfjordynnsavannahgapzqldqponqslgbtrevisohughesirdalquicksy" +
- "teslingqvchurchaseljeffersoniyodogawastoragestordalstorenburgsto" +
- "rfjordstpetersburgstreamsterdamnserverbaniastudiostudyndns-homef" +
- "tpaccessnoasakakinokiastuff-4-salestufftoread-booksnesnzstuttgar" +
- "trogstadsurreysusakis-not-certifieducatorahimeshimakanegasakinko" +
- "bayashikshacknethnologysusonosuzakanrasuzukanumazurysuzukis-save" +
- "dunetbankolobrzegersundsvalbardudinkakudamatsuesveiosvelvikoseis" +
- "-a-therapistoiasvizzeraswedenswidnicarrierswiebodzindianmarketin" +
- "gswiftcoveronaritakurashikis-slickomaganeswinoujscienceandhistor" +
- "yswisshikis-uberleetrentino-sud-tirolturystykarasjohkamiokaminok" +
- "awanishiaizubangetuscanytushuissier-justicetuvalle-daostatichuva" +
- "shiatuxfamilyversicherungvestfoldvestnesolutionslupskoryolasitev" +
- "estre-slidreamhostersomavestre-totennishiawakuravestvagoyvevelst" +
- "advibo-valentiavibovalentiavideovillaskoyabearalvahkijobserverda" +
- "lvdalcesomnarashinovinnicartiervinnytsiavipsinaapphotographysiov" +
- "irginiavirtualvirtueeldomeindustriesteambulancevirtuelvisakegawa" +
- "vistaprinternationalfirearmsooviterboltromsakatakinouevivoldavla" +
- "dikavkazanvladimirvladivostokaizukarasuyamazoevlogoipiagetmyiphi" +
- "lipsyvolkenkundenvolkswagentsopotritonvologdanskoshunantokonameg" +
- "atakasugais-an-accountantshinshirovolvolgogradvolyngdalvoronezhy" +
- "tomyrvossevangenvotevotingvotoyonezawavrnworldworse-thanggliding" +
- "wowiwatsukiyonowruzhgorodoywritesthisblogsytewroclawloclawekostr" +
- "omahachijorpelandwtcirclegnicafederationwtfbx-oslodingenwuozuwww" +
- "mflabsor-odalwzmiuwajimaxn--4gq48lf9jeonnamerikawauexn--4it168dx" +
- "n--4it797kotohiradomainsurehabmerxn--4pvxsor-varangerxn--54b7fta" +
- "0ccitichernigovernmentoyookanzakiyosatokigawaxn--55qw42gxn--55qx" +
- "5dxn--5js045dxn--5rtp49civilaviationxn--5rtq34kotouraxn--5su34j9" +
- "36bgsgxn--5tzm5gxn--6btw5axn--6frz82gxn--6orx2rxn--6qq986b3xlxn-" +
- "-7t0a264civilisationxn--80adxhksorfoldxn--80ao21axn--80aqecdr1ax" +
- "n--80asehdbarclaycardsakuraibigawaurskog-holandroverhalla-spezia" +
- "grocerybnikahokutobishimaizurubtsovskiervaapsteiermarkariyakumol" +
- "dev-myqnapcloudcontrolappagefrontappagespeedmobilizerobiraeropor" +
- "talabamagasakishimabarackmaze12xn--80aswgxn--80audnedalnxn--8ltr" +
- "62kouhokutamakis-an-actorxn--8pvr4uxn--8y0a063axn--90a3academyac" +
- "tivedirectoryazannakadomari-elasticbeanstalkounosunndalxn--90ais" +
- "hobaraomoriguchiharahkkeravjudygarlandxn--90azhaibarakitahatakan" +
- "abeautydalxn--9dbhblg6dietcimmobilienxn--9dbq2axn--9et52uxn--9kr" +
- "t00axn--andy-iraxn--aroport-byanagawaxn--asky-iraxn--aurskog-hla" +
- "nd-jnbarclaysakyotanabellunordkappgafanpachigasakidsmynasushioba" +
- "ragusaarlandiskstationavigationavuotnakayamatsuuraustevollavagis" +
- "kebinagisochildrensgardenaturalhistorymuseumcenterepbodyndns-fre" +
- "ebox-oskolegokasells-for-less3-eu-central-1xn--avery-yuasakuhokk" +
- "aidontexisteingeekouyamashikis-an-actresshintokushimaxn--b-5gaxn" +
- "--b4w605ferdxn--bck1b9a5dre4civilizationxn--bdddj-mrabdxn--beara" +
- "lvhki-y4axn--berlevg-jxaxn--bhcavuotna-s4axn--bhccavuotna-k7axn-" +
- "-bidr-5nachikatsuuraxn--bievt-0qa2xn--bjarky-fyanaizuxn--bjddar-" +
- "ptamayufuettertdasnetzxn--blt-elabourxn--bmlo-graingerxn--bod-2n" +
- "aroyxn--brnny-wuaccident-investigationjukudoyamagadancebetsukuba" +
- "bia-goracleaningatlantabusebastopologyeonggiehtavuoatnadexeterim" +
- "o-i-ranagahamaroygardendoftheinternetflixilovecollegefantasyleag" +
- "uernseyxn--brnnysund-m8accident-preventionlineat-urlxn--brum-voa" +
- "gatromsojavald-aostaplesokanoyakagexn--btsfjord-9zaxn--c1avgxn--" +
- "c2br7gxn--c3s14misasaguris-into-animelbournexn--cck2b3barefootba" +
- "llooningliwiceventsalangenayoroddaustinnaturalsciencesnaturelles" +
- "3-eu-west-1xn--cg4bkis-very-badaddjamalborkangerxn--ciqpnxn--clc" +
- "hc0ea0b2g2a9gcdn77-sslattumisawaxn--comunicaes-v6a2oxn--correios" +
- "-e-telecomunicaes-ghc29axn--czr694bargainstitutelemarkashiwaraus" +
- "traliaisondriodejaneirochestereportarantours3-external-1xn--czrs" +
- "0trusteexn--czru2dxn--czrw28barreauctionflfanfshostrodawaraustrh" +
- "eimatunduhrennesoyokotebinorilskarlsoyokozebizenakamagayachts3-e" +
- "xternal-2xn--d1acj3barrel-of-knowledgeologyukuhashimojibmditchyo" +
- "uripalanakhodkanagawauthordalandroidgcahcesuolocalhistoryggeelvi" +
- "nckarmoyomitanobninskarpaczeladz-1xn--d1alfaromeoxn--d1atrvbarce" +
- "lonagasukeu-2xn--d5qv7z876civilwarmanagementoyosatoyokawaxn--dav" +
- "venjrga-y4axn--djrs72d6uyxn--djty4kouzushimashikokuchuoxn--dnna-" +
- "grajewolterskluwerxn--drbak-wuaxn--dyry-iraxn--e1a4claimsaves-th" +
- "e-whalessandria-trani-barletta-andriatranibarlettaandriaxn--eckv" +
- "dtc9dxn--efvn9sorreisahayakawakamiichikawamisatottoris-lostre-to" +
- "teneis-a-studentalxn--efvy88hair-surveillancexn--ehqz56nxn--elqq" +
- "16hakatanotaireshimokawaxn--estv75gxn--eveni-0qa01gaxn--f6qx53ax" +
- "n--fct429kozagawaxn--fhbeiarnxn--finny-yuaxn--fiq228c5hsortlandx" +
- "n--fiq64barrell-of-knowledgeometre-experts-comptablesalondonetsk" +
- "ashiwazakiyosemiteverbankasukabedzin-the-bandaioiraseeklogesuran" +
- "certmgretachikawakkanaibetsubamericanfamilydscloudcontrolledekaf" +
- "jordivtasvuodnagatorogersaltdalimoliserniautomotivecodynaliascol" +
- "i-picenoipirangamvikaruizawamusementaobaokinawashirosatochiokino" +
- "shimakeupowiathletajimabariakembuchikumagayagawakuyabukihokumako" +
- "gengerdalipayekaterinburgjerdrumckinseyokosukareliance164xn--fiq" +
- "s8sorumisakis-gonexn--fiqz9southcarolinazawaxn--fjord-lraxn--fjq" +
- "720axn--fl-ziaxn--flor-jraxn--flw351exn--fpcrj9c3dxn--frde-grand" +
- "rapidsouthwestfalenxn--frna-woaraisaijosoyrovigorlicexn--frya-hr" +
- "axn--fzc2c9e2clickchristiansburgroundhandlingroznyxn--fzys8d69uv" +
- "gmailxn--g2xx48clinichernihivanovosibirskautokeinoxn--gckr3f0fbx" +
- "ostrolekaluganskharkivgucciprianiigataitogliattirescrappingushik" +
- "amifuranosegawaxn--gecrj9cliniquenoharaxn--ggaviika-8ya47hakodat" +
- "exn--gildeskl-g0axn--givuotna-8yandexn--3pxu8kosugexn--gjvik-wua" +
- "xn--gk3at1exn--gls-elacaixaxn--gmq050is-very-evillagexn--gmqw5ax" +
- "n--h-2failxn--h1aeghakonexn--h2brj9clintonoshoesavonamsskoganeis" +
- "-a-doctorayxn--hbmer-xqaxn--hcesuolo-7ya35bashkiriautoscanadaeje" +
- "onbukarumaifarmerseinextdirectargets-itargivingjesdalavangenatur" +
- "bruksgymnaturhistorisches3-fips-us-gov-west-1xn--hery-iraxn--hge" +
- "bostad-g3axn--hmmrfeasta-s4acctrysiljan-mayenxn--hnefoss-q1axn--" +
- "hobl-iraxn--holtlen-hxaxn--hpmir-xqaxn--hxt814exn--hyanger-q1axn" +
- "--hylandet-54axn--i1b6b1a6a2exn--imr513nxn--indery-fyaotsurnadal" +
- "xn--io0a7is-very-goodhandsonxn--j1aefermobilyxn--j1amhakubankhva" +
- "olbia-tempio-olbiatempioolbialystokkemerovodkagoshimalopolskanla" +
- "ndxn--j6w193gxn--jlq61u9w7basilicataniaveroykeniwaizumiotsukumiy" +
- "amazonawsabaerobaticketsaritsynologyeongnamegawakeisenbahnatuurw" +
- "etenschappenaumburgjovikasaokamisatokashikiwienaustdalazioceanog" +
- "raphics3-sa-east-1xn--jlster-byaroslavlaanderenxn--jrpeland-54ax" +
- "n--jvr189misconfusedxn--k7yn95exn--karmy-yuaxn--kbrq7oxn--kcrx77" +
- "d1x4axn--kfjord-iuaxn--klbu-woaxn--klt787dxn--kltp7dxn--kltx9axn" +
- "--klty5xn--42c2d9axn--koluokta-7ya57hakuis-a-nascarfanxn--kprw13" +
- "dxn--kpry57dxn--kpu716ferraraxn--kput3is-very-nicexn--krager-gya" +
- "sakaiminatoyonoxn--kranghke-b0axn--krdsherad-m8axn--krehamn-dxax" +
- "n--krjohka-hwab49jetztrentino-sudtirolxn--ksnes-uuaxn--kvfjord-n" +
- "xaxn--kvitsy-fyasugis-very-sweetpepperxn--kvnangen-k0axn--l-1fai" +
- "rwindsowaxn--l1accentureklamborghiniizaxn--laheadju-7yasuokarate" +
- "xn--langevg-jxaxn--lcvr32dxn--ldingen-q1axn--leagaviika-52basket" +
- "ballfinanzgoravocatanzarowebhopocznoceanographiquehimeji234xn--l" +
- "esund-huaxn--lgbbat1ad8jevnakershuscultureggioemiliaromagnakasat" +
- "sunais-a-teacherkassymantechnologyxn--lgrd-poacoachampionshiphop" +
- "tobamagazinebraskaunjargallupinbatodayurihonjournalisteinkjerusa" +
- "lembroideryusuharavoues3-us-gov-west-1xn--lhppi-xqaxn--linds-pra" +
- "mericanartulansokndalxn--lns-qlanxesspreadbettingxn--loabt-0qaxn" +
- "--lrdal-sraxn--lrenskog-54axn--lt-liaclothingrpanasonichernivtsi" +
- "ciliaxn--lten-granexn--lury-iraxn--mely-iraxn--merker-kuaxn--mgb" +
- "2ddespydebergxn--mgb9awbferrarittogoldpoint2thisamitsukexn--mgba" +
- "3a3ejtunesolarssonxn--mgba3a4f16axn--mgba3a4franamizuholdingsmil" +
- "eksvikozakis-an-anarchistoricalsocietyumenxn--mgba7c0bbn0axn--mg" +
- "baakc7dvferreroticanonoichinomiyakexn--mgbaam7a8hakusandiegoodye" +
- "arthadselfipassagenshellaspeziaxn--mgbab2bdxn--mgbai9a5eva00bats" +
- "fjordivttasvuotnaharimaniwakuratexascolipicenord-aurdalpha-myqna" +
- "pcloudappspotagerhcloudfunctionsalvadordalibabaikaliszczytnord-o" +
- "dalindasdaburyatiaarpaleomutashinaiinetarnobrzegyptianhlfanhsalz" +
- "burglobalashovhachinohedmarkasumigaurawa-mazowszexboxenapponazur" +
- "e-mobilevje-og-hornnesamegawaxasnesoddenmarkhangelskjervoyagemol" +
- "ogicallyngenglanddnskingjerstadotsuruokamchatkameokameyamashinat" +
- "sukigatakamatsukawaetnagaivuotnagaokakyotambabydgoszczecinemagen" +
- "tositelekommunikationthewifiat-band-campaniamallamaintenanceobih" +
- "irosakikamijimattelefonicarbonia-iglesias-carboniaiglesiascarbon" +
- "iabruzzoologyeongbuk-uralsk12xn--mgbai9azgqp6jewelryxn--mgbayh7g" +
- "paduaxn--mgbb9fbpobanazawaxn--mgbbh1a71exn--mgbc0a9azcgxn--mgbca" +
- "7dzdoxn--mgberp4a5d4a87gxn--mgberp4a5d4arxn--mgbi4ecexposedxn--m" +
- "gbpl2fhskpnxn--mgbqly7c0a67fbcloudnsdojoetsuwanouchikujogaszkola" +
- "hppiacenzakopanerairforcexn--mgbqly7cvafredrikstadtverranzanxn--" +
- "mgbt3dhdxn--mgbtf8flatangerxn--mgbtx2bauhausposts-and-telecommun" +
- "icationsnasadodgeorgeorgiaxn--mgbx4cd0abbottunkosherbrookegawaxn" +
- "--mix082fetsundxn--mix891fgxn--1lqs71dxn--mjndalen-64axn--mk0axi" +
- "nfinitis-with-thebandoomdnsfor-better-thandaxn--mk1bu44cnsaxoxn-" +
- "-mkru45isleofmandalxn--mlatvuopmi-s4axn--mli-tlapyatigorskppspie" +
- "gelxn--mlselv-iuaxn--moreke-juaxn--mori-qsakuragawaxn--mosjen-ey" +
- "atominamiawajikissmarterthanyoustkarasjokomakiyosumycdn77-secure" +
- "chtrainingxn--mot-tlaquilancasterxn--mre-og-romsdal-qqbbcasadela" +
- "monedatsunanjoburglobodoes-itvedestrandiyusuisserveexchangexn--m" +
- "sy-ula0haldenxn--mtta-vrjjat-k7afamilycompanycntoyotaris-a-finan" +
- "cialadvisor-aurdalukowhoswhokksundynv6xn--muost-0qaxn--mxtq1mish" +
- "imatsumaebashimodatexn--ngbc5azdxn--ngbe9e0axn--ngbrxn--45brj9ci" +
- "rcus-2xn--nit225krasnodarxn--nmesjevuemie-tcbajddarchaeologyxn--" +
- "nnx388axn--nodexn--nqv7fs00emaxn--nry-yla5gxn--ntso0iqx3axn--nts" +
- "q17gxn--nttery-byaeservecounterstrikexn--nvuotna-hwaxn--nyqy26ax" +
- "n--o1achattanooganorfolkebiblegallocus-1xn--o3cw4halsaitamatsuku" +
- "ris-a-nurservebbshimokitayamaxn--od0algxn--od0aq3bbtarumizusawax" +
- "n--ogbpf8flekkefjordxn--oppegrd-ixaxn--ostery-fyatsukaratsuginam" +
- "ikatagamihoboleslawiecolonialwilliamsburgruexn--osyro-wuaxn--p1a" +
- "cfhvalerxn--p1aiwchoseirouterxn--pbt977coloradoplateaudioxn--pgb" +
- "s0dhlxn--porsgu-sta26fidonnakaiwamizawaxn--pssu33lxn--pssy2uxn--" +
- "q9jyb4columbusheyxn--qcka1pmcdonaldsrlxn--qqqt11missilelxn--qxam" +
- "urskjakdnepropetrovskiptveterinairealtorlandxn--rady-iraxn--rdal" +
- "-poaxn--rde-ularvikrasnoyarskomitamamuraxn--rdy-0nabarixn--renne" +
- "sy-v1axn--rhkkervju-01aflakstadaokagakibichuoxn--rholt-mragowood" +
- "sidexn--rhqv96gxn--rht27zxn--rht3dxn--rht61exn--risa-5narusawaxn" +
- "--risr-iraxn--rland-uuaxn--rlingen-mxaxn--rmskog-byatsushiroxn--" +
- "rny31hammarfeastafricapetownnews-stagingxn--rovu88bbvacationsupd" +
- "atelevisionikiitatebayashijonawatexn--rros-granvindafjordxn--rsk" +
- "og-uuaxn--rst-0narutomobellevuelosangelesjaguarchitecturealtychy" +
- "attorneyagawalbrzycharternopilawalesundxn--rsta-francaiseharaxn-" +
- "-ryken-vuaxn--ryrvik-byawaraxn--s-1faitheguardianxn--s9brj9commu" +
- "nitysfjordyroyrvikinguitarsbschokoladenxn--sandnessjen-ogbizhevs" +
- "kredirectmeldalxn--sandy-yuaxn--seral-lraxn--ses554gxn--sgne-gra" +
- "tangenxn--skierv-utazaskvolloabathsbcomobaraxn--skjervy-v1axn--s" +
- "kjk-soaxn--sknit-yqaxn--sknland-fxaxn--slat-5narviikananporovnox" +
- "n--slt-elabbvieeexn--smla-hraxn--smna-gratis-a-bulls-fanxn--snas" +
- "e-nraxn--sndre-land-0cbremangerxn--snes-poaxn--snsa-roaxn--sr-au" +
- "rdal-l8axn--sr-fron-q1axn--sr-odal-q1axn--sr-varanger-ggbentleyu" +
- "uconnectatamotorsamnangerxn--srfold-byawatahamaxn--srreisa-q1axn" +
- "--srum-grazxn--stfold-9xaxn--stjrdal-s1axn--stjrdalshalsen-sqbep" +
- "publishproxyzgorzeleccolognewportlligatewayuzawaxn--stre-toten-z" +
- "cbsrtroandinosaurlandesmolenskosaigawaxn--t60b56axn--tckweatherc" +
- "hannelxn--tiq49xqyjewishartgalleryxn--tjme-hraxn--tn0agrinet-fre" +
- "aksrvaroyxn--tnsberg-q1axn--tor131oxn--trany-yuaxn--trgstad-r1ax" +
- "n--trna-woaxn--troms-zuaxn--tysvr-vraxn--uc0atvdonskoshimizumaki" +
- "zunokunimilanoxn--uc0ay4axn--uist22hamurakamigoriginshimonitayan" +
- "agitlaborxn--uisz3gxn--unjrga-rtambovenneslaskerrylogisticsologn" +
- "exn--unup4yxn--uuwu58axn--vads-jraxn--vard-jraxn--vegrshei-c0axn" +
- "--vermgensberater-ctberndnpalermomasvuotnakatombetsupportatarsta" +
- "nikkoebenhavnikolaevennodessaikiraxn--vermgensberatung-pwbeskidy" +
- "nathomedepotenzachpomorskienikonantanangerxn--vestvgy-ixa6oxn--v" +
- "g-yiabcn-north-1xn--vgan-qoaxn--vgsy-qoa0jfkomatsushimashikexn--" +
- "vgu402comparemarkerryhotelscholarshipschooluroyxn--vhquversaille" +
- "solundbeckosakaerodromegalsacechirealminamiuonumasudaxn--vler-qo" +
- "axn--vre-eiker-k8axn--vrggt-xqadxn--vry-yla5gxn--vuq861bestbuysh" +
- "ousesamsclubindalindesnesamsunglogowegroweibolzanordre-landrange" +
- "dalinkasuyakutiaxn--w4r85el8fhu5dnraxn--w4rs40lxn--wcvs22dxn--wg" +
- "bh1compute-1xn--wgbl6axn--xhq521betainaboxfusejnynysagaeroclubme" +
- "decincinnationwidealerxn--xkc2al3hye2axn--xkc2dl3a5ee0hangoutsys" +
- "temscloudfrontdoorxn--y9a3aquariumisugitokuyamatsumotofukexn--ye" +
- "r-znarvikristiansandcatshirakoenigxn--yfro4i67oxn--ygarden-p1axn" +
- "--ygbi2ammxn--45q11citadeliveryokamikawanehonbetsurutaharaxn--ys" +
- "tre-slidre-ujbieigersundrivelandrobaknoluoktaikicks-assedicaseih" +
- "ichisobetsuitaipeiheijiiyamanobeauxartsandcraftsandvikcoromantov" +
- "alle-d-aostathellexusdecorativeartsanfranciscofreakunemurorangei" +
- "seiyoichiropracticasertairaxn--zbx025dxn--zf0ao64axn--zf0avxn--4" +
- "gbriminingxn--zfr164bielawallonieruchomoscienceandindustryninohe" +
- "kinannestadrudmurtiaxperiaxz"
+const text = "bikedagestangeorgeorgiaxagrocerybnikahokutobishimaizuruhreportar" +
+ "nobrzegyptianaturalhistorymuseumcentereviewskrakoweddinggfarmers" +
+ "einexus-2bilbaogakievenesalangenikiiyamanouchikuhokuryugasakitau" +
+ "rayasudabillustrationikkoebenhavnikolaevennodessagamiharabiomuta" +
+ "shinainfinitintuitattoolsztynsettlersalondonetskarpaczeladzjcbre" +
+ "mangerbirdartcenterprisesakikuchikuseikarugapartmentsaltdalimoli" +
+ "serniabirkenesoddtangenovaravennagasukeverbankaruizawabirthplace" +
+ "vje-og-hornnesalvadordalibabajddarchaeologyusuisserveexchangebja" +
+ "rkoyuufcfanikonantanangerbjerkreimbalsanagochihayaakasakawaharau" +
+ "malopolskanlandds3-us-west-1bjugninohekinannestadrangedalindasda" +
+ "burblockbusternidray-dnsupdaterbloombergbauerninomiyakonojosoyro" +
+ "rosalzburgjovikarumaifarmsteadraydnsamegawabloxcmsamnangerblueda" +
+ "ncebmoattachmentsamsclubindalindesnesamsungladell-ogliastraderbm" +
+ "sandvikcoromantovalle-d-aostatic-accessanfranciscofreakunemurora" +
+ "ngeiseiyoichiropracticasinordre-landrivelandrobaknoluoktabuseekl" +
+ "ogesurancertmgretachikawakkanaibetsubamericanfamilydscloudcontro" +
+ "lledekafjordrudunsangoppdalivornobmweirbnpparibaselburglassassin" +
+ "ationalheritagematsubarakawagoebnrwfarsundupontariobonnirasakinu" +
+ "yamashinashikitchenishiazainvestmentsanjournalismailillesandefjo" +
+ "rdurbanamexhibitionishigobookingliwicebootsannanishiharaboschaef" +
+ "flerdalomzaporizhzhegurinzais-a-bulls-fanishiizunazukis-a-candid" +
+ "atebostikasaokamiminersannohelplfinancialorenskoglobalashovhachi" +
+ "nohedmarkashibatakasakiyokawarabostonakijinsekikogentinglobodoes" +
+ "-itvedestrandurhamburglogowhalingloppenzaogashimadachicagoboatsa" +
+ "nokashiharabotanicalgardenishikatakayamatta-varjjataxihuanishika" +
+ "tsuragithubusercontentgoryuzawabotanicgardenishikawazukamitondab" +
+ "ayashiogamagoriziabotanybouncemerckmsdnipropetrovskjakdnepropetr" +
+ "ovskiervaapsteiermarkashiwarabounty-fullensakerrypropertiesantab" +
+ "arbaraboutiquebecngmbhartiffanybozentsujiiebradescorporationishi" +
+ "merabrandywinevalleybrasiliabresciabrindisibenikebristoloslocalh" +
+ "istoryggeelvinckashiwazakiyosatokashikiyosemitebritishcolumbialo" +
+ "wiezachpomorskienishinomiyashironobroadcastlefrakkestadvrcambrid" +
+ "gestonextdirectjeldsundvrdnsantacruzsantafedextraspacekitagataji" +
+ "rittogoldpoint2thisamitsukebroadwaybroke-itjmaxxxboxenapponazure" +
+ "-mobilebrokerbronnoysundwgminakamichiharabrothermesaverdeatnurem" +
+ "bergmodellingmxfinitybrowsersafetymarketsanukis-a-catererbrumund" +
+ "dalotenkawabrunelasticbeanstalkasukabedzin-the-bandaikawachinaga" +
+ "noharamcoalaskanittedallasalleasinglest-mon-blogueurovisionthewi" +
+ "fiat-band-campaniabrusselsaotomemergencyberlevagangaviikanonjis-" +
+ "a-celticsfanishinoomotegobruxellesapodlasiellakasamatsudovre-eik" +
+ "erbryanskjervoyagebrynewhampshirebungoonordlandyndns-at-workingg" +
+ "roupalacebuskerudinewjerseybuzenishinoshimattelefonicarbonia-igl" +
+ "esias-carboniaiglesiascarboniabuzzlgrimstadyndns-blogdnsapporobw" +
+ "hoswhokksundyndns-freebox-ostrowiecateringebuilderschmidtre-gaul" +
+ "dalottebzhitomirumalselvendrellottokonamegatakasugais-a-chefashi" +
+ "onishiokoppegardyndns-homednsardegnamsskoganeis-a-conservativefs" +
+ "nillfjordyndns-ipaleocondoshichinohealth-carereformitakeharaconf" +
+ "erenceconstructionconsuladoesntexistanbullensvanguardyndns-wikin" +
+ "dlegokasells-for-lessaudaconsultanthropologyconsultingvolluxuryc" +
+ "ontactoyookanmakiwakunigamifunecontemporaryarteducationalchikugo" +
+ "doharuovatoyosatoyakokonoecontractorskenconventureshinodesashibe" +
+ "tsuikinderoycookingchannelblagdenesnaaseralingenkainanaejrietisa" +
+ "latinabenonichernihivanovodkagoshimalvikasumigaurawa-mazowszexjc" +
+ "palermomahachijorpelandyndns-mailouvreisenishitosashimizunaminam" +
+ "iashigaracoolkuszkoladbrokesauheradyndns-workisboringrpamperedch" +
+ "efastlylbaltimore-og-romsdalwaysdatabaseballangenoamishirasatoch" +
+ "igiessenebakkeshibechambagriculturennebudejjudygarlandigitalavan" +
+ "genavigationavuotnaklodzkodairamusementarumizusawabruzzoologyeon" +
+ "gbuk12cooperaunitemasekatsushikabeeldengeluidyndns1copenhagencyc" +
+ "lopedichernivtsiciliacorsicagliarightathomeftpanamacorvettenriku" +
+ "zentakataitogliattiresavannahgacosenzaganquannakadomaritimekeepi" +
+ "ngatlantaijis-a-financialadvisor-aurdaluzerncosidnsfor-better-th" +
+ "anawawildlifedjeffersoncostumedio-campidano-mediocampidanomedioc" +
+ "ouchpotatofriesaves-the-whalessandria-trani-barletta-andriatrani" +
+ "barlettaandriacouncilvivano-frankivskatsuyamasfjordencouponsavon" +
+ "aplesaxocoursesbschokoladencq-acranbrookuwanalyticscholarshipsch" +
+ "oolcreditcardynnschulezajskydivingruecreditunioncremonashorokana" +
+ "iecrewilliamhillcricketrzyncrimeastcoastaldefencecrotonewyorkshi" +
+ "recipesaro-urbino-pesarourbinopesaromasvuotnaharimamurogawacrown" +
+ "providercrsvpanasonichernovtsykkylvenetogakushimotoganewportllig" +
+ "atjxn--0trq7p7nnishiwakis-a-cpadoval-daostavalleycruiseschwarzgw" +
+ "angjuegoshikiminokamoenairtraffichiryukyuragifuchungbukasuyaltak" +
+ "ashimaseratis-a-cubicle-slavellinowtvalleaostatoilowiczest-le-pa" +
+ "trondheimmobilienissandnessjoenissayokoshibahikariwanumatakazaki" +
+ "s-a-democratkmaxxn--11b4c3dyndns-office-on-the-webcampobassociat" +
+ "esardiniacryptonomichigangwoncuisinellahppiacenzakopanerairguard" +
+ "ynv6culturalcentertainmentoyotaris-a-geekgalaxycuneocupcakecxn--" +
+ "1ctwolominamatakkokaminokawanishiaizubangecymrussiacyonabarulsan" +
+ "doycyouthdfcbankaufenfiguerestaurantoyotomiyazakis-a-greenfilate" +
+ "liafilminamiawajikis-a-guruslivinghistoryfinalfinancefineartscie" +
+ "ntistoragefinlandfinnoyfirebaseapparliamentoyotsukaidownloadfire" +
+ "nzefirestonefirmdaleirfjordfishingolffanscjohnsonfitjarqhachioji" +
+ "yahikobeatscotlandfitnessettlementoyourafjalerflesbergushikamifu" +
+ "ranoshiroomuraflickragerotikakamigaharaflightscrapper-siteflirfl" +
+ "ogintogurafloraflorencefloridavvesiidazaifudaigojomedizinhistori" +
+ "schescrappingxn--1lqs71dfloristanohatakahamaniwakuratexascolipic" +
+ "enord-aurdalipayflorogerserveftparmaflowerservegame-serversaille" +
+ "servehalflifestyleflynnhubambleclercartoonartdecoldwarmiamibugat" +
+ "tipschlesisches3-us-west-2fndfoodnetworkshoppingfor-ourfor-somee" +
+ "thnologyfor-theaterforexrothruherecreationforgotdnservehttparoch" +
+ "erkasyno-dservehumourforli-cesena-forlicesenaforlikescandynamic-" +
+ "dnserveirchitachinakagawatchandclockaszubyforsaleirvikazoforsand" +
+ "asuoloftoystre-slidrettozawafortmissoulair-traffic-controlleyfor" +
+ "tworthachirogatakahatakaishimogosenforuminamibosogndalfosneserve" +
+ "minecraftozsdev-myqnapcloudcontrolappspotagerfotaruis-a-hard-wor" +
+ "kerfoxfordedyn-ip24freeboxoservemp3utilitiesquarezzoologicalvink" +
+ "lein-addrammenuernbergdyniabogadocscbnl-o-g-i-nativeamericananti" +
+ "ques3-ap-northeast-1kappchizippodhaleangaviikadenadexeterepbodyn" +
+ "athomebuilt3l3p0rtargets-itargiving12000emmafanconagawakayamadri" +
+ "dvagsoyericssonyoursidealerimo-i-ranaamesjevuemielno-ip6freemaso" +
+ "nryfreiburgfreightcminamidaitomangotsukisosakitagawafreseniuscou" +
+ "ntryestateofdelawaredstonefribourgfriuli-v-giuliafriuli-ve-giuli" +
+ "afriuli-vegiuliafriuli-venezia-giuliafriuli-veneziagiuliafriuli-" +
+ "vgiuliafriuliv-giuliafriulive-giuliafriulivegiuliafriulivenezia-" +
+ "giuliafriuliveneziagiuliafriulivgiuliafrlfroganservep2parservepi" +
+ "cservequakefrognfrolandfrom-akrehamnfrom-alfrom-arfrom-azwinbana" +
+ "narepublicasadelamonedatsunanjoburgjerstadotsuruokakegawasnesodd" +
+ "enmarkhangelskiptveterinairealtychyattorneyagawalmartatamotors3-" +
+ "ap-south-1from-capebretonamiastapleservesarcasmatartanddesignfro" +
+ "m-collectionfrom-ctrani-andria-barletta-trani-andriafrom-dchitos" +
+ "etogitsuldalucaniafrom-defenseljordfrom-flanderservicesettsurgeo" +
+ "nshalloffamemorialfrom-gausdalfrom-higashiagatsumagoizumizakiraf" +
+ "rom-iafrom-idfrom-ilfrom-incheonfrom-ksevastopolefrom-kyowariasa" +
+ "hikawafrom-lajollamericanexpressexyfrom-mannortonsbergfrom-mdfro" +
+ "m-megurokunohealthcareersevenassisicilyfrom-midoris-a-hunterfrom" +
+ "-mnfrom-mochizukirkenesewindmillfrom-msfranziskanerdpolicefrom-m" +
+ "tnfrom-nchloefrom-ndfrom-nefrom-nhktraniandriabarlettatraniandri" +
+ "afrom-njelenia-gorafrom-nminamiechizenfrom-nvalled-aostavangerfr" +
+ "om-nyfrom-ohkurafrom-oketohmansionshangrilanciafrom-orfrom-pader" +
+ "bornfrom-pratohnoshoooshikamaishimodatextileitungsenfrom-ris-a-k" +
+ "nightpointtokaizukameokameyamatotakadafrom-schoenbrunnfrom-sdfro" +
+ "m-tnfrom-txn--1qqw23afrom-utazuerichardlillehammerfeste-ipartis-" +
+ "a-landscaperfrom-vaksdalfrom-vtranoyfrom-wafrom-wielunnerfrom-wv" +
+ "alledaostavernfrom-wyfrosinonefrostalowa-wolawafroyahababyglandf" +
+ "stcgroupartnersharis-a-lawyerfujiiderafujikawaguchikonefujiminoh" +
+ "tawaramotoineppubolognakanotoddenfujinomiyadafujiokayamanxn--2m4" +
+ "a15efujisatoshonairportland-4-salernoboribetsucksharpartshawaiij" +
+ "imarugame-hostrodawarafujisawafujishiroishidakabiratoridegreefuj" +
+ "itsurugashimamateramodalenfujixeroxn--30rr7yfujiyoshidafukayabea" +
+ "rdubaiduckdnshellaspeziafukuchiyamadafukudominichocolatelevision" +
+ "issedaluccapitalonewmexicoffeedbackplaneapplinzis-a-designerimar" +
+ "umorimachidafukuis-a-liberalfukumitsubishigakirovogradoyfukuokaz" +
+ "akiryuohadanotaireshimojis-a-libertarianfukuroishikarikaturindal" +
+ "fukusakisarazurewebsiteshikagamiishibukawafukuyamagatakaharustka" +
+ "noyakagefunabashiriuchinadafunagatakahashimamakishiwadafunahashi" +
+ "kamiamakusatsumasendaisennangonohejis-a-linux-useranishiaritabas" +
+ "hijonawatefundaciofuoiskujukuriyamaoris-a-llamarylandfuosskoczow" +
+ "indowshimokawafurnituredumbrellanbibaidarfurubiraquarelleborkang" +
+ "erfurudonostiaarpartyfurukawairtelecityeatshimokitayamafusodegau" +
+ "rafussaikisofukushimapasadenamsosnowiechofunatorientexpressarluc" +
+ "ernefutabayamaguchinomigawafutboldlygoingnowhere-for-moregontrai" +
+ "lroadfuttsurugimperiafuturehostingfuturemailingfvgfyis-a-musicia" +
+ "nfylkesbiblackfridayfyresdalhangglidinghangoutsystemscloudfrontd" +
+ "oorhannanmokuizumodenakasatsunais-a-painteractivegarsheis-a-pats" +
+ "fanhannotteroyhanyuzenhapmirhareidsbergenharstadharvestcelebrati" +
+ "onhasamarnardalhasaminami-alpssells-itransportransurlhashbanghas" +
+ "udahasura-appassenger-associationhasvikazunohatogayahoohatoyamaz" +
+ "akitahiroshimarriottrapaniimimatakatoris-a-personaltrainerhatsuk" +
+ "aichikaiseis-a-photographerokuappaviancargodaddynaliascoli-picen" +
+ "oipirangamvikddielddanuorrissagaeroclubmedecincinnationwidealsta" +
+ "haugesunderseaportsinfolldalabamagasakishimabarackmazehattfjelld" +
+ "alhayashimamotobungotakadapliernewhollandhazuminobusellsyourhome" +
+ "goodshimotsumahboehringerikehelsinkitakamiizumisanofidelitysvard" +
+ "ollshinichinanhembygdsforbundhemneshinjournalistjohnhemsedalhepf" +
+ "orgeherokussldheroyhgtvallee-aosteroyhigashichichibunkyonanaoshi" +
+ "mageandsoundandvisionhigashihiroshimanehigashiizumozakitakatakam" +
+ "oriokalmykiahigashikagawahigashikagurasoedahigashikawakitaaikita" +
+ "kyushuaiahigashikurumeiwamarshallstatebankfhappouhigashimatsushi" +
+ "maritimodernhigashimatsuyamakitaakitadaitoigawahigashimurayamamo" +
+ "torcycleshinjukumanohigashinarusembokukitamidsundhigashinehigash" +
+ "iomihachimanchesterhigashiosakasayamanakakogawahigashishirakawam" +
+ "atakanabeautydalhigashisumiyoshikawaminamiaikitamotosumitakagild" +
+ "eskaliszhigashitsunowruzhgorodeohigashiurausukitanakagusukumodum" +
+ "inamiiselectravelchannelhigashiyamatokoriyamanashifteditchyourip" +
+ "fizerhigashiyodogawahigashiyoshinogaris-a-playerhiraizumisatohob" +
+ "by-sitehirakatashinagawahiranais-a-republicancerresearchaeologic" +
+ "aliforniahirarahiratsukagawahirayaitakanezawahistorichouseshinka" +
+ "migotoyohashimotoshimahitachiomiyaginankokubunjis-a-rockstaracho" +
+ "wicehitachiotagooglecodespotravelersinsurancehitraeumtgeradeloit" +
+ "tevadsoccertificationhjartdalhjelmelandholeckobierzyceholidayhom" +
+ "eipgfoggiahomelinkhakassiahomelinuxn--32vp30haebaruminamifuranoh" +
+ "omeofficehomesecuritymaceratakaokaluganskodjejuifminamiizukamiok" +
+ "amikitayamatsuris-a-socialistmein-vigorgehomesecuritypccwinnersh" +
+ "inshinotsurgeryhomesenseminehomeunixn--3bst00minamimakis-a-soxfa" +
+ "nhondahoneywellbeingzonehongopocznosegawahonjyoitakarazukamakura" +
+ "zakitashiobarahornindalhorseoulminamiminowahortendofinternet-dns" +
+ "hinshirohospitalhoteleshintokushimahotmailhoyangerhoylandetroits" +
+ "kolelhumanitieshintomikasaharahurdalhurumajis-a-studentalhyllest" +
+ "adhyogoris-a-teacherkassymantechnologyhyugawarahyundaiwafunehzch" +
+ "onanbuildingripescaravantaajlchoyodobashichikashukujitawarajlljm" +
+ "pharmacienshirakofuefukihaboromskoguchikuzenjnjeonnamerikawauejo" +
+ "yokaichibahcavuotnagaranzannefrankfurtrentino-alto-adigejpmorgan" +
+ "jpnjprshiranukamogawajuniperjurkoshunantokigawakosugekotohiradom" +
+ "ainsureggiocalabriakotourakouhokutamakis-an-artisteinkjerusalemb" +
+ "roiderykounosupplieshiraokanagawakouyamashikokuchuokouzushimasoy" +
+ "kozagawakozakis-an-engineeringkpnkppspdnshiratakahagivestbytomar" +
+ "idagawassamukawataricohdatingkrasnodarkredirectmeldalkristiansan" +
+ "dcatshishikuis-an-entertainerkristiansundkrodsheradkrokstadelval" +
+ "daostarostwodzislawioshisognekryminamisanrikubetsupportrentino-a" +
+ "ltoadigekumatorinokumejimasudakumenanyokkaichirurgiens-dentistes" +
+ "-en-francekunisakis-bykunitachiarailwaykunitomigusukumamotoyamas" +
+ "sa-carrara-massacarraramassabusinessebyklegallocus-1kunneppulawy" +
+ "kunstsammlungkunstunddesignkuokgrouphdkureggioemiliaromagnakayam" +
+ "atsumaebashikshacknetrentino-s-tirollagrigentomologyeonggiehtavu" +
+ "oatnagaivuotnagaokakyotambabia-goracleaningkurgankurobelaudibleb" +
+ "timnetzkurogimilanokuroisoftwarendalenugkuromatsunais-certifiedo" +
+ "gawarabikomaezakirunorthwesternmutualkurotakikawasakis-foundatio" +
+ "nkushirogawakusupplykutchanelkutnokuzumakis-gonekvafjordkvalsund" +
+ "kvamfamberkeleykvanangenkvinesdalkvinnheradkviteseidskogkvitsoyk" +
+ "wpspiegelkzmissilevangermisugitokorozawamitourismolancastermitoy" +
+ "oakemiuramiyazumiyotamanomjondalenmlbfanmonmouthagebostadmonster" +
+ "monticellombardiamondshisuifuelveruminamitanemontrealestatefarme" +
+ "quipmentrentino-stirolmonza-brianzaporizhzhiamonza-e-della-brian" +
+ "zapposhitaramamonzabrianzaptokuyamatsusakahoginowaniihamatamakaw" +
+ "ajimarburgmonzaebrianzaramonzaedellabrianzamoparachutingmordovia" +
+ "jessheiminamiuonumatsumotofukemoriyamatsushigemoriyoshimilitarym" +
+ "ormoneymoroyamatsuuramortgagemoscowitdkmpspbarcelonagasakijobser" +
+ "verisignieznord-odalaziobihirosakikamijimassnasaarlandd-dnshome-" +
+ "webservercellikes-piedmontblancomeeres3-ap-southeast-1moseushist" +
+ "orymosjoenmoskeneshizukuishimofusaitamatsukuris-into-gamessinats" +
+ "ukigatakasagotembaixadamosshizuokananporovigotpantheonsitemosvik" +
+ "nx-serveronakatsugawamoteginozawaonsenmoviemovistargardmtpchrist" +
+ "masakikugawatchesarufutsunomiyawakasaikaitakoelniyodogawamtranby" +
+ "muenstermugithubcloudusercontentrentino-sud-tirolmuikamisatokama" +
+ "chippubetsubetsugarumukochikushinonsenergymulhouservebeermunakat" +
+ "anemuncieszynmuosattemuphiladelphiaareadmyblogsitemurmanskolobrz" +
+ "egersundmurotorcraftrentino-sudtirolmusashimurayamatsuzakis-leet" +
+ "rdmusashinoharamuseetrentino-sued-tirolmuseumverenigingmutsuzawa" +
+ "mutuellewismillermy-vigorlicemy-wanggouvicenzamyactivedirectorym" +
+ "yasustor-elvdalmycdn77-securechtrainingmydissentrentino-suedtiro" +
+ "lmydrobofagemydshoujis-lostre-toteneis-a-techietis-a-therapistoi" +
+ "amyeffectrentinoa-adigemyfirewallonieruchomoscienceandindustrynm" +
+ "yfritzmyftpaccesshowamyfusionmyhome-serverrankoshigayamelhusgard" +
+ "enmykolaivaolbia-tempio-olbiatempioolbialystokkepnogiftshowtimet" +
+ "eorapphilatelymymediapchromedicaltanissettairamyokohamamatsudamy" +
+ "pepsongdalenviknakanojohanamakinoharamypetshriramlidlugolekagami" +
+ "nogatagajobojis-not-certifieducatorahimeshimakanegasakinkobayash" +
+ "ikaoirminamiogunicomcastresistancemyphotoshibahccavuotnagareyama" +
+ "lborkdalvdalcesienarashinomypsxn--3e0b707emysecuritycamerakermys" +
+ "hopblocksigdalmyvnchryslerpictetrentinoaadigepicturesimple-urlpi" +
+ "emontepilotsirdalpimientaketomisatolgapinkomakiyosunndalpioneerp" +
+ "ippuphoenixn--3oq18vl8pn36apiszpittsburghofauskedsmokorsetagayas" +
+ "ells-for-ulvikautokeinopiwatepizzapkomatsushimashikizunokunimiho" +
+ "boleslawiechristiansburgriwataraidyndns-picsarpsborgroks-thisaya" +
+ "manobeokakudamatsueplanetariuminamiyamashirokawanabellevuelosang" +
+ "elesjaguarchitecturealtorlandplantationplantslingplatforminanopl" +
+ "aystationplazaplchungnamdalseidfjordyndns-remotewdyndns-serverda" +
+ "luroyplombardynamisches-dnslupskomforbarclaycards3-website-ap-no" +
+ "rtheast-1plumbingopmnpodzonepohlpoivronpokerpokrovskommunalforbu" +
+ "ndpolitiendapolkowicepoltavalle-aostathellexusdecorativeartsnoas" +
+ "aitomobellunorddalpomorzeszowithgoogleapisa-hockeynutsiracusakat" +
+ "akinouepordenonepornporsangerporsanguidelmenhorstalbansokanazawa" +
+ "porsgrunnanpoznanpraxis-a-bookkeeperugiaprdpreservationpresidiop" +
+ "rgmrprimeloyalistockholmestrandprincipeprivatizehealthinsurancep" +
+ "rochowiceproductionsokndalprofbsbxn--1lqs03nprogressivegasiaproj" +
+ "ectrentinoalto-adigepromombetsurfbx-ostrowwlkpmgulenpropertyprot" +
+ "ectionprotonetrentinoaltoadigeprudentialpruszkowithyoutubentleyp" +
+ "rzeworskogptplusterpvtrentinos-tirolpwchurchaseljeepostfoldnavyp" +
+ "zqldqponqslgbtrentinostirolquicksytesolarssonqvcirclegnicafedera" +
+ "tionstufftoread-booksnesolundbeckommunestuttgartrentoyokawasusak" +
+ "is-slickharkovalleeaosteigensusonosuzakaneyamazoesuzukaniepcesuz" +
+ "ukis-uberleetrentino-a-adigesvalbardunloppacificircustomersveios" +
+ "velvikomvuxn--3ds443gsvizzeraswedenswidnicarrierswiebodzindianap" +
+ "olis-a-bloggerswiftcoversicherungswinoujscienceandhistoryswisshi" +
+ "kis-very-badaddjamisonsynology-dsolutionsolognetuscanytushuissie" +
+ "r-justicetuvalle-daostaticsootuxfamilyvenneslaskerrylogisticsopo" +
+ "trentinosud-tirolvestfoldvestnesor-odalvestre-slidreamhostersor-" +
+ "varangervestre-totennishiawakuravestvagoyvevelstadvibo-valentiav" +
+ "ibovalentiavideovillaskoyabearalvahkihokumakogengerdalpha-myqnap" +
+ "cloudapplebesbydgoszczecinemakeupowiathletajimabariakembuchikuma" +
+ "gayagawakuyabukicks-assedicitadeliveryvinnicartiervinnytsiavipsi" +
+ "naapphonefossilkomaganevirginiavirtualvirtueeldomeindianmarketin" +
+ "gvirtuelvisakegawavistaprinternationalfirearmsorfoldviterboltroa" +
+ "ndinosaurepaircraftrevisohughesomavivoldavlaanderenvladikavkazim" +
+ "ierz-dolnyvladimirvlogoiphotographysiovolkswagentsorreisahayakaw" +
+ "akamiichikawamisatotalvologdanskongsvingervolvolkenkundenvolyngd" +
+ "alvossevangenvotevotingvotoyonakagyokutoursortlandworldworse-tha" +
+ "ndawowiwatsukiyonowritesthisblogsytewroclawloclawekoninjavald-ao" +
+ "starnbergwtciticatholicheltenham-radio-opencraftranagatorodoywtf" +
+ "bxosciencecentersciencehistorywuozuwwwmflabsorumincommbanklabudh" +
+ "abikinokawabarthagakhanamigawawzmiuwajimaxn--4gq48lf9jetztrentin" +
+ "o-aadigexn--4it168dxn--4it797konsulatrobeepilepsydneyxn--4pvxsou" +
+ "thcarolinazawaxn--54b7fta0ccivilizationxn--55qw42gxn--55qx5dxn--" +
+ "5js045dxn--5rtp49civilwarmanagementmpalmspringsakerxn--5rtq34kon" +
+ "yvelolxn--5su34j936bgsgxn--5tzm5gxn--6btw5axn--6frz82gxn--6orx2r" +
+ "xn--6qq986b3xlxn--7t0a264claimsasayamaxn--80adxhksouthwestfalenx" +
+ "n--80ao21axn--80aqecdr1axn--80asehdbarefootballooningjesdalillyo" +
+ "mbondiscountysnes3-website-ap-southeast-2xn--80aswgxn--80audneda" +
+ "lnxn--8ltr62kooris-an-actorxn--8pvr4uxn--8y0a063axn--90a3academy" +
+ "-firewall-gatewayxn--90aishobaraomoriguchiharahkkeravjuedischesa" +
+ "peakebayernrtrogstadxn--90azhytomyrxn--9dbhblg6dietcimdbargainst" +
+ "itutelemarkaratsuginamikatagamiharuconnectatarantottoribestadisc" +
+ "overyomitanobirastronomy-gatewayokosukanzakiwienaturalsciencesna" +
+ "turelles3-ap-southeast-2xn--9dbq2axn--9et52uxn--9krt00axn--andy-" +
+ "iraxn--aroport-byanaizuxn--asky-iraxn--aurskog-hland-jnbarreauct" +
+ "ionayorovnobninskarelianceu-1xn--avery-yuasakuhokkaidontexistein" +
+ "geekopervikhmelnitskiyamashikexn--b-5gaxn--b4w605ferdxn--bck1b9a" +
+ "5dre4clickatowicexn--bdddj-mrabdxn--bearalvhki-y4axn--berlevg-jx" +
+ "axn--bhcavuotna-s4axn--bhccavuotna-k7axn--bidr-5nachikatsuuraxn-" +
+ "-bievt-0qa2xn--bjarky-fyandexn--3pxu8konskowolayangroupharmacysh" +
+ "iraois-an-accountantshinyoshitomiokamitsuexn--bjddar-ptamayufuet" +
+ "tertdasnetzxn--blt-elabourxn--bmlo-graingerxn--bod-2naroyxn--brn" +
+ "ny-wuaccident-investigation-aptibleaseating-organicbcn-north-1xn" +
+ "--brnnysund-m8accident-prevention-webhopenairbusantiquest-a-la-m" +
+ "aisondre-landebudapest-a-la-masionionjukudoyamagazineat-urlxn--b" +
+ "rum-voagatromsakakinokiaxn--btsfjord-9zaxn--c1avgxn--c2br7gxn--c" +
+ "3s14mintelligencexn--cck2b3barrel-of-knowledgemologicallyngenvir" +
+ "onmentalconservationflfanfshostrolekamisunagawaugustowadaegubs3-" +
+ "ca-central-1xn--cg4bkis-very-evillagexn--ciqpnxn--clchc0ea0b2g2a" +
+ "9gcdn77-sslattumisakis-into-carshioyanagawaxn--comunicaes-v6a2ox" +
+ "n--correios-e-telecomunicaes-ghc29axn--czr694barrell-of-knowledg" +
+ "eologyonagoyaukraanghkeymachineustarhubalestrandabergamoareke164" +
+ "xn--czrs0tromsojaworznoxn--czru2dxn--czrw28bashkiriaurskog-holan" +
+ "droverhalla-speziaeroportalaheadjudaicaaarborteaches-yogasawarac" +
+ "ingroks-theatree12xn--d1acj3basilicataniaustevollarvikarasjokara" +
+ "suyamarylhurstjordalshalsenaturbruksgymnaturhistorisches3-eu-cen" +
+ "tral-1xn--d1alfaromeoxn--d1atrusteexn--d5qv7z876clinichernigover" +
+ "nmentjometlifeinsurancexn--davvenjrga-y4axn--djrs72d6uyxn--djty4" +
+ "koryokamikawanehonbetsurutaharaxn--dnna-grajewolterskluwerxn--dr" +
+ "bak-wuaxn--dyry-iraxn--e1a4cliniquenoharaxn--eckvdtc9dxn--efvn9s" +
+ "owaxn--efvy88haibarakitahatakamatsukawaxn--ehqz56nxn--elqq16hair" +
+ "-surveillancexn--estv75gxn--eveni-0qa01gaxn--f6qx53axn--fct429ko" +
+ "saigawaxn--fhbeiarnxn--finny-yuaxn--fiq228c5hspjelkavikomonoxn--" +
+ "fiq64basketballfinanzgoraustinnatuurwetenschappenaumburgjemnes3-" +
+ "eu-west-1xn--fiqs8spreadbettingxn--fiqz9spydebergxn--fjord-lraxn" +
+ "--fjq720axn--fl-ziaxn--flor-jraxn--flw351exn--fpcrj9c3dxn--frde-" +
+ "grandrapidsrlxn--frna-woaraisaijotrvarggatritonxn--frya-hraxn--f" +
+ "zc2c9e2clintonoshoesaseboknowsitallutskypexn--fzys8d69uvgmailxn-" +
+ "-g2xx48clothingrondarxn--gckr3f0fermobilyxn--gecrj9cloudnsdojoet" +
+ "suwanouchikujogaszczytnore-og-uvdaluxembourgrongaxn--ggaviika-8y" +
+ "a47hakatanotogawaxn--gildeskl-g0axn--givuotna-8yaotsurreyxn--gjv" +
+ "ik-wuaxn--gk3at1exn--gls-elacaixaxn--gmq050is-very-goodhandsonxn" +
+ "--gmqw5axn--h-2failxn--h1aeghakodatexn--h2brj9cnsaskatchewanxn--" +
+ "hbmer-xqaxn--hcesuolo-7ya35batodayonaguniversityoriikariyakumold" +
+ "eltaiwanairlinedre-eikerxn--hery-iraxn--hgebostad-g3axn--hmmrfea" +
+ "sta-s4acctrysiljan-mayenxn--hnefoss-q1axn--hobl-iraxn--holtlen-h" +
+ "xaxn--hpmir-xqaxn--hxt814exn--hyanger-q1axn--hylandet-54axn--i1b" +
+ "6b1a6a2exn--imr513nxn--indery-fyasakaiminatoyonezawaxn--io0a7is-" +
+ "very-nicexn--j1aeferraraxn--j1amhakonexn--j6w193gxn--jlq61u9w7ba" +
+ "tsfjordishakotankarlsoyoshiokarasjohkamikoaniikappugliaustraliai" +
+ "sondriodejaneirochesterhcloudfunctions3-external-1xn--jlster-bya" +
+ "sugis-very-sweetpepperxn--jrpeland-54axn--jvr189misasaguris-into" +
+ "-cartoonshirahamatonbetsurnadalxn--k7yn95exn--karmy-yuaxn--kbrq7" +
+ "oxn--kcrx77d1x4axn--kfjord-iuaxn--klbu-woaxn--klt787dxn--kltp7dx" +
+ "n--kltx9axn--klty5xn--42c2d9axn--koluokta-7ya57hakubadajozorahol" +
+ "taleniwaizumiotsukumiyamazonawsabaerobaticketshimonosekikawaxn--" +
+ "kprw13dxn--kpry57dxn--kpu716ferrarivnexn--kput3is-with-thebandoo" +
+ "mdnsiskinkyotobetsumidatlantichoseiroumuenchenisshingugexn--krag" +
+ "er-gyasuokanraxn--kranghke-b0axn--krdsherad-m8axn--krehamn-dxaxn" +
+ "--krjohka-hwab49jevnakershuscultureggio-emilia-romagnakatombetsu" +
+ "my-routerxn--ksnes-uuaxn--kvfjord-nxaxn--kvitsy-fyatomitamamurax" +
+ "n--kvnangen-k0axn--l-1fairwindsrtrentinosudtirolxn--l1accenturek" +
+ "lamborghiniizaxn--laheadju-7yatsukanumazuryxn--langevg-jxaxn--lc" +
+ "vr32dxn--ldingen-q1axn--leagaviika-52bauhausposts-and-telecommun" +
+ "icationsncfdivtasvuodnakaiwamizawaustrheimatunduhrennesoyokotebi" +
+ "nagisochildrensgardenaustdalavagiskebinorfolkebibleikangerxn--le" +
+ "sund-huaxn--lgbbat1ad8jewelryxn--lgrd-poacoachampionshiphoptobam" +
+ "agentositelekommunikationlinebraskaunjargallupinbbcaseihichisobe" +
+ "tsuitainairforceoceanographics3-website-eu-west-1xn--lhppi-xqaxn" +
+ "--linds-pramericanartulangevagrarboretumbriamallamaintenancechir" +
+ "ealminnesotaketakatsukis-into-animelbournexn--lns-qlansrvareserv" +
+ "eblogspotrentinosued-tirolxn--loabt-0qaxn--lrdal-sraxn--lrenskog" +
+ "-54axn--lt-liacntoyonoxn--lten-granexn--lury-iraxn--mely-iraxn--" +
+ "merker-kuaxn--mgb2ddestordalxn--mgb9awbferreroticanonoichinomiya" +
+ "kexn--mgba3a3ejtunesomnaritakurashikis-savedunetbankharkivguccip" +
+ "rianiigataishinomakimobetsuliguriaxn--mgba3a4f16axn--mgba3a4fran" +
+ "amizuholdingsmileksvikosakaerodromegalsacebetsukubankhmelnytskyi" +
+ "vanylvenicexn--mgba7c0bbn0axn--mgbaakc7dvfetsundynvpnxn--mgbaam7" +
+ "a8hakuis-a-nascarfanxn--mgbab2bdxn--mgbai9a5eva00bbtateshinanoma" +
+ "chintaifun-dnsaliaskimitsubatamicable-modembetsukuibigawauthorda" +
+ "landroiddnskingjerdrumckinseyokozebizenakaniikawatanaguraetnagah" +
+ "amaroygardendoftheinternetflixilovecollegefantasyleaguernseyboml" +
+ "oans3-ap-northeast-2xn--mgbai9azgqp6jewishartgalleryxn--mgbayh7g" +
+ "padualstackspace-to-rentalstomakomaibaraxn--mgbb9fbpobanazawaxn-" +
+ "-mgbbh1a71exn--mgbc0a9azcgxn--mgbca7dzdoxn--mgberp4a5d4a87gxn--m" +
+ "gberp4a5d4arxn--mgbi4ecexposedxn--mgbpl2fhskleppiagetmyiphilipsy" +
+ "nology-diskstationxn--mgbqly7c0a67fbcolonialwilliamsburgrossetou" +
+ "chijiwadellogliastradingroundhandlingroznyxn--mgbqly7cvafredriks" +
+ "tadtvstoreitrentinosuedtirolxn--mgbt3dhdxn--mgbtf8flatangerxn--m" +
+ "gbtx2bbvacationswatch-and-clockerxn--mgbx4cd0abbottunkongsbergxn" +
+ "--mix082fgunmarcheaparisor-fronxn--mix891fhvalerxn--mjndalen-64a" +
+ "xn--mk0axindustriesteambulancexn--mk1bu44coloradoplateaudioxn--m" +
+ "kru45isleofmandalxn--mlatvuopmi-s4axn--mli-tlanxesstorfjordxn--m" +
+ "lselv-iuaxn--moreke-juaxn--mori-qsakuragawaxn--mosjen-eyatsushir" +
+ "oxn--mot-tlapyxn--mre-og-romsdal-qqbeppublishproxyzgorzeleccolog" +
+ "newspaperxn--msy-ula0hakusandiegoodyearthadselfipassagenshimonit" +
+ "ayanagitlaborxn--mtta-vrjjat-k7afamilycompanycolumbusheyxn--muos" +
+ "t-0qaxn--mxtq1misawaxn--ngbc5azdxn--ngbe9e0axn--ngbrxn--45brj9ci" +
+ "vilaviationxn--nit225koseis-an-actresshiojirishirifujiedaxn--nme" +
+ "sjevuemie-tcbalatinord-frontierxn--nnx388axn--nodexn--nqv7fs00em" +
+ "axn--nry-yla5gxn--ntso0iqx3axn--ntsq17gxn--nttery-byaeservecount" +
+ "erstrikexn--nvuotna-hwaxn--nyqy26axn--o1achattanooganordreisa-ge" +
+ "ekosherbrookegawaxn--o3cw4haldenxn--od0algxn--od0aq3bernuorockar" +
+ "tuzyukibmdivttasvuotnakamagayachts3-website-sa-east-1xn--ogbpf8f" +
+ "lekkefjordxn--oppegrd-ixaxn--ostery-fyawaraxn--osyro-wuaxn--p1ac" +
+ "fidonnakamuratajimicrolightinguovdageaidnunzenxn--p1aissmarterth" +
+ "anyouxn--pbt977communitysfjordyndns-weberlincolnxn--pgbs0dhlxn--" +
+ "porsgu-sta26fieldyroyrvikinguitarschweizparaglidingujolsterxn--p" +
+ "ssu33lxn--pssy2uxn--q9jyb4comobaraxn--qcka1pmcdonaldstpetersburg" +
+ "xn--qqqt11misconfusedxn--qxamuneuestreamsterdamnserverbaniaxn--r" +
+ "ady-iraxn--rdal-poaxn--rde-ulaquilancashirehabmerxn--rdy-0nabari" +
+ "wchoshibuyachiyodavvenjargaulardalukowiiheyaizuwakamatsubushikus" +
+ "akadogawaxn--rennesy-v1axn--rhkkervju-01aflakstadaokagakibichuox" +
+ "n--rholt-mragowoodsidexn--rhqv96gxn--rht27zxn--rht3dxn--rht61exn" +
+ "--risa-5narusawaxn--risr-iraxn--rland-uuaxn--rlingen-mxaxn--rmsk" +
+ "og-byawatahamaxn--rny31halsaintlouis-a-anarchistoireggio-calabri" +
+ "axn--rovu88beskidyn-vpncasertaipeiheijiinetnedalimanowarudautomo" +
+ "tivecodyn-o-saurlandes3-fips-us-gov-west-1xn--rros-granvindafjor" +
+ "dxn--rskog-uuaxn--rst-0narutokyotangovturystykannamihamadaxn--rs" +
+ "ta-francaiseharaxn--ryken-vuaxn--ryrvik-byaxn--s-1faitheguardian" +
+ "xn--s9brj9comparemarkerryhotelsassaris-a-doctorayxn--sandnessjen" +
+ "-ogbizxn--sandy-yuaxn--seral-lraxn--ses554gxn--sgne-gratangenxn-" +
+ "-skierv-utazaskvolloabathsbcompute-1xn--skjervy-v1axn--skjk-soax" +
+ "n--sknit-yqaxn--sknland-fxaxn--slat-5narviikamishihoronobeauxart" +
+ "sandcraftstudioxn--slt-elabbvieeexn--smla-hraxn--smna-gratis-a-b" +
+ "ruinsfanxn--snase-nraxn--sndre-land-0cbstudyndns-at-homedepotenz" +
+ "amamicrosoftbankomorotsukaminoyamaxunusualpersonxn--snes-poaxn--" +
+ "snsa-roaxn--sr-aurdal-l8axn--sr-fron-q1axn--sr-odal-q1axn--sr-va" +
+ "ranger-ggbestbuyshouses3-website-us-east-1xn--srfold-byaxn--srre" +
+ "isa-q1axn--srum-grazxn--stfold-9xaxn--stjrdal-s1axn--stjrdalshal" +
+ "sen-sqbetainaboxfusejnynysadodgeometre-experts-comptables3-websi" +
+ "te-us-west-1xn--stre-toten-zcbieigersundiyukuhashimoichinosekiga" +
+ "harautoscanadaejeonbukaratehimeji234xn--t60b56axn--tckweathercha" +
+ "nnelxn--tiq49xqyjfkhersonxn--tjme-hraxn--tn0agrinet-freakstuff-4" +
+ "-salexn--tnsberg-q1axn--tor131oxn--trany-yuaxn--trgstad-r1axn--t" +
+ "rna-woaxn--troms-zuaxn--tysvr-vraxn--uc0atvaroyxn--uc0ay4axn--ui" +
+ "st22hammarfeastafricapetownnews-stagingxn--uisz3gxn--unjrga-rtao" +
+ "baokinawashirosatochiokinoshimalatvuopmiasakuchinotsuchiurakawal" +
+ "brzycharternopilawalesundxn--unup4yxn--uuwu58axn--vads-jraxn--va" +
+ "rd-jraxn--vegrshei-c0axn--vermgensberater-ctbielawalterxn--vermg" +
+ "ensberatung-pwbiellaakesvuemielecceu-2xn--vestvgy-ixa6oxn--vg-yi" +
+ "abcgxn--vgan-qoaxn--vgsy-qoa0jgoraxn--vgu402computerhistoryofsci" +
+ "ence-fictionxn--vhquvbarclays3-website-ap-southeast-1xn--vler-qo" +
+ "axn--vre-eiker-k8axn--vrggt-xqadxn--vry-yla5gxn--vuq861bieszczad" +
+ "ygeyachimataikikonaioirasebastopologyeongnamegawakeisenbahnhlfan" +
+ "hs3-website-us-west-2xn--w4r85el8fhu5dnraxn--w4rs40lxn--wcvs22dx" +
+ "n--wgbh1comsecuritytacticsatxn--1ck2e1balsfjordgcahcesuolodingen" +
+ "aval-d-aosta-valleyolasitemrxn--wgbl6axn--xhq521bievatmallorcada" +
+ "quesakuraiitatebayashiibaghdadultateyamaveroykenglanddnss3-sa-ea" +
+ "st-1xn--xkc2al3hye2axn--xkc2dl3a5ee0hamurakamigoriginshimosuwalk" +
+ "is-a-nurservebbshimotsukexn--y9a3aquariumishimatsunoxn--yer-znar" +
+ "vikoshimizumakis-an-anarchistoricalsocietyxn--yfro4i67oxn--ygard" +
+ "en-p1axn--ygbi2ammxn--45q11civilisationxn--ystre-slidre-ujbifuka" +
+ "gawarszawashingtondclkarmoyurihonjoyentatsunoceanographiquevents" +
+ "akyotanabeneventoeidsvollimitednpagefrontappagespeedmobilizerodd" +
+ "avocatanzarowegroweibolzanordkappgafanpachigasakidsmynasushiobar" +
+ "agusarts3-us-east-2xn--zbx025dxn--zf0ao64axn--zf0avxn--4gbrimini" +
+ "ngxn--zfr164bihorologyusuharavoues3-us-gov-west-1xperiaxz"
// nodes is the list of nodes. Each node is represented as a uint32, which
// encodes the node's children, wildcard bit and node type (as an index into
@@ -482,8141 +483,8127 @@ const text = "biellaakesvuemieleccebieszczadygeyachimatainaircraftraeumtgerade"
// [15 bits] text index
// [ 6 bits] text length
var nodes = [...]uint32{
- 0x29e943,
- 0x364444,
- 0x28af46,
- 0x371983,
- 0x371986,
- 0x394246,
- 0x3a4103,
- 0x202f04,
- 0x24f607,
- 0x28ab88,
- 0x1a00882,
- 0x309dc7,
- 0x3533c9,
- 0x2fb3ca,
- 0x2fb3cb,
- 0x22fe43,
- 0x28cac6,
- 0x2352c5,
- 0x1e00702,
- 0x211ac4,
- 0x2c7a83,
- 0x226bc5,
- 0x2200d42,
- 0x2a0f43,
- 0x2707e44,
- 0x368485,
- 0x2a00c42,
- 0x3797ce,
- 0x24a483,
- 0x38b406,
- 0x2e04642,
- 0x2a5907,
- 0x237d46,
- 0x3200a42,
- 0x2ae043,
- 0x2ae044,
- 0x280f86,
- 0x36f448,
- 0x283a46,
- 0x386144,
- 0x3601002,
- 0x326a09,
- 0x363a07,
- 0x3351c6,
- 0x355049,
- 0x293988,
- 0x367104,
- 0x3a6606,
- 0x20e306,
- 0x3a02e02,
- 0x241d0f,
- 0x33174e,
- 0x212484,
- 0x2bb945,
- 0x202e05,
- 0x2ea589,
- 0x23e889,
- 0x325747,
- 0x221646,
- 0x26b083,
- 0x3e056c2,
- 0x346fc3,
- 0x207a4a,
- 0x211e83,
- 0x250585,
- 0x2040c2,
- 0x2830c9,
- 0x4204802,
- 0x209084,
- 0x29e486,
- 0x284b45,
- 0x34c904,
- 0x4a74a04,
- 0x204803,
- 0x234304,
- 0x4e01842,
- 0x364184,
- 0x52e41c4,
- 0x22410a,
- 0x56009c2,
- 0x334307,
- 0x38e008,
- 0x6201182,
- 0x322847,
- 0x2b7344,
- 0x2b7347,
- 0x383d05,
- 0x370a47,
- 0x325506,
- 0x332a44,
- 0x340c85,
- 0x28df47,
- 0x72046c2,
- 0x349183,
- 0x218782,
- 0x366703,
- 0x76108c2,
- 0x2798c5,
- 0x7a02d42,
- 0x368ac4,
- 0x277785,
- 0x2123c7,
- 0x2ddc0e,
- 0x330a44,
- 0x244744,
- 0x20ca03,
- 0x326ec9,
- 0x30528b,
- 0x30e148,
- 0x31cd88,
- 0x320888,
- 0x20a588,
- 0x354e8a,
- 0x370947,
- 0x217906,
- 0x7e9c3c2,
- 0x377d83,
- 0x380c43,
- 0x38bc84,
- 0x250ac3,
- 0x3a4143,
- 0x1713b02,
- 0x8203182,
- 0x2484c5,
- 0x30c046,
- 0x2c9bc4,
- 0x396e07,
- 0x22eec6,
- 0x280304,
- 0x3a7dc7,
- 0x203183,
- 0x86bdb82,
- 0x8a4f882,
- 0x8e13702,
- 0x213706,
- 0x9200002,
- 0x37f645,
- 0x315043,
- 0x205244,
- 0x2dbe44,
- 0x2dbe45,
- 0x207043,
- 0x9723ac3,
- 0x9a093c2,
- 0x2873c5,
- 0x2873cb,
- 0x22d086,
- 0x20cbcb,
- 0x26ff44,
- 0x20d189,
- 0x20ed44,
- 0x9e0fd82,
- 0x210c83,
- 0x211183,
- 0x1611302,
- 0x23c343,
- 0x21130a,
- 0xa211d42,
- 0x211d45,
- 0x28ea8a,
- 0x2cd704,
- 0x212d43,
- 0x213384,
- 0x213cc3,
- 0x213cc4,
- 0x213cc7,
- 0x214245,
- 0x218dc5,
- 0x219586,
- 0x21a0c6,
- 0x21aa43,
- 0x21dc48,
- 0x258e83,
- 0xa615802,
- 0x21f008,
- 0x21580b,
- 0x222d08,
- 0x223586,
- 0x224547,
- 0x229748,
- 0xb279a82,
- 0xb693f02,
- 0x20b608,
- 0x2ad0c7,
- 0x23b405,
- 0x23b408,
- 0x281888,
- 0x2ada03,
- 0x22eac4,
- 0x38bcc2,
- 0xba2f482,
- 0xbe051c2,
- 0xc62f802,
- 0x22f803,
- 0xca02ec2,
- 0x202ec3,
- 0x2fe704,
- 0x21abc3,
- 0x3670c4,
- 0x24edcb,
- 0x215743,
- 0x2d2f86,
- 0x223f84,
- 0x29b84e,
- 0x360445,
- 0x38b508,
- 0x24bd87,
- 0x24bd8a,
- 0x222a83,
- 0x222a87,
- 0x305445,
- 0x231c84,
- 0x24d886,
- 0x24d887,
- 0x2beb44,
- 0x2f6607,
- 0x377e04,
- 0x3afe84,
- 0x3afe86,
- 0x267544,
- 0x208606,
- 0x210ac3,
- 0x217188,
- 0x21cfc8,
- 0x244703,
- 0x23c303,
- 0x395544,
- 0x39a003,
- 0xce00482,
- 0xd304e82,
- 0x2004c3,
- 0x2072c6,
- 0x369e83,
- 0x263584,
- 0xd616942,
- 0x244c43,
- 0x216943,
- 0x21b182,
- 0xda008c2,
- 0x2b9fc6,
- 0x235fc7,
- 0x2e9345,
- 0x367a44,
- 0x27e045,
- 0x2026c7,
- 0x26a205,
- 0x2c6889,
- 0x2cf2c6,
- 0x2d48c8,
- 0x2e9246,
- 0xde06c02,
- 0x33b648,
- 0x2fe4c6,
- 0x3b1a45,
- 0x3ae4c7,
- 0x301084,
- 0x301085,
- 0x283c04,
- 0x283c08,
- 0xe20cc82,
- 0xe6131c2,
- 0x329cc6,
- 0x318208,
- 0x339345,
- 0x33a3c6,
- 0x33c648,
- 0x35b948,
- 0xeac8945,
- 0xefa8204,
- 0x3aae87,
- 0xf20e802,
- 0xf61dec2,
- 0x10a16582,
- 0x357b85,
- 0x2a3e05,
- 0x2de246,
- 0x319b87,
- 0x399547,
- 0x1122d183,
- 0x29a147,
- 0x2d4488,
- 0x38fec9,
- 0x379987,
- 0x3a5187,
- 0x22fe88,
- 0x230686,
- 0x231786,
- 0x2323cc,
- 0x232f4a,
- 0x233787,
- 0x23518b,
- 0x235e07,
- 0x235e0e,
- 0x236a84,
- 0x2374c4,
- 0x239b07,
- 0x25b087,
- 0x23d9c6,
- 0x23d9c7,
- 0x23e107,
- 0x14600bc2,
- 0x23ec86,
- 0x23ec8a,
- 0x23ef0b,
- 0x240007,
- 0x2407c5,
- 0x240b03,
- 0x240fc6,
- 0x240fc7,
- 0x230a83,
- 0x14a0b382,
- 0x24198a,
- 0x14f54502,
- 0x152a6c02,
- 0x15642b82,
- 0x15a37e42,
- 0x243a85,
- 0x244504,
- 0x16200682,
- 0x364205,
- 0x226b83,
- 0x317c85,
- 0x20a484,
- 0x20ec44,
- 0x291786,
- 0x378106,
- 0x2875c3,
- 0x261f84,
- 0x281e43,
- 0x16600f82,
- 0x200f84,
- 0x3ab406,
- 0x200f85,
- 0x258c06,
- 0x3ae5c8,
- 0x263804,
- 0x2c7848,
- 0x2e0c45,
- 0x22e708,
- 0x32c306,
- 0x2b49c7,
- 0x239504,
- 0x239506,
- 0x307003,
- 0x384083,
- 0x2be608,
- 0x30c584,
- 0x2a0887,
- 0x30a106,
- 0x30a109,
- 0x252448,
- 0x27efc8,
- 0x280444,
- 0x378983,
- 0x22aa02,
- 0x16ab1d82,
- 0x16e2cf42,
- 0x3a1603,
- 0x17219c42,
- 0x24f744,
- 0x3400c6,
- 0x371305,
- 0x23fe83,
- 0x232884,
- 0x300447,
- 0x367783,
- 0x2379c8,
- 0x3af5c5,
- 0x36fc43,
- 0x277705,
- 0x277844,
- 0x208306,
- 0x20c804,
- 0x20cf06,
- 0x212306,
- 0x2512c4,
- 0x215683,
- 0x21a883,
- 0x1767e402,
- 0x360fc5,
- 0x215dc3,
- 0x17a00442,
- 0x232383,
- 0x331e85,
- 0x2343c3,
- 0x2343c9,
- 0x17e08042,
- 0x18614b42,
- 0x286b45,
- 0x21ba46,
- 0x29f387,
- 0x2c9786,
- 0x2b83c8,
- 0x2b83cb,
- 0x20730b,
- 0x22aac5,
- 0x2d02c5,
- 0x2bf489,
- 0x1600ec2,
- 0x251488,
- 0x20ce04,
- 0x18e00202,
- 0x24ea03,
- 0x1965b246,
- 0x330e88,
- 0x19a031c2,
- 0x228108,
- 0x19e00d82,
- 0x27008a,
- 0x20f043,
- 0x31d346,
- 0x330448,
- 0x378cc8,
- 0x32f8c6,
- 0x36dd07,
- 0x241f07,
- 0x20de8a,
- 0x2cd784,
- 0x33f184,
- 0x352f49,
- 0x38f8c5,
- 0x2f31c6,
- 0x2138c3,
- 0x247984,
- 0x212104,
- 0x3412c7,
- 0x21e687,
- 0x2d7e84,
- 0x20ddc5,
- 0x2de308,
- 0x35d607,
- 0x360207,
- 0x1a206ac2,
- 0x369684,
- 0x28f388,
- 0x384544,
- 0x2455c4,
- 0x2459c5,
- 0x245b07,
- 0x206ac9,
- 0x246684,
- 0x246e89,
- 0x247348,
- 0x247704,
- 0x247707,
- 0x1a647f83,
- 0x248a47,
- 0x16475c2,
- 0x17a4a82,
- 0x249a06,
- 0x24a4c7,
- 0x24a904,
- 0x24c9c7,
- 0x24e4c7,
- 0x252083,
- 0x23aa82,
- 0x201682,
- 0x252b03,
- 0x252b04,
- 0x252b0b,
- 0x31ce88,
- 0x258b44,
- 0x253805,
- 0x255e47,
- 0x257a05,
- 0x2d9a8a,
- 0x258a83,
- 0x1aa21842,
- 0x258d84,
- 0x25ae49,
- 0x25edc3,
- 0x25ee87,
- 0x3ac249,
- 0x280d08,
- 0x200c83,
- 0x276607,
- 0x276d49,
- 0x202883,
- 0x27d9c4,
- 0x282309,
- 0x2856c6,
- 0x286e03,
- 0x2038c2,
- 0x233e83,
- 0x39b6c7,
- 0x37f785,
- 0x3585c6,
- 0x247b84,
- 0x2d37c5,
- 0x207a03,
- 0x21ac86,
- 0x20d382,
- 0x390e04,
- 0x227982,
- 0x2db883,
- 0x1ae007c2,
- 0x244a43,
- 0x21a544,
- 0x21a547,
- 0x3713c6,
- 0x2499c2,
- 0x1b22d642,
- 0x325e44,
- 0x1b626b02,
- 0x1ba0acc2,
- 0x2d6484,
- 0x2d6485,
- 0x2c3e85,
- 0x341a46,
- 0x1be01e02,
- 0x29fe45,
- 0x2ded05,
- 0x201e03,
- 0x3650c6,
- 0x378445,
- 0x213682,
- 0x33a005,
- 0x213684,
- 0x217c43,
- 0x219343,
- 0x1c20c502,
- 0x28e147,
- 0x35d884,
- 0x35d889,
- 0x247884,
- 0x22b603,
- 0x346449,
- 0x360e88,
- 0x2a3c84,
- 0x2a3c86,
- 0x201f83,
- 0x212883,
- 0x21eb03,
- 0x1c6e1102,
- 0x2e9182,
- 0x1ca0b2c2,
- 0x316b88,
- 0x34afc8,
- 0x394986,
- 0x2549c5,
- 0x21a905,
- 0x306007,
- 0x255805,
- 0x21c2c2,
- 0x1ce61e82,
- 0x1614b82,
- 0x38fa48,
- 0x33b585,
- 0x2c8084,
- 0x2e0b85,
- 0x390507,
- 0x258884,
- 0x23a882,
- 0x1d204c42,
- 0x32c704,
- 0x213507,
- 0x3abd87,
- 0x370a04,
- 0x28ea43,
- 0x244644,
- 0x244648,
- 0x231ac6,
- 0x24d70a,
- 0x206984,
- 0x28edc8,
- 0x253ac4,
- 0x224646,
- 0x290e84,
- 0x357e86,
- 0x35db49,
- 0x259187,
- 0x33a683,
- 0x1d605e82,
- 0x26a843,
- 0x20ff82,
- 0x1da04d42,
- 0x2dfe86,
- 0x35ed48,
- 0x2a5287,
- 0x3a30c9,
- 0x23a4c9,
- 0x2a5c85,
- 0x2a6e49,
- 0x2a7b45,
- 0x2a7c89,
- 0x2a8b85,
- 0x284244,
- 0x1de84247,
- 0x2957c3,
- 0x2a9c07,
- 0x3a5546,
- 0x2aa407,
- 0x2a2945,
- 0x2aba83,
- 0x1e232a02,
- 0x392844,
- 0x1e63a3c2,
- 0x25a183,
- 0x1ea0f1c2,
- 0x2e8b86,
- 0x38df85,
- 0x2acb87,
- 0x324d83,
- 0x250a44,
- 0x206f83,
- 0x20b343,
- 0x1ee082c2,
- 0x1f600042,
- 0x394344,
- 0x23aa43,
- 0x364885,
- 0x25fcc5,
- 0x1fa05602,
- 0x20200942,
- 0x276946,
- 0x209744,
- 0x30c6c4,
- 0x30c6ca,
- 0x20a00a82,
- 0x2f768a,
- 0x372fc8,
- 0x20e01604,
- 0x201d83,
- 0x216c03,
- 0x3209c9,
- 0x223349,
- 0x300546,
- 0x21202243,
- 0x2da985,
- 0x2f81cd,
- 0x202246,
- 0x2065cb,
- 0x21606382,
- 0x333208,
- 0x21a0bf02,
- 0x21e00b42,
- 0x2af285,
- 0x222074c2,
- 0x264c47,
- 0x2a2247,
- 0x2103c3,
- 0x2ae348,
- 0x22601982,
- 0x203a04,
- 0x3786c3,
- 0x332c05,
- 0x3833c3,
- 0x38da46,
- 0x31b204,
- 0x23c2c3,
- 0x26ad83,
- 0x22a095c2,
- 0x22aa44,
- 0x351445,
- 0x36bb47,
- 0x274643,
- 0x2ad803,
- 0x2aed83,
- 0x1621a82,
- 0x2aee43,
- 0x2af643,
- 0x22e04282,
- 0x2f5d44,
- 0x378306,
- 0x204283,
- 0x2af9c3,
- 0x232b09c2,
- 0x2b09c8,
- 0x2b1404,
- 0x25a546,
- 0x2b1847,
- 0x22ba06,
- 0x230d44,
- 0x30e001c2,
- 0x3a540b,
- 0x39fb4e,
- 0x21c80f,
- 0x233383,
- 0x31633e42,
- 0x1604ec2,
- 0x31a02b82,
- 0x227683,
- 0x202b83,
- 0x235c06,
- 0x2aea46,
- 0x27d807,
- 0x34aa44,
- 0x31e1bb82,
- 0x32229e82,
- 0x228e45,
- 0x3a4ac7,
- 0x371b86,
- 0x326436c2,
- 0x2436c4,
- 0x36e203,
- 0x32a09682,
- 0x32f508c3,
- 0x391004,
- 0x2b6b49,
- 0x16bc882,
- 0x33216c82,
- 0x216c85,
- 0x33644802,
- 0x33a00102,
- 0x33e507,
- 0x239049,
- 0x35364b,
- 0x241cc5,
- 0x377609,
- 0x2bcfc6,
- 0x22d0c7,
- 0x33e0c744,
- 0x305ac9,
- 0x35a787,
- 0x201b47,
- 0x209883,
- 0x209886,
- 0x2da2c7,
- 0x206003,
- 0x271e46,
- 0x34605642,
- 0x34a34642,
- 0x21fa43,
- 0x250645,
- 0x222547,
- 0x281b86,
- 0x37f705,
- 0x311244,
- 0x3b1405,
- 0x2e8904,
- 0x34e02102,
- 0x3210c7,
- 0x2d6044,
- 0x223244,
- 0x22324d,
- 0x248809,
- 0x2e0f48,
- 0x22cd04,
- 0x209b05,
- 0x27ee47,
- 0x332784,
- 0x22ef87,
- 0x3a8405,
- 0x353a9084,
- 0x2fa005,
- 0x25da84,
- 0x265d46,
- 0x319985,
- 0x35636b42,
- 0x212e04,
- 0x212e05,
- 0x213206,
- 0x37f845,
- 0x256584,
- 0x2dbc83,
- 0x32fd86,
- 0x220f45,
- 0x225285,
- 0x319a84,
- 0x206a03,
- 0x206a0c,
- 0x35a86002,
- 0x35e01042,
- 0x3620b402,
- 0x332683,
- 0x332684,
- 0x366061c2,
- 0x3a6088,
- 0x358685,
- 0x236604,
- 0x23b9c6,
- 0x36a0a242,
- 0x36e09bc2,
- 0x37200982,
- 0x2d8845,
- 0x251186,
- 0x341204,
- 0x2814c6,
- 0x3340c6,
- 0x203483,
- 0x3772788a,
- 0x23ad85,
- 0x274803,
- 0x225046,
- 0x2efe09,
- 0x225047,
- 0x28bd48,
- 0x293849,
- 0x219888,
- 0x36a346,
- 0x20b203,
- 0x37a9a1c2,
- 0x3856c3,
- 0x3856c9,
- 0x3357c8,
- 0x37e09782,
- 0x38206742,
- 0x2348c3,
- 0x2cf145,
- 0x253304,
- 0x31c8c9,
- 0x25f6c4,
- 0x2b1648,
- 0x206743,
- 0x24f244,
- 0x326b83,
- 0x21ba88,
- 0x223187,
- 0x38643742,
- 0x269d42,
- 0x238c45,
- 0x268849,
- 0x211003,
- 0x278184,
- 0x2da944,
- 0x202c03,
- 0x278cca,
- 0x38b72e82,
- 0x38e12dc2,
- 0x2bdb03,
- 0x3751c3,
- 0x164f202,
- 0x250d03,
- 0x39250042,
- 0x39603042,
- 0x39b07b04,
- 0x366086,
- 0x3469c6,
- 0x276b84,
- 0x25a943,
- 0x27be43,
- 0x2e4983,
- 0x23f286,
- 0x2c2e45,
- 0x2be0c7,
- 0x22cf89,
- 0x2c1d45,
- 0x2c2d86,
- 0x2c3708,
- 0x2c3906,
- 0x238744,
- 0x29718b,
- 0x2c6383,
- 0x2c6385,
- 0x2c64c8,
- 0x21e442,
- 0x33e802,
- 0x39e43b02,
- 0x3a20e842,
- 0x21bbc3,
- 0x3a600e02,
- 0x269fc3,
- 0x2c67c4,
- 0x2c8183,
- 0x3ae25682,
- 0x3b2cc5c6,
- 0x2bb346,
- 0x2ccc08,
- 0x3b6cad42,
- 0x3ba111c2,
- 0x3be19382,
- 0x3c209f82,
- 0x3c614882,
- 0x3ca00ac2,
- 0x228343,
- 0x318d45,
- 0x209c86,
- 0x3ce12444,
- 0x3ab20a,
- 0x310606,
- 0x22ad04,
- 0x27e943,
- 0x3da06bc2,
- 0x205902,
- 0x24dbc3,
- 0x3de38483,
- 0x2ee087,
- 0x319887,
- 0x3f252c07,
- 0x20f007,
- 0x215a43,
- 0x22c6ca,
- 0x240584,
- 0x341504,
- 0x34150a,
- 0x247045,
- 0x3f601642,
- 0x24d483,
- 0x3fa01dc2,
- 0x201f43,
- 0x26a803,
- 0x40201942,
- 0x29a0c4,
- 0x220a84,
- 0x3a36c5,
- 0x2d7205,
- 0x22da06,
- 0x22dd86,
- 0x40608382,
- 0x40a025c2,
- 0x2eb445,
- 0x2bb052,
- 0x29fbc6,
- 0x21ce83,
- 0x2fd346,
- 0x221d85,
- 0x1611342,
- 0x48e0d502,
- 0x2ed8c3,
- 0x212043,
- 0x265603,
- 0x49203382,
- 0x379ac3,
- 0x49602182,
- 0x204a03,
- 0x2f5d88,
- 0x223b43,
- 0x223b46,
- 0x333a07,
- 0x2d84c6,
- 0x2d84cb,
- 0x22ac47,
- 0x392644,
- 0x49e02602,
- 0x3a6505,
- 0x215a03,
- 0x22fd83,
- 0x31aa03,
- 0x31aa06,
- 0x2d038a,
- 0x26d703,
- 0x21d5c4,
+ 0x32f983,
+ 0x28a344,
+ 0x30e286,
+ 0x371b43,
+ 0x371b46,
+ 0x394646,
+ 0x3a5003,
+ 0x367844,
+ 0x260687,
+ 0x30dec8,
+ 0x1a04cc2,
+ 0x316e47,
+ 0x355d89,
+ 0x32228a,
+ 0x32228b,
+ 0x22eec3,
+ 0x28fac6,
+ 0x2327c5,
+ 0x1e04e02,
+ 0x217c04,
+ 0x2a90c3,
+ 0x3ac705,
+ 0x2203942,
+ 0x329e03,
+ 0x26957c4,
+ 0x368e05,
+ 0x2a10182,
+ 0x3787ce,
+ 0x253343,
+ 0x3a03c6,
+ 0x2e00142,
+ 0x30e407,
+ 0x23ae46,
+ 0x3200c42,
+ 0x22a343,
+ 0x254b04,
+ 0x325a86,
+ 0x35c208,
+ 0x28a706,
+ 0x21ad04,
+ 0x3601442,
+ 0x332309,
+ 0x207587,
+ 0x256286,
+ 0x339309,
+ 0x29d788,
+ 0x328d44,
+ 0x364906,
+ 0x36b606,
+ 0x3a02942,
+ 0x27144f,
+ 0x20f94e,
+ 0x2131c4,
+ 0x2c6085,
+ 0x367745,
+ 0x385989,
+ 0x241a89,
+ 0x368047,
+ 0x23c9c6,
+ 0x273a43,
+ 0x3e02342,
+ 0x2df283,
+ 0x205aca,
+ 0x221d83,
+ 0x303145,
+ 0x289c02,
+ 0x289c09,
+ 0x4200f82,
+ 0x203d84,
+ 0x2250c6,
+ 0x2eb205,
+ 0x34cbc4,
+ 0x4a04c04,
+ 0x205283,
+ 0x231ac4,
+ 0x4e02e02,
+ 0x209f04,
+ 0x52f4e04,
+ 0x24ae0a,
+ 0x5601342,
+ 0x303907,
+ 0x26b8c8,
+ 0x6202f82,
+ 0x31cf07,
+ 0x2c2e04,
+ 0x2c2e07,
+ 0x373d85,
+ 0x357a47,
+ 0x367e06,
+ 0x2e8384,
+ 0x39c0c5,
+ 0x294847,
+ 0x7206cc2,
+ 0x34f703,
+ 0x200582,
+ 0x200583,
+ 0x76125c2,
+ 0x221ec5,
+ 0x7a02302,
+ 0x27bd84,
+ 0x2810c5,
+ 0x213107,
+ 0x269f0e,
+ 0x224bc4,
+ 0x206a84,
+ 0x211503,
+ 0x2ceac9,
+ 0x2ed94b,
+ 0x3a6548,
+ 0x3148c8,
+ 0x318dc8,
+ 0x237908,
+ 0x33914a,
+ 0x357947,
0x318146,
- 0x3b1e46,
- 0x4a2264c3,
- 0x250907,
- 0x29cf8d,
- 0x39eb87,
- 0x296ec5,
- 0x237806,
- 0x220f83,
- 0x4bb65303,
- 0x4be07a82,
- 0x307604,
- 0x21e3cc,
- 0x35bb89,
- 0x36f307,
- 0x246045,
- 0x255904,
- 0x26ae08,
- 0x274885,
- 0x274a85,
- 0x3612c9,
- 0x335283,
- 0x2a6b84,
- 0x4c206d42,
- 0x206d43,
- 0x4c690942,
- 0x295bc6,
- 0x16b5482,
- 0x4ca95782,
- 0x2d8748,
- 0x2b6d43,
- 0x2f9f47,
- 0x2d7785,
- 0x295785,
- 0x2f6c4b,
- 0x2d1f06,
- 0x2f6e46,
- 0x2f9d06,
+ 0x7ea4fc2,
+ 0x35bc03,
+ 0x366c43,
+ 0x371144,
+ 0x3a5043,
+ 0x324cc3,
+ 0x171f542,
+ 0x8203682,
+ 0x252185,
+ 0x2a11c6,
+ 0x2d6d44,
+ 0x2f6e07,
+ 0x382986,
+ 0x319dc4,
+ 0x398247,
+ 0x20f7c3,
+ 0x86c8902,
+ 0x8b124c2,
+ 0x8e1c502,
+ 0x21c506,
+ 0x9200002,
+ 0x359b85,
+ 0x320a83,
+ 0x200004,
+ 0x2ee344,
+ 0x2ee345,
+ 0x203e43,
+ 0x9768883,
+ 0x9a07f42,
+ 0x28e245,
+ 0x28e24b,
+ 0x2d0686,
+ 0x20a0cb,
+ 0x225b04,
+ 0x20a7c9,
+ 0x20be84,
+ 0x9e0c0c2,
+ 0x20cf83,
+ 0x210843,
+ 0x1600802,
+ 0x260903,
+ 0x2109ca,
+ 0xa211cc2,
+ 0x217e85,
+ 0x2983ca,
+ 0x2dc184,
+ 0x369f03,
+ 0x315044,
+ 0x213643,
+ 0x213644,
+ 0x213647,
+ 0x213985,
+ 0x213e05,
+ 0x2150c6,
+ 0x2167c6,
+ 0x2182c3,
+ 0x21c188,
+ 0x221c43,
+ 0xa601082,
+ 0x21cac8,
+ 0x21ff0b,
+ 0x2216c8,
+ 0x2221c6,
+ 0x222a47,
+ 0x226488,
+ 0xb2413c2,
+ 0xb6c2fc2,
+ 0x326388,
+ 0x257ec7,
+ 0x22bac5,
+ 0x22bac8,
+ 0x2bf708,
+ 0x3871c3,
+ 0x22a784,
+ 0x371182,
+ 0xba2af82,
+ 0xbe5ba02,
+ 0xc62c1c2,
+ 0x22c1c3,
+ 0xca0e542,
+ 0x367803,
+ 0x2f8e04,
+ 0x218443,
+ 0x328d04,
+ 0x25fe4b,
+ 0x21fe43,
+ 0x2e4d06,
0x226284,
- 0x2d4ac6,
- 0x2d5048,
- 0x234b03,
- 0x252ec3,
- 0x252ec4,
- 0x2d70c4,
- 0x2d7487,
- 0x2d8185,
- 0x4ced82c2,
- 0x4d206a42,
- 0x209285,
- 0x2990c4,
- 0x2dac8b,
- 0x2dbd48,
- 0x2e6804,
- 0x243702,
- 0x4da80b82,
- 0x2b0c03,
+ 0x2a5a8e,
+ 0x361c05,
+ 0x3a04c8,
+ 0x282247,
+ 0x28224a,
+ 0x229d03,
+ 0x2b3447,
+ 0x2edb05,
+ 0x22ea44,
+ 0x272486,
+ 0x272487,
+ 0x32b704,
+ 0x304ac7,
+ 0x26a244,
+ 0x35bc84,
+ 0x35bc86,
+ 0x386904,
+ 0x20e546,
+ 0x223c83,
+ 0x22b888,
+ 0x30c3c8,
+ 0x24e2c3,
+ 0x2608c3,
+ 0x204f04,
+ 0x395943,
+ 0xce0d882,
+ 0xd2db442,
+ 0x20c043,
+ 0x201806,
+ 0x35c383,
+ 0x28bfc4,
+ 0xd6081c2,
+ 0x2081c3,
+ 0x358243,
+ 0x219942,
+ 0xda02ac2,
+ 0x2c55c6,
+ 0x2334c7,
+ 0x2f7a85,
+ 0x37da44,
+ 0x3723c5,
+ 0x367007,
+ 0x274205,
+ 0x2d3e89,
+ 0x2e0586,
+ 0x2e5488,
+ 0x2f7986,
+ 0xde0db42,
+ 0x362f48,
+ 0x2f8bc6,
+ 0x20db45,
+ 0x304687,
+ 0x30c2c4,
+ 0x30c2c5,
+ 0x28a8c4,
+ 0x28a8c8,
+ 0xe20a182,
+ 0xe60c502,
+ 0x313646,
+ 0x2c28c8,
+ 0x31f145,
+ 0x332c06,
+ 0x3356c8,
+ 0x33e1c8,
+ 0xea0fd45,
+ 0xee0c504,
+ 0x2958c7,
+ 0xf20bbc2,
+ 0xf61c402,
+ 0x1060d1c2,
+ 0x35aa45,
+ 0x2a8505,
+ 0x282606,
+ 0x3698c7,
+ 0x376ec7,
+ 0x10ed0783,
+ 0x2e3447,
+ 0x30dc88,
+ 0x3823c9,
+ 0x378987,
+ 0x390287,
+ 0x3a5b08,
+ 0x3aa206,
+ 0x22e546,
+ 0x22f18c,
+ 0x230b0a,
+ 0x230fc7,
+ 0x23268b,
+ 0x233307,
+ 0x23330e,
+ 0x236244,
+ 0x23a184,
+ 0x23b547,
+ 0x264f47,
+ 0x240d46,
+ 0x240d47,
+ 0x241207,
+ 0x18a20802,
+ 0x2420c6,
+ 0x2420ca,
+ 0x24294b,
+ 0x243407,
+ 0x244ec5,
+ 0x245203,
+ 0x246c46,
+ 0x246c47,
+ 0x241c43,
+ 0x18e38702,
+ 0x24b74a,
+ 0x19356fc2,
+ 0x196acdc2,
+ 0x19a4cec2,
+ 0x19e26982,
+ 0x24da85,
+ 0x24e0c4,
+ 0x1a604d02,
+ 0x209f85,
+ 0x294ac3,
+ 0x20bf85,
+ 0x237804,
+ 0x20a684,
+ 0x2ba5c6,
+ 0x26a546,
+ 0x28e443,
+ 0x3b1484,
+ 0x209383,
+ 0x1aa03b02,
+ 0x263544,
+ 0x263546,
+ 0x295e45,
+ 0x27fdc6,
+ 0x304788,
+ 0x20cb44,
+ 0x2a8e88,
+ 0x343fc5,
+ 0x24a108,
+ 0x2b1cc6,
+ 0x2bddc7,
+ 0x26cdc4,
+ 0x26cdc6,
+ 0x25e303,
+ 0x382e43,
+ 0x2c9388,
+ 0x318bc4,
+ 0x238d47,
+ 0x220246,
+ 0x2dad89,
+ 0x315108,
+ 0x319f08,
+ 0x349184,
+ 0x39b9c3,
+ 0x23e342,
+ 0x1ba34682,
+ 0x1be16102,
+ 0x3b2783,
+ 0x1c204a42,
+ 0x2607c4,
+ 0x390a46,
+ 0x39a6c5,
+ 0x2a4383,
+ 0x232004,
+ 0x2b6f47,
+ 0x26aa43,
+ 0x250d08,
+ 0x20e8c5,
+ 0x370083,
+ 0x281045,
+ 0x281184,
+ 0x2fb8c6,
+ 0x210384,
+ 0x211a46,
+ 0x213046,
+ 0x263004,
+ 0x21fd83,
+ 0x2225c3,
+ 0x1c604e42,
+ 0x377905,
+ 0x222e03,
+ 0x1ca1c3c2,
+ 0x22f143,
+ 0x210085,
+ 0x231b83,
+ 0x231b89,
+ 0x1ce07d02,
+ 0x1d601142,
+ 0x28d9c5,
+ 0x21a746,
+ 0x2d6906,
+ 0x2b94c8,
+ 0x2b94cb,
+ 0x20538b,
+ 0x2f7c85,
+ 0x2e1045,
+ 0x2c9fc9,
+ 0x1600742,
+ 0x2631c8,
+ 0x206044,
+ 0x1de001c2,
+ 0x25fa83,
+ 0x1e665106,
+ 0x20f088,
+ 0x1ea04782,
+ 0x233ec8,
+ 0x1ee01742,
+ 0x225c4a,
+ 0x1f2d0e43,
+ 0x3b1e86,
+ 0x206988,
+ 0x207d48,
+ 0x39a9c6,
+ 0x36d5c7,
+ 0x271647,
+ 0x220b0a,
0x2dc204,
- 0x2dc4c5,
- 0x272d87,
- 0x2e06c4,
- 0x22ab04,
- 0x4de07442,
- 0x359f49,
- 0x2e1585,
- 0x241f85,
- 0x2e2105,
- 0x4e21bd03,
- 0x2e2f44,
- 0x2e2f4b,
- 0x2e3444,
- 0x2e3ecb,
- 0x2e48c5,
- 0x21c94a,
- 0x2e4f88,
- 0x2e518a,
- 0x2e5a03,
- 0x2e5a0a,
- 0x4e626402,
- 0x4ea41542,
- 0x265903,
- 0x4eee7d82,
- 0x2e7d83,
- 0x4f35d142,
- 0x4f7157c2,
- 0x2e8784,
- 0x21dd86,
- 0x281205,
- 0x2e91c3,
- 0x29ef06,
- 0x21d445,
- 0x21e104,
- 0x4fa08782,
- 0x2ca784,
- 0x2bf10a,
- 0x386847,
- 0x38ddc6,
- 0x2d0847,
- 0x21e503,
- 0x253b48,
- 0x25b5cb,
- 0x300645,
- 0x2b6e85,
- 0x2b6e86,
- 0x225904,
- 0x335b88,
- 0x20b4c3,
- 0x20e204,
- 0x20e207,
- 0x280ec6,
- 0x321746,
- 0x29b68a,
- 0x244fc4,
- 0x244fca,
- 0x2de886,
- 0x2de887,
- 0x253887,
- 0x26f884,
- 0x26f889,
- 0x24b7c5,
- 0x23a30b,
- 0x26ddc3,
- 0x20d0c3,
- 0x21a943,
- 0x231e84,
- 0x4fe04b42,
- 0x254186,
- 0x2ab805,
- 0x2b2dc5,
- 0x3324c6,
- 0x279384,
- 0x502013c2,
- 0x240b44,
- 0x50607982,
- 0x232984,
- 0x227783,
- 0x50a12082,
- 0x349f83,
- 0x24ae86,
- 0x50e01bc2,
- 0x30f108,
- 0x224ec4,
- 0x224ec6,
- 0x305546,
- 0x255f04,
- 0x32fd05,
- 0x3a8108,
- 0x3a8607,
- 0x3b0bc7,
- 0x3b0bcf,
- 0x28f286,
- 0x210d03,
- 0x210d04,
- 0x2251c4,
- 0x229103,
- 0x224784,
- 0x373e44,
- 0x51226442,
- 0x287303,
- 0x390683,
- 0x51617642,
- 0x222a43,
- 0x24f803,
- 0x218e4a,
- 0x23b5c7,
- 0x3a568c,
- 0x3a5946,
- 0x230ac6,
- 0x23a6c7,
- 0x2302c7,
- 0x23e289,
- 0x21f144,
- 0x23ea84,
- 0x51a0a442,
- 0x51e01402,
- 0x29ba46,
- 0x250704,
- 0x376e86,
- 0x230748,
- 0x330cc4,
- 0x264c86,
- 0x2c9745,
- 0x25f008,
- 0x207503,
- 0x266a45,
- 0x269b43,
- 0x242083,
- 0x242084,
- 0x26afc3,
- 0x522e1202,
- 0x52602482,
- 0x26dc89,
- 0x274985,
- 0x283dc4,
- 0x3614c5,
- 0x210804,
- 0x2ed107,
- 0x33fac5,
- 0x252dc4,
- 0x252dc8,
- 0x2d3486,
- 0x2d5204,
- 0x2d5208,
- 0x2d5e87,
- 0x52a015c2,
- 0x2da0c4,
- 0x2d3904,
- 0x201d47,
- 0x52e41384,
- 0x22dc82,
- 0x53201882,
- 0x202b43,
- 0x216b84,
- 0x222903,
- 0x222905,
- 0x5362c082,
- 0x2e9085,
- 0x210fc2,
- 0x376445,
- 0x35ef05,
- 0x53a168c2,
- 0x2168c4,
- 0x53e08d82,
- 0x2c7b06,
- 0x2ac106,
- 0x268988,
- 0x2b7b88,
- 0x2e8b04,
- 0x35e245,
- 0x2f39c9,
- 0x29f484,
- 0x2d0344,
- 0x2513c3,
- 0x5420dfc5,
- 0x374f07,
- 0x2881c4,
- 0x35a90d,
- 0x35b202,
- 0x3858c3,
- 0x39a083,
- 0x54601082,
- 0x3886c5,
- 0x31b447,
- 0x20f0c4,
- 0x20f0c7,
- 0x293a49,
- 0x2bf249,
- 0x214687,
- 0x24fa83,
- 0x2b52c8,
- 0x23dd09,
- 0x2e9947,
- 0x2e9cc5,
- 0x2ea486,
- 0x2eaac6,
- 0x2eac45,
- 0x248905,
- 0x54a01282,
- 0x228685,
- 0x2b9988,
- 0x2a79c6,
- 0x3a1c87,
- 0x2e4b04,
- 0x2ab1c7,
- 0x2edd06,
- 0x54e00242,
- 0x212f06,
- 0x2f004a,
- 0x2f1045,
- 0x552d29c2,
- 0x55638282,
- 0x2da606,
- 0x3574c8,
- 0x55babf47,
- 0x55e00602,
- 0x20a503,
- 0x3b0306,
- 0x30aa04,
- 0x3338c6,
- 0x341746,
- 0x3971ca,
- 0x3a1e05,
- 0x20d586,
- 0x218743,
- 0x218744,
- 0x207282,
- 0x2fe483,
- 0x56253e82,
- 0x2dd843,
- 0x2f7904,
- 0x2dca04,
- 0x35760a,
- 0x245483,
- 0x283b08,
- 0x36a40a,
- 0x278447,
- 0x2f4846,
- 0x2c79c4,
- 0x22abc2,
- 0x200e42,
- 0x56609202,
- 0x244603,
- 0x253647,
- 0x29f1c7,
- 0x38f98b,
- 0x3643c4,
- 0x349447,
- 0x272e86,
- 0x213807,
- 0x2ad204,
- 0x33bb85,
- 0x2a96c5,
- 0x56a10442,
- 0x221a46,
- 0x2259c3,
- 0x226cc2,
- 0x226cc6,
- 0x56e0d942,
- 0x57203e42,
- 0x203e45,
- 0x57624982,
- 0x57a06ec2,
- 0x358845,
- 0x2c0f45,
- 0x20d645,
- 0x264183,
- 0x340185,
- 0x2d1fc7,
- 0x2aa2c5,
- 0x3219c5,
- 0x38b604,
- 0x379bc6,
- 0x243c84,
- 0x57e00cc2,
- 0x276485,
- 0x2a4887,
- 0x377088,
- 0x26a8c6,
- 0x26a8cd,
- 0x270789,
- 0x270792,
- 0x322045,
- 0x326e03,
- 0x58a019c2,
- 0x2e6004,
- 0x2022c3,
- 0x35e145,
- 0x2f2605,
- 0x58e21e42,
- 0x290f03,
- 0x59242d42,
- 0x59694082,
- 0x59a18882,
- 0x346e05,
- 0x2a1003,
- 0x397008,
- 0x59e011c2,
- 0x5a203282,
- 0x29a086,
- 0x27f30a,
- 0x204983,
- 0x256503,
- 0x2f3c43,
- 0x5ae06202,
- 0x692033c2,
- 0x69a04cc2,
- 0x203dc2,
- 0x38bd09,
- 0x2bbcc4,
- 0x2ae648,
- 0x69ee9202,
- 0x6a205882,
- 0x2e4105,
- 0x2355c8,
- 0x247d88,
- 0x2f334c,
- 0x23a183,
- 0x25d442,
- 0x6a62d742,
- 0x2c21c6,
- 0x2f56c5,
- 0x30f5c3,
- 0x3903c6,
- 0x2f5806,
- 0x22fc43,
- 0x2f6a03,
- 0x2f6fc6,
- 0x2f7d84,
- 0x270186,
- 0x2c6545,
- 0x2f800a,
- 0x23d184,
- 0x2f8d84,
- 0x34b94a,
- 0x6aa6cd42,
- 0x347a45,
- 0x2fa44a,
- 0x2fb885,
- 0x2fc404,
- 0x2fc506,
- 0x2fc684,
- 0x366dc6,
- 0x6ae00282,
- 0x38d706,
- 0x38e7c5,
- 0x204707,
- 0x239f46,
- 0x22d584,
- 0x22d587,
- 0x3277c6,
- 0x212f45,
- 0x2c6c87,
- 0x39ae07,
- 0x39ae0e,
- 0x223ec6,
- 0x22ee45,
- 0x279a07,
- 0x2deb83,
- 0x2deb87,
- 0x3a8a05,
- 0x211204,
- 0x2120c2,
- 0x37a547,
- 0x34aac4,
- 0x2ae9c4,
- 0x269bcb,
- 0x2201c3,
- 0x2c3a47,
- 0x2201c4,
- 0x2ce307,
- 0x238943,
- 0x32914d,
- 0x388f08,
- 0x252cc4,
- 0x252cc5,
- 0x2fca45,
- 0x2fd003,
- 0x6b224dc2,
- 0x2fe443,
- 0x2fea03,
- 0x365c44,
- 0x276e45,
- 0x2193c7,
- 0x2187c6,
- 0x372f83,
- 0x226e0b,
- 0x29d34b,
- 0x267c4b,
- 0x276f4a,
- 0x2a734b,
- 0x2cae0b,
- 0x2d2a0c,
- 0x2d5711,
- 0x33d90a,
- 0x34e1cb,
- 0x37bd0b,
- 0x3ae28a,
- 0x3b2eca,
- 0x2ff60d,
- 0x300d4e,
- 0x301b4b,
- 0x301e0a,
- 0x302d51,
- 0x30318a,
- 0x30368b,
- 0x303bce,
- 0x30450c,
- 0x30498b,
- 0x304c4e,
- 0x304fcc,
- 0x3087ca,
- 0x3098cc,
- 0x6b709bca,
- 0x30adc9,
- 0x30c94a,
- 0x30cbca,
- 0x30ce4b,
- 0x312f8e,
- 0x313311,
- 0x31bcc9,
- 0x31bf0a,
- 0x31cb0b,
- 0x31e2ca,
- 0x31ee56,
- 0x32060b,
- 0x321e0a,
- 0x32220a,
- 0x32424b,
- 0x326889,
- 0x329ac9,
- 0x32ae0d,
- 0x32c48b,
- 0x32d60b,
- 0x32dfcb,
- 0x32e449,
- 0x32ea8e,
- 0x32efca,
- 0x335e4a,
- 0x33648a,
- 0x336e4b,
- 0x33768b,
- 0x33794d,
- 0x33904d,
- 0x339c90,
- 0x33a14b,
- 0x33ac8c,
- 0x33c3cb,
- 0x33e00b,
- 0x33f64b,
- 0x34490b,
- 0x34538f,
- 0x34574b,
- 0x34600a,
- 0x346709,
- 0x346b49,
- 0x34808b,
- 0x34834e,
- 0x34bfcb,
- 0x34cd8f,
- 0x34ed8b,
- 0x34f04b,
- 0x34f30b,
- 0x34f74a,
- 0x353249,
- 0x35624f,
- 0x35ce4c,
- 0x35d34c,
- 0x35de0e,
- 0x35e48f,
- 0x35e84e,
- 0x35fa90,
- 0x35fe8f,
- 0x3608ce,
- 0x3617cc,
- 0x361ad2,
- 0x36b751,
- 0x36bd0e,
- 0x36c14e,
+ 0x3423c4,
+ 0x355589,
+ 0x1fb8fc85,
+ 0x20fb46,
+ 0x208203,
+ 0x251944,
+ 0x201e44,
+ 0x201e47,
+ 0x22cec7,
+ 0x237044,
+ 0x220a45,
+ 0x2826c8,
+ 0x350707,
+ 0x3619c7,
+ 0x1fe041c2,
+ 0x226004,
+ 0x298cc8,
+ 0x381004,
+ 0x24f0c4,
+ 0x24fa45,
+ 0x24fb87,
+ 0x215809,
+ 0x2505c4,
+ 0x2510c9,
+ 0x251308,
+ 0x2516c4,
+ 0x2516c7,
+ 0x20251c43,
+ 0x252487,
+ 0x16101c2,
+ 0x179d442,
+ 0x253386,
+ 0x2539c7,
+ 0x253e84,
+ 0x255607,
+ 0x256907,
+ 0x257483,
+ 0x2abc02,
+ 0x229c02,
+ 0x258743,
+ 0x258744,
+ 0x25874b,
+ 0x3149c8,
+ 0x25f184,
+ 0x2594c5,
+ 0x25ba87,
+ 0x25d8c5,
+ 0x2c4dca,
+ 0x25f0c3,
+ 0x2060da42,
+ 0x22b484,
+ 0x264d09,
+ 0x268983,
+ 0x268a47,
+ 0x28ee89,
+ 0x37b5c8,
+ 0x2d8483,
+ 0x27ff47,
+ 0x280689,
+ 0x2316c3,
+ 0x288284,
+ 0x289389,
+ 0x28c6c6,
+ 0x28dc83,
+ 0x2023c2,
+ 0x24ca43,
+ 0x36ab47,
+ 0x2bfa85,
+ 0x35ba06,
+ 0x256bc4,
+ 0x2d1d45,
+ 0x205a83,
+ 0x218506,
+ 0x20a9c2,
+ 0x391084,
+ 0x22ad02,
+ 0x22ad03,
+ 0x20a00182,
+ 0x29b083,
+ 0x216c44,
+ 0x216c47,
+ 0x200306,
+ 0x201e02,
+ 0x20e01dc2,
+ 0x21e184,
+ 0x2123b882,
+ 0x21600502,
+ 0x2dfcc4,
+ 0x2dfcc5,
+ 0x2b9cc5,
+ 0x262746,
+ 0x21a0ca82,
+ 0x20ca85,
+ 0x210d85,
+ 0x225883,
+ 0x215c06,
+ 0x216dc5,
+ 0x21c482,
+ 0x33de05,
+ 0x21c484,
+ 0x2230c3,
+ 0x223303,
+ 0x21e097c2,
+ 0x294a47,
+ 0x221144,
+ 0x221149,
+ 0x251844,
+ 0x228903,
+ 0x341cc9,
+ 0x3777c8,
+ 0x2a8384,
+ 0x2a8386,
+ 0x210503,
+ 0x259b43,
+ 0x332ec3,
+ 0x222ebc02,
+ 0x30eb82,
+ 0x22600642,
+ 0x3238c8,
+ 0x35c588,
+ 0x394d86,
+ 0x24ed45,
+ 0x2b32c5,
+ 0x200647,
+ 0x228fc5,
+ 0x2630c2,
+ 0x22a9a502,
+ 0x1614502,
+ 0x38fe08,
+ 0x362e85,
+ 0x351d04,
+ 0x2f18c5,
+ 0x3836c7,
+ 0x24f5c4,
+ 0x246f82,
+ 0x22e01182,
+ 0x336f04,
+ 0x2173c7,
+ 0x28e9c7,
+ 0x357a04,
+ 0x298383,
+ 0x24e204,
+ 0x24e208,
+ 0x22e886,
+ 0x27230a,
+ 0x2156c4,
+ 0x298708,
+ 0x259784,
+ 0x222b46,
+ 0x29a4c4,
+ 0x35ad46,
+ 0x221409,
+ 0x25b287,
+ 0x234483,
+ 0x23274842,
+ 0x274843,
+ 0x20c2c2,
+ 0x23651b02,
+ 0x2f0b06,
+ 0x364148,
+ 0x2a9d87,
+ 0x395d09,
+ 0x297f09,
+ 0x2ab245,
+ 0x2ad3c9,
+ 0x2ae045,
+ 0x2ae189,
+ 0x2af5c5,
+ 0x2b0208,
+ 0x27f284,
+ 0x23a8d6c7,
+ 0x294403,
+ 0x2b0407,
+ 0x390646,
+ 0x2b08c7,
+ 0x2a6d45,
+ 0x2a7f83,
+ 0x23e00dc2,
+ 0x392604,
+ 0x2423b8c2,
+ 0x264403,
+ 0x24618d82,
+ 0x307646,
+ 0x26b845,
+ 0x2b2bc7,
+ 0x37f183,
+ 0x324c44,
+ 0x2138c3,
+ 0x2386c3,
+ 0x24a0a3c2,
+ 0x25201a02,
+ 0x394744,
+ 0x2abbc3,
+ 0x38c985,
+ 0x226d85,
+ 0x25602282,
+ 0x25e00bc2,
+ 0x280286,
+ 0x318d04,
+ 0x2491c4,
+ 0x2491ca,
+ 0x26601d42,
+ 0x37324a,
+ 0x204148,
+ 0x26a964c4,
+ 0x201d43,
+ 0x25ff43,
+ 0x318f09,
+ 0x2a8909,
+ 0x2b7046,
+ 0x26e04303,
+ 0x328145,
+ 0x30664d,
+ 0x204306,
+ 0x21268b,
+ 0x27203482,
+ 0x295048,
+ 0x27e1c282,
+ 0x282051c2,
+ 0x37aa85,
+ 0x28600b02,
+ 0x2a3147,
+ 0x212b87,
+ 0x201503,
+ 0x22f848,
+ 0x28a02f02,
+ 0x202f04,
+ 0x217043,
+ 0x38d045,
+ 0x386fc3,
+ 0x2eb106,
+ 0x30bdc4,
+ 0x204ec3,
+ 0x234f83,
+ 0x28e07042,
+ 0x2f7c04,
+ 0x30ed45,
+ 0x35a587,
+ 0x27dbc3,
+ 0x2b36c3,
+ 0x2b3ec3,
+ 0x1621ac2,
+ 0x2b3f83,
+ 0x2b4b03,
+ 0x2920ae42,
+ 0x2cee84,
+ 0x26a746,
+ 0x33c7c3,
+ 0x2b4f83,
+ 0x296b5e02,
+ 0x2b5e08,
+ 0x2b60c4,
+ 0x2470c6,
+ 0x2b6547,
+ 0x24e3c6,
+ 0x295304,
+ 0x37200082,
+ 0x39050b,
+ 0x2ffbce,
+ 0x21bb0f,
+ 0x29da43,
+ 0x37a4ca02,
+ 0x166b142,
+ 0x37e02442,
+ 0x29c243,
+ 0x2472c3,
+ 0x233106,
+ 0x22ff46,
+ 0x212307,
+ 0x31aa84,
+ 0x3821a882,
+ 0x3860ec02,
+ 0x2d4ac5,
+ 0x2e88c7,
+ 0x37e046,
+ 0x38a82882,
+ 0x2f5b04,
+ 0x2b9783,
+ 0x38e01b02,
+ 0x39352883,
+ 0x2ba984,
+ 0x2c06c9,
+ 0x16c6fc2,
+ 0x39642682,
+ 0x351245,
+ 0x39ac7242,
+ 0x39e02682,
+ 0x341687,
+ 0x2364c9,
+ 0x35600b,
+ 0x271405,
+ 0x2c7c89,
+ 0x276a46,
+ 0x2d06c7,
+ 0x3a2092c4,
+ 0x32ef49,
+ 0x374b07,
+ 0x2255c7,
+ 0x234003,
+ 0x37b386,
+ 0x30f887,
+ 0x265383,
+ 0x27c5c6,
+ 0x3aa022c2,
+ 0x3ae31e02,
+ 0x220443,
+ 0x324845,
+ 0x257747,
+ 0x21fac6,
+ 0x2bfa05,
+ 0x230044,
+ 0x2efa45,
+ 0x2f8284,
+ 0x3b205e82,
+ 0x349f07,
+ 0x2e1c44,
+ 0x23e244,
+ 0x33328d,
+ 0x257249,
+ 0x381588,
+ 0x25ac04,
+ 0x314e85,
+ 0x3b2607,
+ 0x205e84,
+ 0x382a47,
+ 0x20c705,
+ 0x3b6aa384,
+ 0x36dec5,
+ 0x267644,
+ 0x24f706,
+ 0x3696c5,
+ 0x3ba24742,
+ 0x369fc4,
+ 0x369fc5,
+ 0x3716c6,
+ 0x2bfb45,
+ 0x25c104,
+ 0x3120c3,
+ 0x204986,
+ 0x22c085,
+ 0x22c785,
+ 0x3697c4,
+ 0x215743,
+ 0x21574c,
+ 0x3be8d002,
+ 0x3c2045c2,
+ 0x3c605d82,
+ 0x205d83,
+ 0x205d84,
+ 0x3ca032c2,
+ 0x2f9648,
+ 0x35bac5,
+ 0x33f884,
+ 0x230e46,
+ 0x3ce073c2,
+ 0x3d20fc42,
+ 0x3d600c02,
+ 0x321e85,
+ 0x262ec6,
+ 0x20b484,
+ 0x325fc6,
+ 0x3036c6,
+ 0x202983,
+ 0x3db1164a,
+ 0x264785,
+ 0x28b4c3,
+ 0x223886,
+ 0x305e09,
+ 0x223887,
+ 0x293308,
+ 0x29d649,
+ 0x248108,
+ 0x229a46,
+ 0x208843,
+ 0x3de017c2,
+ 0x384b03,
+ 0x384b09,
+ 0x368548,
+ 0x3e2513c2,
+ 0x3e601f02,
+ 0x22d603,
+ 0x2e0405,
+ 0x258f44,
+ 0x35e849,
+ 0x226784,
+ 0x26f288,
+ 0x205c03,
+ 0x2602c4,
+ 0x2784c3,
+ 0x21a788,
+ 0x3331c7,
+ 0x3ea0f302,
+ 0x2432c2,
+ 0x257d85,
+ 0x3960c9,
+ 0x20fbc3,
+ 0x281ac4,
+ 0x328104,
+ 0x219e03,
+ 0x28380a,
+ 0x3ef73102,
+ 0x3f2c0202,
+ 0x2c8883,
+ 0x374fc3,
+ 0x1649202,
+ 0x262a43,
+ 0x3f60bcc2,
+ 0x3fa05f02,
+ 0x3fe22044,
+ 0x222046,
+ 0x33e8c6,
+ 0x277844,
+ 0x2474c3,
+ 0x39bc83,
+ 0x235143,
+ 0x242cc6,
+ 0x2ce085,
+ 0x2c8e47,
+ 0x2d0589,
+ 0x2ccac5,
+ 0x2cdfc6,
+ 0x2ce548,
+ 0x2ce746,
+ 0x245bc4,
+ 0x29ef8b,
+ 0x2d3983,
+ 0x2d3985,
+ 0x2d3ac8,
+ 0x226302,
+ 0x341982,
+ 0x4024db02,
+ 0x4060b602,
+ 0x21a8c3,
+ 0x40a73fc2,
+ 0x273fc3,
+ 0x2d3dc4,
+ 0x2d4e43,
+ 0x41201682,
+ 0x41601686,
+ 0x2c47c6,
+ 0x2da008,
+ 0x41a95242,
+ 0x41e10882,
+ 0x42223342,
+ 0x4265e402,
+ 0x42a14202,
+ 0x42e01302,
+ 0x234103,
+ 0x261c05,
+ 0x32d1c6,
+ 0x43213184,
+ 0x295c4a,
+ 0x201306,
+ 0x2f7ec4,
+ 0x269ec3,
+ 0x43e0c002,
+ 0x202082,
+ 0x231743,
+ 0x44204ac3,
+ 0x362b47,
+ 0x3695c7,
+ 0x45a58847,
+ 0x32d747,
+ 0x228543,
+ 0x2977ca,
+ 0x377004,
+ 0x220144,
+ 0x22014a,
+ 0x202085,
+ 0x45e04182,
+ 0x3294c3,
+ 0x462002c2,
+ 0x2104c3,
+ 0x274803,
+ 0x46a00842,
+ 0x2e33c4,
+ 0x21db44,
+ 0x208285,
+ 0x30bd05,
+ 0x249406,
+ 0x249786,
+ 0x46e09282,
+ 0x47201002,
+ 0x3274c5,
+ 0x2c44d2,
+ 0x271ac6,
+ 0x248803,
+ 0x2a2486,
+ 0x248805,
+ 0x1610a02,
+ 0x4f611802,
+ 0x3522c3,
+ 0x211803,
+ 0x278203,
+ 0x4fa11f82,
+ 0x378ac3,
+ 0x4fe14602,
+ 0x200a83,
+ 0x2ceec8,
+ 0x24a843,
+ 0x24a846,
+ 0x3a1087,
+ 0x321b06,
+ 0x321b0b,
+ 0x2f7e07,
+ 0x392404,
+ 0x50603ec2,
+ 0x364805,
+ 0x50a04a83,
+ 0x239f83,
+ 0x326805,
+ 0x35b5c3,
+ 0x35b5c6,
+ 0x26334a,
+ 0x2774c3,
+ 0x23ad04,
+ 0x2c2806,
+ 0x20df46,
+ 0x50e00383,
+ 0x324b07,
+ 0x28bb8d,
+ 0x3adbc7,
+ 0x2a0685,
+ 0x250b46,
+ 0x22c0c3,
+ 0x52a15e43,
+ 0x52e04c82,
+ 0x3b2804,
+ 0x236d8c,
+ 0x245309,
+ 0x24bcc7,
+ 0x3724c5,
+ 0x268d84,
+ 0x27c1c8,
+ 0x27ed05,
+ 0x5328a405,
+ 0x377c09,
+ 0x256343,
+ 0x2acd44,
+ 0x53617902,
+ 0x21aac3,
+ 0x53a99f82,
+ 0x2a3fc6,
+ 0x16aa082,
+ 0x53e943c2,
+ 0x321d88,
+ 0x2c08c3,
+ 0x36de07,
+ 0x305105,
+ 0x2943c5,
+ 0x30860b,
+ 0x2e3906,
+ 0x308806,
+ 0x36dbc6,
+ 0x268f84,
+ 0x2e5686,
+ 0x2e5b48,
+ 0x23e943,
+ 0x23cf83,
+ 0x23cf84,
+ 0x2e6984,
+ 0x2e6e07,
+ 0x2e8745,
+ 0x542e8882,
+ 0x54606ec2,
+ 0x206ec5,
+ 0x2a4a84,
+ 0x2ebf8b,
+ 0x2ee248,
+ 0x2f7304,
+ 0x290602,
+ 0x54eb6042,
+ 0x38c543,
+ 0x2ee704,
+ 0x2ee9c5,
+ 0x2ef087,
+ 0x2f1404,
+ 0x2f7cc4,
+ 0x552054c2,
+ 0x35d209,
+ 0x2f2445,
+ 0x2716c5,
+ 0x2f3105,
+ 0x5561aa03,
+ 0x2f4244,
+ 0x2f424b,
+ 0x2f4684,
+ 0x2f4b0b,
+ 0x2f5505,
+ 0x21bc4a,
+ 0x2f5d08,
+ 0x2f5f0a,
+ 0x2f6783,
+ 0x2f678a,
+ 0x55a1b282,
+ 0x55e01202,
+ 0x26a103,
+ 0x562f7902,
+ 0x2f7903,
+ 0x5673aa42,
+ 0x56b21202,
+ 0x2f8104,
+ 0x21c2c6,
+ 0x325d05,
+ 0x2f8b43,
+ 0x32ff46,
+ 0x30c845,
+ 0x2e9784,
+ 0x56e00e02,
+ 0x2d7904,
+ 0x2c9c4a,
+ 0x2eb487,
+ 0x26b686,
+ 0x244007,
+ 0x236ec3,
+ 0x265488,
+ 0x28954b,
+ 0x386a45,
+ 0x235905,
+ 0x235906,
+ 0x370204,
+ 0x31d488,
+ 0x215a83,
+ 0x2b5984,
+ 0x36b507,
+ 0x307206,
+ 0x200e06,
+ 0x2a58ca,
+ 0x24e684,
+ 0x24e68a,
+ 0x57201946,
+ 0x201947,
+ 0x259547,
+ 0x279804,
+ 0x279809,
+ 0x2ba485,
+ 0x23b80b,
+ 0x2769c3,
+ 0x211c03,
+ 0x2a3f43,
+ 0x22ec44,
+ 0x57600682,
+ 0x259f06,
+ 0x2a7d05,
+ 0x2a26c5,
+ 0x2564c6,
+ 0x2531c4,
+ 0x57a01f82,
+ 0x245244,
+ 0x57e00d42,
+ 0x200d44,
+ 0x224303,
+ 0x58211842,
+ 0x3398c3,
+ 0x2478c6,
+ 0x58602602,
+ 0x2cfb88,
+ 0x223704,
+ 0x223706,
+ 0x375846,
+ 0x25bb44,
+ 0x204905,
+ 0x20c408,
+ 0x20c907,
+ 0x20d007,
+ 0x20d00f,
+ 0x298bc6,
+ 0x227843,
+ 0x227844,
+ 0x28be84,
+ 0x210e83,
+ 0x222c84,
+ 0x241104,
+ 0x58a36b82,
+ 0x28e183,
+ 0x241383,
+ 0x58e0c4c2,
+ 0x22a543,
+ 0x260883,
+ 0x213e8a,
+ 0x22bc87,
+ 0x241c8c,
+ 0x241f46,
+ 0x242406,
+ 0x246dc7,
+ 0x592ddb07,
+ 0x251a09,
+ 0x21cc04,
+ 0x252284,
+ 0x59609f42,
+ 0x59a01702,
+ 0x2a5c86,
+ 0x324904,
+ 0x2db5c6,
+ 0x2ab348,
+ 0x20eec4,
+ 0x2a3186,
+ 0x2d68c5,
+ 0x26ebc8,
+ 0x205583,
+ 0x272605,
+ 0x273583,
+ 0x2717c3,
+ 0x2717c4,
+ 0x273983,
+ 0x59edeec2,
+ 0x5a200b42,
+ 0x276889,
+ 0x27ec05,
+ 0x27ee04,
+ 0x281305,
+ 0x212504,
+ 0x2c1247,
+ 0x33d3c5,
+ 0x258a04,
+ 0x258a08,
+ 0x2dc3c6,
+ 0x2de404,
+ 0x2dfdc8,
+ 0x2e1a87,
+ 0x5a60e5c2,
+ 0x305304,
+ 0x210f44,
+ 0x2257c7,
+ 0x5aa53d84,
+ 0x249682,
+ 0x5ae01ac2,
+ 0x21b083,
+ 0x351144,
+ 0x242643,
+ 0x33d945,
+ 0x5b21de42,
+ 0x2ebb05,
+ 0x212bc2,
+ 0x381dc5,
+ 0x364305,
+ 0x5b60c842,
+ 0x3581c4,
+ 0x5ba06342,
+ 0x2a9146,
+ 0x2ac506,
+ 0x396208,
+ 0x2c3608,
+ 0x3075c4,
+ 0x2f8905,
+ 0x2fe809,
+ 0x2e10c4,
+ 0x263304,
+ 0x20aec3,
+ 0x5be20c45,
+ 0x2c7087,
+ 0x25e944,
+ 0x33a48d,
+ 0x33c282,
+ 0x33c283,
+ 0x355783,
+ 0x5c200202,
+ 0x388b45,
+ 0x26c747,
+ 0x2a7e04,
+ 0x32d807,
+ 0x29d849,
+ 0x2c9d89,
+ 0x248ac7,
+ 0x243843,
+ 0x27c008,
+ 0x2f33c9,
+ 0x2500c7,
+ 0x370145,
+ 0x385886,
+ 0x394246,
+ 0x3959c5,
+ 0x257345,
+ 0x5c603102,
+ 0x27eb05,
+ 0x2b8308,
+ 0x2c5386,
+ 0x2bcc07,
+ 0x2f5744,
+ 0x2ad207,
+ 0x2faf46,
+ 0x5ca2fb02,
+ 0x3713c6,
+ 0x2fd38a,
+ 0x2fde45,
+ 0x5cee4742,
+ 0x5d245702,
+ 0x30fbc6,
+ 0x2b25c8,
+ 0x5d68eb87,
+ 0x5da04602,
+ 0x20edc3,
+ 0x38c706,
+ 0x2246c4,
+ 0x3a0f46,
+ 0x262446,
+ 0x26bd0a,
+ 0x319a45,
+ 0x204446,
+ 0x218c83,
+ 0x218c84,
+ 0x205302,
+ 0x30c283,
+ 0x5de05dc2,
+ 0x2ce903,
+ 0x3734c4,
+ 0x2b2704,
+ 0x2b270a,
+ 0x229b03,
+ 0x28a7c8,
+ 0x229b0a,
+ 0x23a407,
+ 0x301446,
+ 0x2a9004,
+ 0x296e42,
+ 0x219542,
+ 0x5e206e42,
+ 0x24e1c3,
+ 0x259307,
+ 0x330207,
+ 0x38fd4b,
+ 0x28a2c4,
+ 0x34f9c7,
+ 0x2ef186,
+ 0x21c607,
+ 0x258004,
+ 0x23c445,
+ 0x2c17c5,
+ 0x5e620382,
+ 0x221a86,
+ 0x246043,
+ 0x24a2c2,
+ 0x24a2c6,
+ 0x5ea04802,
+ 0x5ee05bc2,
+ 0x3abd45,
+ 0x5f222e82,
+ 0x5f600a42,
+ 0x343745,
+ 0x38e6c5,
+ 0x204505,
+ 0x270ac3,
+ 0x390b05,
+ 0x2e39c7,
+ 0x309445,
+ 0x30a985,
+ 0x3a05c4,
+ 0x24c646,
+ 0x25c1c4,
+ 0x5fa03382,
+ 0x6060ce05,
+ 0x36f447,
+ 0x2db7c8,
+ 0x2a32c6,
+ 0x2a32cd,
+ 0x2a86c9,
+ 0x2a86d2,
+ 0x332705,
+ 0x33c843,
+ 0x60a044c2,
+ 0x2f6d84,
+ 0x204383,
+ 0x3623c5,
+ 0x2fed85,
+ 0x60e17082,
+ 0x3700c3,
+ 0x6124d082,
+ 0x616c3142,
+ 0x61a18dc2,
+ 0x364c05,
+ 0x329ec3,
+ 0x319888,
+ 0x61e02d82,
+ 0x62206902,
+ 0x2e3386,
+ 0x34398a,
+ 0x272243,
+ 0x25c083,
+ 0x2ed703,
+ 0x62e016c2,
+ 0x71211fc2,
+ 0x71a19682,
+ 0x206602,
+ 0x3711c9,
+ 0x2c6404,
+ 0x22fb48,
+ 0x71ef8b82,
+ 0x72202502,
+ 0x2f4d45,
+ 0x232ac8,
+ 0x2cf008,
+ 0x2fd54c,
+ 0x23bd83,
+ 0x267002,
+ 0x726019c2,
+ 0x2ccf46,
+ 0x3022c5,
+ 0x239103,
+ 0x383586,
+ 0x302406,
+ 0x21e2c3,
+ 0x304ec3,
+ 0x3055c6,
+ 0x306204,
+ 0x225d46,
+ 0x2d3b45,
+ 0x30648a,
+ 0x240544,
+ 0x307884,
+ 0x307a4a,
+ 0x72a037c2,
+ 0x234605,
+ 0x30898a,
+ 0x309a85,
+ 0x30a344,
+ 0x30a446,
+ 0x30a5c4,
+ 0x228306,
+ 0x72e39342,
+ 0x2eadc6,
+ 0x3a2445,
+ 0x26bb87,
+ 0x3a3c46,
+ 0x246fc4,
+ 0x2da807,
+ 0x311586,
+ 0x25b5c5,
+ 0x2d4287,
+ 0x39cd87,
+ 0x39cd8e,
+ 0x24abc6,
+ 0x382905,
+ 0x285407,
+ 0x201c43,
+ 0x201c47,
+ 0x3b3445,
+ 0x2108c4,
+ 0x211882,
+ 0x22afc7,
+ 0x31ab04,
+ 0x22fec4,
+ 0x24314b,
+ 0x21d283,
+ 0x288fc7,
+ 0x21d284,
+ 0x2ace07,
+ 0x2824c3,
+ 0x334b4d,
+ 0x389388,
+ 0x228e04,
+ 0x258905,
+ 0x30ac85,
+ 0x30b0c3,
+ 0x73201a82,
+ 0x30c243,
+ 0x30cf43,
+ 0x221c04,
+ 0x280785,
+ 0x223387,
+ 0x218d06,
+ 0x373203,
+ 0x24a40b,
+ 0x3aa70b,
+ 0x27928b,
+ 0x28088a,
+ 0x2ad8cb,
+ 0x2fc28b,
+ 0x2e478c,
+ 0x2e7291,
+ 0x32170a,
+ 0x34e48b,
+ 0x379d0b,
+ 0x3b048a,
+ 0x3b4cca,
+ 0x30ea4d,
+ 0x31038e,
+ 0x3109cb,
+ 0x310c8a,
+ 0x312191,
+ 0x3125ca,
+ 0x312acb,
+ 0x31300e,
+ 0x31398c,
+ 0x313fcb,
+ 0x31428e,
+ 0x31460c,
+ 0x315a4a,
+ 0x31694c,
+ 0x73716c4a,
+ 0x317449,
+ 0x31b60a,
+ 0x31b88a,
+ 0x31bb0b,
+ 0x31e9ce,
+ 0x31ed51,
+ 0x327a09,
+ 0x327c4a,
+ 0x32844b,
+ 0x32a30a,
+ 0x32ab96,
+ 0x32c8cb,
+ 0x32e00a,
+ 0x32e5ca,
+ 0x33048b,
+ 0x332189,
+ 0x3354c9,
+ 0x335a4d,
+ 0x3360cb,
+ 0x33734b,
+ 0x337d0b,
+ 0x3381c9,
+ 0x33880e,
+ 0x338f0a,
+ 0x33a24a,
+ 0x33a7ca,
+ 0x33af8b,
+ 0x33b7cb,
+ 0x33ba8d,
+ 0x33cecd,
+ 0x33da90,
+ 0x33df4b,
+ 0x33e54c,
+ 0x33ea4b,
+ 0x34118b,
+ 0x34290b,
+ 0x3463cb,
+ 0x346e4f,
+ 0x34720b,
+ 0x347d0a,
+ 0x348249,
+ 0x348609,
+ 0x34898b,
+ 0x348c4e,
+ 0x34b98b,
+ 0x34d04f,
+ 0x34ff0b,
+ 0x3501cb,
+ 0x35048b,
+ 0x35098a,
+ 0x355c09,
+ 0x35a20f,
+ 0x36128c,
+ 0x36170c,
+ 0x36208e,
+ 0x36388f,
+ 0x363c4e,
+ 0x3652d0,
+ 0x3656cf,
+ 0x365d4e,
+ 0x36650c,
+ 0x366812,
+ 0x36a511,
+ 0x36ad0e,
+ 0x36ba0e,
+ 0x36bf4e,
+ 0x36c2cf,
0x36c68e,
- 0x36ca0f,
- 0x36cdce,
- 0x36d153,
- 0x36d611,
- 0x36da4e,
- 0x36decc,
- 0x36e2d3,
- 0x36f650,
- 0x36ff0c,
- 0x37020c,
- 0x3706cb,
- 0x37168e,
+ 0x36ca13,
+ 0x36ced1,
+ 0x36d30e,
+ 0x36d78c,
+ 0x36e493,
+ 0x36fa90,
+ 0x37070c,
+ 0x370a0c,
+ 0x370ecb,
+ 0x37184e,
0x371f8b,
- 0x3723cb,
- 0x373b0c,
- 0x37acca,
- 0x37b50c,
- 0x37b80c,
- 0x37bb09,
- 0x37cf0b,
- 0x37d1c8,
- 0x37d3c9,
- 0x37d3cf,
- 0x37ed0b,
- 0x37fa0a,
- 0x380fcc,
- 0x382e49,
- 0x383208,
- 0x38374b,
- 0x383e4b,
- 0x384c8a,
- 0x384f0b,
- 0x38544c,
- 0x385e08,
- 0x38910b,
- 0x38ba0b,
- 0x38fc4b,
- 0x391a4b,
- 0x39a98b,
- 0x39ac49,
- 0x39b18d,
- 0x3a004a,
- 0x3a0f97,
- 0x3a2898,
- 0x3a5bc9,
+ 0x3727cb,
+ 0x37378c,
+ 0x37914a,
+ 0x37950c,
+ 0x37980c,
+ 0x379b09,
+ 0x37b7cb,
+ 0x37ba88,
+ 0x37bc89,
+ 0x37bc8f,
+ 0x37d5cb,
+ 0x37e44a,
+ 0x37fd4c,
+ 0x380e09,
+ 0x381b88,
+ 0x38214b,
+ 0x382c0b,
+ 0x38418a,
+ 0x38440b,
+ 0x38488c,
+ 0x385548,
+ 0x38958b,
+ 0x38c04b,
+ 0x39000b,
+ 0x39180b,
+ 0x39c90b,
+ 0x39cbc9,
+ 0x39d10d,
+ 0x3a264a,
+ 0x3a3597,
+ 0x3a3dd8,
+ 0x3a6309,
0x3a7b4b,
- 0x3a9414,
- 0x3a990b,
- 0x3a9e8a,
- 0x3aa30a,
- 0x3aa58b,
- 0x3ab590,
- 0x3ab991,
- 0x3ac48a,
- 0x3ad88d,
- 0x3adf8d,
- 0x3b328b,
- 0x3b4506,
- 0x221b43,
- 0x6bb99283,
- 0x323dc6,
- 0x28b6c5,
- 0x2c55c7,
- 0x33d7c6,
- 0x1617982,
- 0x2b0d49,
- 0x29ed04,
- 0x2cfe48,
- 0x242743,
- 0x2e5f47,
- 0x230902,
- 0x2acbc3,
- 0x6be006c2,
- 0x2c0586,
- 0x2c17c4,
- 0x307c84,
- 0x236c43,
- 0x236c45,
- 0x6c6ff382,
- 0x6caa8004,
- 0x26f7c7,
- 0x16ce2c2,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x2025c3,
- 0x200882,
- 0x880c8,
- 0x216582,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x217643,
- 0x317416,
- 0x31a5d3,
- 0x3492c9,
- 0x3aad88,
- 0x3a6389,
- 0x2fa5c6,
- 0x32c750,
- 0x21d6d3,
- 0x200b08,
- 0x25aa47,
- 0x274ec7,
- 0x29cb4a,
- 0x2f7989,
- 0x3336c9,
- 0x28a70b,
- 0x325506,
- 0x31cf8a,
- 0x223586,
- 0x29e903,
- 0x28e085,
- 0x217188,
- 0x2c7bcd,
- 0x357c4c,
- 0x38e487,
- 0x3025cd,
- 0x3a8204,
- 0x23214a,
- 0x232a8a,
- 0x232f4a,
- 0x21d9c7,
- 0x23cfc7,
- 0x23f644,
- 0x239506,
- 0x3258c4,
- 0x2ec848,
- 0x25f709,
- 0x2b83c6,
- 0x2b83c8,
- 0x2423cd,
- 0x2bf489,
- 0x378cc8,
- 0x241f07,
- 0x2fe78a,
- 0x24a4c6,
- 0x25a047,
- 0x2cdac4,
- 0x240d07,
- 0x30130a,
- 0x3397ce,
- 0x255805,
- 0x2fcd4b,
- 0x277a09,
- 0x223349,
- 0x2a2087,
- 0x358b0a,
- 0x201c87,
- 0x39fc89,
- 0x358108,
- 0x369c4b,
- 0x2cf145,
- 0x2e0e0a,
- 0x2a37c9,
- 0x30f54a,
- 0x2c1dcb,
- 0x240c0b,
- 0x28a495,
- 0x2d5d45,
- 0x241f85,
- 0x2e2f4a,
- 0x215cca,
- 0x310c47,
- 0x220683,
- 0x29b9c8,
- 0x2cb14a,
- 0x224ec6,
- 0x23db49,
- 0x25f008,
- 0x2d5204,
- 0x22fb09,
- 0x2b7b88,
- 0x32c247,
- 0x276486,
- 0x2a4887,
- 0x28fd87,
- 0x23f085,
- 0x25564c,
- 0x252cc5,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x216582,
- 0x22d183,
- 0x238483,
- 0x2025c3,
- 0x2264c3,
- 0x22d183,
- 0x238483,
- 0x223b43,
- 0x2264c3,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x216582,
- 0x201a42,
- 0x233182,
- 0x201982,
- 0x204c02,
- 0x293d42,
- 0x462d183,
- 0x2343c3,
- 0x211cc3,
- 0x21eb03,
- 0x202243,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x20b443,
- 0x880c8,
- 0x335d44,
- 0x24f007,
- 0x251fc3,
- 0x231404,
- 0x214bc3,
- 0x282343,
- 0x21eb03,
- 0x16e747,
- 0x200882,
- 0x123ac3,
- 0x5a16582,
- 0x86a0d,
- 0x233182,
- 0x1604,
- 0x201502,
- 0x5e01508,
- 0xe26c4,
- 0x880c8,
- 0x140de82,
- 0x14fa2c6,
- 0x230983,
- 0x316403,
- 0x662d183,
- 0x232144,
- 0x6a343c3,
- 0x6e1eb03,
- 0x2082c2,
- 0x201604,
- 0x238483,
- 0x212ec3,
- 0x202282,
- 0x2264c3,
- 0x21ed42,
- 0x2e86c3,
- 0x201bc2,
- 0x29c743,
- 0x22d743,
- 0x204702,
- 0x880c8,
- 0x230983,
- 0x212ec3,
- 0x202282,
- 0x2e86c3,
- 0x201bc2,
- 0x29c743,
- 0x22d743,
- 0x204702,
- 0x2e86c3,
- 0x201bc2,
- 0x29c743,
- 0x22d743,
- 0x204702,
- 0x22d183,
- 0x323ac3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x202243,
- 0x211003,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x202002,
- 0x21bd03,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x323ac3,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x238483,
- 0x2264c3,
- 0x2e9cc5,
- 0x221e42,
- 0x200882,
- 0x880c8,
- 0x1462d48,
- 0x21eb03,
- 0x225b41,
- 0x20fd41,
- 0x20c401,
- 0x20c041,
- 0x226fc1,
- 0x26f541,
- 0x252041,
- 0x225c41,
- 0x2d5901,
- 0x2ff8c1,
+ 0x3a9554,
+ 0x3a9a4b,
+ 0x3a9fca,
+ 0x3ab70a,
+ 0x3ab98b,
+ 0x3ad110,
+ 0x3ad511,
+ 0x3ae64a,
+ 0x3afa8d,
+ 0x3b018d,
+ 0x3b508b,
+ 0x3b5c46,
+ 0x221b83,
+ 0x73b76c03,
+ 0x37f706,
+ 0x292c85,
+ 0x396787,
+ 0x3215c6,
+ 0x1639f02,
+ 0x2b3809,
+ 0x32fd44,
+ 0x2e0bc8,
+ 0x24e103,
+ 0x2f6cc7,
+ 0x241b82,
+ 0x2b2c03,
+ 0x73e06c82,
+ 0x2cb006,
+ 0x2cc544,
+ 0x3b2e84,
+ 0x2616c3,
+ 0x2616c5,
+ 0x746c7282,
+ 0x74aae504,
+ 0x279747,
+ 0x1669e02,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x20abc3,
+ 0x204cc2,
+ 0x15f048,
+ 0x20d1c2,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x213e83,
+ 0x324156,
+ 0x325393,
+ 0x34f849,
+ 0x2957c8,
+ 0x364689,
+ 0x308b06,
+ 0x336f50,
+ 0x25c9d3,
+ 0x3072c8,
+ 0x344207,
+ 0x27e407,
+ 0x2475ca,
+ 0x373549,
+ 0x239789,
+ 0x29258b,
+ 0x367e06,
+ 0x314aca,
+ 0x2221c6,
+ 0x32f943,
+ 0x294985,
+ 0x22b888,
+ 0x2a920d,
+ 0x35ab0c,
+ 0x3a2107,
+ 0x379f8d,
+ 0x20c504,
+ 0x22ef0a,
+ 0x23064a,
+ 0x230b0a,
+ 0x20fe87,
+ 0x240387,
+ 0x243084,
+ 0x26cdc6,
+ 0x3aab84,
+ 0x2e26c8,
+ 0x2267c9,
+ 0x2b94c6,
+ 0x2b94c8,
+ 0x24c34d,
+ 0x2c9fc9,
+ 0x207d48,
+ 0x271647,
+ 0x2f8e8a,
+ 0x2539c6,
+ 0x2642c7,
+ 0x2c96c4,
+ 0x28e807,
+ 0x332eca,
+ 0x36f5ce,
+ 0x228fc5,
+ 0x28e70b,
+ 0x262089,
+ 0x2a8909,
+ 0x2129c7,
+ 0x29998a,
+ 0x225707,
+ 0x2ffd09,
+ 0x326b48,
+ 0x35dc4b,
+ 0x2e0405,
+ 0x38144a,
+ 0x223109,
+ 0x23908a,
+ 0x2ccb4b,
+ 0x383a0b,
+ 0x292315,
+ 0x2e6185,
+ 0x2716c5,
+ 0x2f424a,
+ 0x25980a,
+ 0x261e07,
+ 0x21d743,
+ 0x2a5c08,
+ 0x2d828a,
+ 0x223706,
+ 0x24ff09,
+ 0x26ebc8,
+ 0x2de404,
+ 0x242649,
+ 0x2c3608,
+ 0x2b1c07,
+ 0x20ce06,
+ 0x36f447,
+ 0x293cc7,
+ 0x242ac5,
+ 0x228e0c,
+ 0x258905,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x204ac3,
+ 0x20abc3,
+ 0x200383,
+ 0x2d0783,
+ 0x204ac3,
+ 0x24a843,
+ 0x200383,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x20d1c2,
+ 0x2000c2,
+ 0x230d42,
+ 0x202f02,
+ 0x202382,
+ 0x261e82,
+ 0x46d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x332ec3,
+ 0x204303,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x201383,
+ 0x15f048,
+ 0x32df04,
+ 0x260087,
+ 0x263d43,
+ 0x37aa84,
+ 0x214543,
+ 0x212a43,
+ 0x332ec3,
+ 0x13ecc7,
+ 0x204cc2,
+ 0x168883,
+ 0x5a0d1c2,
+ 0x8d54d,
+ 0x8d88d,
+ 0x230d42,
+ 0x964c4,
+ 0x200382,
+ 0x5e963c8,
+ 0xf39c4,
+ 0x15f048,
+ 0x14020c2,
+ 0x1509cc6,
+ 0x20e443,
+ 0x26ae03,
+ 0x66d0783,
+ 0x22ef04,
+ 0x6a31b83,
+ 0x6f32ec3,
+ 0x20a3c2,
+ 0x2964c4,
+ 0x204ac3,
+ 0x2fc883,
+ 0x201882,
+ 0x200383,
+ 0x21c802,
+ 0x2f8043,
+ 0x202602,
+ 0x203f83,
+ 0x26ec83,
+ 0x206d02,
+ 0x15f048,
+ 0x20e443,
+ 0x2fc883,
+ 0x201882,
+ 0x2f8043,
+ 0x202602,
+ 0x203f83,
+ 0x26ec83,
+ 0x206d02,
+ 0x2f8043,
+ 0x202602,
+ 0x203f83,
+ 0x26ec83,
+ 0x206d02,
+ 0x2d0783,
+ 0x368883,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204303,
+ 0x20fbc3,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x210582,
+ 0x21aa03,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x368883,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204ac3,
+ 0x200383,
+ 0x370145,
+ 0x217082,
+ 0x204cc2,
+ 0x15f048,
+ 0x1491b48,
+ 0x332ec3,
+ 0x2461c1,
+ 0x2096c1,
+ 0x202201,
+ 0x209441,
+ 0x24a5c1,
+ 0x27e081,
+ 0x24c0c1,
+ 0x2462c1,
+ 0x2e7481,
+ 0x30ed01,
0x200141,
0x200001,
- 0x880c8,
- 0x200481,
- 0x200741,
- 0x200081,
- 0x200c81,
- 0x2007c1,
- 0x200901,
- 0x200041,
- 0x204281,
- 0x2001c1,
+ 0x15f048,
+ 0x200701,
+ 0x200101,
0x2000c1,
- 0x200341,
- 0x200ac1,
- 0x201501,
- 0x2014c1,
- 0x204101,
- 0x200b81,
+ 0x201e41,
+ 0x200181,
+ 0x200941,
+ 0x200041,
+ 0x204ec1,
+ 0x200081,
+ 0x201481,
+ 0x200c01,
+ 0x2002c1,
+ 0x200381,
+ 0x200e81,
+ 0x21c2c1,
+ 0x2003c1,
+ 0x200201,
0x200241,
0x200a01,
- 0x2002c1,
- 0x200281,
- 0x204701,
- 0x20dec1,
- 0x200781,
- 0x200641,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x201502,
- 0x2264c3,
- 0x16e747,
- 0x131ac7,
- 0x1e1c6,
- 0x1736ca,
- 0x85c48,
- 0x53188,
- 0x53547,
- 0x50d06,
- 0xce6c5,
- 0x51f05,
- 0x161186,
- 0x155646,
- 0x224104,
- 0x322707,
- 0x880c8,
- 0x22d684,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x211cc3,
- 0x21eb03,
- 0x202243,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x221e42,
- 0x2be043,
- 0x2f5003,
- 0x20b283,
- 0x202e02,
- 0x248083,
- 0x204803,
- 0x206e83,
+ 0x2019c1,
+ 0x201a81,
+ 0x2005c1,
+ 0x2007c1,
+ 0x200cc1,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x200382,
+ 0x200383,
+ 0x13ecc7,
+ 0xfcc7,
+ 0x28b86,
+ 0x3dcca,
+ 0x8cc48,
+ 0x58dc8,
+ 0x59207,
+ 0x62a46,
+ 0xde185,
+ 0x63c85,
+ 0x177ac6,
+ 0x125886,
+ 0x24ae04,
+ 0x31cdc7,
+ 0x15f048,
+ 0x2da904,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x332ec3,
+ 0x204303,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x217082,
+ 0x2c8dc3,
+ 0x21fd43,
+ 0x200603,
+ 0x202942,
+ 0x251d43,
+ 0x205283,
+ 0x21e743,
0x200001,
- 0x207043,
- 0x26ff44,
- 0x324dc3,
- 0x30c683,
- 0x21dec3,
- 0x379b43,
- 0xaa2d183,
- 0x2374c4,
- 0x21de83,
- 0x232383,
- 0x2343c3,
- 0x234103,
- 0x208143,
- 0x2a3ec3,
- 0x30c603,
- 0x228103,
- 0x212103,
- 0x24c1c4,
- 0x23aa82,
- 0x252a43,
- 0x2585c3,
- 0x272bc3,
- 0x250b43,
- 0x24f8c3,
- 0x21eb03,
- 0x2db983,
- 0x220883,
- 0x201603,
- 0x210483,
- 0x2f2903,
- 0xaefe5c3,
- 0x385d43,
- 0x200983,
- 0x2348c3,
- 0x211003,
- 0x21e442,
- 0x286fc3,
- 0x238483,
- 0x16025c3,
- 0x217e83,
- 0x21da43,
- 0x29af43,
- 0x2264c3,
- 0x30e803,
- 0x21bd03,
- 0x2ad283,
- 0x2f6a83,
- 0x2e8883,
- 0x21d445,
- 0x215cc3,
- 0x2e88c3,
- 0x39c083,
- 0x218744,
- 0x25b343,
- 0x22e8c3,
- 0x277c03,
- 0x20b443,
- 0x221e42,
- 0x23a183,
- 0x2f9b84,
- 0x2ae9c4,
- 0x244843,
- 0x880c8,
- 0x882,
- 0x1002,
- 0x2e02,
- 0x1482,
- 0x2d42,
- 0x4c2,
- 0x44682,
- 0x202,
- 0x1f82,
- 0x982,
- 0x43742,
- 0xe842,
- 0xe02,
- 0x7a82,
- 0x93d42,
- 0x6d42,
- 0x26282,
- 0x7442,
- 0x1f882,
- 0x8b02,
- 0x4b42,
- 0x1c882,
- 0x13c2,
- 0x17642,
- 0x1402,
- 0xdfc2,
- 0x6ec2,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x216582,
- 0x2264c3,
- 0xc22d183,
- 0x21eb03,
- 0x211003,
- 0x223b42,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x6c2,
- 0x202f02,
- 0x223f42,
- 0x880c8,
- 0x16582,
- 0x235f82,
- 0x203142,
- 0x23e682,
- 0x201642,
- 0x208382,
- 0x51f05,
- 0x2029c2,
- 0x202282,
- 0x203382,
- 0x205d02,
- 0x206d42,
- 0x385542,
- 0x201882,
- 0x227642,
- 0x16e747,
- 0x119d4d,
- 0xeafc9,
- 0x47b8b,
- 0xd1e88,
- 0x13bc89,
- 0x21eb03,
- 0x880c8,
- 0x880c8,
- 0x53e06,
- 0x200882,
- 0x224104,
- 0x216582,
- 0x22d183,
- 0x201a42,
- 0x2343c3,
- 0x201f82,
- 0x22d684,
- 0x202243,
- 0x209782,
- 0x238483,
- 0x201502,
- 0x2264c3,
- 0x241f86,
- 0x30d40f,
- 0x6fef43,
- 0x880c8,
- 0x216582,
- 0x211cc3,
- 0x21eb03,
- 0x211003,
- 0x1568ecb,
- 0x16e747,
- 0x216582,
- 0x22d183,
- 0x21eb03,
- 0x238483,
- 0x200882,
- 0x201102,
- 0x2093c2,
- 0xfa2d183,
- 0x23e4c2,
- 0x2343c3,
- 0x2475c2,
- 0x227982,
- 0x21eb03,
- 0x21c2c2,
- 0x301dc2,
- 0x2a7fc2,
- 0x201142,
- 0x289f82,
- 0x206982,
- 0x200902,
- 0x205e82,
- 0x26a242,
- 0x204d42,
- 0x2ad802,
- 0x230cc2,
- 0x225a02,
- 0x228f02,
- 0x211003,
- 0x203042,
- 0x238483,
- 0x2425c2,
- 0x267c02,
- 0x2264c3,
- 0x248102,
- 0x217642,
- 0x20a442,
- 0x202482,
- 0x2168c2,
- 0x2d29c2,
- 0x210442,
- 0x242d42,
- 0x221bc2,
- 0x301e0a,
- 0x34600a,
- 0x38074a,
- 0x3b4682,
- 0x20d802,
- 0x23c282,
- 0xff49009,
- 0x103a418a,
- 0x1042fe87,
- 0xc002,
- 0x1a418a,
- 0x245dc4,
- 0x10e2d183,
- 0x2343c3,
- 0x247344,
- 0x21eb03,
- 0x201604,
- 0x202243,
- 0x211003,
- 0x238483,
- 0x2025c3,
- 0x2264c3,
- 0x215cc3,
- 0x223ec3,
- 0x880c8,
- 0x1450c84,
- 0x50505,
- 0x4e80a,
- 0x109842,
- 0x18b406,
- 0x162d51,
- 0x11749009,
- 0x163187,
- 0x4802,
- 0x1aa80a,
- 0xdb7c7,
- 0x880c8,
- 0xfd948,
- 0xe707,
- 0x1281c44b,
- 0x15802,
- 0x1a6707,
- 0x1b1a4a,
- 0x10728f,
- 0x131b4f,
- 0x1dec2,
- 0x16582,
- 0xa3e08,
- 0xea70a,
- 0x167408,
- 0xf82,
- 0x10700f,
- 0x124e4b,
- 0x2988,
- 0x16e847,
- 0x16a8a,
- 0xae14b,
- 0x112089,
- 0x173507,
- 0xf424c,
- 0x10ec87,
- 0xd060a,
- 0x132d48,
- 0x8e28e,
- 0x553ce,
- 0xdb60b,
- 0x110d8b,
- 0xead0b,
- 0x1e1c9,
- 0x1fb8b,
- 0x2398d,
- 0x260cb,
- 0x2708d,
- 0x2c90d,
- 0x2ec8a,
- 0xae80b,
- 0xc6fcb,
- 0xe82c5,
- 0x10a710,
- 0x8128f,
- 0xb74f,
- 0x2a24d,
- 0x6fd50,
- 0xd82,
- 0x12fa2488,
- 0x131948,
- 0x132e4bc5,
- 0x4668b,
- 0x52088,
- 0x110f4a,
- 0x58d89,
- 0x60587,
- 0x608c7,
- 0x60a87,
- 0x611c7,
- 0x629c7,
- 0x62f47,
- 0x636c7,
- 0x63d47,
- 0x64307,
- 0x644c7,
- 0x66087,
- 0x66247,
- 0x66407,
- 0x665c7,
- 0x668c7,
- 0x66e07,
- 0x67a47,
- 0x67f07,
- 0x68707,
- 0x69207,
- 0x693c7,
- 0x699c7,
- 0x69e87,
- 0x6a087,
- 0x6a347,
- 0x6a507,
- 0x6a6c7,
- 0x6ac07,
- 0x6b4c7,
- 0x6bf87,
- 0x6c687,
- 0x6c947,
- 0x6ce07,
- 0x6cfc7,
- 0x6d347,
- 0x6e3c7,
- 0x6ea07,
- 0x6ee07,
- 0x6efc7,
- 0x6f187,
- 0x6f5c7,
- 0x70307,
- 0x70607,
- 0x70c07,
- 0x70dc7,
- 0x71147,
- 0x71587,
- 0xd382,
- 0x33d8a,
- 0xf9dc7,
- 0x134c87cb,
- 0x14c87d6,
- 0x18351,
- 0xdfb8a,
- 0xa3c8a,
- 0x53e06,
- 0xc114b,
- 0xb2c2,
- 0x31ad1,
- 0x959c9,
- 0x90ac9,
- 0x5e82,
- 0x9c34a,
- 0xa5449,
- 0xa5c8f,
- 0xa688e,
- 0xa7188,
- 0xf1c2,
- 0x169a89,
- 0x8498e,
- 0xac64c,
- 0xd400f,
- 0x194a8e,
- 0x1098c,
- 0x15309,
- 0x16451,
- 0x19a48,
- 0x2bd52,
- 0x2e5cd,
- 0x393cd,
- 0x13ff8b,
- 0x179d95,
- 0x33c49,
- 0x5488a,
- 0x58749,
- 0x5fe90,
- 0x60f0b,
- 0x6e54f,
- 0x71d0b,
- 0x756cc,
- 0x787d0,
- 0x8660a,
- 0x86e8d,
- 0x14ea0e,
- 0x18004a,
- 0x8c7cc,
- 0x8fa54,
- 0x95651,
- 0x98f8b,
- 0x9b54f,
- 0xab6cd,
- 0xabfce,
- 0x12c10c,
- 0x15710c,
- 0xdc8cb,
- 0xeef8e,
- 0xfb250,
- 0x10938b,
- 0x11270d,
- 0x15f28f,
- 0xb504c,
- 0xb824e,
- 0xb8a51,
- 0xba84c,
- 0x1362c7,
- 0x11c60d,
- 0xbe94c,
- 0xc4d90,
- 0xd35cd,
- 0xe7847,
- 0xec4d0,
- 0xf0688,
- 0xf124b,
- 0x17318f,
- 0x2b848,
- 0xdfd8d,
- 0x1763d0,
- 0x13aaf9c6,
- 0xb0bc3,
- 0x9682,
- 0x2cd09,
- 0x551ca,
- 0xf9bc6,
- 0x13cd5389,
- 0x124c3,
- 0x109f11,
- 0x9f89,
- 0xcd5c7,
- 0x10710b,
- 0xd2d10,
- 0xd31cc,
- 0xd47c5,
- 0x11ab08,
- 0x19be4a,
- 0x122b07,
- 0x25c2,
- 0x5160a,
- 0x1694c9,
- 0xa62ca,
- 0x1abe8f,
- 0x4084b,
- 0x10760c,
- 0x1078d2,
- 0xb5485,
- 0x15d98a,
- 0x142e1fc5,
- 0x19900c,
- 0x1157c3,
- 0x185542,
- 0xe8e4a,
- 0x108548,
- 0x163407,
- 0x4b42,
- 0x7982,
- 0x1bc2,
- 0x129e10,
- 0x1402,
- 0x3074f,
- 0x161186,
- 0x1113ce,
- 0xe3a4b,
- 0x180248,
- 0xc9a89,
- 0x17e4d2,
- 0x178b8d,
- 0x45e88,
- 0x47a49,
- 0x485cd,
- 0x4a189,
- 0x4a64b,
- 0x4ac08,
- 0x4e648,
- 0x53f48,
- 0x559c9,
- 0x55bca,
- 0x57f4c,
- 0xe31ca,
- 0xf6ac7,
- 0xdfcd,
- 0xeb88b,
- 0x9eb0c,
- 0x18b610,
- 0x3282,
- 0xc570d,
- 0x6202,
- 0x33c2,
- 0xf6a0a,
- 0xdfa8a,
- 0xe5e4b,
- 0xc718c,
- 0xfd6ce,
- 0x165d0d,
- 0xf3dc8,
- 0x6c2,
- 0x11a0c0ce,
- 0x11c2fe87,
- 0x121aa0c9,
- 0x11583,
- 0x127117cc,
- 0xc002,
- 0x50111,
- 0xc011,
- 0xa1091,
- 0x81ed1,
- 0x11170f,
- 0x11dfcc,
- 0x121acd,
- 0x123f0d,
- 0x142615,
- 0x14b18c,
- 0x159590,
- 0xfa8c,
- 0x5274c,
- 0x47109,
- 0xc002,
- 0x501ce,
- 0xc0ce,
- 0xa114e,
- 0x81f8e,
- 0x1117cc,
- 0x11e089,
- 0x14b249,
- 0x14280d,
- 0xfb49,
- 0x52809,
- 0x1267c3,
- 0x940c3,
- 0xc002,
- 0x162d45,
- 0x1aa804,
- 0xdf704,
- 0x127244,
- 0x17f904,
- 0x17c084,
- 0x163184,
- 0x144bdc3,
- 0x140de83,
- 0x19fd04,
- 0x1573dc3,
- 0xd82,
- 0x165d03,
- 0x200882,
- 0x216582,
- 0x201a42,
- 0x206ac2,
- 0x201f82,
- 0x201502,
- 0x201bc2,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201603,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x238483,
- 0x2264c3,
- 0x1d003,
- 0x21eb03,
- 0x200882,
- 0x323ac3,
- 0x15e2d183,
- 0x330d47,
- 0x21eb03,
- 0x332683,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x24690a,
- 0x241f85,
- 0x21bd03,
- 0x203e42,
- 0x880c8,
- 0x880c8,
- 0x16582,
- 0x113682,
- 0x1a6845,
- 0x880c8,
- 0x2d183,
- 0x77947,
- 0x1161cf,
- 0xf9c44,
- 0x11220a,
- 0xac287,
- 0xf78a,
- 0x93e8a,
- 0xa660a,
- 0xf9bc6,
- 0x27ca,
- 0xccd,
- 0x123ac3,
- 0x880c8,
- 0x16582,
- 0x47344,
- 0x67683,
- 0xe9cc5,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x204803,
- 0x22d183,
- 0x2343c3,
- 0x211cc3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x290c83,
- 0x223ec3,
- 0x204803,
- 0x224104,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x232dc3,
- 0x22d183,
- 0x2343c3,
- 0x206ac3,
- 0x211cc3,
- 0x21eb03,
- 0x201604,
- 0x36b683,
- 0x2348c3,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x21bd03,
- 0x3b0343,
- 0x1822d183,
- 0x2343c3,
- 0x244d43,
- 0x21eb03,
- 0x275803,
- 0x2348c3,
- 0x2264c3,
- 0x207443,
- 0x27f5c4,
- 0x880c8,
- 0x18a2d183,
- 0x2343c3,
- 0x2a7243,
- 0x21eb03,
- 0x211003,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x220703,
- 0x880c8,
- 0x1922d183,
- 0x2343c3,
- 0x211cc3,
- 0x2025c3,
- 0x2264c3,
- 0x880c8,
- 0x142fe87,
- 0x323ac3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x16e747,
- 0x176c84,
- 0x1462d48,
- 0xa7dcd,
- 0x3256c5,
- 0x880c8,
- 0x742,
- 0x35bc3,
- 0xe6786,
- 0x307e48,
- 0x3afd07,
- 0x224104,
- 0x355346,
- 0x359446,
- 0x880c8,
- 0x301043,
- 0x20b149,
- 0x2b46d5,
- 0xb46df,
- 0x22d183,
- 0x32f8d2,
- 0xfea86,
- 0x13af45,
- 0x110f4a,
- 0x58d89,
- 0x32f68f,
- 0x22d684,
- 0x331145,
- 0x2f26d0,
- 0x3aaf87,
- 0x2025c3,
- 0x32d208,
- 0x2aeeca,
- 0x2014c4,
- 0x2e1a03,
- 0x241f86,
- 0x203e42,
- 0x38660b,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x2e6a83,
- 0x216582,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x332683,
- 0x203043,
- 0x2264c3,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x238483,
- 0x2264c3,
- 0x200882,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x224104,
- 0x22d183,
- 0x2343c3,
- 0x307b04,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x211cc3,
- 0x220883,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x251283,
- 0x2efc3,
- 0x132683,
- 0x238483,
- 0x2264c3,
- 0x301e0a,
- 0x31ec09,
- 0x33e6cb,
- 0x33ed4a,
- 0x34600a,
- 0x3543cb,
- 0x372d8a,
- 0x37acca,
- 0x38074a,
- 0x3809cb,
- 0x39bb89,
- 0x39d94a,
- 0x39e38b,
- 0x3a9bcb,
- 0x3b2c8a,
- 0x22d183,
- 0x2343c3,
- 0x211cc3,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x37549,
- 0x880c8,
- 0x22d183,
- 0x260584,
- 0x214a02,
- 0x212444,
- 0x226bc5,
- 0x204803,
- 0x224104,
- 0x22d183,
- 0x2374c4,
- 0x2343c3,
- 0x247344,
- 0x22d684,
- 0x201604,
- 0x2348c3,
- 0x238483,
- 0x2264c3,
- 0x28fb85,
- 0x232dc3,
- 0x21bd03,
- 0x25b743,
- 0x252dc4,
- 0x250bc4,
- 0x26dfc5,
- 0x880c8,
- 0x2f88c4,
- 0x208606,
- 0x283c04,
- 0x216582,
- 0x360307,
- 0x249c07,
- 0x2455c4,
- 0x257a05,
- 0x2d37c5,
- 0x2a9c05,
- 0x201604,
- 0x318348,
- 0x36ed86,
- 0x2dbb08,
- 0x236f45,
- 0x2cf145,
- 0x240584,
- 0x2264c3,
- 0x2e26c4,
- 0x353586,
- 0x242083,
- 0x252dc4,
- 0x262c45,
- 0x2cfbc4,
- 0x365b84,
- 0x203e42,
- 0x245206,
- 0x392446,
- 0x2f56c5,
- 0x200882,
- 0x323ac3,
- 0x1f216582,
- 0x2358c4,
- 0x201f82,
- 0x211003,
- 0x209f82,
- 0x238483,
- 0x201502,
- 0x217643,
- 0x223ec3,
- 0x880c8,
- 0x880c8,
- 0x21eb03,
- 0x200882,
- 0x1fe16582,
- 0x21eb03,
- 0x266383,
- 0x36b683,
- 0x31f984,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x200882,
- 0x20616582,
- 0x22d183,
- 0x238483,
- 0x2264c3,
- 0x4b42,
- 0x2019c2,
- 0x221e42,
- 0x332683,
- 0x2db083,
- 0x200882,
- 0x880c8,
- 0x16e747,
- 0x216582,
- 0x2343c3,
- 0x247344,
- 0x208f43,
- 0x21eb03,
- 0x220883,
- 0x211003,
- 0x238483,
- 0x21ab43,
- 0x2264c3,
- 0x220683,
- 0x1244d3,
- 0x12f214,
- 0x16e747,
- 0x15686,
- 0x1e1c6,
- 0x52fc7,
- 0x9f049,
- 0x2654a,
- 0x85b0d,
- 0x119a4c,
- 0x29e8a,
- 0x51f05,
- 0x18bec8,
- 0x161186,
- 0x155646,
- 0x200d82,
- 0xde40c,
- 0x1aa9c7,
- 0x24d11,
- 0x22d183,
- 0xd0585,
- 0x1b4284,
- 0x18346,
- 0x19f046,
- 0x8a24a,
- 0xacec3,
- 0x9f005,
- 0xce83,
- 0xc120c,
- 0xe5408,
- 0x1ad408,
- 0xa0288,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x200882,
- 0x216582,
- 0x21eb03,
- 0x2082c2,
- 0x238483,
- 0x2264c3,
- 0x217643,
- 0x35e48f,
- 0x35e84e,
- 0x880c8,
- 0x22d183,
- 0x429c7,
- 0x2343c3,
- 0x21eb03,
- 0x202243,
- 0x238483,
- 0x2264c3,
- 0x220003,
- 0x36b047,
- 0x204642,
- 0x2a9849,
- 0x201002,
- 0x32a10b,
- 0x28c14a,
- 0x2a4209,
- 0x201902,
- 0x250e06,
- 0x248f95,
- 0x32a255,
- 0x24de93,
- 0x32a7d3,
- 0x2056c2,
- 0x214605,
- 0x27ff4c,
- 0x219e0b,
- 0x269005,
- 0x201482,
- 0x2040c2,
- 0x377506,
- 0x204802,
- 0x24eb06,
- 0x332ecd,
- 0x36288c,
- 0x30a784,
- 0x2009c2,
- 0x219f02,
- 0x22c108,
- 0x202d42,
- 0x29d5c6,
- 0x3345c4,
- 0x249155,
- 0x24e013,
- 0x20a583,
- 0x34868a,
- 0x30e547,
- 0x2e6089,
- 0x20f507,
- 0x24f882,
- 0x200002,
- 0x200006,
- 0x202f42,
- 0x880c8,
- 0x211302,
- 0x211d42,
- 0x273cc7,
- 0x3a8ac7,
- 0x21ed05,
- 0x215802,
- 0x220647,
- 0x220808,
- 0x279a82,
- 0x293f02,
- 0x22f802,
- 0x202ec2,
- 0x239c48,
- 0x21abc3,
- 0x267848,
- 0x2cf4cd,
- 0x215743,
- 0x369908,
- 0x234a4f,
- 0x234e0e,
- 0x223f8a,
- 0x36a611,
- 0x36aa90,
- 0x2b348d,
- 0x2b37cc,
- 0x3b2447,
- 0x348807,
- 0x355409,
- 0x23c302,
- 0x2004c2,
- 0x254c8c,
- 0x254f8b,
- 0x2008c2,
- 0x2dca86,
- 0x206c02,
- 0x2131c2,
- 0x21dec2,
- 0x216582,
- 0x392904,
- 0x23b147,
- 0x200bc2,
- 0x23f1c7,
- 0x240447,
- 0x214ec2,
- 0x230542,
- 0x242885,
- 0x200682,
- 0x26380e,
- 0x27620d,
- 0x2343c3,
- 0x28268e,
- 0x356b8d,
- 0x2de803,
- 0x2058c2,
- 0x27cac4,
- 0x2446c2,
- 0x20ddc2,
- 0x346905,
- 0x34f587,
- 0x372642,
- 0x206ac2,
- 0x246cc7,
- 0x24c608,
- 0x23aa82,
- 0x2b5506,
- 0x254b0c,
- 0x254e4b,
- 0x221842,
- 0x25bccf,
- 0x25c090,
- 0x25c48f,
- 0x25c855,
- 0x25cd94,
- 0x25d28e,
- 0x25d60e,
- 0x25d98f,
- 0x25dd4e,
- 0x25e0d4,
- 0x25e5d3,
- 0x25ea8d,
- 0x271749,
- 0x286d43,
- 0x2007c2,
- 0x20a805,
- 0x208f46,
- 0x201f82,
- 0x26bdc7,
- 0x21eb03,
- 0x20b2c2,
- 0x2c7448,
- 0x36a851,
- 0x36ac90,
- 0x200942,
- 0x22a647,
- 0x2074c2,
- 0x3328c7,
- 0x209682,
- 0x305dc9,
- 0x3774c7,
- 0x3615c8,
- 0x228246,
- 0x2daf83,
- 0x34ad45,
- 0x234642,
- 0x200402,
- 0x200405,
- 0x399485,
- 0x202102,
- 0x24a503,
- 0x2cfc47,
- 0x208a07,
- 0x203f42,
- 0x2fec04,
- 0x214803,
- 0x2be489,
- 0x2db488,
- 0x20b402,
- 0x2061c2,
- 0x22f2c7,
- 0x24bcc5,
- 0x2a5f88,
- 0x3b0e87,
- 0x2047c3,
- 0x27df86,
- 0x2b330d,
- 0x2b368c,
- 0x276a06,
- 0x203142,
- 0x29a1c2,
- 0x206742,
- 0x2348cf,
- 0x234cce,
- 0x2d3847,
- 0x200342,
- 0x39e205,
- 0x39e206,
- 0x250042,
- 0x203042,
- 0x217c86,
- 0x2a9a83,
- 0x332806,
- 0x2bfb05,
- 0x2bfb0d,
- 0x2c00d5,
- 0x2c0c0c,
- 0x2c150d,
- 0x2c18d2,
- 0x20e842,
- 0x200e02,
- 0x200ac2,
- 0x2d6646,
- 0x2ac506,
- 0x2025c2,
- 0x208fc6,
- 0x203382,
- 0x2249c5,
- 0x204c02,
- 0x263949,
- 0x34700c,
- 0x34734b,
- 0x201502,
- 0x24ca48,
- 0x2042c2,
- 0x207a82,
- 0x219bc6,
- 0x36c005,
- 0x3a1687,
- 0x24a385,
- 0x28df05,
- 0x242a42,
- 0x202042,
- 0x206d42,
- 0x26e847,
- 0x2d094d,
- 0x2d0ccc,
- 0x2229c7,
- 0x2b5482,
- 0x226282,
- 0x36f088,
- 0x22ce88,
- 0x2d5b48,
- 0x2dfd44,
- 0x2ef207,
- 0x2dbf83,
- 0x280b82,
- 0x2014c2,
- 0x2e0489,
- 0x3a3247,
- 0x207442,
- 0x26d485,
- 0x241542,
- 0x22ff42,
- 0x297fc3,
- 0x297fc6,
- 0x2e6a82,
- 0x2e8642,
- 0x200c02,
- 0x30f006,
- 0x29dc87,
- 0x200b82,
- 0x208782,
- 0x26768f,
- 0x2824cd,
- 0x284d8e,
- 0x356a0c,
- 0x20d342,
- 0x207482,
- 0x228085,
- 0x3b3086,
- 0x212182,
- 0x208b02,
- 0x204b42,
- 0x282844,
- 0x2cf344,
- 0x338a86,
- 0x201bc2,
- 0x275247,
- 0x214343,
- 0x21cb88,
- 0x224348,
- 0x239247,
- 0x33fbc6,
- 0x2015c2,
- 0x239bc3,
- 0x35bf87,
- 0x266c86,
- 0x2d6585,
- 0x2d8e88,
- 0x208d82,
- 0x3211c7,
- 0x20dfc2,
- 0x35b202,
- 0x20ad82,
- 0x2bf8c9,
- 0x200242,
- 0x200a02,
- 0x222c43,
- 0x321887,
- 0x201a02,
- 0x34718c,
- 0x34748b,
- 0x276a86,
- 0x20cdc5,
- 0x224982,
- 0x206ec2,
- 0x2b3006,
- 0x229083,
- 0x340d07,
- 0x246002,
- 0x200cc2,
- 0x248e15,
- 0x32a415,
- 0x24dd53,
- 0x32a953,
- 0x264dc7,
- 0x288288,
- 0x288290,
- 0x289b0f,
- 0x28bf13,
- 0x2a3fd2,
- 0x2a9410,
- 0x2e79cf,
- 0x2f14d2,
- 0x351551,
- 0x2afb13,
- 0x2bf692,
- 0x2c8d0f,
- 0x2cb38e,
- 0x2cc152,
- 0x2cd191,
- 0x2cdd8f,
- 0x2ced4e,
- 0x2d4c11,
- 0x2e0090,
- 0x2e4452,
- 0x2e55d1,
- 0x2e6b06,
- 0x2e89c7,
- 0x2f77c7,
- 0x201582,
- 0x27a485,
- 0x2f2447,
- 0x221e42,
- 0x203c42,
- 0x22c605,
- 0x221303,
- 0x26e246,
- 0x2d0b0d,
- 0x2d0e4c,
- 0x203dc2,
- 0x27fdcb,
- 0x219cca,
- 0x31b28a,
- 0x2b22c9,
- 0x2dd20b,
- 0x3b0fcd,
- 0x2f2b4c,
- 0x2144ca,
- 0x221e8c,
- 0x24d10b,
- 0x268e4c,
- 0x26c10b,
- 0x346f83,
- 0x287e86,
- 0x326e82,
- 0x2e9202,
- 0x208943,
- 0x205882,
- 0x205883,
- 0x238406,
- 0x25ca07,
- 0x271406,
- 0x2ea8c8,
- 0x22cb88,
- 0x2f0206,
- 0x22d742,
- 0x2f508d,
- 0x2f53cc,
- 0x22d747,
- 0x2f8787,
- 0x2156c2,
- 0x21bf02,
- 0x21eb82,
- 0x24b982,
- 0x216582,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x217643,
- 0x200882,
- 0x200702,
- 0x2368c545,
- 0x23a03985,
- 0x23f0b146,
- 0x880c8,
- 0x242b0185,
- 0x216582,
- 0x201a42,
- 0x24755c45,
- 0x24a786c5,
- 0x24e79547,
- 0x2527b109,
- 0x2564b084,
- 0x201f82,
- 0x20b2c2,
- 0x25a43785,
- 0x25e8bb89,
- 0x26311f08,
- 0x266abe45,
- 0x26b0bc07,
- 0x26e18948,
- 0x272d8045,
- 0x27604606,
- 0x27b47b09,
- 0x27f25348,
- 0x282b8888,
- 0x2869310a,
- 0x28a48444,
- 0x28ec9405,
- 0x292b5dc8,
- 0x29616c85,
- 0x21ac42,
- 0x29a00343,
- 0x29ea2f86,
- 0x2a233a88,
- 0x2a69e2c6,
- 0x2aa9ddc8,
- 0x2ae09c86,
- 0x2b2f6284,
- 0x205902,
- 0x2b73b7c7,
- 0x2baa8444,
- 0x2be746c7,
- 0x2c333a07,
- 0x201502,
- 0x2c696ec5,
- 0x2ca31504,
- 0x2cf7fd07,
- 0x2d211e47,
- 0x2d67c906,
- 0x2da29585,
- 0x2de91bc7,
- 0x2e2d1a48,
- 0x2e60ab87,
- 0x2eb12b09,
- 0x2eec0f45,
- 0x2f32bb87,
- 0x2f68b886,
- 0x2fa51008,
- 0x225a4d,
- 0x242bc9,
- 0x2e4ccb,
- 0x3726cb,
- 0x26f30b,
- 0x2a564b,
- 0x2ffd0b,
- 0x2fffcb,
- 0x300849,
- 0x30208b,
- 0x30234b,
- 0x30290b,
- 0x30340a,
- 0x30394a,
- 0x303f4c,
- 0x308e0b,
- 0x30964a,
- 0x31c18a,
- 0x32734e,
- 0x3282ce,
- 0x32864a,
- 0x32b14a,
- 0x32cb4b,
- 0x32ce0b,
- 0x32dd0b,
- 0x34c50b,
- 0x34cb0a,
- 0x34d7cb,
- 0x34da8a,
- 0x34dd0a,
- 0x34df8a,
- 0x373f4b,
- 0x37c18b,
- 0x37dace,
- 0x37de4b,
- 0x3849cb,
- 0x38598b,
- 0x3893ca,
- 0x389649,
- 0x38988a,
- 0x38af0a,
- 0x39c60b,
- 0x39e64b,
- 0x39f24a,
- 0x3a02cb,
- 0x3a4f0b,
- 0x3b26cb,
- 0x2fe7ab48,
- 0x30285289,
- 0x30626809,
- 0x30acfe48,
- 0x338805,
- 0x203443,
- 0x204204,
- 0x327145,
- 0x24adc6,
- 0x259145,
- 0x284404,
- 0x26bcc8,
- 0x3739c5,
- 0x28d904,
- 0x3b3f87,
- 0x2996ca,
- 0x3605ca,
- 0x336947,
- 0x203347,
- 0x2f10c7,
- 0x362607,
- 0x2b9d05,
- 0x306d46,
- 0x2fb0c7,
- 0x3a2784,
- 0x376b06,
- 0x376a06,
- 0x3a3745,
- 0x280584,
- 0x2d3d46,
- 0x298387,
- 0x225d46,
- 0x2c7ec7,
- 0x28d6c3,
- 0x268446,
- 0x2328c5,
- 0x279647,
- 0x266fca,
- 0x263204,
- 0x2180c8,
- 0x2fb649,
- 0x2ce487,
- 0x3aed06,
- 0x29f988,
- 0x306409,
- 0x2e6244,
- 0x35d804,
- 0x2f9685,
- 0x2fadc8,
- 0x2bd1c7,
- 0x2aa009,
- 0x327c48,
- 0x2fc706,
- 0x379bc6,
- 0x2943c8,
- 0x375fc6,
- 0x203985,
- 0x27c9c6,
- 0x274bc8,
- 0x2347c6,
- 0x25708b,
- 0x233406,
- 0x295d4d,
- 0x358a45,
- 0x2a8306,
- 0x218a05,
- 0x297c89,
- 0x2f1d07,
- 0x382048,
- 0x2db2c6,
- 0x294ac9,
- 0x3a6246,
- 0x266f45,
- 0x29c1c6,
- 0x2a8e86,
- 0x2c2909,
- 0x306206,
- 0x279247,
- 0x33cf05,
- 0x205703,
- 0x257205,
- 0x296007,
- 0x323446,
- 0x358949,
- 0x30b146,
- 0x27cc06,
- 0x365389,
- 0x27c3c9,
- 0x29ca07,
- 0x369fc8,
- 0x39ee89,
- 0x27a108,
- 0x31f686,
- 0x2cc9c5,
- 0x30a44a,
- 0x27cc86,
- 0x330bc6,
- 0x2a3145,
- 0x24d588,
- 0x206847,
- 0x2318ca,
- 0x247786,
- 0x243005,
- 0x2a0e06,
- 0x265b47,
- 0x3aebc7,
- 0x2bacc5,
- 0x267105,
- 0x2acf46,
- 0x383446,
- 0x2ad886,
- 0x328cc4,
- 0x27b489,
- 0x286146,
- 0x2a5a0a,
- 0x214048,
- 0x32b888,
- 0x3605ca,
- 0x202145,
- 0x2982c5,
- 0x323c48,
- 0x2c9188,
- 0x320d47,
- 0x265146,
- 0x315308,
- 0x202b87,
- 0x279788,
- 0x35f146,
- 0x27dd08,
- 0x2b3b86,
- 0x2370c7,
- 0x295506,
- 0x2d3d46,
- 0x23628a,
- 0x392986,
- 0x2cc9c9,
- 0x2b0486,
- 0x2d238a,
- 0x2f6289,
- 0x2f0306,
- 0x37c504,
- 0x20a8cd,
- 0x285507,
- 0x317906,
- 0x2b8745,
- 0x3a62c5,
- 0x305546,
- 0x26d9c9,
- 0x3ad5c7,
- 0x275cc6,
- 0x2cd946,
- 0x284489,
- 0x212a44,
- 0x228dc4,
- 0x204308,
- 0x2387c6,
- 0x26d548,
- 0x2d6b88,
- 0x203ac7,
- 0x200849,
- 0x2ada87,
- 0x2b004a,
- 0x22decf,
- 0x2377ca,
- 0x227e85,
- 0x274e05,
- 0x216005,
- 0x334507,
- 0x277283,
- 0x36a1c8,
- 0x334d86,
- 0x334e89,
- 0x2c6a06,
- 0x2c2747,
- 0x294889,
- 0x381f48,
- 0x2a3207,
- 0x2fee83,
- 0x338885,
- 0x3b2005,
- 0x328b0b,
- 0x216d44,
- 0x2c5044,
- 0x273486,
- 0x2ff447,
- 0x39794a,
- 0x245807,
- 0x3b0407,
- 0x2786c5,
- 0x205285,
- 0x2196c9,
- 0x2d3d46,
- 0x24568d,
- 0x358045,
- 0x2a2d43,
- 0x205d03,
- 0x349205,
- 0x350005,
- 0x29f988,
- 0x276707,
- 0x228b46,
- 0x29a646,
- 0x22d905,
- 0x234687,
- 0x2035c7,
- 0x36ec47,
- 0x2c948a,
- 0x268508,
- 0x328cc4,
- 0x2ade47,
- 0x277cc7,
- 0x32d086,
- 0x264607,
- 0x2b2a08,
- 0x226708,
- 0x26b786,
- 0x367f08,
- 0x2c32c4,
- 0x2fb0c6,
- 0x3a9146,
- 0x2c0a86,
- 0x349c06,
- 0x29abc4,
- 0x3626c6,
- 0x2b76c6,
- 0x293606,
- 0x2293c6,
- 0x205bc6,
- 0x2b2846,
- 0x228a48,
- 0x39de08,
- 0x2c9cc8,
- 0x259348,
- 0x323bc6,
- 0x210785,
- 0x275386,
- 0x2abec5,
- 0x388807,
- 0x28ae45,
- 0x213d43,
- 0x364605,
- 0x22fd84,
- 0x205d05,
- 0x210143,
- 0x39a7c7,
- 0x31c448,
- 0x2c7f86,
- 0x2c514d,
- 0x274dc6,
- 0x292b85,
- 0x2afd43,
- 0x2b5789,
- 0x212bc6,
- 0x231246,
- 0x29c2c4,
- 0x237747,
- 0x235b06,
- 0x243245,
+ 0x203e43,
+ 0x225b04,
+ 0x37f1c3,
+ 0x318cc3,
+ 0x21c403,
+ 0x360383,
+ 0xaad0783,
+ 0x23a184,
+ 0x21c3c3,
+ 0x22f143,
+ 0x231b83,
+ 0x2318c3,
+ 0x23a943,
+ 0x2a85c3,
+ 0x318c43,
+ 0x233ec3,
+ 0x201e43,
+ 0x253f84,
+ 0x2abc02,
+ 0x258683,
+ 0x25eb43,
+ 0x27bfc3,
+ 0x262883,
+ 0x201dc3,
+ 0x332ec3,
+ 0x208803,
+ 0x209e43,
+ 0x204143,
+ 0x210203,
+ 0x2ff083,
+ 0xae30043,
+ 0x2b1083,
+ 0x2113c3,
+ 0x22d603,
+ 0x20fbc3,
+ 0x226302,
+ 0x201683,
+ 0x204ac3,
+ 0x160abc3,
+ 0x27d643,
+ 0x20ff03,
0x216ec3,
- 0x378a44,
- 0x277e86,
- 0x2b15c4,
- 0x30d748,
- 0x324a89,
- 0x2f2209,
- 0x29c0ca,
- 0x23f88d,
- 0x29da47,
- 0x330a46,
- 0x20ec44,
- 0x27b109,
- 0x283588,
- 0x285106,
- 0x263bc6,
- 0x264607,
- 0x2c3c06,
- 0x21b606,
- 0x38c346,
- 0x333a8a,
- 0x218948,
- 0x22bc45,
- 0x27d649,
- 0x279c8a,
- 0x2c54c8,
- 0x2979c8,
- 0x292108,
- 0x2a864c,
- 0x2dc7c5,
- 0x29a8c8,
- 0x39e106,
- 0x2d1d06,
- 0x37af07,
- 0x245705,
- 0x27cb45,
- 0x2f20c9,
- 0x212747,
- 0x2b2ec5,
- 0x21e9c7,
- 0x205d03,
- 0x2bd705,
- 0x366548,
- 0x2d1687,
- 0x297889,
- 0x2d7985,
- 0x2f4504,
- 0x2a1788,
- 0x2cf787,
- 0x2a33c8,
- 0x2740c8,
- 0x32c005,
- 0x334c86,
- 0x257706,
- 0x2e7649,
- 0x315b87,
- 0x2ac986,
- 0x30e947,
- 0x217d43,
- 0x24b084,
- 0x298c45,
- 0x2ae0c4,
- 0x236844,
- 0x27adc7,
- 0x3affc7,
- 0x239a04,
- 0x2976d0,
- 0x3056c7,
- 0x205285,
- 0x22ae8c,
- 0x2018c4,
- 0x2bee08,
- 0x236fc9,
- 0x2ffb86,
- 0x2a03c8,
- 0x25a7c4,
- 0x25a7c8,
- 0x231ec6,
- 0x229248,
- 0x298946,
- 0x2c828b,
- 0x205705,
- 0x2c3248,
- 0x21a3c4,
- 0x27c04a,
- 0x297889,
- 0x2e0d06,
- 0x2160c8,
- 0x258645,
- 0x301944,
- 0x2bed06,
- 0x36eb08,
- 0x27ab48,
- 0x345d06,
- 0x31d6c4,
- 0x30a3c6,
- 0x2adb07,
- 0x2745c7,
- 0x26460f,
- 0x2074c7,
- 0x2f03c7,
- 0x2d1bc5,
- 0x2ed845,
- 0x29c6c9,
- 0x28ae86,
- 0x278fc5,
- 0x27c6c7,
- 0x37b188,
- 0x293705,
- 0x295506,
- 0x213e88,
- 0x29e2ca,
- 0x282988,
- 0x287947,
- 0x22e306,
- 0x27d606,
- 0x21f283,
- 0x2042c3,
- 0x279e49,
- 0x39ed09,
- 0x2bec06,
- 0x2d7985,
- 0x2a84c8,
- 0x2160c8,
- 0x387808,
- 0x38c3cb,
- 0x2c5387,
- 0x2fd189,
- 0x264888,
- 0x33c7c4,
- 0x2c2a08,
- 0x2895c9,
- 0x2acc85,
- 0x334407,
- 0x24b105,
- 0x27aa48,
- 0x28c3cb,
- 0x291910,
- 0x2a8105,
- 0x21a30c,
- 0x228d05,
- 0x2032c3,
- 0x2a2c06,
- 0x2b6e04,
- 0x231606,
- 0x298387,
- 0x213f04,
- 0x2415c8,
- 0x36a08d,
- 0x2d9685,
- 0x23fd84,
- 0x219904,
- 0x27d0c9,
- 0x297408,
- 0x30afc7,
- 0x231f48,
- 0x27b548,
- 0x275fc5,
- 0x331547,
- 0x275f47,
- 0x20af07,
- 0x267109,
- 0x235989,
- 0x23f346,
- 0x2b39c6,
- 0x264846,
- 0x25b8c5,
- 0x3af344,
- 0x204506,
- 0x204a46,
- 0x276008,
- 0x26580b,
- 0x2630c7,
- 0x20ec44,
- 0x317d86,
- 0x203107,
- 0x348b45,
- 0x318f05,
- 0x201e84,
- 0x235906,
- 0x204588,
- 0x27b109,
- 0x257c86,
- 0x282f08,
- 0x243306,
- 0x33ce48,
- 0x2d8a8c,
- 0x275e86,
- 0x29284d,
- 0x292ccb,
- 0x279305,
- 0x203707,
- 0x306306,
- 0x3aea88,
- 0x23f3c9,
- 0x2e7288,
- 0x205285,
- 0x2ecc07,
- 0x27a208,
- 0x384789,
- 0x2a05c6,
- 0x33bfca,
- 0x3ae808,
- 0x2e70cb,
- 0x2c608c,
- 0x25a8c8,
- 0x277506,
- 0x334708,
- 0x29df47,
- 0x2cfa09,
- 0x28ba8d,
- 0x2961c6,
- 0x3017c8,
- 0x39dcc9,
- 0x2b6188,
- 0x27de08,
- 0x2b7f8c,
- 0x2b9347,
- 0x2b9f07,
- 0x266f45,
- 0x3a4d47,
- 0x37b048,
- 0x2bed86,
- 0x257b0c,
- 0x2e4988,
- 0x2c44c8,
- 0x24b5c6,
- 0x3b1d87,
- 0x23f544,
- 0x259348,
- 0x356e4c,
- 0x3a1a0c,
- 0x227f05,
- 0x393d47,
- 0x31d646,
- 0x3b1d06,
- 0x297e48,
- 0x38c284,
- 0x225d4b,
- 0x22844b,
- 0x22e306,
- 0x369f07,
- 0x307d45,
- 0x26ca85,
- 0x225e86,
- 0x258605,
- 0x216d05,
- 0x3accc7,
- 0x273a89,
- 0x233504,
- 0x2722c5,
- 0x2d7645,
- 0x254448,
- 0x22b4c5,
- 0x2a7809,
- 0x2af2c7,
- 0x2af2cb,
- 0x2d1046,
- 0x228789,
- 0x2804c8,
- 0x271c05,
- 0x20b008,
- 0x2359c8,
- 0x207ec7,
- 0x27d4c7,
- 0x27ae49,
- 0x229187,
- 0x32d3c9,
- 0x2aaf4c,
- 0x312a08,
- 0x2b9b49,
- 0x2be7c7,
- 0x27b609,
- 0x3b0107,
- 0x2c6188,
- 0x3afac5,
- 0x2fb046,
- 0x2b8788,
- 0x2f8b88,
- 0x279b49,
- 0x216d47,
- 0x26cb45,
- 0x20e3c9,
- 0x2c4086,
- 0x28b884,
- 0x2e6f46,
- 0x233908,
- 0x2426c7,
- 0x265a08,
- 0x367fc9,
- 0x261a47,
- 0x299886,
- 0x2037c4,
- 0x364689,
- 0x3313c8,
- 0x24b487,
- 0x306e46,
- 0x3b20c6,
- 0x330b44,
- 0x27f886,
- 0x205c83,
- 0x308149,
- 0x2056c6,
- 0x2a61c5,
- 0x29a646,
- 0x2a3505,
- 0x27a688,
- 0x25a607,
- 0x362446,
- 0x355c86,
- 0x32b888,
- 0x29c847,
- 0x296205,
- 0x29ab48,
- 0x39ea48,
- 0x3ae808,
- 0x228bc5,
- 0x2fb0c6,
- 0x2f1fc9,
- 0x257584,
- 0x3760cb,
- 0x21b30b,
- 0x22bb49,
- 0x205d03,
- 0x256385,
- 0x205986,
- 0x229908,
- 0x22de44,
- 0x2c7f86,
- 0x2c95c9,
- 0x2c5b05,
- 0x3acc06,
- 0x2cf786,
- 0x2160c4,
- 0x2a1b4a,
- 0x2a6108,
- 0x2f8b86,
- 0x368a05,
- 0x204887,
- 0x301547,
- 0x334c84,
- 0x21b547,
- 0x2b0044,
- 0x2c0a06,
- 0x202e03,
- 0x267105,
- 0x373445,
- 0x207708,
- 0x2ae005,
- 0x275bc9,
- 0x259187,
- 0x25918b,
- 0x2a2d8c,
- 0x2a3a0a,
- 0x30bc07,
- 0x200a83,
- 0x2d3948,
- 0x228d85,
- 0x293785,
- 0x338944,
- 0x2c6086,
- 0x236fc6,
- 0x27f8c7,
- 0x3656cb,
- 0x29abc4,
- 0x3821c4,
- 0x26b904,
- 0x2c25c6,
- 0x213f04,
- 0x2faec8,
- 0x338745,
- 0x23fec5,
- 0x387747,
- 0x203809,
- 0x350005,
- 0x375a4a,
- 0x37b2c9,
- 0x290f8a,
- 0x333bc9,
- 0x353144,
- 0x2cda05,
- 0x2c3d08,
- 0x37fdcb,
- 0x2f9685,
- 0x38d4c6,
- 0x2159c4,
- 0x276106,
- 0x2618c9,
- 0x317e47,
- 0x30b308,
- 0x23fc06,
- 0x2ada87,
- 0x27ab48,
- 0x38f586,
- 0x280204,
- 0x35eb87,
- 0x34e905,
- 0x360c07,
- 0x204604,
- 0x306286,
- 0x218bc8,
- 0x292e88,
- 0x3a4ac7,
- 0x217d88,
- 0x2b3c45,
- 0x205b44,
- 0x3604c8,
- 0x217e84,
- 0x207ec5,
- 0x2ed984,
- 0x202c87,
- 0x286207,
- 0x27b748,
- 0x2a3546,
- 0x2adf85,
- 0x2759c8,
- 0x282b88,
- 0x29c009,
- 0x21b606,
- 0x231948,
- 0x27beca,
- 0x348bc8,
- 0x2d8045,
- 0x275586,
- 0x26d888,
- 0x2eccca,
- 0x341107,
- 0x283985,
- 0x28ef48,
- 0x2b1184,
- 0x24d606,
- 0x2ba688,
- 0x205bc6,
- 0x380dc8,
- 0x2573c7,
- 0x3b3e86,
- 0x37c504,
- 0x29ce07,
- 0x2fac04,
- 0x261887,
- 0x23108d,
- 0x22bbc5,
- 0x2d148b,
- 0x298a46,
- 0x24cb48,
- 0x241584,
- 0x272086,
- 0x277e86,
- 0x334a47,
- 0x29250d,
- 0x25fd07,
- 0x300248,
- 0x29fb05,
- 0x284008,
- 0x2bd146,
- 0x2b3cc8,
- 0x20e886,
- 0x367707,
- 0x368189,
- 0x33f9c7,
- 0x2853c8,
- 0x26f705,
- 0x21ed88,
- 0x3b1c45,
- 0x23b2c5,
- 0x333e45,
- 0x226743,
- 0x27ca44,
- 0x27d645,
- 0x347b09,
- 0x31b646,
- 0x2b2b08,
- 0x2ecec5,
- 0x312447,
- 0x249dca,
- 0x3acb49,
- 0x2a8d8a,
- 0x2c9d48,
- 0x21e80c,
- 0x27c74d,
- 0x2f86c3,
- 0x380cc8,
- 0x378a05,
- 0x29e086,
- 0x381dc6,
- 0x2e3985,
- 0x30ea49,
- 0x310045,
- 0x2759c8,
- 0x279146,
- 0x33f4c6,
- 0x2a1649,
- 0x38ed87,
- 0x28c686,
- 0x249d48,
- 0x2c0988,
- 0x2d0047,
- 0x2293ce,
- 0x2bd385,
- 0x384685,
- 0x205ac8,
- 0x322d07,
- 0x214782,
- 0x2b7b04,
- 0x23150a,
- 0x24b548,
- 0x203206,
- 0x2949c8,
- 0x257706,
- 0x335988,
- 0x2ac988,
- 0x23b284,
- 0x328945,
- 0x683c04,
- 0x683c04,
- 0x683c04,
- 0x203983,
- 0x3b1f46,
- 0x275e86,
- 0x29924c,
- 0x205b03,
- 0x279c86,
- 0x213f84,
- 0x212b48,
- 0x2c9405,
- 0x231606,
- 0x2b5ec8,
- 0x2cb0c6,
- 0x3623c6,
- 0x29f788,
- 0x298cc7,
- 0x228f49,
- 0x2e96ca,
- 0x20abc4,
- 0x28ae45,
- 0x2a9fc5,
- 0x2128c6,
- 0x29da86,
- 0x299c86,
- 0x2ec386,
- 0x229084,
- 0x22908b,
- 0x233904,
- 0x204905,
- 0x2ab5c5,
- 0x203b86,
- 0x359288,
- 0x27c607,
- 0x30b0c4,
- 0x259cc3,
- 0x2b0c85,
- 0x2e6e07,
- 0x2a4449,
- 0x27c50b,
- 0x27f8c7,
- 0x207607,
- 0x2b5dc8,
- 0x312587,
- 0x2a4686,
- 0x242e88,
- 0x299e8b,
- 0x327086,
- 0x213a89,
- 0x29a005,
- 0x2fee83,
- 0x3acc06,
- 0x2572c8,
- 0x20e943,
- 0x2e6f03,
- 0x27ab46,
- 0x257706,
- 0x38ac8a,
- 0x277545,
- 0x277ccb,
- 0x29a58b,
- 0x240a03,
- 0x20f943,
- 0x2affc4,
- 0x367b47,
- 0x257344,
- 0x2039c4,
- 0x39df84,
- 0x348ec8,
- 0x368948,
- 0x30e389,
- 0x2c0fc8,
- 0x3065c7,
- 0x2293c6,
- 0x2b274f,
- 0x2bd4c6,
- 0x2c9384,
- 0x36878a,
- 0x2e6d07,
- 0x3a37c6,
- 0x28b8c9,
- 0x30e305,
- 0x207845,
- 0x30e446,
- 0x21eec3,
- 0x2b11c9,
- 0x218ac6,
- 0x367d89,
- 0x397946,
- 0x267105,
- 0x228305,
- 0x2074c3,
- 0x367c88,
- 0x2df587,
- 0x334d84,
- 0x2129c8,
- 0x2d3ac4,
- 0x2d4646,
- 0x2a2c06,
- 0x23e7c6,
- 0x2c3109,
- 0x293705,
- 0x2d3d46,
- 0x264ac9,
- 0x3ac846,
- 0x2b2846,
- 0x387c46,
- 0x2119c5,
- 0x2ed986,
- 0x367704,
- 0x3afac5,
- 0x2b8784,
- 0x309246,
- 0x358004,
- 0x202c83,
- 0x283645,
- 0x2356c8,
- 0x21e007,
- 0x2b4549,
- 0x283888,
- 0x294191,
- 0x2cf80a,
- 0x22e247,
- 0x2ee8c6,
- 0x213f84,
- 0x2b8888,
- 0x239748,
- 0x29434a,
- 0x2a75cd,
- 0x29c1c6,
- 0x29f886,
- 0x29cec6,
- 0x2bab47,
- 0x300305,
- 0x250ec7,
- 0x212a85,
- 0x2af404,
- 0x2a7006,
- 0x27f707,
- 0x2b0ecd,
- 0x26d7c7,
- 0x26bbc8,
- 0x275cc9,
- 0x275486,
- 0x2a0545,
- 0x210184,
- 0x233a06,
- 0x334b86,
- 0x24b6c6,
- 0x297088,
- 0x211883,
- 0x203b43,
- 0x323585,
- 0x3112c6,
- 0x2ac945,
- 0x23fe08,
- 0x29854a,
- 0x2f5cc4,
- 0x212b48,
- 0x292108,
- 0x2039c7,
- 0x2ecf89,
- 0x2b5ac8,
- 0x27b187,
- 0x264fc6,
- 0x205bca,
- 0x233a88,
- 0x2c5ec9,
- 0x2974c8,
- 0x21adc9,
- 0x2e7387,
- 0x2d9005,
- 0x226986,
- 0x2bec08,
- 0x24ccc8,
- 0x30bec8,
- 0x22e408,
- 0x204905,
- 0x200884,
- 0x2df288,
- 0x20bdc4,
- 0x3339c4,
- 0x267105,
- 0x28d947,
- 0x2035c9,
- 0x334847,
- 0x231985,
- 0x273686,
- 0x346d46,
- 0x213bc4,
- 0x2a1986,
- 0x2addc4,
- 0x283f06,
- 0x3b0586,
- 0x2150c6,
- 0x205285,
- 0x23fcc7,
- 0x200a83,
- 0x3334c9,
- 0x32b688,
- 0x2129c4,
- 0x27b00d,
- 0x292f88,
- 0x2f0848,
- 0x2c5e46,
- 0x368289,
- 0x3acb49,
- 0x2615c5,
- 0x29864a,
- 0x2863ca,
- 0x28b24c,
- 0x28b3c6,
- 0x274446,
- 0x2bd646,
- 0x269509,
- 0x29e2c6,
- 0x250f06,
- 0x310106,
- 0x259348,
- 0x217d86,
- 0x2c344b,
- 0x28dac5,
- 0x23fec5,
- 0x2746c5,
- 0x202606,
- 0x205b83,
- 0x23e746,
- 0x26d747,
- 0x2b8745,
- 0x379c85,
- 0x3a62c5,
- 0x2eb2c6,
- 0x261684,
- 0x311e06,
- 0x28f789,
- 0x20248c,
- 0x2af148,
- 0x28f8c4,
- 0x2ed746,
- 0x298b46,
- 0x2572c8,
- 0x2160c8,
- 0x202389,
- 0x204887,
- 0x238509,
- 0x24c346,
- 0x22f904,
- 0x20edc4,
- 0x27a944,
- 0x27ab48,
- 0x20340a,
- 0x34ff86,
- 0x353d47,
- 0x2c7687,
- 0x228885,
- 0x2a9f84,
- 0x289586,
- 0x300346,
- 0x235bc3,
- 0x32b4c7,
- 0x273fc8,
- 0x26170a,
- 0x30fa88,
- 0x29ddc8,
- 0x358045,
- 0x279405,
- 0x2631c5,
- 0x228c46,
- 0x229d06,
- 0x3aff05,
- 0x308389,
- 0x2a9d8c,
- 0x263287,
- 0x2943c8,
- 0x258945,
- 0x683c04,
- 0x2e3d84,
- 0x2d17c4,
- 0x214b06,
- 0x29b10e,
- 0x2078c7,
- 0x2bad45,
- 0x25750c,
- 0x2c0847,
- 0x27f687,
- 0x2806c9,
- 0x218189,
- 0x283985,
- 0x32b688,
- 0x2f1fc9,
- 0x2f3d05,
- 0x2b8688,
- 0x2c2c06,
- 0x360746,
- 0x2f6284,
- 0x33c1c8,
- 0x248283,
- 0x3630c4,
- 0x2b0d05,
- 0x305547,
- 0x201ec5,
- 0x27bd89,
- 0x38040d,
- 0x2a1f86,
- 0x2e9644,
- 0x2650c8,
- 0x2738ca,
- 0x21fe87,
- 0x23a245,
- 0x203c43,
- 0x29a74e,
- 0x25770c,
- 0x2f99c7,
- 0x29b2c7,
- 0x204643,
- 0x29e305,
- 0x2d17c5,
- 0x294d88,
- 0x291f49,
- 0x36e986,
- 0x257344,
- 0x22e186,
- 0x32ffcb,
- 0x3a694c,
- 0x35dc47,
- 0x2c90c5,
- 0x39e948,
- 0x2cfe05,
- 0x368787,
- 0x33b7c7,
- 0x248285,
- 0x205b83,
- 0x371284,
- 0x2041c5,
- 0x383505,
- 0x383506,
- 0x28e848,
- 0x27f707,
- 0x3820c6,
- 0x200a06,
- 0x333d86,
- 0x265689,
- 0x331647,
- 0x378186,
- 0x3a6ac6,
- 0x248346,
- 0x2a8405,
- 0x399a86,
- 0x398f45,
- 0x22b548,
- 0x29154b,
- 0x289386,
- 0x2c76c4,
- 0x2eca89,
- 0x259184,
- 0x2c2b88,
- 0x2aab47,
- 0x27dd04,
- 0x2b4e88,
- 0x2b9904,
- 0x2a8444,
- 0x3a26c5,
- 0x2d96c6,
- 0x348e07,
- 0x23fd43,
- 0x299945,
- 0x316144,
- 0x3846c6,
- 0x261648,
- 0x323ac5,
- 0x28d3c9,
- 0x20e5c5,
- 0x2d6288,
- 0x34a5c7,
- 0x388948,
- 0x2b4387,
- 0x2f0489,
- 0x362546,
- 0x336186,
- 0x310104,
- 0x264f05,
- 0x2f490c,
- 0x2746c7,
- 0x274cc7,
- 0x2c7548,
- 0x2a1f86,
- 0x26d684,
- 0x31b184,
- 0x27acc9,
- 0x2bd746,
- 0x219747,
- 0x349b84,
- 0x31b746,
- 0x27f285,
- 0x2a3087,
- 0x2c33c6,
- 0x33be89,
- 0x28b087,
- 0x264607,
- 0x2a14c6,
- 0x23f785,
- 0x278e48,
- 0x218948,
- 0x23acc6,
- 0x323b05,
- 0x251a46,
- 0x206583,
- 0x294c09,
- 0x299a0e,
- 0x2b3188,
- 0x2d3bc8,
- 0x23aacb,
- 0x28d606,
- 0x209c84,
- 0x27c344,
- 0x299b0a,
- 0x21a207,
- 0x378245,
- 0x213a89,
- 0x2b7785,
- 0x333a07,
- 0x2ff984,
- 0x324c07,
- 0x2d6a88,
- 0x2ce546,
- 0x34a889,
- 0x2b5bca,
- 0x21a186,
- 0x292ac6,
- 0x2ab545,
- 0x37e405,
- 0x3261c7,
- 0x244208,
- 0x27f1c8,
- 0x23b286,
- 0x228385,
- 0x29d80e,
- 0x328cc4,
- 0x23ac45,
- 0x273009,
- 0x28ac88,
- 0x287886,
- 0x296d0c,
- 0x298150,
- 0x29ad4f,
- 0x29c5c8,
- 0x30bc07,
- 0x205285,
- 0x27d645,
- 0x348c89,
- 0x28f149,
- 0x30a4c6,
- 0x2f9707,
- 0x393cc5,
- 0x320d49,
- 0x32d106,
- 0x29e10d,
- 0x27a809,
- 0x2039c4,
- 0x2b2f08,
- 0x2df349,
- 0x350146,
- 0x273785,
- 0x336186,
- 0x30b1c9,
- 0x38e148,
- 0x210785,
- 0x27bfc4,
- 0x296ecb,
- 0x350005,
- 0x226786,
- 0x27ca86,
- 0x25f1c6,
- 0x38c5cb,
- 0x28d4c9,
- 0x3b0245,
- 0x388707,
- 0x2cf786,
- 0x231346,
- 0x27bc48,
- 0x2d97c9,
- 0x26b98c,
- 0x2e6c08,
- 0x350246,
- 0x345d03,
- 0x334606,
- 0x27d305,
- 0x278008,
- 0x227d86,
- 0x2a32c8,
- 0x245885,
- 0x294505,
- 0x2a1d48,
- 0x301687,
- 0x381d07,
- 0x27f8c7,
- 0x2a03c8,
- 0x30bd48,
- 0x262286,
- 0x309087,
- 0x24af47,
- 0x27d1ca,
- 0x24c243,
- 0x202606,
- 0x203545,
- 0x231504,
- 0x275cc9,
- 0x2f0404,
- 0x21e084,
- 0x2989c4,
- 0x29b2cb,
- 0x2df4c7,
- 0x29da45,
- 0x2913c8,
- 0x273686,
- 0x273688,
- 0x277486,
- 0x287d45,
- 0x288685,
- 0x28a0c6,
- 0x28b548,
- 0x28b808,
- 0x275e86,
- 0x29120f,
- 0x2946d0,
- 0x358a45,
- 0x200a83,
- 0x24a985,
- 0x2fd0c8,
- 0x28f049,
- 0x3ae808,
- 0x34a708,
- 0x330608,
- 0x2df587,
- 0x273349,
- 0x2a34c8,
- 0x2785c4,
- 0x298848,
- 0x254509,
- 0x30aac7,
- 0x296144,
- 0x334908,
- 0x23fa8a,
- 0x2c2446,
- 0x29c1c6,
- 0x21b4c9,
- 0x298387,
- 0x2c2f88,
- 0x332348,
- 0x349a08,
- 0x353885,
- 0x37f385,
- 0x23fec5,
- 0x2d1785,
- 0x371dc7,
- 0x205b85,
- 0x2b8745,
- 0x36fd86,
- 0x3ae747,
- 0x37fd07,
- 0x23fd86,
- 0x2ca285,
- 0x226786,
- 0x25a685,
- 0x2c06c8,
- 0x31b5c4,
- 0x3ac8c6,
- 0x358844,
- 0x301948,
- 0x22534a,
- 0x27670c,
- 0x3658c5,
- 0x2bac06,
- 0x26bb46,
- 0x323946,
- 0x2fd2c4,
- 0x27f545,
- 0x2772c7,
- 0x298409,
- 0x2a4547,
- 0x683c04,
- 0x683c04,
- 0x30af45,
- 0x20f5c4,
- 0x2966ca,
- 0x273506,
- 0x2e7044,
- 0x3a3745,
- 0x2eee85,
- 0x300244,
- 0x27c6c7,
- 0x20e547,
- 0x2c25c8,
- 0x319188,
- 0x210789,
- 0x2994c8,
- 0x29688b,
- 0x2128c4,
- 0x35d745,
- 0x279045,
- 0x27f849,
- 0x2d97c9,
- 0x2ec988,
- 0x327ac8,
- 0x203b84,
- 0x298b85,
- 0x203443,
- 0x212885,
- 0x2d3dc6,
- 0x291d8c,
- 0x2189c6,
- 0x25a6c6,
- 0x287b05,
- 0x2eb348,
- 0x3a6bc6,
- 0x2eea46,
- 0x29c1c6,
- 0x21f40c,
- 0x24b884,
- 0x333eca,
- 0x287a48,
- 0x291bc7,
- 0x316046,
- 0x36ea47,
- 0x2e12c5,
- 0x306e46,
- 0x352386,
- 0x381bc7,
- 0x21e0c4,
- 0x202d85,
- 0x273004,
- 0x2af487,
- 0x273248,
- 0x2742ca,
- 0x27a087,
- 0x23ae47,
- 0x30bb87,
- 0x2cff49,
- 0x291d8a,
- 0x229043,
- 0x21dfc5,
- 0x215103,
- 0x39dfc9,
- 0x24b308,
- 0x2d1bc7,
- 0x3ae909,
- 0x218a46,
- 0x2c6b08,
- 0x39a745,
- 0x282c8a,
- 0x216249,
- 0x26b649,
- 0x37af07,
- 0x239849,
- 0x214fc8,
- 0x2edb06,
- 0x2badc8,
- 0x2119c7,
- 0x229187,
- 0x37b2c7,
- 0x2d1a48,
- 0x2ed5c6,
- 0x23f845,
- 0x2772c7,
- 0x2925c8,
- 0x3587c4,
- 0x2a58c4,
- 0x28c587,
- 0x2acd07,
- 0x2f1e4a,
- 0x2eda86,
- 0x2f984a,
- 0x2b7a47,
- 0x328a87,
- 0x23b384,
- 0x32d484,
- 0x2272c6,
- 0x30ed84,
- 0x30ed8c,
- 0x3a2005,
- 0x215f09,
- 0x2d6404,
- 0x300305,
- 0x273848,
- 0x28b8c5,
- 0x305546,
- 0x207c84,
- 0x29044a,
- 0x2b14c6,
- 0x29228a,
- 0x20ab87,
- 0x265b45,
- 0x21eec5,
- 0x2288ca,
- 0x2a1a85,
- 0x29c0c6,
- 0x20bdc4,
- 0x2b0146,
- 0x326285,
- 0x227e46,
- 0x3a4acc,
- 0x2cba4a,
- 0x264fc4,
- 0x2293c6,
- 0x298387,
- 0x2c8744,
- 0x259348,
- 0x38d3c6,
- 0x29d689,
- 0x2c4b89,
- 0x312b09,
- 0x376286,
- 0x211ac6,
- 0x2baf07,
- 0x3082c8,
- 0x2118c9,
- 0x2df4c7,
- 0x2b3ac6,
- 0x2adb07,
- 0x29cd85,
- 0x328cc4,
- 0x2baac7,
- 0x24b105,
- 0x2846c5,
- 0x2fe0c7,
- 0x248148,
- 0x39e8c6,
- 0x29344d,
- 0x294f8f,
- 0x29a58d,
- 0x21b3c4,
- 0x2357c6,
- 0x2cbe08,
- 0x3100c5,
- 0x27d388,
- 0x207d8a,
- 0x2039c4,
- 0x330206,
- 0x27e487,
- 0x33fe07,
- 0x298d89,
- 0x2bad85,
- 0x300244,
- 0x32888a,
- 0x2b5689,
- 0x239947,
- 0x268206,
- 0x350146,
- 0x298ac6,
- 0x35ec46,
- 0x2cb70f,
- 0x2cbcc9,
- 0x217d86,
- 0x239646,
- 0x29ed49,
- 0x309187,
- 0x2101c3,
- 0x21f586,
- 0x2042c3,
- 0x2e3848,
- 0x2ad947,
- 0x29c7c9,
- 0x2a2a88,
- 0x381e48,
- 0x216e86,
- 0x331209,
- 0x33b905,
- 0x2a33c4,
- 0x2d90c7,
- 0x269585,
- 0x21b3c4,
- 0x29db08,
- 0x21a4c4,
- 0x302b87,
- 0x31c3c6,
- 0x2ad005,
- 0x2974c8,
- 0x35000b,
- 0x32bb87,
- 0x228b46,
- 0x2bd544,
- 0x209c06,
- 0x267105,
- 0x24b105,
- 0x278bc9,
- 0x27c2c9,
- 0x2291c4,
- 0x229205,
- 0x229405,
- 0x282b06,
- 0x32b788,
- 0x2b7186,
- 0x273e0b,
- 0x2ffa0a,
- 0x2fad05,
- 0x288706,
- 0x2f59c5,
- 0x3b2585,
- 0x297b47,
- 0x204308,
- 0x238504,
- 0x2614c6,
- 0x28b886,
- 0x215187,
- 0x2fee44,
- 0x277e86,
- 0x239d85,
- 0x239d89,
- 0x211cc4,
- 0x2aa109,
- 0x275e86,
- 0x2b9408,
- 0x229405,
- 0x2c7785,
- 0x227e46,
- 0x26b889,
- 0x218189,
- 0x25a746,
- 0x28ad88,
- 0x257608,
- 0x2f5984,
- 0x32e244,
- 0x32e248,
- 0x317a08,
- 0x238609,
- 0x2d3d46,
- 0x29c1c6,
- 0x3151cd,
- 0x2c7f86,
- 0x2d8949,
- 0x254785,
- 0x30e446,
- 0x251008,
- 0x311d45,
- 0x24af84,
- 0x267105,
- 0x27b948,
- 0x296489,
- 0x2730c4,
- 0x306286,
- 0x2e74ca,
- 0x2c54c8,
- 0x2f1fc9,
- 0x2d114a,
- 0x3ae886,
- 0x295148,
- 0x368545,
- 0x30f908,
- 0x2b4485,
- 0x218909,
- 0x36c449,
- 0x228e82,
- 0x29a005,
- 0x26c7c6,
- 0x275dc7,
- 0x3aacc5,
- 0x2f8a86,
- 0x2f7e08,
- 0x2a1f86,
- 0x2c3bc9,
- 0x274dc6,
- 0x27bac8,
- 0x2a90c5,
- 0x244046,
- 0x367808,
- 0x27ab48,
- 0x3b0608,
- 0x2fc788,
- 0x399a84,
- 0x22d8c3,
- 0x2c3e04,
- 0x22e106,
- 0x29cdc4,
- 0x2d3b07,
- 0x2ee949,
- 0x2bcd45,
- 0x332346,
- 0x21f586,
- 0x28e68b,
- 0x2fac46,
- 0x318546,
- 0x3ac9c8,
- 0x379bc6,
- 0x265943,
- 0x396f83,
- 0x328cc4,
- 0x231845,
- 0x243147,
- 0x273248,
- 0x27324f,
- 0x2771cb,
- 0x32b588,
- 0x306306,
- 0x32b88e,
- 0x227e43,
- 0x2430c4,
- 0x2fabc5,
- 0x33db46,
- 0x28968b,
- 0x28da06,
- 0x213f09,
- 0x2ad005,
- 0x389d88,
- 0x206408,
- 0x21804c,
- 0x29b306,
- 0x2128c6,
- 0x2d7985,
- 0x285188,
- 0x276705,
- 0x33c7c8,
- 0x29a9ca,
- 0x226809,
- 0x683c04,
- 0x31216582,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x323ac3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x238483,
- 0x2264c3,
- 0x224103,
- 0x224104,
- 0x22d183,
- 0x2374c4,
- 0x2343c3,
- 0x22d684,
- 0x21eb03,
- 0x3aaf87,
- 0x211003,
- 0x2025c3,
- 0x32d208,
- 0x2264c3,
- 0x2aeecb,
- 0x2e1a03,
- 0x241f86,
- 0x203e42,
- 0x38660b,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x2264c3,
- 0x280ec3,
- 0x200cc3,
- 0x200882,
- 0x880c8,
- 0x281045,
- 0x2db108,
- 0x2e7e08,
- 0x216582,
- 0x2a0f05,
- 0x340ec7,
- 0x200202,
- 0x2417c7,
- 0x201f82,
- 0x23a887,
- 0x36b2c9,
- 0x318908,
- 0x349889,
- 0x32ed82,
- 0x266707,
- 0x25a4c4,
- 0x340f87,
- 0x2ff907,
- 0x233e42,
- 0x211003,
- 0x20e842,
- 0x205902,
- 0x201502,
- 0x206d42,
- 0x208782,
- 0x217642,
- 0x2a8c45,
- 0x2e3cc5,
- 0x16582,
- 0x343c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x12003,
- 0x481,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x202243,
- 0x238483,
- 0x2264c3,
- 0x21ca03,
- 0x340f2d86,
- 0x107003,
- 0x79ac5,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x9502,
- 0x880c8,
- 0x441c4,
- 0xd0205,
- 0x200882,
- 0x2ba384,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x35bb03,
- 0x2a9c05,
- 0x202243,
- 0x332683,
- 0x238483,
- 0x201f43,
- 0x2264c3,
- 0x217643,
- 0x224183,
- 0x223ec3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x216582,
- 0x2264c3,
- 0x880c8,
- 0x21eb03,
- 0x880c8,
- 0x316403,
- 0x22d183,
- 0x232144,
- 0x2343c3,
- 0x21eb03,
- 0x2082c2,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x2082c2,
- 0x2348c3,
- 0x238483,
- 0x2264c3,
- 0x2db083,
- 0x217643,
- 0x200882,
- 0x216582,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x241f85,
- 0x1835c6,
- 0x224104,
- 0x203e42,
- 0x880c8,
- 0x200882,
- 0x20448,
- 0x216582,
- 0xee46,
- 0x167404,
- 0x10f2cb,
- 0x173606,
- 0x131ac7,
- 0x2343c3,
- 0x21eb03,
- 0x157f45,
- 0x155dc4,
- 0x202c43,
- 0x4c207,
- 0xcd884,
- 0x238483,
- 0x133184,
- 0x2264c3,
- 0x2e26c4,
- 0x149708,
- 0x155646,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x2025c3,
- 0x2264c3,
- 0x2e1a03,
- 0x203e42,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201603,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x22d684,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x241f86,
- 0x2343c3,
- 0x21eb03,
- 0x179ac3,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x131ac7,
- 0x880c8,
- 0x21eb03,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x3aa2d183,
- 0x2343c3,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x200882,
- 0x216582,
- 0x22d183,
- 0x21eb03,
- 0x238483,
- 0x201502,
- 0x2264c3,
- 0x309dc7,
- 0x20b28b,
- 0x200b03,
- 0x2a06c8,
- 0x308047,
- 0x2017c6,
- 0x2bba05,
- 0x2f7989,
- 0x20bc48,
- 0x20bc49,
- 0x20bc50,
- 0x359fcb,
- 0x2ea589,
- 0x20c783,
- 0x221749,
- 0x232c46,
- 0x232c4c,
- 0x20be48,
- 0x3ac688,
- 0x26e089,
- 0x29bace,
- 0x37cc4b,
- 0x38db4c,
- 0x204803,
- 0x2582cc,
- 0x207209,
- 0x2de107,
- 0x23430c,
- 0x39b60a,
- 0x245dc4,
- 0x3b08cd,
- 0x258188,
- 0x2ded8d,
- 0x266b86,
- 0x28a70b,
- 0x209dc9,
- 0x318407,
- 0x31d846,
- 0x320f49,
- 0x332a4a,
- 0x302708,
- 0x2e1604,
- 0x272187,
- 0x226a87,
- 0x349d84,
- 0x20f244,
- 0x27e989,
- 0x326ec9,
- 0x20a588,
- 0x2114c5,
- 0x392785,
- 0x20d3c6,
- 0x3b0789,
- 0x20800d,
- 0x38d5c8,
- 0x20d2c7,
- 0x2bba88,
- 0x22eec6,
- 0x3a1504,
- 0x37f645,
- 0x2055c6,
- 0x206104,
- 0x207107,
- 0x20914a,
- 0x2139c4,
- 0x21a0c6,
- 0x21aa49,
- 0x21aa4f,
- 0x21b00d,
- 0x21b786,
- 0x220050,
- 0x220446,
- 0x220b87,
- 0x221087,
- 0x22108f,
- 0x222309,
- 0x227746,
- 0x229747,
- 0x229748,
- 0x229b09,
- 0x28d708,
- 0x2d7d07,
- 0x20cd03,
- 0x3852c6,
- 0x204008,
- 0x29bd8a,
- 0x215749,
- 0x20bd83,
- 0x340dc6,
- 0x26130a,
- 0x2ef8c7,
- 0x2ddf4a,
- 0x377e0e,
- 0x222446,
- 0x29a207,
- 0x214d86,
- 0x2072c6,
- 0x37f18b,
- 0x21d18a,
- 0x21768d,
- 0x211b87,
- 0x310288,
- 0x310289,
- 0x31028f,
- 0x3b218c,
- 0x278289,
- 0x33948e,
- 0x3ab08a,
- 0x368dc6,
- 0x37bf86,
- 0x30420c,
- 0x31370c,
- 0x327688,
- 0x33f8c7,
- 0x2131c5,
- 0x29e584,
- 0x24fb0e,
- 0x332cc4,
- 0x238a87,
- 0x26274a,
- 0x382554,
- 0x3839cf,
- 0x221248,
- 0x385188,
- 0x370e8d,
- 0x370e8e,
- 0x38fec9,
- 0x22fe88,
- 0x22fe8f,
- 0x23400c,
- 0x23400f,
- 0x235507,
- 0x237bca,
- 0x21f18b,
- 0x23a0c8,
- 0x23bb47,
- 0x25b08d,
- 0x252506,
- 0x3b0a86,
- 0x23e5c9,
- 0x215d48,
- 0x242188,
- 0x24218e,
- 0x20b387,
- 0x25f8c5,
- 0x243a85,
- 0x202084,
- 0x201a86,
- 0x20a488,
- 0x24f103,
- 0x3b154e,
- 0x25b448,
- 0x29ff0b,
- 0x366947,
- 0x3a31c5,
- 0x239506,
- 0x2aa947,
- 0x39a248,
- 0x27efc9,
- 0x28f685,
- 0x283688,
- 0x213446,
- 0x38b30a,
- 0x24fa09,
- 0x2343c9,
- 0x2343cb,
- 0x364b88,
- 0x349c49,
- 0x211586,
- 0x2b074a,
- 0x35904a,
- 0x237dcc,
- 0x367287,
- 0x2a998a,
- 0x27258b,
- 0x272599,
- 0x2da488,
- 0x242005,
- 0x25b246,
- 0x2ed389,
- 0x318e06,
- 0x21250a,
- 0x2f31c6,
- 0x212104,
- 0x2bf38d,
- 0x3412c7,
- 0x212109,
- 0x244d45,
- 0x244e88,
- 0x245389,
- 0x2455c4,
- 0x245cc7,
- 0x245cc8,
- 0x246347,
- 0x263e88,
- 0x24c807,
- 0x36f505,
- 0x2567cc,
- 0x256e89,
- 0x2d9a8a,
- 0x38ec09,
- 0x221849,
- 0x26b00c,
- 0x259b8b,
- 0x259e48,
- 0x25bac8,
- 0x25ee84,
- 0x27d9c8,
- 0x282309,
- 0x39b6c7,
- 0x21ac86,
- 0x399907,
- 0x325e89,
- 0x366ecb,
- 0x324907,
- 0x3714c7,
- 0x20acc7,
- 0x2ded04,
- 0x2ded05,
- 0x2a81c5,
- 0x337ecb,
- 0x3981c4,
- 0x319fc8,
- 0x25f4ca,
- 0x213507,
- 0x346547,
- 0x288f12,
- 0x283e06,
- 0x231ac6,
- 0x322fce,
- 0x361506,
- 0x28edc8,
- 0x28ff4f,
- 0x2df148,
- 0x284c08,
- 0x35f54a,
- 0x35f551,
- 0x2a274e,
- 0x23be4a,
- 0x23be4c,
- 0x230087,
- 0x230090,
- 0x204ac8,
- 0x2a2945,
- 0x2aad0a,
- 0x20614c,
- 0x2b3e0d,
- 0x2ac3c6,
- 0x2ac3c7,
- 0x2ac3cc,
- 0x2efc8c,
- 0x2da98c,
- 0x28c98b,
- 0x283044,
- 0x21b644,
- 0x3741c9,
- 0x2d72c7,
- 0x2e94c9,
- 0x358e89,
- 0x36bb47,
- 0x39b486,
- 0x39b489,
- 0x3a4a43,
- 0x2a208a,
- 0x29e7c7,
- 0x30b6cb,
- 0x21750a,
- 0x23a9c4,
- 0x353e86,
- 0x27a309,
- 0x30ec04,
- 0x3a20ca,
- 0x228e45,
- 0x2b6485,
- 0x2b648d,
- 0x2b67ce,
- 0x39f105,
- 0x3167c6,
- 0x241b87,
- 0x26748a,
- 0x39a446,
- 0x35a2c4,
- 0x35e2c7,
- 0x210ecb,
- 0x22ef87,
- 0x202104,
- 0x265d46,
- 0x265d4d,
- 0x325b4c,
- 0x32fd86,
- 0x38d7ca,
- 0x225806,
- 0x210288,
- 0x263507,
- 0x23660a,
- 0x23c3c6,
- 0x211a83,
- 0x251186,
- 0x203e88,
- 0x296a8a,
- 0x24aa47,
- 0x24aa48,
- 0x267b84,
- 0x27b2c7,
- 0x2c4108,
- 0x2a3648,
- 0x286808,
- 0x27fa0a,
- 0x2cf145,
- 0x2cf3c7,
- 0x23bc93,
- 0x22d206,
- 0x2b1648,
- 0x224709,
- 0x241688,
- 0x216f0b,
- 0x2b7848,
- 0x211004,
- 0x2a1e46,
- 0x3b3106,
- 0x2d9509,
- 0x385c07,
- 0x2568c8,
- 0x287bc6,
- 0x3a17c4,
- 0x2c2e45,
- 0x2bdc88,
- 0x2be28a,
- 0x2bf008,
- 0x2c3906,
- 0x29718a,
- 0x233588,
- 0x2c8548,
- 0x2c9908,
- 0x2c9f46,
- 0x2cc006,
- 0x31098c,
- 0x2cc5d0,
- 0x286fc5,
- 0x2def48,
- 0x2f8310,
- 0x2def50,
- 0x20bace,
- 0x31060e,
- 0x310614,
- 0x31d9cf,
- 0x31dd86,
- 0x342211,
- 0x349e53,
- 0x34a2c8,
- 0x27fd45,
- 0x358288,
- 0x20f985,
- 0x22b24c,
- 0x24bf89,
- 0x2388c9,
- 0x399687,
- 0x240589,
- 0x215a47,
- 0x2b9d86,
- 0x37f447,
- 0x20c185,
- 0x212043,
- 0x24f2c9,
- 0x217a49,
- 0x379ac3,
- 0x3aabc4,
- 0x34ae4d,
- 0x3558cf,
- 0x2fe005,
- 0x31aa06,
- 0x20cfc7,
- 0x21d5c7,
- 0x285d86,
- 0x285d8b,
- 0x2a3bc5,
- 0x258ac6,
- 0x208487,
- 0x26d109,
- 0x2de6c6,
- 0x364505,
- 0x21c08b,
- 0x22e946,
- 0x246045,
- 0x27e148,
- 0x2d8748,
- 0x2ca44c,
- 0x2ca450,
- 0x2ce7c9,
- 0x2d5587,
- 0x2f6c4b,
- 0x2d5d46,
- 0x2d7bca,
- 0x2d928b,
- 0x2d9d0a,
- 0x2d9f86,
- 0x2daf45,
- 0x307f46,
- 0x274f88,
- 0x39974a,
- 0x370b1c,
- 0x2e1acc,
- 0x2e1dc8,
- 0x241f85,
- 0x2e42c7,
- 0x29b706,
- 0x273c45,
- 0x21dd86,
- 0x285f48,
- 0x2b5907,
- 0x29b9c8,
- 0x29a30a,
- 0x3212cc,
- 0x321549,
- 0x224a87,
- 0x282844,
- 0x244386,
- 0x28478a,
- 0x358f85,
- 0x3637cc,
- 0x364f08,
- 0x360d08,
- 0x3b188c,
- 0x20c8cc,
- 0x20da49,
- 0x20dc87,
- 0x22d34c,
- 0x29d284,
- 0x2e83ca,
- 0x2ad2cc,
- 0x26eb4b,
- 0x39070b,
- 0x3a5946,
- 0x23c107,
- 0x2302c7,
- 0x2302cf,
- 0x2f0c11,
- 0x3b3a12,
- 0x23c90d,
- 0x23c90e,
- 0x23cc4e,
- 0x31db88,
- 0x31db92,
- 0x23ea88,
- 0x201407,
- 0x248bca,
- 0x20d888,
- 0x3614c5,
- 0x371c0a,
- 0x220987,
- 0x2da0c4,
- 0x202b43,
- 0x311185,
- 0x35f7c7,
- 0x39fe87,
- 0x2b400e,
- 0x3366cd,
- 0x338149,
- 0x20dfc5,
- 0x35d103,
- 0x24ea46,
- 0x36fb85,
- 0x271a48,
- 0x2b2449,
- 0x25b285,
- 0x25b28f,
- 0x2dad87,
- 0x2f78c5,
- 0x306b0a,
- 0x27fc06,
- 0x23dd09,
- 0x2ea18c,
- 0x2ebe09,
- 0x378a86,
- 0x25f2cc,
- 0x2ec206,
- 0x2ef3c8,
- 0x2ef5c6,
- 0x2da606,
- 0x280604,
- 0x25a1c3,
- 0x35760a,
- 0x369111,
- 0x38c04a,
- 0x3627c5,
- 0x2a64c7,
- 0x253647,
- 0x2c4204,
- 0x2c420b,
- 0x318788,
- 0x2b3006,
- 0x2c75c5,
- 0x38b604,
- 0x262b49,
- 0x29f2c4,
- 0x21da87,
- 0x322045,
- 0x322047,
- 0x323205,
- 0x2a8d03,
- 0x2012c8,
- 0x27f30a,
- 0x23fd43,
- 0x28108a,
- 0x26db46,
- 0x25b00f,
- 0x356849,
- 0x3b14d0,
- 0x2e22c8,
- 0x2c45c9,
- 0x293287,
- 0x265ccf,
- 0x3aecc4,
- 0x22d704,
- 0x219f46,
- 0x222b86,
- 0x3a5dca,
- 0x3903c6,
- 0x33eb87,
- 0x2f6fc8,
- 0x2f71c7,
- 0x2f7bc7,
- 0x34b94a,
- 0x2fa14b,
- 0x38e7c5,
- 0x3b3648,
- 0x238b83,
- 0x261d0c,
- 0x212f4f,
- 0x2594cd,
- 0x2bb187,
- 0x338289,
- 0x22f4c7,
- 0x25a288,
- 0x38274c,
- 0x2a6c48,
- 0x252cc8,
- 0x30c28e,
- 0x31f814,
- 0x31fd24,
- 0x33f28a,
- 0x35a54b,
- 0x215b04,
- 0x215b09,
- 0x330288,
- 0x244545,
- 0x24ec0a,
- 0x36b187,
- 0x307e44,
- 0x323ac3,
- 0x22d183,
- 0x2374c4,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x202243,
- 0x211003,
- 0x2cc5c6,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x21bd03,
- 0x200882,
- 0x323ac3,
- 0x216582,
- 0x22d183,
- 0x2374c4,
- 0x2343c3,
- 0x21eb03,
- 0x202243,
- 0x2cc5c6,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x211cc3,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x200882,
- 0x2f5003,
- 0x216582,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x202ec2,
- 0x200482,
- 0x216582,
- 0x22d183,
- 0x22b782,
- 0x200a82,
- 0x201604,
- 0x307b04,
- 0x219382,
- 0x212444,
- 0x201502,
- 0x2264c3,
- 0x21bd03,
- 0x3a5946,
- 0x221e42,
- 0x206202,
- 0x224dc2,
- 0x3d224643,
- 0x3d626703,
- 0x53d46,
- 0x53d46,
- 0x224104,
- 0x140a30a,
- 0x16970c,
- 0x165f0c,
- 0x798cd,
- 0xdb7c7,
- 0x1b908,
- 0x22f08,
- 0x1a7eca,
- 0x3e31f345,
- 0x11f349,
- 0x163048,
- 0x1ac10a,
- 0x16348e,
- 0x144148b,
- 0x167404,
- 0x2988,
- 0x16e847,
- 0x178587,
- 0x112089,
- 0x10ec87,
- 0x132d48,
- 0x1a2f89,
- 0x17a845,
- 0x5074e,
- 0xa910d,
- 0x131948,
- 0x3e6d7e86,
- 0x60c47,
- 0x62607,
- 0x67347,
- 0x6c4c7,
- 0xd382,
- 0x141807,
- 0x1d34c,
- 0xeaec7,
- 0x8ddc6,
- 0xa5449,
- 0xa7188,
- 0xf1c2,
- 0xa82,
- 0x13088b,
- 0x15309,
- 0x33c49,
- 0x2b848,
- 0xb09c2,
- 0x1afb89,
- 0xccf89,
- 0xcdbc8,
- 0xce147,
- 0xcf0c9,
- 0xd2905,
- 0xd2d10,
- 0x164d46,
- 0x51f05,
- 0x23b4d,
- 0x10e846,
+ 0x200383,
+ 0x3b37c3,
+ 0x21aa03,
+ 0x241f03,
+ 0x304f43,
+ 0x2f8203,
+ 0x30c845,
+ 0x2202c3,
+ 0x2f8243,
+ 0x35ed83,
+ 0x218c84,
+ 0x265203,
+ 0x311883,
+ 0x2d8fc3,
+ 0x201383,
+ 0x217082,
+ 0x23bd83,
+ 0x308484,
+ 0x22fec4,
+ 0x22a843,
+ 0x15f048,
+ 0x4cc2,
+ 0x1442,
+ 0x2942,
+ 0x5ac2,
+ 0x2302,
+ 0x702,
+ 0x4e242,
+ 0x1c2,
+ 0x8a42,
+ 0xc02,
+ 0xf302,
+ 0xb602,
+ 0x73fc2,
+ 0x4c82,
+ 0x61e82,
+ 0x17902,
+ 0x3cf82,
+ 0x54c2,
+ 0x18b82,
+ 0xfc2,
+ 0x682,
+ 0x1bb82,
+ 0x1f82,
+ 0xc4c2,
+ 0x1702,
+ 0x20c42,
+ 0xa42,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x20d1c2,
+ 0x200383,
+ 0xc2d0783,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x20dc42,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x6c82,
+ 0x2031c2,
+ 0x24ac42,
+ 0x15f048,
+ 0xd1c2,
+ 0x233482,
+ 0x208842,
+ 0x22f942,
+ 0x204182,
+ 0x209282,
+ 0x63c85,
+ 0x204702,
+ 0x201882,
+ 0x211f82,
+ 0x2034c2,
+ 0x217902,
+ 0x384982,
+ 0x201ac2,
+ 0x245742,
+ 0x13ecc7,
+ 0x169a8d,
+ 0xde209,
+ 0x56bcb,
+ 0xe3888,
+ 0x55109,
+ 0x332ec3,
+ 0x15f048,
+ 0x15f048,
+ 0x59b46,
+ 0x204cc2,
+ 0x24ae04,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x2000c2,
+ 0x231b83,
+ 0x208a42,
+ 0x2da904,
+ 0x204303,
+ 0x2513c2,
+ 0x204ac3,
+ 0x200382,
+ 0x200383,
+ 0x2716c6,
+ 0x31c0cf,
+ 0x70d8c3,
+ 0x15f048,
+ 0x20d1c2,
+ 0x2135c3,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x155afcb,
+ 0xde548,
+ 0x14ff507,
+ 0x13ecc7,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x332ec3,
+ 0x204ac3,
+ 0x204cc2,
+ 0x200902,
+ 0x207f42,
+ 0xfad0783,
+ 0x2416c2,
+ 0x231b83,
+ 0x2101c2,
+ 0x22ad02,
+ 0x332ec3,
+ 0x2630c2,
+ 0x255302,
+ 0x2ae4c2,
+ 0x203742,
+ 0x291e02,
+ 0x209902,
+ 0x200b82,
+ 0x274842,
+ 0x258142,
+ 0x251b02,
+ 0x2b36c2,
+ 0x242602,
+ 0x246082,
+ 0x263c42,
+ 0x20fbc3,
+ 0x205f02,
+ 0x204ac3,
+ 0x231302,
+ 0x27de02,
+ 0x200383,
+ 0x251dc2,
+ 0x20c4c2,
+ 0x209f42,
+ 0x200b42,
+ 0x20c842,
+ 0x2e4742,
+ 0x220382,
+ 0x24d082,
+ 0x234f42,
+ 0x310c8a,
+ 0x347d0a,
+ 0x37e80a,
+ 0x3b5dc2,
+ 0x2046c2,
+ 0x204e82,
+ 0xff4f589,
+ 0x10324d0a,
+ 0x15926c7,
+ 0x1410c43,
+ 0x243d0,
+ 0x9402,
+ 0x24fe44,
+ 0x10ad0783,
+ 0x231b83,
+ 0x251304,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204303,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x20abc3,
+ 0x200383,
+ 0x2202c3,
+ 0x24abc3,
+ 0x15f048,
+ 0x14629c4,
+ 0x614c5,
+ 0x5f88a,
+ 0x1168c2,
+ 0x1a03c6,
+ 0x102d11,
+ 0x1134f589,
+ 0x61548,
+ 0x82a08,
+ 0x5e887,
+ 0xf82,
+ 0x19a18a,
+ 0x2ac47,
+ 0x15f048,
+ 0x10b708,
+ 0xbac7,
+ 0x16c1b74b,
+ 0x1082,
+ 0x15de87,
+ 0xdb4a,
+ 0x5e58f,
+ 0xfd4f,
+ 0x1c402,
+ 0xd1c2,
+ 0xa8508,
+ 0x185b0a,
+ 0x1681c8,
+ 0x3b02,
+ 0x5e30f,
+ 0xa3d4b,
+ 0x1672c8,
+ 0x13edc7,
+ 0x15104a,
+ 0x2f64b,
+ 0x11dd09,
+ 0x150f47,
+ 0x100c4c,
+ 0x1b3c47,
+ 0x18d18a,
+ 0x94b88,
+ 0x195a8e,
+ 0x28b8e,
+ 0x2aa8b,
+ 0x2b2cb,
+ 0x2d3cb,
+ 0x2e209,
+ 0x3558b,
+ 0x4a68d,
+ 0xe984b,
+ 0xec8cd,
+ 0xecc4d,
+ 0x18274a,
+ 0x2fd0b,
+ 0x3688b,
+ 0x42305,
+ 0x14243d0,
+ 0x125d8f,
+ 0x1264cf,
+ 0x48dcd,
+ 0x25910,
+ 0x1742,
+ 0x17203988,
+ 0xfb48,
+ 0x176f4745,
+ 0x505cb,
+ 0x117050,
+ 0x57488,
+ 0x2b48a,
+ 0x5f4c9,
+ 0x695c7,
+ 0x69907,
+ 0x69ac7,
+ 0x6c287,
+ 0x6d307,
+ 0x6dd07,
+ 0x6e487,
+ 0x6e8c7,
+ 0x6f487,
+ 0x6f787,
+ 0x6ffc7,
+ 0x70187,
+ 0x70347,
+ 0x70507,
+ 0x70807,
+ 0x70c47,
+ 0x718c7,
+ 0x71d87,
+ 0x729c7,
+ 0x72f07,
+ 0x730c7,
+ 0x73807,
+ 0x73e87,
+ 0x74087,
+ 0x74347,
+ 0x74507,
+ 0x746c7,
+ 0x75047,
+ 0x754c7,
+ 0x75987,
+ 0x76147,
+ 0x76407,
+ 0x76bc7,
+ 0x76d87,
+ 0x77107,
+ 0x77d07,
+ 0x78987,
+ 0x78d87,
+ 0x78f47,
+ 0x79107,
+ 0x79547,
+ 0x7a307,
+ 0x7a607,
+ 0x7a907,
+ 0x7aac7,
+ 0x7ae47,
+ 0x7b387,
+ 0xa9c2,
+ 0x4c94a,
+ 0x16dc87,
+ 0x178d528b,
+ 0x14d5296,
+ 0x19151,
+ 0xf080a,
+ 0xa838a,
+ 0x59b46,
+ 0xd2acb,
+ 0x642,
+ 0x2e891,
+ 0x94609,
+ 0x9a109,
+ 0x74842,
+ 0xa4f4a,
+ 0xaa689,
+ 0xab24f,
+ 0xaca4e,
+ 0xad708,
+ 0x18d82,
+ 0x15da89,
+ 0x18b88e,
+ 0xfd08c,
+ 0xf254f,
+ 0x146ce,
+ 0x23b4c,
+ 0x2ccc9,
+ 0x2db51,
+ 0x465c8,
+ 0x482d2,
+ 0x49fcd,
+ 0x82bcd,
+ 0x19090b,
+ 0x3d2d5,
+ 0x4c809,
+ 0x4ec0a,
+ 0x4f489,
+ 0x5ecd0,
+ 0x72c4b,
+ 0x79f4f,
+ 0x7c48b,
+ 0x8340c,
+ 0x84610,
+ 0x8894a,
+ 0x8dd0d,
+ 0x16618e,
+ 0x1ae00a,
+ 0x8f7cc,
+ 0x93994,
+ 0x94291,
+ 0xa494b,
+ 0xa578f,
+ 0xa7bcd,
+ 0xac3ce,
+ 0xb1acc,
+ 0xb220c,
+ 0xdc90b,
+ 0xdcc0e,
+ 0x122110,
+ 0x11640b,
+ 0x17a64d,
+ 0x1af38f,
+ 0xb798c,
+ 0xb934e,
+ 0xbb311,
+ 0xc3ccc,
+ 0xc5a47,
+ 0x15e58d,
+ 0x12b50c,
+ 0x14be50,
+ 0xd1b4d,
+ 0xd8e47,
+ 0xe2350,
+ 0xfa008,
+ 0xfb08b,
+ 0x150bcf,
+ 0x17de88,
+ 0xf0a0d,
+ 0x181d50,
+ 0x17fb1846,
+ 0xb6003,
+ 0x1b02,
+ 0xd0309,
+ 0x5ac0a,
+ 0x1084c6,
+ 0x180dff49,
+ 0x13203,
+ 0xdab91,
+ 0xdafc9,
0xdc047,
- 0xe26d8,
- 0x108548,
- 0x19104a,
- 0x4114d,
- 0x1402,
- 0x161186,
- 0x89948,
- 0x180248,
- 0x87f89,
- 0x45e88,
- 0x4da0e,
- 0xe8f85,
- 0x539c8,
- 0x3282,
- 0x155646,
- 0x6c2,
- 0xb81,
- 0x3eae2f44,
- 0x3ee90c43,
+ 0x5e40b,
+ 0xe4a90,
+ 0xe4f4c,
+ 0xe5385,
+ 0x126cc8,
+ 0x19dc0a,
+ 0x129607,
+ 0x1002,
+ 0x12464a,
+ 0x25e49,
+ 0x3a20a,
+ 0x8eacf,
+ 0x44f4b,
+ 0x1b280c,
+ 0x1b2ad2,
+ 0xaa085,
+ 0x2124a,
+ 0x186f2fc5,
+ 0x17698c,
+ 0x121203,
+ 0x184982,
+ 0xf86ca,
+ 0x96b88,
+ 0xeca88,
+ 0x14a587,
+ 0xd42,
+ 0x2602,
+ 0x3f390,
+ 0x1702,
+ 0x1aa2cf,
+ 0x177ac6,
+ 0x301ce,
+ 0xe7fcb,
+ 0x1ae208,
+ 0xd6c09,
+ 0x17cd92,
+ 0x7c0d,
+ 0x56608,
+ 0x56a89,
+ 0x5700d,
+ 0x59c89,
+ 0x5a28b,
+ 0x5b088,
+ 0x5f6c8,
+ 0x68bc8,
+ 0x68e49,
+ 0x6904a,
+ 0x6c8cc,
+ 0xe5d0a,
+ 0x104f87,
+ 0x16b2cd,
+ 0xf910b,
+ 0x12fb4c,
+ 0x1a05d0,
+ 0x6902,
+ 0x1968cd,
+ 0x16c2,
+ 0x11fc2,
+ 0x104eca,
+ 0xf070a,
+ 0xf6bcb,
+ 0x36a4c,
+ 0x10b48e,
+ 0x21ccd,
+ 0x1ab488,
+ 0x6c82,
+ 0x1166118e,
+ 0x11f6a18e,
+ 0x1266c00a,
+ 0x12ed0a0e,
+ 0x137156ce,
+ 0x13f2a00c,
+ 0x15926c7,
+ 0x15926c9,
+ 0x1410c43,
+ 0x14731e8c,
+ 0x14f3a009,
+ 0x1409402,
+ 0x610d1,
+ 0x16a0d1,
+ 0x6bf4d,
+ 0xd0951,
+ 0x11b1d1,
+ 0x129f4f,
+ 0x131dcf,
+ 0x139f4c,
+ 0x14a94d,
+ 0x18d555,
+ 0x1ace0c,
+ 0x1b41cc,
+ 0x1b5850,
+ 0x940c,
+ 0x5838c,
+ 0xedc19,
+ 0x1a6719,
+ 0x115419,
+ 0x15c754,
+ 0x17f854,
+ 0x198594,
+ 0x19ae14,
+ 0x1a9054,
+ 0x1577fb09,
+ 0x15d98849,
+ 0x167b4289,
+ 0x11b6b089,
+ 0x9402,
+ 0x1236b089,
+ 0x9402,
+ 0xedc0a,
+ 0x9402,
+ 0x12b6b089,
+ 0x9402,
+ 0xedc0a,
+ 0x9402,
+ 0x1336b089,
+ 0x9402,
+ 0x13b6b089,
+ 0x9402,
+ 0x1436b089,
+ 0x9402,
+ 0xedc0a,
+ 0x9402,
+ 0x14b6b089,
+ 0x9402,
+ 0xedc0a,
+ 0x9402,
+ 0x1536b089,
+ 0x9402,
+ 0x15b6b089,
+ 0x9402,
+ 0x1636b089,
+ 0x9402,
+ 0x16b6b089,
+ 0x9402,
+ 0xedc0a,
+ 0x9402,
+ 0x102d05,
+ 0x19a184,
+ 0x11d644,
+ 0x1a4884,
+ 0xbfc04,
+ 0x2144,
+ 0x5e884,
+ 0x1482283,
+ 0x1420183,
+ 0xffd84,
+ 0x1542b83,
+ 0x1742,
+ 0x21cc3,
+ 0x204cc2,
+ 0x20d1c2,
+ 0x2000c2,
+ 0x2041c2,
+ 0x208a42,
+ 0x200382,
+ 0x202602,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204143,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x204ac3,
+ 0x200383,
+ 0x3b943,
+ 0x332ec3,
+ 0x204cc2,
+ 0x368883,
+ 0x1a2d0783,
+ 0x20ef47,
+ 0x332ec3,
+ 0x205d83,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x25084a,
+ 0x2716c5,
+ 0x21aa03,
+ 0x205bc2,
+ 0x15f048,
+ 0x15f048,
+ 0xd1c2,
+ 0x11f0c2,
+ 0x15dfc5,
+ 0x15f048,
+ 0xd0783,
+ 0x1ae3db07,
+ 0xcfd46,
+ 0x1b1acd05,
+ 0xcfe07,
+ 0xa54a,
+ 0xa408,
+ 0xb747,
+ 0x5f2c8,
+ 0x18c407,
+ 0xed30f,
+ 0x3ab07,
+ 0x165bc6,
+ 0x117050,
+ 0x122f0f,
+ 0x108544,
+ 0x1b4cfece,
+ 0xafd0c,
+ 0x11de8a,
+ 0xac687,
+ 0x12d54a,
+ 0x60989,
+ 0xc2f4a,
+ 0x77a8a,
+ 0x1084c6,
+ 0xac74a,
+ 0x11a58a,
+ 0x154009,
+ 0xda448,
+ 0xda746,
+ 0xde74d,
+ 0xb9905,
+ 0x5a107,
+ 0x16df94,
+ 0xfe58b,
+ 0x16710a,
+ 0xa8bcd,
+ 0x28b83,
+ 0x28b83,
+ 0x28b86,
+ 0x28b83,
+ 0x168883,
+ 0x15f048,
+ 0xd1c2,
+ 0x51304,
+ 0x8cdc3,
+ 0x170145,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x205283,
+ 0x2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x29a2c3,
+ 0x24abc3,
+ 0x205283,
+ 0x24ae04,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x209103,
+ 0x2d0783,
+ 0x231b83,
+ 0x2041c3,
+ 0x2135c3,
+ 0x332ec3,
+ 0x2964c4,
+ 0x23a0c3,
+ 0x22d603,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x21aa03,
+ 0x38c743,
+ 0x1d2d0783,
+ 0x231b83,
+ 0x2c3ec3,
+ 0x332ec3,
+ 0x2075c3,
+ 0x22d603,
+ 0x200383,
+ 0x2054c3,
+ 0x343c44,
+ 0x15f048,
+ 0x1dad0783,
+ 0x231b83,
+ 0x2ad7c3,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x21d7c3,
+ 0x15f048,
+ 0x1e2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x20abc3,
+ 0x200383,
+ 0x15f048,
+ 0x15926c7,
+ 0x368883,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x13ecc7,
+ 0x16e1cb,
+ 0xdb3c4,
+ 0xb9905,
+ 0x1491b48,
+ 0xae2cd,
+ 0x1f68a405,
+ 0x192c4,
+ 0x1a5c3,
+ 0x367fc5,
+ 0x15f048,
+ 0x1d202,
+ 0x2803,
+ 0xf7286,
+ 0x32f448,
+ 0x304507,
+ 0x24ae04,
+ 0x3b3006,
+ 0x3b5706,
+ 0x15f048,
+ 0x310683,
+ 0x2384c9,
+ 0x2bdad5,
+ 0xbdadf,
+ 0x2d0783,
+ 0x39a9d2,
+ 0xf5806,
+ 0x10cfc5,
+ 0x2b48a,
+ 0x5f4c9,
+ 0x39a78f,
+ 0x2da904,
+ 0x20f345,
+ 0x2fee50,
+ 0x2959c7,
+ 0x20abc3,
+ 0x2842c8,
+ 0x1257c6,
+ 0x2b400a,
+ 0x200e84,
+ 0x2f2a03,
+ 0x2716c6,
+ 0x205bc2,
+ 0x26b44b,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x2f74c3,
+ 0x20d1c2,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x205d83,
+ 0x223103,
+ 0x200383,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x204ac3,
+ 0x200383,
+ 0x204cc2,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x24ae04,
+ 0x2d0783,
+ 0x231b83,
+ 0x222044,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x209e43,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x262fc3,
+ 0x1e303,
+ 0x5d83,
+ 0x204ac3,
+ 0x200383,
+ 0x310c8a,
+ 0x32a949,
+ 0x34184b,
+ 0x341f8a,
+ 0x347d0a,
+ 0x356e8b,
+ 0x37300a,
+ 0x37914a,
+ 0x37e80a,
+ 0x37ea8b,
+ 0x39d949,
+ 0x39f84a,
+ 0x39fbcb,
+ 0x3a9d0b,
+ 0x3b4a8a,
+ 0x2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x10c9c9,
+ 0x15f048,
+ 0x2d0783,
+ 0x2695c4,
+ 0x200c82,
+ 0x213184,
+ 0x3ac705,
+ 0x205283,
+ 0x24ae04,
+ 0x2d0783,
+ 0x23a184,
+ 0x231b83,
+ 0x251304,
+ 0x2da904,
+ 0x2964c4,
+ 0x22d603,
+ 0x204ac3,
+ 0x200383,
+ 0x293ac5,
+ 0x209103,
+ 0x21aa03,
+ 0x22c6c3,
+ 0x258a04,
+ 0x262904,
+ 0x35d705,
+ 0x15f048,
+ 0x306e44,
+ 0x20e546,
+ 0x28a8c4,
+ 0x20d1c2,
+ 0x361ac7,
+ 0x253587,
+ 0x24f0c4,
+ 0x25d8c5,
+ 0x2d1d45,
+ 0x2b0405,
+ 0x2964c4,
+ 0x23cfc8,
+ 0x33f306,
+ 0x311f48,
+ 0x227b05,
+ 0x2e0405,
+ 0x377004,
+ 0x200383,
+ 0x2f39c4,
+ 0x355f46,
+ 0x2717c3,
+ 0x258a04,
+ 0x291a45,
+ 0x363644,
+ 0x234e84,
+ 0x205bc2,
+ 0x25e206,
+ 0x392206,
+ 0x3022c5,
+ 0x204cc2,
+ 0x368883,
+ 0x24e0d1c2,
+ 0x232dc4,
+ 0x208a42,
+ 0x20fbc3,
+ 0x25e402,
+ 0x204ac3,
+ 0x200382,
+ 0x213e83,
+ 0x24abc3,
+ 0x15f048,
+ 0x15f048,
+ 0x332ec3,
+ 0x204cc2,
+ 0x25a0d1c2,
+ 0x332ec3,
+ 0x2702c3,
+ 0x23a0c3,
+ 0x32bc44,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x204cc2,
+ 0x2620d1c2,
+ 0x2d0783,
+ 0x204ac3,
+ 0x200383,
+ 0x682,
+ 0x2044c2,
+ 0x217082,
+ 0x205d83,
+ 0x2ec383,
+ 0x204cc2,
+ 0x15f048,
+ 0x13ecc7,
+ 0x20d1c2,
+ 0x231b83,
+ 0x251304,
+ 0x202743,
+ 0x332ec3,
+ 0x209e43,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x2183c3,
+ 0x200383,
+ 0x21d743,
+ 0x1286d3,
+ 0x12cb54,
+ 0x13ecc7,
+ 0x1fd86,
+ 0x5ae0b,
+ 0x28b86,
+ 0x58c07,
+ 0x130089,
+ 0xe9cca,
+ 0x8cb0d,
+ 0x16978c,
+ 0x13d64a,
+ 0x63c85,
+ 0xa588,
+ 0x177ac6,
+ 0x125886,
+ 0x201742,
+ 0x827cc,
+ 0x19a347,
+ 0x23551,
+ 0x2d0783,
+ 0x5f245,
+ 0x102c4,
+ 0x274341c6,
+ 0x19146,
+ 0x178146,
+ 0x920ca,
+ 0xb2f03,
+ 0x27a5c984,
+ 0x130045,
+ 0xa383,
+ 0xd2b8c,
+ 0xf6188,
+ 0xbaf48,
+ 0xa3bc9,
+ 0x20c48,
+ 0x141dd06,
+ 0xfbc88,
+ 0x5e884,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x204cc2,
+ 0x20d1c2,
+ 0x332ec3,
+ 0x20a3c2,
+ 0x204ac3,
+ 0x200383,
+ 0x213e83,
+ 0x36388f,
+ 0x363c4e,
+ 0x15f048,
+ 0x2d0783,
+ 0x4cd07,
+ 0x231b83,
+ 0x332ec3,
+ 0x204303,
+ 0x204ac3,
+ 0x200383,
+ 0x21d0c3,
+ 0x239c47,
+ 0x200142,
+ 0x2c1949,
+ 0x201442,
+ 0x23f68b,
+ 0x2b5b8a,
+ 0x2bcfc9,
+ 0x200282,
+ 0x262b46,
+ 0x26d615,
+ 0x23f7d5,
+ 0x274a13,
+ 0x23fd53,
+ 0x202342,
+ 0x20d605,
+ 0x3ab1cc,
+ 0x24698b,
+ 0x29a745,
+ 0x205ac2,
+ 0x289c02,
+ 0x386746,
+ 0x200f82,
+ 0x25fb86,
+ 0x294d0d,
+ 0x255dcc,
+ 0x224444,
+ 0x201342,
+ 0x203782,
+ 0x248688,
+ 0x202302,
+ 0x208886,
+ 0x303bc4,
+ 0x26d7d5,
+ 0x274b93,
+ 0x210b83,
+ 0x33070a,
+ 0x2f0187,
+ 0x3b2209,
+ 0x32dc47,
+ 0x3124c2,
+ 0x200002,
+ 0x3a4386,
+ 0x20a0c2,
+ 0x15f048,
+ 0x200802,
+ 0x211cc2,
+ 0x27d407,
+ 0x3b3507,
+ 0x21c7c5,
+ 0x201082,
+ 0x21d707,
+ 0x21d8c8,
+ 0x2413c2,
+ 0x2c2fc2,
+ 0x22c1c2,
+ 0x20e542,
+ 0x23b688,
+ 0x218443,
+ 0x2b72c8,
+ 0x2e078d,
+ 0x21fe43,
+ 0x226288,
+ 0x23e88f,
+ 0x23ec4e,
+ 0x24ac8a,
+ 0x229d11,
+ 0x22a190,
+ 0x2bf0cd,
+ 0x2bf40c,
+ 0x38c5c7,
+ 0x330887,
+ 0x3b30c9,
+ 0x204f02,
+ 0x200702,
+ 0x25a6cc,
+ 0x25a9cb,
+ 0x202ac2,
+ 0x2dcac6,
+ 0x20db42,
+ 0x20c502,
+ 0x21c402,
+ 0x20d1c2,
+ 0x384684,
+ 0x23c7c7,
+ 0x220802,
+ 0x242c07,
+ 0x243c47,
+ 0x2271c2,
+ 0x20e482,
+ 0x24cbc5,
+ 0x204d02,
+ 0x20cb4e,
+ 0x36f1cd,
+ 0x231b83,
+ 0x353a0e,
+ 0x2c0b8d,
+ 0x3ab643,
+ 0x201842,
+ 0x206744,
+ 0x208182,
+ 0x220a42,
+ 0x33e805,
+ 0x348447,
+ 0x372202,
+ 0x2041c2,
+ 0x250f07,
+ 0x2543c8,
+ 0x2abc02,
+ 0x2aa106,
+ 0x25a54c,
+ 0x25a88b,
+ 0x20da42,
+ 0x26588f,
+ 0x265c50,
+ 0x26604f,
+ 0x266415,
+ 0x266954,
+ 0x266e4e,
+ 0x2671ce,
+ 0x26754f,
+ 0x26790e,
+ 0x267c94,
+ 0x268193,
+ 0x26864d,
+ 0x27b549,
+ 0x28dbc3,
+ 0x200182,
+ 0x237b85,
+ 0x206506,
+ 0x208a42,
+ 0x21a2c7,
+ 0x332ec3,
+ 0x200642,
+ 0x36edc8,
+ 0x229f51,
+ 0x22a390,
+ 0x200bc2,
+ 0x28d387,
+ 0x200b02,
+ 0x205fc7,
+ 0x201b02,
+ 0x32f249,
+ 0x386707,
+ 0x281408,
+ 0x234006,
+ 0x2cf4c3,
+ 0x2cf4c5,
+ 0x231e02,
+ 0x204842,
+ 0x3a4785,
+ 0x376e05,
+ 0x205e82,
+ 0x245f43,
+ 0x3636c7,
+ 0x210687,
+ 0x204982,
+ 0x3aae04,
+ 0x214183,
+ 0x2c9209,
+ 0x2ed188,
+ 0x205d82,
+ 0x2032c2,
+ 0x26e2c7,
+ 0x282185,
+ 0x2ab548,
+ 0x20d2c7,
+ 0x216143,
+ 0x372306,
+ 0x2bef4d,
+ 0x2bf2cc,
+ 0x280346,
+ 0x208842,
+ 0x2017c2,
+ 0x201f02,
+ 0x23e70f,
+ 0x23eb0e,
+ 0x2d1dc7,
+ 0x203cc2,
+ 0x2c3345,
+ 0x2c3346,
+ 0x20bcc2,
+ 0x205f02,
+ 0x28f406,
+ 0x205f03,
+ 0x205f06,
+ 0x2ca585,
+ 0x2ca58d,
+ 0x2cab55,
+ 0x2cb38c,
+ 0x2cc28d,
+ 0x2cc652,
+ 0x20b602,
+ 0x273fc2,
+ 0x201302,
+ 0x240fc6,
+ 0x2fcf46,
+ 0x201002,
+ 0x206586,
+ 0x211f82,
+ 0x37edc5,
+ 0x202382,
+ 0x20cc89,
+ 0x2df2cc,
+ 0x2df60b,
+ 0x200382,
+ 0x255688,
+ 0x213a02,
+ 0x204c82,
+ 0x246746,
+ 0x36b005,
+ 0x235007,
+ 0x2567c5,
+ 0x294805,
+ 0x24cd82,
+ 0x20a642,
+ 0x217902,
+ 0x2f2847,
+ 0x24410d,
+ 0x24448c,
+ 0x2b3387,
+ 0x2aa082,
+ 0x23cf82,
+ 0x24ba48,
+ 0x2d0488,
+ 0x2e5f88,
+ 0x2f09c4,
+ 0x2dce87,
+ 0x2ee483,
+ 0x2b6042,
+ 0x200e82,
+ 0x2f11c9,
+ 0x395e87,
+ 0x2054c2,
+ 0x277245,
+ 0x201202,
+ 0x26a102,
+ 0x349c43,
+ 0x349c46,
+ 0x2f74c2,
+ 0x2f7fc2,
+ 0x201402,
+ 0x3b3fc6,
+ 0x206687,
+ 0x207842,
+ 0x200e02,
+ 0x38bc8f,
+ 0x35384d,
+ 0x2b714e,
+ 0x2c0a0c,
+ 0x2003c2,
+ 0x205502,
+ 0x233e45,
+ 0x3b4e86,
+ 0x201ec2,
+ 0x200fc2,
+ 0x200682,
+ 0x20d244,
+ 0x2e0604,
+ 0x2d29c6,
+ 0x202602,
+ 0x27e787,
+ 0x22d703,
+ 0x22d708,
+ 0x24b048,
+ 0x390787,
+ 0x240ec6,
+ 0x20e5c2,
+ 0x23b383,
+ 0x23b387,
+ 0x272846,
+ 0x2e4385,
+ 0x2f0d48,
+ 0x206342,
+ 0x34a007,
+ 0x220c42,
+ 0x33c282,
+ 0x203b82,
+ 0x2dbe09,
+ 0x22fb02,
+ 0x200242,
+ 0x240183,
+ 0x319ac7,
+ 0x2018c2,
+ 0x2df44c,
+ 0x2df74b,
+ 0x2803c6,
+ 0x20a2c5,
+ 0x222e82,
+ 0x200a42,
+ 0x2bd306,
+ 0x235b83,
+ 0x39c147,
+ 0x23bb02,
+ 0x203382,
+ 0x26d495,
+ 0x23f995,
+ 0x2748d3,
+ 0x23fed3,
+ 0x2934c7,
+ 0x2b5948,
+ 0x2fb310,
+ 0x30ee4f,
+ 0x2b5953,
+ 0x2bcd92,
+ 0x2c1510,
+ 0x2ca1cf,
+ 0x2d57d2,
+ 0x2d84d1,
+ 0x2d9513,
+ 0x2dbbd2,
+ 0x2dd20f,
+ 0x2e57ce,
+ 0x2f5092,
+ 0x2f6351,
+ 0x2f754f,
+ 0x2f834e,
+ 0x300011,
+ 0x355810,
+ 0x35f212,
+ 0x3702d1,
+ 0x2f9bc6,
+ 0x307487,
+ 0x373387,
+ 0x204b42,
+ 0x284e05,
+ 0x2febc7,
+ 0x217082,
+ 0x203142,
+ 0x2293c5,
+ 0x21ee43,
+ 0x35d986,
+ 0x2442cd,
+ 0x24460c,
+ 0x206602,
+ 0x3ab04b,
+ 0x24684a,
+ 0x30be4a,
+ 0x2bbf49,
+ 0x2ef68b,
+ 0x20d40d,
+ 0x2ff2cc,
+ 0x24890a,
+ 0x275b0c,
+ 0x27afcb,
+ 0x29a58c,
+ 0x2fa34b,
+ 0x2df243,
+ 0x35ee06,
+ 0x3a6502,
+ 0x2f8b82,
+ 0x2db2c3,
+ 0x202502,
+ 0x202503,
+ 0x245886,
+ 0x2665c7,
+ 0x365146,
+ 0x385cc8,
+ 0x2d0188,
+ 0x2d3186,
+ 0x2019c2,
+ 0x301c8d,
+ 0x301fcc,
+ 0x2da9c7,
+ 0x306d07,
+ 0x21fdc2,
+ 0x21ac02,
+ 0x23b302,
+ 0x254782,
+ 0x20d1c2,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x213e83,
+ 0x204cc2,
+ 0x204e02,
+ 0x29a94005,
+ 0x29e02e85,
+ 0x2a3177c6,
+ 0x15f048,
+ 0x2a6b5145,
+ 0x20d1c2,
+ 0x2000c2,
+ 0x2ab9c685,
+ 0x2ae83305,
+ 0x2b283e07,
+ 0x2b68b309,
+ 0x2ba47ac4,
+ 0x208a42,
+ 0x200642,
+ 0x2bf72245,
+ 0x2c293149,
+ 0x2c71db88,
+ 0x2cab2085,
+ 0x2cf363c7,
+ 0x2d219b08,
+ 0x2d6e8605,
+ 0x2da5b4c6,
+ 0x2de346c9,
+ 0x2e2b8648,
+ 0x2e6c4b48,
+ 0x2ea9cf0a,
+ 0x2ee52104,
+ 0x2f2d6585,
+ 0x2f6becc8,
+ 0x2fb51245,
+ 0x2184c2,
+ 0x2fe63b83,
+ 0x302a7786,
+ 0x3064ea48,
+ 0x30a24f06,
+ 0x30ecec88,
+ 0x3132d1c6,
+ 0x316e4444,
+ 0x202082,
+ 0x31b630c7,
+ 0x31eaeb84,
+ 0x3227dc47,
+ 0x327a1087,
+ 0x200382,
+ 0x32aa0685,
+ 0x32e03bc4,
+ 0x332d1807,
+ 0x3362adc7,
+ 0x33a87406,
+ 0x33e36085,
+ 0x3429b807,
+ 0x346d2688,
+ 0x34a37f07,
+ 0x34eb0689,
+ 0x3538e6c5,
+ 0x35719c07,
+ 0x35a92e46,
+ 0x35e62d48,
+ 0x2460cd,
+ 0x24cf09,
+ 0x2f484b,
+ 0x25534b,
+ 0x27de4b,
+ 0x2aa88b,
+ 0x30f20b,
+ 0x30f4cb,
+ 0x30fd49,
+ 0x310f0b,
+ 0x3111cb,
+ 0x311ccb,
+ 0x31284a,
+ 0x312d8a,
+ 0x31338c,
+ 0x31608b,
+ 0x3166ca,
+ 0x327eca,
+ 0x3328ce,
+ 0x333a4e,
+ 0x333dca,
+ 0x335d8a,
+ 0x3369cb,
+ 0x336c8b,
+ 0x337a4b,
+ 0x34c7cb,
+ 0x34cdca,
+ 0x34da8b,
+ 0x34dd4a,
+ 0x34dfca,
+ 0x34e24a,
+ 0x373ecb,
+ 0x37a2cb,
+ 0x37c38e,
+ 0x37c70b,
+ 0x383ecb,
+ 0x38500b,
+ 0x38984a,
+ 0x389ac9,
+ 0x389d0a,
+ 0x38b38a,
+ 0x39e50b,
+ 0x39fe8b,
+ 0x3a09ca,
+ 0x3a28cb,
+ 0x3a588b,
+ 0x3b44cb,
+ 0x36285b88,
+ 0x3668c289,
+ 0x36aa3a49,
+ 0x36ee0bc8,
+ 0x33c685,
+ 0x202943,
+ 0x212944,
+ 0x206885,
+ 0x247806,
+ 0x25b245,
+ 0x28adc4,
+ 0x21a1c8,
+ 0x30af85,
+ 0x297a44,
+ 0x209907,
+ 0x2a280a,
+ 0x361d8a,
+ 0x3101c7,
+ 0x211f47,
+ 0x2fdec7,
+ 0x255b47,
+ 0x2fad45,
+ 0x343d06,
+ 0x22cb47,
+ 0x26fec4,
+ 0x2e6b46,
+ 0x2e6a46,
+ 0x208305,
+ 0x3492c4,
+ 0x38ec86,
+ 0x2a1647,
+ 0x22d046,
+ 0x351b47,
+ 0x26a783,
+ 0x2b4846,
+ 0x232045,
+ 0x283f07,
+ 0x270e0a,
+ 0x26dfc4,
+ 0x218ec8,
+ 0x2affc9,
+ 0x2cb147,
+ 0x334646,
+ 0x255908,
+ 0x200a49,
+ 0x3b23c4,
+ 0x2210c4,
+ 0x278285,
+ 0x22c848,
+ 0x2c7f47,
+ 0x2a7109,
+ 0x2f9cc8,
+ 0x347a86,
+ 0x24c646,
+ 0x29de88,
+ 0x354c46,
+ 0x202e85,
+ 0x2874c6,
+ 0x27e108,
+ 0x254b86,
+ 0x25d14b,
+ 0x29dac6,
+ 0x29f50d,
+ 0x3b1785,
+ 0x2aea46,
+ 0x20f505,
+ 0x349909,
+ 0x2abe87,
+ 0x3195c8,
+ 0x292986,
+ 0x29e709,
+ 0x364546,
+ 0x270d85,
+ 0x2a4dc6,
+ 0x2c99c6,
+ 0x2cdb89,
+ 0x200846,
+ 0x253087,
+ 0x277885,
+ 0x202383,
+ 0x25d2c5,
+ 0x29f7c7,
+ 0x358e06,
+ 0x3b1689,
+ 0x3177c6,
+ 0x287706,
+ 0x215ec9,
+ 0x286ec9,
+ 0x2a5607,
+ 0x2cf688,
+ 0x377f89,
+ 0x284a88,
+ 0x379386,
+ 0x2d9dc5,
+ 0x23cb4a,
+ 0x287786,
+ 0x3a8506,
+ 0x2cbbc5,
+ 0x272188,
+ 0x215587,
+ 0x22e68a,
+ 0x251746,
+ 0x24d345,
+ 0x329cc6,
+ 0x2d6347,
+ 0x334507,
+ 0x2c4145,
+ 0x270f45,
+ 0x2b2f86,
+ 0x351746,
+ 0x387046,
+ 0x2b8bc4,
+ 0x286209,
+ 0x28d146,
+ 0x30e50a,
+ 0x222848,
+ 0x309148,
+ 0x361d8a,
+ 0x2145c5,
+ 0x2a1585,
+ 0x37f588,
+ 0x2b6348,
+ 0x21b507,
+ 0x293846,
+ 0x320d48,
+ 0x3674c7,
+ 0x285188,
+ 0x2b9206,
+ 0x2885c8,
+ 0x29ad46,
+ 0x227c87,
+ 0x272b06,
+ 0x38ec86,
+ 0x25d9ca,
+ 0x384706,
+ 0x2d9dc9,
+ 0x2b5446,
+ 0x2e3d8a,
+ 0x2e4449,
+ 0x362586,
+ 0x2ba844,
+ 0x237c4d,
+ 0x28c507,
+ 0x3268c6,
+ 0x2c4a05,
+ 0x3645c5,
+ 0x375846,
+ 0x2d1649,
+ 0x2b4287,
+ 0x27f886,
+ 0x2c9546,
+ 0x28ae49,
+ 0x264a04,
+ 0x2d4a44,
+ 0x3ac808,
+ 0x245c46,
+ 0x277308,
+ 0x2e66c8,
+ 0x202fc7,
+ 0x3a80c9,
+ 0x387247,
+ 0x2b500a,
+ 0x2498cf,
+ 0x250b0a,
+ 0x233c45,
+ 0x27e345,
+ 0x218745,
+ 0x303b07,
+ 0x20e183,
+ 0x2cf888,
+ 0x3028c6,
+ 0x3029c9,
+ 0x2d4006,
+ 0x3aeb47,
+ 0x29e4c9,
+ 0x3194c8,
+ 0x2cbc87,
+ 0x30d803,
+ 0x33c705,
+ 0x20e105,
+ 0x2b8a0b,
+ 0x351304,
+ 0x257984,
+ 0x27cbc6,
+ 0x30e887,
+ 0x38b10a,
+ 0x2757c7,
+ 0x38c807,
+ 0x283305,
+ 0x200045,
+ 0x240909,
+ 0x38ec86,
+ 0x27564d,
+ 0x35af05,
+ 0x29f4c3,
+ 0x20ad83,
+ 0x34f785,
+ 0x347845,
+ 0x255908,
+ 0x280047,
+ 0x2d47c6,
+ 0x2a36c6,
+ 0x2296c5,
+ 0x231e47,
+ 0x202ac7,
+ 0x33f1c7,
+ 0x2d660a,
+ 0x2b4908,
+ 0x2b8bc4,
+ 0x254907,
+ 0x281607,
+ 0x3400c6,
+ 0x26f8c7,
+ 0x2eaa08,
+ 0x2e9e88,
+ 0x2abd86,
+ 0x2d1ec8,
+ 0x2008c4,
+ 0x22cb46,
+ 0x247d86,
+ 0x216646,
+ 0x3a8c46,
+ 0x22d9c4,
+ 0x255c06,
+ 0x2c31c6,
+ 0x29d406,
+ 0x235ec6,
+ 0x20ac46,
+ 0x2ea846,
+ 0x2d46c8,
+ 0x3af1c8,
+ 0x2d6e48,
+ 0x25b448,
+ 0x37f506,
+ 0x212485,
+ 0x2e2006,
+ 0x2b2105,
+ 0x388c87,
+ 0x216605,
+ 0x2136c3,
+ 0x203ec5,
+ 0x33fb44,
+ 0x20ad85,
+ 0x2266c3,
+ 0x338007,
+ 0x34bc88,
+ 0x351c06,
+ 0x32250d,
+ 0x27e306,
+ 0x29c985,
+ 0x2d9743,
+ 0x2be689,
+ 0x264b86,
+ 0x23c0c6,
+ 0x2a4ec4,
+ 0x250a87,
+ 0x233006,
+ 0x2b4545,
+ 0x234a83,
+ 0x207ac4,
+ 0x2817c6,
+ 0x2ded04,
+ 0x32b8c8,
+ 0x39ba49,
+ 0x24d849,
+ 0x2a4cca,
+ 0x387acd,
+ 0x208d07,
+ 0x224bc6,
+ 0x20a684,
+ 0x28b309,
+ 0x28a088,
+ 0x28c106,
+ 0x23dfc6,
+ 0x26f8c7,
+ 0x2b9a46,
+ 0x21f706,
+ 0x3ac246,
+ 0x3a110a,
+ 0x219b08,
+ 0x2464c5,
+ 0x26fd09,
+ 0x28568a,
+ 0x2fa988,
+ 0x2a0ec8,
+ 0x29bd48,
+ 0x2af08c,
+ 0x316305,
+ 0x2a3948,
+ 0x2e8e06,
+ 0x319746,
+ 0x3aea07,
+ 0x2756c5,
+ 0x287645,
+ 0x24d709,
+ 0x213487,
+ 0x302985,
+ 0x227487,
+ 0x20ad83,
+ 0x2c8485,
+ 0x20b8c8,
+ 0x25d647,
+ 0x2a0d89,
+ 0x2de405,
+ 0x307784,
+ 0x2a6508,
+ 0x363207,
+ 0x2cbe48,
+ 0x368c48,
+ 0x2dc805,
+ 0x304286,
+ 0x278686,
+ 0x2ac1c9,
+ 0x31c407,
+ 0x2b29c6,
+ 0x3b3907,
+ 0x221d03,
+ 0x247ac4,
+ 0x2a7885,
+ 0x231f84,
+ 0x383c84,
+ 0x286947,
+ 0x35bdc7,
+ 0x27fa44,
+ 0x2a0bd0,
+ 0x367c87,
+ 0x200045,
+ 0x2536cc,
+ 0x225344,
+ 0x2b1588,
+ 0x227b89,
+ 0x2b4e06,
+ 0x220d88,
+ 0x247344,
+ 0x247348,
+ 0x22ec86,
+ 0x235d48,
+ 0x2a1c06,
+ 0x2d328b,
+ 0x202385,
+ 0x2cb988,
+ 0x216ac4,
+ 0x39be8a,
+ 0x2a0d89,
+ 0x381346,
+ 0x218808,
+ 0x25ebc5,
+ 0x2b69c4,
+ 0x2b1486,
+ 0x33f088,
+ 0x285b88,
+ 0x340bc6,
+ 0x31d104,
+ 0x23cac6,
+ 0x3872c7,
+ 0x27db47,
+ 0x26f8cf,
+ 0x205547,
+ 0x362647,
+ 0x38eb45,
+ 0x352245,
+ 0x2a52c9,
+ 0x30e1c6,
+ 0x284045,
+ 0x2871c7,
+ 0x2c1108,
+ 0x29d505,
+ 0x272b06,
+ 0x222688,
+ 0x224f0a,
+ 0x2e13c8,
+ 0x28f187,
+ 0x249d06,
+ 0x26fcc6,
+ 0x20df43,
+ 0x218303,
+ 0x285849,
+ 0x377e09,
+ 0x2b0586,
+ 0x2de405,
+ 0x2163c8,
+ 0x218808,
+ 0x354dc8,
+ 0x3ac2cb,
+ 0x322747,
+ 0x30b249,
+ 0x26fb48,
+ 0x335844,
+ 0x349588,
+ 0x291409,
+ 0x2b2cc5,
+ 0x303a07,
+ 0x247b45,
+ 0x285a88,
+ 0x293e8b,
+ 0x29b550,
+ 0x2ae605,
+ 0x216a0c,
+ 0x2d4985,
+ 0x283383,
+ 0x29f386,
+ 0x2c0984,
+ 0x203cc6,
+ 0x2a1647,
+ 0x222704,
+ 0x24b388,
+ 0x2cf74d,
+ 0x35e245,
+ 0x208d44,
+ 0x233984,
+ 0x287bc9,
+ 0x2990c8,
+ 0x317647,
+ 0x22ed08,
+ 0x2862c8,
+ 0x27fb85,
+ 0x20f747,
+ 0x27fb07,
+ 0x238287,
+ 0x270f49,
+ 0x232e89,
+ 0x242d86,
+ 0x2bf606,
+ 0x26fb06,
+ 0x289845,
+ 0x39b744,
+ 0x3b0e86,
+ 0x3b5306,
+ 0x27fbc8,
+ 0x2d600b,
+ 0x26de87,
+ 0x20a684,
+ 0x364a46,
+ 0x367a47,
+ 0x34f0c5,
+ 0x263645,
+ 0x212dc4,
+ 0x232e06,
+ 0x3b0f08,
+ 0x28b309,
+ 0x252f86,
+ 0x289a48,
+ 0x2b4606,
+ 0x342708,
+ 0x34c34c,
+ 0x27fa46,
+ 0x29c64d,
+ 0x29cacb,
+ 0x253145,
+ 0x202c07,
+ 0x200946,
+ 0x3343c8,
+ 0x242e09,
+ 0x393c88,
+ 0x200045,
+ 0x2e2a87,
+ 0x284b88,
+ 0x358649,
+ 0x344106,
+ 0x252e8a,
+ 0x334148,
+ 0x393acb,
+ 0x3298cc,
+ 0x247448,
+ 0x280e46,
+ 0x303d08,
+ 0x3a8347,
+ 0x363489,
+ 0x29304d,
+ 0x29f986,
+ 0x21e608,
+ 0x3af089,
+ 0x2bfd08,
+ 0x2886c8,
+ 0x2c3a0c,
+ 0x2c5047,
+ 0x2c5507,
+ 0x270d85,
+ 0x31e5c7,
+ 0x2c0fc8,
+ 0x2b1506,
+ 0x2aaccc,
+ 0x2f55c8,
+ 0x2d0d88,
+ 0x2ba286,
+ 0x20de87,
+ 0x242f84,
+ 0x25b448,
+ 0x28f50c,
+ 0x353d0c,
+ 0x233cc5,
+ 0x2d2887,
+ 0x31d086,
+ 0x20de06,
+ 0x349ac8,
+ 0x2027c4,
+ 0x22d04b,
+ 0x27e8cb,
+ 0x249d06,
+ 0x2cf5c7,
+ 0x31a2c5,
+ 0x276545,
+ 0x22d186,
+ 0x25eb85,
+ 0x3512c5,
+ 0x2cd5c7,
+ 0x27d1c9,
+ 0x351904,
+ 0x34ee05,
+ 0x2e6fc5,
+ 0x2dea88,
+ 0x2287c5,
+ 0x2bca49,
+ 0x37aac7,
+ 0x37aacb,
+ 0x244806,
+ 0x2d4409,
+ 0x349208,
+ 0x27c385,
+ 0x238388,
+ 0x232ec8,
+ 0x23a6c7,
+ 0x2e2f87,
+ 0x2869c9,
+ 0x235c87,
+ 0x289149,
+ 0x2acf8c,
+ 0x2b0588,
+ 0x2b6189,
+ 0x321f87,
+ 0x286389,
+ 0x35bf07,
+ 0x3299c8,
+ 0x3a8285,
+ 0x22cac6,
+ 0x2c4a48,
+ 0x2f0fc8,
+ 0x285549,
+ 0x351307,
+ 0x276605,
+ 0x36b6c9,
+ 0x2b9ec6,
+ 0x2323c4,
+ 0x2323c6,
+ 0x24e8c8,
+ 0x252847,
+ 0x2d6208,
+ 0x2d1f89,
+ 0x3a1e07,
+ 0x2a29c6,
+ 0x202cc4,
+ 0x203f49,
+ 0x20f5c8,
+ 0x2ba147,
+ 0x343e06,
+ 0x20e1c6,
+ 0x3a8484,
+ 0x247f86,
+ 0x201b83,
+ 0x296789,
+ 0x202346,
+ 0x2d2205,
+ 0x2a36c6,
+ 0x24f305,
+ 0x285008,
+ 0x247187,
+ 0x244b46,
+ 0x39c6c6,
+ 0x309148,
+ 0x2a5447,
+ 0x29f9c5,
+ 0x2a09c8,
+ 0x3ada88,
+ 0x334148,
+ 0x2d4845,
+ 0x22cb46,
+ 0x24d609,
+ 0x2ac044,
+ 0x24f18b,
+ 0x21f40b,
+ 0x2463c9,
+ 0x20ad83,
+ 0x25bf05,
+ 0x213a86,
+ 0x313788,
+ 0x249844,
+ 0x351c06,
+ 0x2d6749,
+ 0x2bc545,
+ 0x2cd506,
+ 0x363206,
+ 0x2163c4,
+ 0x2aec0a,
+ 0x2d2148,
+ 0x2f0fc6,
+ 0x2c2585,
+ 0x3b1987,
+ 0x231147,
+ 0x304284,
+ 0x21f647,
+ 0x2165c4,
+ 0x2165c6,
+ 0x203c83,
+ 0x270f45,
+ 0x350e85,
+ 0x205788,
+ 0x254ac5,
+ 0x27f789,
+ 0x25b287,
+ 0x25b28b,
+ 0x2a758c,
+ 0x2a810a,
+ 0x3363c7,
+ 0x204083,
+ 0x212188,
+ 0x2d4a05,
+ 0x29d585,
+ 0x20ae44,
+ 0x3298c6,
+ 0x227b86,
+ 0x247fc7,
+ 0x2349cb,
+ 0x22d9c4,
+ 0x2e8f04,
+ 0x219e04,
+ 0x2cd786,
+ 0x222704,
+ 0x22c948,
+ 0x33c5c5,
+ 0x244d85,
+ 0x354d07,
+ 0x202d09,
+ 0x347845,
+ 0x37584a,
+ 0x277789,
+ 0x29810a,
+ 0x3a1249,
+ 0x335fc4,
+ 0x2c9605,
+ 0x2b9b48,
+ 0x2d18cb,
+ 0x278285,
+ 0x2f0086,
+ 0x2200c4,
+ 0x27fcc6,
+ 0x3a1c89,
+ 0x364b07,
+ 0x317988,
+ 0x387e46,
+ 0x387247,
+ 0x285b88,
+ 0x380946,
+ 0x37f0c4,
+ 0x363f87,
+ 0x366085,
+ 0x377547,
+ 0x25b4c4,
+ 0x2008c6,
+ 0x2f1e08,
+ 0x29cc88,
+ 0x2e88c7,
+ 0x27d548,
+ 0x29ae05,
+ 0x20abc4,
+ 0x361c88,
+ 0x27d644,
+ 0x2186c5,
+ 0x2fac44,
+ 0x3675c7,
+ 0x28d207,
+ 0x2864c8,
+ 0x2cbfc6,
+ 0x254a45,
+ 0x27f588,
+ 0x2e15c8,
+ 0x2a4c09,
+ 0x21f706,
+ 0x22e708,
+ 0x39bd0a,
+ 0x34f148,
+ 0x2e8605,
+ 0x2e2206,
+ 0x277648,
+ 0x2e2b4a,
+ 0x20b387,
+ 0x28a645,
+ 0x298888,
+ 0x2b3c44,
+ 0x272206,
+ 0x2c5888,
+ 0x20ac46,
+ 0x239a88,
+ 0x29bfc7,
+ 0x209806,
+ 0x2ba844,
+ 0x28ba07,
+ 0x2b6804,
+ 0x3a1c47,
+ 0x23bf0d,
+ 0x21b585,
+ 0x2d144b,
+ 0x2a1d06,
+ 0x255788,
+ 0x24b344,
+ 0x27bc86,
+ 0x2817c6,
+ 0x304047,
+ 0x29c30d,
+ 0x226dc7,
+ 0x2b6d48,
+ 0x271a05,
+ 0x27f048,
+ 0x2c7ec6,
+ 0x29ae88,
+ 0x223a06,
+ 0x26a9c7,
+ 0x336689,
+ 0x33d2c7,
+ 0x28c3c8,
+ 0x279685,
+ 0x21c848,
+ 0x20dd45,
+ 0x396005,
+ 0x3a14c5,
+ 0x221443,
+ 0x235984,
+ 0x26fd05,
+ 0x2346c9,
+ 0x285f86,
+ 0x2eab08,
+ 0x2e2d45,
+ 0x2b8847,
+ 0x2aee8a,
+ 0x2cd449,
+ 0x2c98ca,
+ 0x2d6ec8,
+ 0x2272cc,
+ 0x28724d,
+ 0x2ff683,
+ 0x239988,
+ 0x207a85,
+ 0x224cc6,
+ 0x319346,
+ 0x2e7f05,
+ 0x3b3a09,
+ 0x358f45,
+ 0x27f588,
+ 0x2841c6,
+ 0x348806,
+ 0x2a63c9,
+ 0x38f247,
+ 0x294146,
+ 0x2aee08,
+ 0x216548,
+ 0x2e0dc7,
+ 0x235ece,
+ 0x2c8105,
+ 0x358545,
+ 0x20ab48,
+ 0x27f3c7,
+ 0x20e202,
+ 0x2c3584,
+ 0x203bca,
+ 0x2ba208,
+ 0x367b46,
+ 0x29e608,
+ 0x278686,
+ 0x31a7c8,
+ 0x2b29c8,
+ 0x395fc4,
+ 0x2b8d85,
+ 0x68a8c4,
+ 0x68a8c4,
+ 0x68a8c4,
+ 0x202403,
+ 0x20e046,
+ 0x27fa46,
+ 0x2a220c,
+ 0x209843,
+ 0x285686,
+ 0x215344,
+ 0x264b08,
+ 0x2d6585,
+ 0x203cc6,
+ 0x2bedc8,
+ 0x2d8206,
+ 0x244ac6,
+ 0x381148,
+ 0x2a7907,
+ 0x235a49,
+ 0x2d4bca,
+ 0x208a84,
+ 0x216605,
+ 0x2a70c5,
+ 0x264886,
+ 0x208d46,
+ 0x2a2dc6,
+ 0x2f9ec6,
+ 0x235b84,
+ 0x235b8b,
+ 0x231144,
+ 0x2a23c5,
+ 0x2b19c5,
+ 0x203086,
+ 0x3b5548,
+ 0x287107,
+ 0x317744,
+ 0x2453c3,
+ 0x2b3745,
+ 0x30a847,
+ 0x28700b,
+ 0x205687,
+ 0x2becc8,
+ 0x2e8b47,
+ 0x231646,
+ 0x24d1c8,
+ 0x2e318b,
+ 0x2067c6,
+ 0x213bc9,
+ 0x2e3305,
+ 0x30d803,
+ 0x2cd506,
+ 0x29bec8,
+ 0x214cc3,
+ 0x200a03,
+ 0x285b86,
+ 0x278686,
+ 0x375dca,
+ 0x280e85,
+ 0x28160b,
+ 0x2a360b,
+ 0x245103,
+ 0x202043,
+ 0x2b4f84,
+ 0x278447,
+ 0x247444,
+ 0x202ec4,
+ 0x2e8c84,
+ 0x34f448,
+ 0x2c24c8,
+ 0x3b2049,
+ 0x38e748,
+ 0x200c07,
+ 0x235ec6,
+ 0x2ea74f,
+ 0x2c8246,
+ 0x2d6504,
+ 0x2c230a,
+ 0x30a747,
+ 0x208386,
+ 0x292e89,
+ 0x3b1fc5,
+ 0x2058c5,
+ 0x3b2106,
+ 0x21c983,
+ 0x2b3c89,
+ 0x219c86,
+ 0x212009,
+ 0x38b106,
+ 0x270f45,
+ 0x2340c5,
+ 0x205543,
+ 0x278588,
+ 0x211607,
+ 0x3028c4,
+ 0x264988,
+ 0x2313c4,
+ 0x338d86,
+ 0x29f386,
+ 0x2419c6,
+ 0x2cb849,
+ 0x29d505,
+ 0x38ec86,
+ 0x2a2fc9,
+ 0x2c7606,
+ 0x2ea846,
+ 0x386e86,
+ 0x200b45,
+ 0x2fac46,
+ 0x26a9c4,
+ 0x3a8285,
+ 0x2c4a44,
+ 0x2b7846,
+ 0x35aec4,
+ 0x20f843,
+ 0x28a145,
+ 0x232bc8,
+ 0x2e9687,
+ 0x2bd949,
+ 0x28a548,
+ 0x29dc51,
+ 0x36328a,
+ 0x249c47,
+ 0x2ea1c6,
+ 0x215344,
+ 0x2c4b48,
+ 0x282f48,
+ 0x29de0a,
+ 0x2bc80d,
+ 0x2a4dc6,
+ 0x381246,
+ 0x28bac6,
+ 0x2c3fc7,
+ 0x2b6e05,
+ 0x262c07,
+ 0x264a45,
+ 0x37ac04,
+ 0x2ad586,
+ 0x216287,
+ 0x2b398d,
+ 0x277587,
+ 0x21a0c8,
+ 0x27f889,
+ 0x2e2106,
+ 0x344085,
+ 0x226704,
+ 0x24e9c6,
+ 0x304186,
+ 0x2ba386,
+ 0x29ee88,
+ 0x2179c3,
+ 0x203043,
+ 0x3598c5,
+ 0x2300c6,
+ 0x2b2985,
+ 0x388048,
+ 0x2a180a,
+ 0x2cee04,
+ 0x264b08,
+ 0x29bd48,
+ 0x202ec7,
+ 0x2e2e09,
+ 0x2be9c8,
+ 0x28b387,
+ 0x2936c6,
+ 0x20ac4a,
+ 0x24ea48,
+ 0x396449,
+ 0x299188,
+ 0x21cec9,
+ 0x2ea087,
+ 0x2effc5,
+ 0x3ac4c6,
+ 0x2b1388,
+ 0x285d08,
+ 0x2a1048,
+ 0x249e08,
+ 0x2a23c5,
+ 0x20f444,
+ 0x211308,
+ 0x208484,
+ 0x3a1044,
+ 0x270f45,
+ 0x297a87,
+ 0x202ac9,
+ 0x303e47,
+ 0x215f45,
+ 0x27cdc6,
+ 0x34ebc6,
+ 0x203d44,
+ 0x2a6706,
+ 0x254884,
+ 0x27ef46,
+ 0x202886,
+ 0x214b06,
+ 0x200045,
+ 0x387f07,
+ 0x204083,
+ 0x206b49,
+ 0x308f48,
+ 0x264984,
+ 0x28b20d,
+ 0x29cd88,
+ 0x3053c8,
+ 0x3963c6,
+ 0x336789,
+ 0x2cd449,
+ 0x3a1985,
+ 0x2a190a,
+ 0x2adb4a,
+ 0x2af7cc,
+ 0x2af946,
+ 0x27d9c6,
+ 0x2c83c6,
+ 0x273209,
+ 0x224f06,
+ 0x262c46,
+ 0x359006,
+ 0x25b448,
+ 0x27d546,
+ 0x2d36cb,
+ 0x297c05,
+ 0x244d85,
+ 0x27dc45,
+ 0x366f46,
+ 0x20ac03,
+ 0x241946,
+ 0x277507,
+ 0x2c4a05,
+ 0x24c705,
+ 0x3645c5,
+ 0x327346,
+ 0x31da84,
+ 0x31da86,
+ 0x3add49,
+ 0x366dcc,
+ 0x37a948,
+ 0x33f004,
+ 0x2fa886,
+ 0x2a1e06,
+ 0x29bec8,
+ 0x218808,
+ 0x366cc9,
+ 0x3b1987,
+ 0x245989,
+ 0x254106,
+ 0x22c2c4,
+ 0x20bf04,
+ 0x286cc4,
+ 0x285b88,
+ 0x20290a,
+ 0x3477c6,
+ 0x352107,
+ 0x36f007,
+ 0x2d4505,
+ 0x2a7084,
+ 0x2913c6,
+ 0x2b6e46,
+ 0x202803,
+ 0x308d87,
+ 0x368b48,
+ 0x3a1aca,
+ 0x2ce348,
+ 0x2cec88,
+ 0x35af05,
+ 0x253245,
+ 0x26df85,
+ 0x2d48c6,
+ 0x33d4c6,
+ 0x35bd05,
+ 0x2969c9,
+ 0x2a6e8c,
+ 0x26e047,
+ 0x29de88,
+ 0x381a45,
+ 0x68a8c4,
+ 0x24df84,
+ 0x25d784,
+ 0x214486,
+ 0x2a450e,
+ 0x205947,
+ 0x2c41c5,
+ 0x2abfcc,
+ 0x231287,
+ 0x216207,
+ 0x218089,
+ 0x218f89,
+ 0x28a645,
+ 0x308f48,
+ 0x24d609,
+ 0x334005,
+ 0x2c4948,
+ 0x322906,
+ 0x361f06,
+ 0x2e4444,
+ 0x2ae848,
+ 0x251f43,
+ 0x303084,
+ 0x2b37c5,
+ 0x3ac0c7,
+ 0x210445,
+ 0x39bbc9,
+ 0x28aa8d,
+ 0x299886,
+ 0x245404,
+ 0x2937c8,
+ 0x27d00a,
+ 0x224107,
+ 0x23be45,
+ 0x203143,
+ 0x2a37ce,
+ 0x27868c,
+ 0x2faa87,
+ 0x2a46c7,
+ 0x203c03,
+ 0x224f45,
+ 0x25d785,
+ 0x29e9c8,
+ 0x29bb89,
+ 0x33ef06,
+ 0x247444,
+ 0x249b86,
+ 0x21e3cb,
+ 0x2cd1cc,
+ 0x221507,
+ 0x2d5c45,
+ 0x3ad988,
+ 0x2e0b85,
+ 0x2c2307,
+ 0x3630c7,
+ 0x251f45,
+ 0x20ac03,
+ 0x39a644,
+ 0x212905,
+ 0x351805,
+ 0x351806,
+ 0x34fd08,
+ 0x216287,
+ 0x319646,
+ 0x35c106,
+ 0x3a1406,
+ 0x2d5e89,
+ 0x20f847,
+ 0x26a5c6,
+ 0x2cd346,
+ 0x252006,
+ 0x2aeb45,
+ 0x219646,
+ 0x3768c5,
+ 0x228848,
+ 0x2973cb,
+ 0x291086,
+ 0x36f044,
+ 0x2e2909,
+ 0x25b284,
+ 0x322888,
+ 0x2324c7,
+ 0x2885c4,
+ 0x2be288,
+ 0x2c5304,
+ 0x2aeb84,
+ 0x28b145,
+ 0x35e286,
+ 0x34f387,
+ 0x239b43,
+ 0x2a2a85,
+ 0x322e84,
+ 0x358586,
+ 0x3a1a08,
+ 0x368885,
+ 0x297089,
+ 0x3363c5,
+ 0x2e1e88,
+ 0x215207,
+ 0x388dc8,
+ 0x2bd787,
+ 0x362709,
+ 0x255a86,
+ 0x32b3c6,
+ 0x359004,
+ 0x293605,
+ 0x30150c,
+ 0x27dc47,
+ 0x27e207,
+ 0x36eec8,
+ 0x299886,
+ 0x277444,
+ 0x32e344,
+ 0x286849,
+ 0x2c84c6,
+ 0x240987,
+ 0x3a8bc4,
+ 0x286086,
+ 0x343905,
+ 0x2cbb07,
+ 0x2d3646,
+ 0x252d49,
+ 0x2aab07,
+ 0x26f8c7,
+ 0x2a6246,
+ 0x3879c5,
+ 0x283988,
+ 0x219b08,
+ 0x2646c6,
+ 0x3688c5,
+ 0x261b06,
+ 0x209983,
+ 0x29e849,
+ 0x2a2b4e,
+ 0x2bd488,
+ 0x2314c8,
+ 0x2644cb,
+ 0x2972c6,
+ 0x2089c4,
+ 0x244ac4,
+ 0x2a2c4a,
+ 0x216907,
+ 0x26a685,
+ 0x213bc9,
+ 0x2c3285,
+ 0x3a1087,
+ 0x2b4c04,
+ 0x284487,
+ 0x2e65c8,
+ 0x2cb206,
+ 0x21e789,
+ 0x2beaca,
+ 0x216886,
+ 0x29c8c6,
+ 0x2b1945,
+ 0x37ccc5,
+ 0x31a107,
+ 0x24dd08,
+ 0x343848,
+ 0x395fc6,
+ 0x234145,
+ 0x208ace,
+ 0x2b8bc4,
+ 0x264645,
+ 0x27c749,
+ 0x30dfc8,
+ 0x28f0c6,
+ 0x2a04cc,
+ 0x2a1410,
+ 0x2a414f,
+ 0x2a51c8,
+ 0x3363c7,
+ 0x200045,
+ 0x26fd05,
+ 0x34f209,
+ 0x298a89,
+ 0x23cbc6,
+ 0x278307,
+ 0x2d2805,
+ 0x21b509,
+ 0x340146,
+ 0x224d4d,
+ 0x286b89,
+ 0x202ec4,
+ 0x2bd208,
+ 0x2113c9,
+ 0x347986,
+ 0x27cec5,
+ 0x32b3c6,
+ 0x317849,
+ 0x26ba08,
+ 0x212485,
+ 0x2ae844,
+ 0x2a068b,
+ 0x347845,
+ 0x2a07c6,
+ 0x287586,
+ 0x26ed86,
+ 0x287fcb,
+ 0x297189,
+ 0x35c045,
+ 0x388b87,
+ 0x363206,
+ 0x220f06,
+ 0x25d508,
+ 0x35e389,
+ 0x219e8c,
+ 0x30a648,
+ 0x360406,
+ 0x340bc3,
+ 0x303c06,
+ 0x287e05,
+ 0x281948,
+ 0x233b46,
+ 0x2cbd48,
+ 0x275845,
+ 0x29dfc5,
+ 0x215348,
+ 0x31a947,
+ 0x319287,
+ 0x247fc7,
+ 0x220d88,
+ 0x336508,
+ 0x31e4c6,
+ 0x2b7687,
+ 0x247987,
+ 0x287cca,
+ 0x254003,
+ 0x366f46,
+ 0x202a45,
+ 0x203bc4,
+ 0x27f889,
+ 0x362684,
+ 0x2a7e44,
+ 0x2a1c84,
+ 0x2a46cb,
+ 0x211547,
+ 0x208d05,
+ 0x29ab08,
+ 0x27cdc6,
+ 0x27cdc8,
+ 0x280dc6,
+ 0x2900c5,
+ 0x290385,
+ 0x291f46,
+ 0x292b08,
+ 0x292dc8,
+ 0x27fa46,
+ 0x29a94f,
+ 0x29e310,
+ 0x3b1785,
+ 0x204083,
+ 0x22c385,
+ 0x30b188,
+ 0x298989,
+ 0x334148,
+ 0x2d5d08,
+ 0x224788,
+ 0x211607,
+ 0x27ca89,
+ 0x2cbf48,
+ 0x25bd44,
+ 0x2a1b08,
+ 0x2deb49,
+ 0x2b81c7,
+ 0x29f904,
+ 0x303f08,
+ 0x387cca,
+ 0x2ebe06,
+ 0x2a4dc6,
+ 0x21f5c9,
+ 0x2a1647,
+ 0x2ce1c8,
+ 0x30cc88,
+ 0x3a8a48,
+ 0x356245,
+ 0x37dc45,
+ 0x244d85,
+ 0x25d745,
+ 0x37e287,
+ 0x20ac05,
+ 0x2c4a05,
+ 0x2b5546,
+ 0x334087,
+ 0x2d1807,
+ 0x387fc6,
+ 0x2d7405,
+ 0x2a07c6,
+ 0x212245,
+ 0x2b84c8,
+ 0x2f1d84,
+ 0x2c7686,
+ 0x343744,
+ 0x2b69c8,
+ 0x2c778a,
+ 0x28004c,
+ 0x234bc5,
+ 0x2c4086,
+ 0x21a046,
+ 0x368706,
+ 0x30b384,
+ 0x343bc5,
+ 0x280c07,
+ 0x2a16c9,
+ 0x2cdc87,
+ 0x68a8c4,
+ 0x68a8c4,
+ 0x3175c5,
+ 0x32dd04,
+ 0x29fe8a,
+ 0x27cc46,
+ 0x24d404,
+ 0x208305,
+ 0x37a545,
+ 0x2b6d44,
+ 0x2871c7,
+ 0x36b847,
+ 0x2cd788,
+ 0x368ec8,
+ 0x212489,
+ 0x340248,
+ 0x2a004b,
+ 0x250b44,
+ 0x221005,
+ 0x2840c5,
+ 0x247f49,
+ 0x35e389,
+ 0x2e2808,
+ 0x232248,
+ 0x203084,
+ 0x2a1e45,
+ 0x202943,
+ 0x264845,
+ 0x38ed06,
+ 0x29b9cc,
+ 0x20f4c6,
+ 0x247246,
+ 0x28f345,
+ 0x3273c8,
+ 0x2bd606,
+ 0x2ea346,
+ 0x2a4dc6,
+ 0x2297cc,
+ 0x2ba544,
+ 0x3a154a,
+ 0x28f288,
+ 0x29b807,
+ 0x322d86,
+ 0x33efc7,
+ 0x2f2185,
+ 0x343e06,
+ 0x34af86,
+ 0x356707,
+ 0x2be7c4,
+ 0x3676c5,
+ 0x27c744,
+ 0x37ac87,
+ 0x27c988,
+ 0x27d84a,
+ 0x284a07,
+ 0x2d22c7,
+ 0x336347,
+ 0x2e0cc9,
+ 0x29b9ca,
+ 0x219e43,
+ 0x2e9645,
+ 0x200c83,
+ 0x2e8cc9,
+ 0x26ac48,
+ 0x38eb47,
+ 0x334249,
+ 0x219c06,
+ 0x2d4108,
+ 0x337f85,
+ 0x2e16ca,
+ 0x2d8c49,
+ 0x2abc49,
+ 0x3aea07,
+ 0x283049,
+ 0x214a08,
+ 0x3568c6,
+ 0x2c4248,
+ 0x217b07,
+ 0x235c87,
+ 0x277787,
+ 0x2d2688,
+ 0x2fa706,
+ 0x387a85,
+ 0x280c07,
+ 0x29c3c8,
+ 0x3436c4,
+ 0x30e3c4,
+ 0x294047,
+ 0x2b2d47,
+ 0x24d48a,
+ 0x356846,
+ 0x330f0a,
+ 0x2c34c7,
+ 0x2b8987,
+ 0x257e44,
+ 0x289204,
+ 0x2d3546,
+ 0x3b3d44,
+ 0x3b3d4c,
+ 0x203505,
+ 0x218649,
+ 0x2dfc44,
+ 0x2b6e05,
+ 0x27cf88,
+ 0x292e85,
+ 0x375846,
+ 0x217f84,
+ 0x3ae3ca,
+ 0x32b7c6,
+ 0x2a68ca,
+ 0x237f07,
+ 0x2d3385,
+ 0x21c985,
+ 0x2d454a,
+ 0x2a6805,
+ 0x2a4cc6,
+ 0x208484,
+ 0x2b5106,
+ 0x31a1c5,
+ 0x233c06,
+ 0x2e88cc,
+ 0x2cd90a,
+ 0x2936c4,
+ 0x235ec6,
+ 0x2a1647,
+ 0x2d5204,
+ 0x25b448,
+ 0x38e5c6,
+ 0x208949,
+ 0x2bb109,
+ 0x2b0689,
+ 0x24f346,
+ 0x217c06,
+ 0x2c4387,
+ 0x296908,
+ 0x217a09,
+ 0x211547,
+ 0x29ac86,
+ 0x3872c7,
+ 0x28b985,
+ 0x2b8bc4,
+ 0x2c3f47,
+ 0x247b45,
+ 0x28b085,
+ 0x235247,
+ 0x251e08,
+ 0x3ad906,
+ 0x29d24d,
+ 0x29ebcf,
+ 0x2a360d,
+ 0x215f84,
+ 0x232cc6,
+ 0x2d91c8,
+ 0x358fc5,
+ 0x287e88,
+ 0x23a58a,
+ 0x202ec4,
+ 0x21e946,
+ 0x239607,
+ 0x22d9c7,
+ 0x2a79c9,
+ 0x2c4205,
+ 0x2b6d44,
+ 0x2b8cca,
+ 0x2be589,
+ 0x283147,
+ 0x272086,
+ 0x347986,
+ 0x2a1d86,
+ 0x364046,
+ 0x2d890f,
+ 0x2d9089,
+ 0x27d546,
+ 0x282e46,
+ 0x32fd89,
+ 0x2b7787,
+ 0x226743,
+ 0x229946,
+ 0x218303,
+ 0x2e7dc8,
+ 0x387107,
+ 0x2a53c9,
+ 0x29f208,
+ 0x3193c8,
+ 0x351446,
+ 0x20f409,
+ 0x23c1c5,
+ 0x2b7844,
+ 0x2a73c7,
+ 0x273285,
+ 0x215f84,
+ 0x208dc8,
+ 0x216bc4,
+ 0x2b74c7,
+ 0x34bc06,
+ 0x2b3045,
+ 0x299188,
+ 0x34784b,
+ 0x319c07,
+ 0x2d47c6,
+ 0x2c82c4,
+ 0x32d146,
+ 0x270f45,
+ 0x247b45,
+ 0x283709,
+ 0x286dc9,
+ 0x235cc4,
+ 0x235d05,
+ 0x235f05,
+ 0x2e1546,
+ 0x309048,
+ 0x2c2c46,
+ 0x36898b,
+ 0x2b4c8a,
+ 0x2b6905,
+ 0x290406,
+ 0x3025c5,
+ 0x2e0a45,
+ 0x2ab6c7,
+ 0x3ac808,
+ 0x245984,
+ 0x26c586,
+ 0x292e46,
+ 0x214bc7,
+ 0x30d7c4,
+ 0x2817c6,
+ 0x2b9f85,
+ 0x2b9f89,
+ 0x2135c4,
+ 0x2a7209,
+ 0x27fa46,
+ 0x2c5108,
+ 0x235f05,
+ 0x36f105,
+ 0x233c06,
+ 0x219d89,
+ 0x218f89,
+ 0x2472c6,
+ 0x30e0c8,
+ 0x28abc8,
+ 0x302584,
+ 0x2b9004,
+ 0x2b9008,
+ 0x3269c8,
+ 0x245a89,
+ 0x38ec86,
+ 0x2a4dc6,
+ 0x320c0d,
+ 0x351c06,
+ 0x34c209,
+ 0x23d1c5,
+ 0x3b2106,
+ 0x262d48,
+ 0x31d9c5,
+ 0x2479c4,
+ 0x270f45,
+ 0x2866c8,
+ 0x29fc49,
+ 0x27c804,
+ 0x2008c6,
+ 0x39660a,
+ 0x2fa988,
+ 0x24d609,
+ 0x244c4a,
+ 0x3341c6,
+ 0x29ed88,
+ 0x2c20c5,
+ 0x2c0e48,
+ 0x2bd885,
+ 0x219ac9,
+ 0x36bd09,
+ 0x203602,
+ 0x2e3305,
+ 0x276286,
+ 0x27f987,
+ 0x295705,
+ 0x2f0ec6,
+ 0x306288,
+ 0x299886,
+ 0x2b9a09,
+ 0x27e306,
+ 0x25d388,
+ 0x2afb85,
+ 0x25c586,
+ 0x26aac8,
+ 0x285b88,
+ 0x2e9f88,
+ 0x347b08,
+ 0x219644,
+ 0x209fc3,
+ 0x2b9c44,
+ 0x249b06,
+ 0x28b9c4,
+ 0x231407,
+ 0x2ea249,
+ 0x2c7a05,
+ 0x30cc86,
+ 0x229946,
+ 0x34fb4b,
+ 0x2b6846,
+ 0x20edc6,
+ 0x2cb6c8,
+ 0x24c646,
+ 0x2bcb03,
+ 0x2080c3,
+ 0x2b8bc4,
+ 0x22e605,
+ 0x2b4447,
+ 0x27c988,
+ 0x27c98f,
+ 0x280b0b,
+ 0x308e48,
+ 0x200946,
+ 0x30914e,
+ 0x233c03,
+ 0x2b43c4,
+ 0x2b67c5,
+ 0x2b6bc6,
+ 0x2914cb,
+ 0x297b46,
+ 0x222709,
+ 0x2b3045,
+ 0x38a208,
+ 0x211d88,
+ 0x218e4c,
+ 0x2a4706,
+ 0x264886,
+ 0x2de405,
+ 0x28c188,
+ 0x26aac5,
+ 0x335848,
+ 0x2a084a,
+ 0x2a3a49,
+ 0x68a8c4,
+ 0x3760d1c2,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x368883,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204ac3,
+ 0x200383,
+ 0x210e03,
+ 0x24ae04,
+ 0x2d0783,
+ 0x23a184,
+ 0x231b83,
+ 0x2da904,
+ 0x332ec3,
+ 0x2959c7,
+ 0x20fbc3,
+ 0x20abc3,
+ 0x2842c8,
+ 0x200383,
+ 0x2b400b,
+ 0x2f2a03,
+ 0x2716c6,
+ 0x205bc2,
+ 0x26b44b,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x200383,
+ 0x200e03,
+ 0x203383,
+ 0x204cc2,
+ 0x15f048,
+ 0x325b45,
+ 0x247bc8,
+ 0x2ec408,
+ 0x20d1c2,
+ 0x329dc5,
+ 0x39c307,
+ 0x2001c2,
+ 0x24b587,
+ 0x208a42,
+ 0x246f87,
+ 0x239ec9,
+ 0x2c1c88,
+ 0x3a88c9,
+ 0x338b02,
+ 0x270647,
+ 0x2abac4,
+ 0x39c3c7,
+ 0x2b4b87,
+ 0x24ca02,
+ 0x20fbc3,
+ 0x20b602,
+ 0x202082,
+ 0x200382,
+ 0x217902,
+ 0x200e02,
+ 0x20c4c2,
+ 0x2af685,
+ 0x24dec5,
+ 0xd1c2,
+ 0x31b83,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x117c3,
+ 0x701,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204303,
+ 0x204ac3,
+ 0x200383,
+ 0x21bd03,
+ 0x3a40d686,
+ 0x5e303,
+ 0x854c5,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x8082,
+ 0x15f048,
+ 0x4dcc4,
+ 0xe0f85,
+ 0x204cc2,
+ 0x2cfa44,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x236d03,
+ 0x2b0405,
+ 0x204303,
+ 0x205d83,
+ 0x204ac3,
+ 0x2104c3,
+ 0x200383,
+ 0x213e83,
+ 0x24ae83,
+ 0x24abc3,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x20d1c2,
+ 0x200383,
+ 0x15f048,
+ 0x332ec3,
+ 0x15f048,
+ 0x26ae03,
+ 0x2d0783,
+ 0x22ef04,
+ 0x231b83,
+ 0x332ec3,
+ 0x20a3c2,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20a3c2,
+ 0x22d603,
+ 0x204ac3,
+ 0x200383,
+ 0x2ec383,
+ 0x213e83,
+ 0x204cc2,
+ 0x20d1c2,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x2716c5,
+ 0x1540c6,
+ 0x24ae04,
+ 0x205bc2,
+ 0x15f048,
+ 0x204cc2,
+ 0x1d508,
+ 0x20d1c2,
+ 0x97606,
+ 0x1681c4,
+ 0x16e1cb,
+ 0x3dc06,
+ 0xfcc7,
+ 0x231b83,
+ 0x332ec3,
+ 0x15ae05,
+ 0x19c804,
+ 0x221543,
+ 0x53fc7,
+ 0xdc304,
+ 0x204ac3,
+ 0x94fc4,
+ 0x200383,
+ 0x2f39c4,
+ 0xfe588,
+ 0x125886,
+ 0x114f85,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x20abc3,
+ 0x200383,
+ 0x2f2a03,
+ 0x205bc2,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204143,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x2da904,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x2716c6,
+ 0x231b83,
+ 0x332ec3,
+ 0x178ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0xfcc7,
+ 0x15f048,
+ 0x332ec3,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x40ed0783,
+ 0x231b83,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x204cc2,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200382,
+ 0x200383,
+ 0x316e47,
+ 0x23860b,
+ 0x2396c3,
+ 0x24be08,
+ 0x296687,
+ 0x225246,
+ 0x2c6145,
+ 0x373549,
+ 0x20f948,
+ 0x260d09,
+ 0x260d10,
+ 0x35d28b,
+ 0x385989,
+ 0x209303,
+ 0x2b5649,
+ 0x230806,
+ 0x23080c,
+ 0x260f08,
+ 0x3ae848,
+ 0x35d7c9,
+ 0x2a5d0e,
+ 0x20780b,
+ 0x2eb20c,
+ 0x205283,
+ 0x26cc4c,
+ 0x205289,
+ 0x257a87,
+ 0x231acc,
+ 0x36aa8a,
+ 0x24fe44,
+ 0x393f4d,
+ 0x26cb08,
+ 0x210e0d,
+ 0x272746,
+ 0x29258b,
+ 0x31a3c9,
+ 0x23d087,
+ 0x339606,
+ 0x349d89,
+ 0x38ce8a,
+ 0x37a0c8,
+ 0x2f24c4,
+ 0x34ecc7,
+ 0x3ac5c7,
+ 0x3a8dc4,
+ 0x32d984,
+ 0x237209,
+ 0x2ceac9,
+ 0x237908,
+ 0x210b85,
+ 0x392545,
+ 0x20aa06,
+ 0x393e09,
+ 0x23a80d,
+ 0x2eac88,
+ 0x20a907,
+ 0x2c61c8,
+ 0x382986,
+ 0x37ed04,
+ 0x359b85,
+ 0x202246,
+ 0x203204,
+ 0x205187,
+ 0x206d8a,
+ 0x211cc4,
+ 0x2167c6,
+ 0x2182c9,
+ 0x2182cf,
+ 0x2197cd,
+ 0x21a486,
+ 0x21d110,
+ 0x21d506,
+ 0x21dc47,
+ 0x21ebc7,
+ 0x21ebcf,
+ 0x21f889,
+ 0x2242c6,
+ 0x226487,
+ 0x226488,
+ 0x227649,
+ 0x2b3108,
+ 0x2e7907,
+ 0x20a203,
+ 0x378c86,
+ 0x3abf08,
+ 0x2a5fca,
+ 0x21fe49,
+ 0x20fa83,
+ 0x39c206,
+ 0x26c3ca,
+ 0x2fca47,
+ 0x2578ca,
+ 0x26a24e,
+ 0x21f9c6,
+ 0x2e3507,
+ 0x227086,
+ 0x201806,
+ 0x37da4b,
+ 0x30c58a,
+ 0x317ecd,
+ 0x217cc7,
+ 0x359188,
+ 0x359189,
+ 0x35918f,
+ 0x20e28c,
+ 0x281bc9,
+ 0x2e928e,
+ 0x295aca,
+ 0x3035c6,
+ 0x2fbbc6,
+ 0x3b06cc,
+ 0x3106cc,
+ 0x311448,
+ 0x33d1c7,
+ 0x25b7c5,
+ 0x2251c4,
+ 0x2438ce,
+ 0x38d104,
+ 0x257bc7,
+ 0x26d08a,
+ 0x36e914,
+ 0x373a4f,
+ 0x21ed88,
+ 0x378b48,
+ 0x357e8d,
+ 0x357e8e,
+ 0x3823c9,
+ 0x3a5b08,
+ 0x3a5b0f,
+ 0x2317cc,
+ 0x2317cf,
+ 0x232a07,
+ 0x23acca,
+ 0x21cc4b,
+ 0x23bcc8,
+ 0x23e5c7,
+ 0x264f4d,
+ 0x3151c6,
+ 0x394106,
+ 0x2417c9,
+ 0x259888,
+ 0x24c108,
+ 0x24c10e,
+ 0x238707,
+ 0x226985,
+ 0x24da85,
+ 0x205e04,
+ 0x225506,
+ 0x237808,
+ 0x260183,
+ 0x2efb8e,
+ 0x265308,
+ 0x2f198b,
+ 0x26afc7,
+ 0x395e05,
+ 0x26cdc6,
+ 0x2b0e07,
+ 0x307048,
+ 0x319f09,
+ 0x298fc5,
+ 0x28a188,
+ 0x217306,
+ 0x3a02ca,
+ 0x2437c9,
+ 0x231b89,
+ 0x231b8b,
+ 0x201148,
+ 0x3a8c89,
+ 0x210c46,
+ 0x22c54a,
+ 0x2b7f4a,
+ 0x23aecc,
+ 0x3acb87,
+ 0x2c1a8a,
+ 0x328ecb,
+ 0x328ed9,
+ 0x30fa48,
+ 0x271745,
+ 0x265106,
+ 0x258fc9,
+ 0x261cc6,
+ 0x21324a,
+ 0x20fb46,
+ 0x201e44,
+ 0x2c9ecd,
+ 0x201e47,
+ 0x20b549,
+ 0x383305,
+ 0x24e548,
+ 0x24ee89,
+ 0x24f0c4,
+ 0x24fd47,
+ 0x24fd48,
+ 0x250287,
+ 0x26ea08,
+ 0x2545c7,
+ 0x35c2c5,
+ 0x25c70c,
+ 0x25cf49,
+ 0x2c4dca,
+ 0x38f0c9,
+ 0x2b5749,
+ 0x2739cc,
+ 0x263e0b,
+ 0x2640c8,
+ 0x265688,
+ 0x268a44,
+ 0x288288,
+ 0x289389,
+ 0x36ab47,
+ 0x218506,
+ 0x317287,
+ 0x21e1c9,
+ 0x328b0b,
+ 0x32cfc7,
+ 0x200407,
+ 0x238047,
+ 0x210d84,
+ 0x210d85,
+ 0x2ac905,
+ 0x33c00b,
+ 0x399404,
+ 0x369d08,
+ 0x26f08a,
+ 0x2173c7,
+ 0x341dc7,
+ 0x290c12,
+ 0x27ee46,
+ 0x22e886,
+ 0x35898e,
+ 0x281346,
+ 0x298708,
+ 0x29938f,
+ 0x2111c8,
+ 0x38bb08,
+ 0x3af64a,
+ 0x3af651,
+ 0x2a6b4e,
+ 0x254e4a,
+ 0x254e4c,
+ 0x2014c7,
+ 0x3a5d10,
+ 0x3b5388,
+ 0x2a6d45,
+ 0x2b114a,
+ 0x20324c,
+ 0x29afcd,
+ 0x2fce06,
+ 0x2fce07,
+ 0x2fce0c,
+ 0x305c8c,
+ 0x32814c,
+ 0x28f98b,
+ 0x289b84,
+ 0x21f744,
+ 0x374149,
+ 0x2fe3c7,
+ 0x23e389,
+ 0x2b7d89,
+ 0x35a587,
+ 0x36a906,
+ 0x36a909,
+ 0x39d403,
+ 0x2129ca,
+ 0x32f807,
+ 0x238acb,
+ 0x317d4a,
+ 0x2abb44,
+ 0x39c546,
+ 0x284c89,
+ 0x3b3bc4,
+ 0x2035ca,
+ 0x2d4ac5,
+ 0x2c0005,
+ 0x2c000d,
+ 0x2c034e,
+ 0x378205,
+ 0x323506,
+ 0x2712c7,
+ 0x38684a,
+ 0x38d406,
+ 0x35ecc4,
+ 0x2f8987,
+ 0x2da18b,
+ 0x382a47,
+ 0x282ac4,
+ 0x24f706,
+ 0x24f70d,
+ 0x21de8c,
+ 0x204986,
+ 0x2eae8a,
+ 0x235806,
+ 0x2f3248,
+ 0x28bf47,
+ 0x33f88a,
+ 0x23d986,
+ 0x217bc3,
+ 0x262ec6,
+ 0x3abd88,
+ 0x2a024a,
+ 0x2766c7,
+ 0x2766c8,
+ 0x27dd84,
+ 0x2cc0c7,
+ 0x23ccc8,
+ 0x29e008,
+ 0x288b48,
+ 0x33110a,
+ 0x2e0405,
+ 0x2e0687,
+ 0x254c93,
+ 0x2d0806,
+ 0x26f288,
+ 0x222c09,
+ 0x24b448,
+ 0x3514cb,
+ 0x2cddc8,
+ 0x273704,
+ 0x215446,
+ 0x3b4f06,
+ 0x35e0c9,
+ 0x2c72c7,
+ 0x25c808,
+ 0x29e186,
+ 0x235144,
+ 0x2ce085,
+ 0x2c8a08,
+ 0x2c900a,
+ 0x2c9b48,
+ 0x2ce746,
+ 0x29ef8a,
+ 0x351988,
+ 0x2d5008,
+ 0x2d6a88,
+ 0x2d70c6,
+ 0x2d93c6,
+ 0x20168c,
+ 0x2d99d0,
+ 0x28de45,
+ 0x210fc8,
+ 0x306790,
+ 0x210fd0,
+ 0x260b8e,
+ 0x20130e,
+ 0x201314,
+ 0x31abcf,
+ 0x31af86,
+ 0x3319d1,
+ 0x339793,
+ 0x339c08,
+ 0x3aafc5,
+ 0x35b6c8,
+ 0x385785,
+ 0x22854c,
+ 0x229489,
+ 0x282449,
+ 0x245d47,
+ 0x377009,
+ 0x243d87,
+ 0x2fadc6,
+ 0x359987,
+ 0x261245,
+ 0x211803,
+ 0x260349,
+ 0x222ec9,
+ 0x378ac3,
+ 0x39a544,
+ 0x35c40d,
+ 0x3b1b0f,
+ 0x235185,
+ 0x35b5c6,
+ 0x211b07,
+ 0x325987,
+ 0x28cd86,
+ 0x28cd8b,
+ 0x2a82c5,
+ 0x25f106,
+ 0x2fba47,
+ 0x276ec9,
+ 0x2290c6,
+ 0x22e405,
+ 0x31190b,
+ 0x23bb46,
+ 0x3724c5,
+ 0x28b548,
+ 0x321d88,
+ 0x2d75cc,
+ 0x2d75d0,
+ 0x2e0149,
+ 0x2e7107,
+ 0x30860b,
+ 0x2e6186,
+ 0x2e77ca,
+ 0x2ea4cb,
+ 0x2eb74a,
+ 0x2eb9c6,
+ 0x2ec245,
+ 0x32f546,
+ 0x27e4c8,
+ 0x245e0a,
+ 0x357b1c,
+ 0x2f2acc,
+ 0x2f2dc8,
+ 0x2716c5,
+ 0x2f4f07,
+ 0x26a106,
+ 0x27d385,
+ 0x21c2c6,
+ 0x28cf48,
+ 0x2be807,
+ 0x2a5c08,
+ 0x2e360a,
+ 0x34a10c,
+ 0x34a389,
+ 0x37ee87,
+ 0x20d244,
+ 0x24db46,
+ 0x38b68a,
+ 0x2b7e85,
+ 0x20734c,
+ 0x20b088,
+ 0x377648,
+ 0x20d98c,
+ 0x21be8c,
+ 0x2206c9,
+ 0x220907,
+ 0x342c0c,
+ 0x3aa644,
+ 0x23c54a,
+ 0x2580cc,
+ 0x278acb,
+ 0x24140b,
+ 0x241f46,
+ 0x383847,
+ 0x2ddb07,
+ 0x3a5f4f,
+ 0x2fda11,
+ 0x2ddb12,
+ 0x30d0cd,
+ 0x30d0ce,
+ 0x30d40e,
+ 0x31ad88,
+ 0x31ad92,
+ 0x252288,
+ 0x2962c7,
+ 0x25260a,
+ 0x204748,
+ 0x281305,
+ 0x37e0ca,
+ 0x21da47,
+ 0x305304,
+ 0x21b083,
+ 0x2b0fc5,
+ 0x3af8c7,
+ 0x2fea07,
+ 0x29b1ce,
+ 0x30ff4d,
+ 0x313c49,
+ 0x220c45,
+ 0x33aa03,
+ 0x25fac6,
+ 0x36ffc5,
+ 0x2f1bc8,
+ 0x30c009,
+ 0x265145,
+ 0x26514f,
+ 0x2ec087,
+ 0x373485,
+ 0x21b2ca,
+ 0x299b86,
+ 0x2f33c9,
+ 0x384d0c,
+ 0x2f99c9,
+ 0x207b06,
+ 0x26ee8c,
+ 0x340cc6,
+ 0x2fc548,
+ 0x2fc746,
+ 0x30fbc6,
+ 0x349344,
+ 0x264443,
+ 0x2b270a,
+ 0x35b211,
+ 0x281d8a,
+ 0x255d05,
+ 0x277947,
+ 0x259307,
+ 0x23cdc4,
+ 0x23cdcb,
+ 0x3a8748,
+ 0x2bd306,
+ 0x36ef45,
+ 0x3a05c4,
+ 0x291949,
+ 0x330304,
+ 0x25cd87,
+ 0x332705,
+ 0x332707,
+ 0x358bc5,
+ 0x2af743,
+ 0x296188,
+ 0x34398a,
+ 0x239b43,
+ 0x325b8a,
+ 0x3b4086,
+ 0x264ecf,
+ 0x353689,
+ 0x2efb10,
+ 0x2dee88,
+ 0x2d0e89,
+ 0x29d087,
+ 0x24f68f,
+ 0x334604,
+ 0x2da984,
+ 0x21d386,
+ 0x2b3546,
+ 0x256dca,
+ 0x383586,
+ 0x32a787,
+ 0x3055c8,
+ 0x3057c7,
+ 0x306047,
+ 0x307a4a,
+ 0x309b4b,
+ 0x3a2445,
+ 0x2dd748,
+ 0x2166c3,
+ 0x3b120c,
+ 0x37140f,
+ 0x25b5cd,
+ 0x2c4607,
+ 0x313d89,
+ 0x217687,
+ 0x23e148,
+ 0x36eb0c,
+ 0x273608,
+ 0x258908,
+ 0x3188ce,
+ 0x32bad4,
+ 0x32bfe4,
+ 0x3424ca,
+ 0x35ea8b,
+ 0x243e44,
+ 0x243e49,
+ 0x21e9c8,
+ 0x24e105,
+ 0x25fc8a,
+ 0x239d87,
+ 0x2957c4,
+ 0x368883,
+ 0x2d0783,
+ 0x23a184,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204303,
+ 0x20fbc3,
+ 0x201686,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x21aa03,
+ 0x204cc2,
+ 0x368883,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x23a184,
+ 0x231b83,
+ 0x332ec3,
+ 0x204303,
+ 0x201686,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x204cc2,
+ 0x21fd43,
+ 0x20d1c2,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x20e542,
+ 0x20d882,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x209c02,
+ 0x201d42,
+ 0x2964c4,
+ 0x222044,
+ 0x223342,
+ 0x213184,
+ 0x200382,
+ 0x200383,
+ 0x21aa03,
+ 0x241f46,
+ 0x217082,
+ 0x2016c2,
+ 0x201a82,
+ 0x436111c3,
+ 0x43a014c3,
+ 0x59a86,
+ 0x59a86,
+ 0x24ae04,
+ 0x143768a,
+ 0x2608c,
+ 0x21ecc,
+ 0x852cd,
+ 0x2ac47,
+ 0x1a608,
+ 0x218c8,
+ 0x19834a,
+ 0x446db445,
+ 0x12b089,
+ 0x103008,
+ 0x8ed4a,
+ 0x14a60e,
+ 0x144b24b,
+ 0x1681c4,
+ 0x1672c8,
+ 0x13edc7,
+ 0x16f07,
+ 0x11dd09,
+ 0x1b3c47,
+ 0x94b88,
+ 0x61f49,
+ 0x4bfc5,
+ 0x12494e,
+ 0xafbcd,
+ 0xfb48,
+ 0x44a37046,
+ 0x45437048,
+ 0x79c88,
+ 0x117050,
+ 0x69c87,
+ 0x6cf47,
+ 0x71187,
+ 0x75f87,
+ 0xa9c2,
+ 0x62507,
+ 0x10c74c,
+ 0x3b9c7,
+ 0xa9f46,
+ 0xaa689,
+ 0xad708,
+ 0x18d82,
+ 0x1d42,
+ 0x24a0b,
+ 0x2ccc9,
+ 0x4c809,
+ 0x17de88,
+ 0xb5e02,
+ 0x104389,
+ 0xd2fca,
+ 0xdb9c9,
+ 0xdd048,
+ 0xddfc7,
+ 0xe0389,
+ 0xe4685,
+ 0xe4a90,
+ 0x1a8e86,
+ 0x63c85,
+ 0x4a84d,
+ 0x1b3806,
+ 0xee547,
+ 0xf39d8,
+ 0x96b88,
+ 0xba9ca,
+ 0x53b4d,
+ 0x1702,
+ 0x177ac6,
+ 0x91788,
+ 0x1ae208,
+ 0x15ef09,
+ 0x56608,
+ 0x5dece,
+ 0xd68d,
+ 0xf8805,
+ 0x62288,
+ 0x59688,
+ 0x6902,
+ 0x125886,
+ 0x6c82,
+ 0x3c1,
+ 0x8b4c3,
+ 0x44ef4244,
+ 0x4529a283,
0x141,
- 0x1650c6,
+ 0x15c06,
0x141,
0x1,
- 0x1650c6,
- 0x14f60c5,
- 0x245dc4,
- 0x22d183,
- 0x247344,
- 0x201604,
- 0x238483,
- 0x2245c5,
- 0x21ca03,
- 0x215cc3,
- 0x2e9cc5,
- 0x223ec3,
- 0x3fe2d183,
- 0x2343c3,
- 0x21eb03,
+ 0x15c06,
+ 0x8b4c3,
+ 0x14e4285,
+ 0x24fe44,
+ 0x2d0783,
+ 0x251304,
+ 0x2964c4,
+ 0x204ac3,
+ 0x222ac5,
+ 0x21bd03,
+ 0x2202c3,
+ 0x370145,
+ 0x24abc3,
+ 0x466d0783,
+ 0x231b83,
+ 0x332ec3,
0x200041,
- 0x211003,
- 0x307b04,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x217643,
- 0x880c8,
- 0x200882,
- 0x323ac3,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x211cc3,
- 0x200a82,
- 0x201604,
- 0x202243,
- 0x211003,
- 0x238483,
- 0x2025c3,
- 0x2264c3,
- 0x223ec3,
- 0x880c8,
- 0x38bcc2,
- 0x16582,
- 0x1462d48,
- 0xf738e,
- 0x40e00142,
- 0x29e988,
- 0x227fc6,
- 0x2bb546,
- 0x227947,
- 0x41201102,
- 0x417566c8,
- 0x3af8ca,
- 0x2606c8,
- 0x201002,
- 0x29e609,
- 0x38e807,
- 0x21ac06,
- 0x201009,
- 0x254704,
- 0x2f5fc6,
- 0x2d5fc4,
- 0x273a04,
- 0x2563c9,
- 0x281786,
- 0x2e3d85,
- 0x220e45,
- 0x3a5287,
- 0x2b7cc7,
- 0x243884,
- 0x227b86,
- 0x39fac5,
- 0x202b05,
- 0x2f5905,
- 0x392547,
- 0x366785,
- 0x308bc9,
- 0x2808c5,
- 0x2d07c4,
- 0x39a387,
- 0x30584e,
- 0x30fc49,
- 0x322e89,
- 0x348986,
- 0x31e708,
- 0x2b024b,
- 0x2d210c,
- 0x25b946,
- 0x37cb07,
- 0x209805,
- 0x20f24a,
- 0x20a689,
- 0x252249,
- 0x293d86,
- 0x2ee6c5,
- 0x28b145,
- 0x361f09,
- 0x2f5a8b,
- 0x277606,
- 0x32e5c6,
- 0x20d2c4,
- 0x288bc6,
- 0x25f948,
- 0x203d06,
- 0x3a82c6,
- 0x208bc8,
- 0x2093c7,
- 0x209589,
- 0x20c445,
- 0x880c8,
- 0x378504,
- 0x229e04,
- 0x212d45,
- 0x395589,
- 0x223707,
- 0x22370b,
- 0x2255ca,
- 0x22b185,
- 0x41a0b602,
- 0x2173c7,
- 0x41e2c488,
- 0x2833c7,
- 0x281ac5,
- 0x32594a,
- 0x16582,
- 0x24b90b,
- 0x2adc4a,
- 0x2248c6,
- 0x3a31c3,
- 0x230dcd,
- 0x3320cc,
- 0x36210d,
- 0x3845c5,
- 0x237205,
- 0x24f147,
- 0x3a8e89,
- 0x3af7c6,
- 0x390245,
- 0x2ee3c8,
- 0x288ac3,
- 0x2e8108,
- 0x288ac8,
- 0x2bc507,
- 0x2e62c8,
- 0x3af3c9,
- 0x236107,
- 0x20ae07,
- 0x335048,
- 0x253384,
- 0x253387,
- 0x266a88,
- 0x205846,
- 0x3661cf,
- 0x215507,
- 0x2e3506,
- 0x25a405,
- 0x224f43,
- 0x372207,
- 0x36e143,
- 0x246506,
- 0x247f86,
- 0x249686,
- 0x28d1c5,
- 0x263e83,
- 0x3885c8,
- 0x370489,
- 0x38124b,
- 0x249808,
- 0x24c4c5,
- 0x24d4c5,
- 0x4223aa82,
- 0x37f509,
- 0x201687,
- 0x258b45,
- 0x2562c7,
- 0x257e06,
- 0x35eb05,
- 0x36f9cb,
- 0x259e44,
- 0x260285,
- 0x2603c7,
- 0x271986,
- 0x271fc5,
- 0x27dbc7,
- 0x27e647,
- 0x26db04,
- 0x2871ca,
- 0x287688,
- 0x3685c9,
- 0x3a65c5,
- 0x333386,
- 0x25fb0a,
- 0x220d46,
- 0x24bb47,
- 0x318a8d,
- 0x2273c9,
- 0x30ff45,
- 0x24ff87,
- 0x335608,
- 0x3675c8,
- 0x341b87,
- 0x34a486,
- 0x2116c7,
- 0x247883,
- 0x337ec4,
- 0x35c385,
- 0x38cac7,
- 0x391f49,
- 0x21a6c8,
- 0x22fd05,
- 0x382a04,
- 0x240e85,
- 0x2448cd,
- 0x201142,
- 0x3006c6,
- 0x3610c6,
- 0x2bde4a,
- 0x3791c6,
- 0x37fc45,
- 0x319285,
- 0x319287,
- 0x38b14c,
- 0x26fb8a,
- 0x288886,
- 0x29e445,
- 0x288a06,
+ 0x20fbc3,
+ 0x222044,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x213e83,
+ 0x15f048,
+ 0x204cc2,
+ 0x368883,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x201d42,
+ 0x2964c4,
+ 0x204303,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x20abc3,
+ 0x200383,
+ 0x24abc3,
+ 0x15f048,
+ 0x371182,
+ 0xd1c2,
+ 0x1491b48,
+ 0x10598e,
+ 0x47608c42,
+ 0x32f9c8,
+ 0x233d86,
+ 0x210186,
+ 0x233707,
+ 0x47a00902,
+ 0x47f53508,
+ 0x20ebca,
+ 0x269708,
+ 0x201442,
+ 0x32f649,
+ 0x3a2487,
+ 0x218486,
+ 0x295ec9,
+ 0x247ec4,
+ 0x2e4186,
+ 0x2e1bc4,
+ 0x26bdc4,
+ 0x25bf49,
+ 0x326286,
+ 0x24df85,
+ 0x291285,
+ 0x390387,
+ 0x2c3747,
+ 0x2911c4,
+ 0x233946,
+ 0x2ffb45,
+ 0x367445,
+ 0x302505,
+ 0x392307,
+ 0x26ae05,
+ 0x315e49,
+ 0x32d305,
+ 0x307184,
+ 0x38d347,
+ 0x32ecce,
+ 0x330a09,
+ 0x358849,
+ 0x3ac9c6,
+ 0x2fe248,
+ 0x2b520b,
+ 0x2e3b0c,
+ 0x2898c6,
+ 0x2076c7,
+ 0x37b305,
+ 0x32d98a,
+ 0x237a09,
+ 0x3aa989,
+ 0x257646,
+ 0x2fb805,
+ 0x2aabc5,
+ 0x348f89,
+ 0x30268b,
+ 0x280f46,
+ 0x338346,
+ 0x20a904,
+ 0x2908c6,
+ 0x226a08,
+ 0x3abc06,
+ 0x20c5c6,
+ 0x206188,
+ 0x207f47,
+ 0x208649,
+ 0x209705,
+ 0x15f048,
+ 0x216e84,
+ 0x33d5c4,
+ 0x369f05,
+ 0x204f49,
+ 0x222347,
+ 0x22234b,
+ 0x223e4a,
+ 0x228485,
+ 0x4820a002,
+ 0x238987,
+ 0x48629248,
+ 0x27be07,
+ 0x2bf945,
+ 0x3aac0a,
+ 0xd1c2,
+ 0x38740b,
+ 0x25470a,
+ 0x222dc6,
+ 0x395e03,
+ 0x29538d,
+ 0x3582cc,
+ 0x37f24d,
+ 0x381085,
+ 0x227dc5,
+ 0x2601c7,
+ 0x209c09,
+ 0x20eac6,
+ 0x383405,
+ 0x2d8008,
+ 0x2907c3,
+ 0x2ec708,
+ 0x2907c8,
+ 0x2c6c47,
+ 0x3b2448,
+ 0x39b7c9,
+ 0x2c9747,
+ 0x238187,
+ 0x302b88,
+ 0x38ca44,
+ 0x38ca47,
+ 0x272648,
+ 0x2024c6,
+ 0x206fcf,
+ 0x2118c7,
+ 0x2e7a86,
+ 0x23e2c5,
+ 0x223783,
+ 0x365a47,
+ 0x36da03,
+ 0x250446,
+ 0x251c46,
+ 0x252a06,
+ 0x296e85,
+ 0x26ea03,
+ 0x388a48,
+ 0x370c89,
+ 0x37ffcb,
+ 0x252b88,
+ 0x254285,
+ 0x256405,
+ 0x48aabc02,
+ 0x359a49,
+ 0x296547,
+ 0x25f185,
+ 0x25be47,
+ 0x25dd86,
+ 0x363f05,
+ 0x36fe0b,
+ 0x2640c4,
+ 0x2692c5,
+ 0x269407,
+ 0x27b786,
+ 0x27bbc5,
+ 0x288487,
0x288d47,
- 0x28a9c6,
- 0x28d0cc,
- 0x201149,
- 0x42765547,
- 0x290305,
- 0x290306,
- 0x2906c8,
- 0x2b1f05,
- 0x2a4805,
- 0x2a4a48,
- 0x2a4c4a,
- 0x42a6a242,
- 0x42e0ff82,
- 0x382245,
- 0x29cdc3,
- 0x37a688,
- 0x21d083,
- 0x2a4ec4,
- 0x23de4b,
- 0x272408,
- 0x2d77c8,
- 0x433255c9,
- 0x2a8949,
- 0x2a9006,
- 0x2aa5c8,
- 0x2aa7c9,
- 0x2ab386,
- 0x2ab505,
- 0x383086,
- 0x2abc09,
- 0x2802c7,
- 0x243f06,
- 0x235c47,
- 0x3af647,
- 0x33b504,
- 0x43743909,
- 0x2c2288,
- 0x3565c8,
- 0x2368c7,
- 0x2bd906,
- 0x2fe209,
- 0x331f47,
- 0x2f1b0a,
- 0x376848,
- 0x3237c7,
- 0x326086,
- 0x33aa0a,
- 0x249fc8,
- 0x28ab05,
- 0x21bf85,
- 0x2bcb87,
- 0x2d26c9,
- 0x2d6e0b,
- 0x2dd8c8,
- 0x280949,
- 0x249b07,
- 0x3ad20c,
- 0x2b1acc,
- 0x2b1dca,
- 0x2b204c,
- 0x2bb4c8,
- 0x2bb6c8,
- 0x2bb8c4,
- 0x2bbc89,
- 0x2bbec9,
- 0x2bc10a,
- 0x2bc389,
- 0x2bc6c7,
- 0x20010c,
- 0x36ef86,
- 0x26de48,
- 0x220e06,
- 0x387346,
- 0x30fe47,
- 0x341d08,
- 0x25180b,
- 0x283287,
- 0x2aeb49,
- 0x2474c9,
- 0x255f87,
- 0x2d6204,
- 0x35efc7,
- 0x29f606,
- 0x219006,
- 0x38d985,
- 0x2ccd88,
- 0x20ef04,
- 0x20ef06,
- 0x26fa4b,
- 0x2a2389,
- 0x364086,
- 0x3a8409,
- 0x3926c6,
- 0x2fec08,
- 0x214803,
- 0x2083c5,
- 0x219149,
- 0x21fe05,
- 0x3a6084,
- 0x270fc6,
- 0x3a5a85,
- 0x2e6846,
- 0x2fbc07,
- 0x367186,
- 0x2952cb,
- 0x2b0647,
- 0x2d2586,
- 0x374346,
- 0x3a5346,
- 0x243849,
- 0x26238a,
- 0x2b6045,
- 0x21f68d,
- 0x2a4d46,
- 0x391246,
- 0x2e21c6,
- 0x210205,
- 0x2d3007,
- 0x2962c7,
- 0x23b68e,
- 0x211003,
- 0x2bd8c9,
- 0x318fc9,
- 0x20f647,
- 0x276b87,
- 0x299d85,
- 0x306f45,
- 0x43a7eacf,
- 0x2c4807,
- 0x2c49c8,
- 0x2c5a44,
- 0x2c5d06,
- 0x43e43b02,
- 0x2ca1c6,
- 0x2cc5c6,
- 0x251b4e,
- 0x2e7f4a,
- 0x21cd06,
- 0x33fcca,
- 0x3b4089,
- 0x316fc5,
- 0x393b48,
- 0x3ad0c6,
- 0x34ab88,
- 0x30f788,
- 0x25ab8b,
- 0x227a45,
- 0x366808,
- 0x208d0c,
- 0x281987,
- 0x248b06,
- 0x22f108,
- 0x201948,
- 0x44208382,
- 0x362b0b,
- 0x280bc9,
- 0x363e89,
- 0x209987,
- 0x30e688,
- 0x4460c648,
- 0x3a8c0b,
- 0x22b6c9,
- 0x20870d,
- 0x217e88,
- 0x22c288,
- 0x44a02282,
- 0x31d784,
- 0x44e23b42,
- 0x2ebc06,
- 0x452016c2,
- 0x3a180a,
- 0x201fc6,
- 0x225f08,
- 0x31ea08,
- 0x2b7546,
- 0x386986,
- 0x2e6606,
- 0x2a00c5,
- 0x23b184,
- 0x456feb84,
- 0x338986,
- 0x269047,
- 0x45a2ab47,
- 0x32be0b,
- 0x305c09,
- 0x23724a,
- 0x251404,
- 0x3193c8,
- 0x243ccd,
- 0x2e07c9,
- 0x2e0a08,
- 0x2e1149,
- 0x2e26c4,
- 0x200f04,
- 0x269885,
- 0x30b48b,
- 0x272386,
- 0x3387c5,
- 0x281c49,
- 0x227c48,
- 0x29ca84,
- 0x20f3c9,
- 0x2b0585,
- 0x2b7d08,
- 0x20b4c7,
- 0x323288,
- 0x27a506,
- 0x217287,
- 0x28eb89,
- 0x21c209,
- 0x2460c5,
- 0x231445,
- 0x45e25242,
- 0x39a144,
- 0x2fd585,
- 0x2a9746,
- 0x2f89c5,
- 0x268307,
- 0x243405,
- 0x243484,
- 0x348a46,
- 0x3902c7,
- 0x243b46,
- 0x325dc5,
- 0x31d488,
- 0x2281c5,
- 0x332607,
- 0x397409,
- 0x2a24ca,
- 0x22dac7,
- 0x22dacc,
- 0x2e3d46,
- 0x226349,
- 0x2ad585,
- 0x2c6e08,
- 0x211543,
- 0x211545,
- 0x2e9405,
- 0x256cc7,
- 0x46214f02,
- 0x236e47,
- 0x2d6786,
- 0x343846,
- 0x2e8cc6,
- 0x201886,
- 0x347e88,
- 0x3583c5,
- 0x2e35c7,
- 0x2e35cd,
- 0x202b43,
- 0x3a35c5,
- 0x3068c7,
- 0x3864c8,
- 0x386085,
- 0x366c88,
- 0x22a946,
- 0x31f507,
- 0x2bcf05,
- 0x227ac6,
- 0x3711c5,
- 0x2ba40a,
- 0x2eb1c6,
- 0x236487,
- 0x2c5bc5,
- 0x35a387,
- 0x35e244,
- 0x3a6006,
- 0x2f61c5,
- 0x28158b,
- 0x29f489,
- 0x37a20a,
- 0x246148,
- 0x2ff148,
- 0x300a4c,
- 0x3047c7,
- 0x32b388,
- 0x32edc8,
- 0x336085,
- 0x2bc94a,
- 0x35d109,
- 0x46601082,
- 0x205446,
- 0x214684,
- 0x3b1249,
- 0x2220c9,
- 0x24d307,
- 0x26c307,
- 0x358d09,
- 0x210408,
- 0x21040f,
- 0x3477c6,
- 0x20a0cb,
- 0x2e9b05,
- 0x2e9b07,
- 0x2e9f49,
- 0x20f346,
- 0x20f347,
- 0x3b3d85,
- 0x232784,
- 0x2633c6,
- 0x201284,
- 0x30ac07,
- 0x345e08,
- 0x46aee5c8,
- 0x2eebc5,
- 0x2eed07,
- 0x238289,
- 0x2740c4,
- 0x3a3888,
- 0x46f20b88,
- 0x2c4204,
- 0x2330c8,
- 0x31d904,
- 0x21f989,
- 0x2230c5,
- 0x47203e42,
- 0x347805,
- 0x220c85,
- 0x29fc88,
- 0x235347,
- 0x47600cc2,
- 0x2c81c5,
- 0x246b46,
- 0x256646,
- 0x39a108,
- 0x2ec008,
- 0x2f8986,
- 0x31b086,
- 0x22a489,
- 0x343786,
- 0x37870b,
- 0x30c145,
- 0x20d7c6,
- 0x390088,
- 0x252606,
- 0x28f506,
- 0x21c64a,
- 0x2ae4ca,
- 0x24ce85,
- 0x358487,
- 0x2d8e06,
- 0x47a03dc2,
- 0x306a07,
- 0x2c7a45,
- 0x25fa84,
- 0x25fa85,
- 0x251306,
- 0x270447,
- 0x2144c5,
- 0x222184,
- 0x2712c8,
- 0x28f5c5,
- 0x2cebc7,
- 0x39c105,
- 0x216805,
- 0x247b04,
- 0x28cbc9,
- 0x39f908,
- 0x2f5ec6,
- 0x36fcc6,
- 0x2c3f06,
- 0x47ef3648,
- 0x2f3847,
- 0x2f3fcd,
- 0x2f460c,
- 0x2f4c09,
- 0x2f4e49,
- 0x48351e02,
- 0x3a4803,
- 0x24cf03,
- 0x29f6c5,
- 0x38cbca,
- 0x31af46,
- 0x2f8e05,
- 0x2fc144,
- 0x2fc14b,
- 0x30d10c,
- 0x30d94c,
- 0x30dc55,
- 0x311acd,
- 0x313a0f,
- 0x313dd2,
- 0x31424f,
- 0x314612,
- 0x314a93,
- 0x314f4d,
- 0x31550d,
- 0x31588e,
- 0x315d4e,
- 0x31658c,
- 0x31694c,
- 0x316d8b,
- 0x31710e,
- 0x31a1d2,
- 0x31ad0c,
- 0x31b8d0,
- 0x327e52,
- 0x328dcc,
- 0x32948d,
- 0x3297cc,
- 0x32d8d1,
- 0x32e74d,
- 0x336b0d,
- 0x33710a,
- 0x33738c,
- 0x337c8c,
- 0x3384cc,
- 0x338d4c,
- 0x33c9d3,
- 0x33d050,
- 0x33d450,
- 0x33dccd,
- 0x33e2cc,
- 0x33efc9,
- 0x3402cd,
- 0x340613,
- 0x342e51,
- 0x343293,
- 0x343b4f,
- 0x343f0c,
- 0x34420f,
- 0x3445cd,
- 0x344bcf,
- 0x344f90,
- 0x345a0e,
- 0x34b48e,
- 0x34bbd0,
- 0x34c7cd,
- 0x34d14e,
- 0x34d4cc,
- 0x34e493,
- 0x34fc8e,
- 0x3503d0,
- 0x3507d1,
- 0x350c0f,
- 0x350fd3,
- 0x35198d,
- 0x351ccf,
- 0x35208e,
- 0x352990,
- 0x352d89,
- 0x3539d0,
- 0x35400f,
- 0x35468f,
- 0x354a52,
- 0x355ece,
- 0x35788d,
- 0x35998d,
- 0x359ccd,
- 0x35ac4d,
- 0x35af8d,
- 0x35b2d0,
- 0x35b6cb,
- 0x35c14c,
- 0x35c4cc,
- 0x35c7cc,
- 0x35cace,
- 0x372990,
- 0x3744d2,
- 0x37494b,
- 0x3750ce,
- 0x37544e,
- 0x375cce,
- 0x37728b,
- 0x48777856,
- 0x378ecd,
- 0x379354,
- 0x37a98d,
- 0x37c655,
- 0x37d78d,
- 0x37e10f,
- 0x37e94f,
- 0x38150f,
- 0x3818ce,
- 0x382b0d,
- 0x384151,
- 0x386b0c,
- 0x386e0c,
- 0x38710b,
- 0x387a0c,
- 0x387dcf,
- 0x388192,
- 0x388b4d,
- 0x389b0c,
+ 0x2d1784,
+ 0x28e04a,
+ 0x28e508,
+ 0x2c2149,
+ 0x3648c5,
+ 0x2951c6,
+ 0x226bca,
+ 0x387646,
+ 0x26f5c7,
+ 0x2c1e0d,
+ 0x2a1f09,
+ 0x3597c5,
+ 0x339dc7,
+ 0x368388,
+ 0x26a888,
+ 0x314d07,
+ 0x20b246,
+ 0x217807,
+ 0x221143,
+ 0x33c004,
+ 0x3607c5,
+ 0x38dcc7,
+ 0x391d09,
+ 0x22a8c8,
+ 0x33fac5,
+ 0x242844,
+ 0x2f5bc5,
+ 0x38174d,
+ 0x203742,
+ 0x386ac6,
+ 0x377a06,
+ 0x2c8bca,
+ 0x37e686,
+ 0x38b5c5,
+ 0x368fc5,
+ 0x368fc7,
+ 0x3a010c,
+ 0x279b0a,
+ 0x290586,
+ 0x225085,
+ 0x290706,
+ 0x290a47,
+ 0x292846,
+ 0x296d8c,
+ 0x296009,
+ 0x48e16087,
+ 0x299745,
+ 0x299746,
+ 0x299d08,
+ 0x236785,
+ 0x2a8b45,
+ 0x2a9548,
+ 0x2a974a,
+ 0x49258142,
+ 0x4960c2c2,
+ 0x2e8f85,
+ 0x28b9c3,
+ 0x22b108,
+ 0x241d03,
+ 0x2a99c4,
+ 0x2f350b,
+ 0x34ef48,
+ 0x305148,
+ 0x49b67ec9,
+ 0x2af389,
+ 0x2afac6,
+ 0x2b0a88,
+ 0x2b0c89,
+ 0x2b1786,
+ 0x2b1905,
+ 0x372a86,
+ 0x2b1e49,
+ 0x319d87,
+ 0x25c446,
+ 0x233147,
+ 0x20e947,
+ 0x362e04,
+ 0x49f453c9,
+ 0x2cd008,
+ 0x353408,
+ 0x383d07,
+ 0x2c8686,
+ 0x235389,
+ 0x210147,
+ 0x34970a,
+ 0x330d48,
+ 0x349407,
+ 0x3b1546,
+ 0x2e834a,
+ 0x2733c8,
+ 0x30de45,
+ 0x36dac5,
+ 0x2f9807,
+ 0x371d49,
+ 0x3097cb,
+ 0x31e0c8,
+ 0x32d389,
+ 0x253487,
+ 0x2bad4c,
+ 0x2bb74c,
+ 0x2bba4a,
+ 0x2bbccc,
+ 0x2c5c08,
+ 0x2c5e08,
+ 0x2c6004,
+ 0x2c63c9,
+ 0x2c6609,
+ 0x2c684a,
+ 0x2c6ac9,
+ 0x2c6e07,
+ 0x3a448c,
+ 0x24b946,
+ 0x35d588,
+ 0x387706,
+ 0x330c06,
+ 0x3596c7,
+ 0x238ec8,
+ 0x2618cb,
+ 0x303207,
+ 0x359c49,
+ 0x251489,
+ 0x25bbc7,
+ 0x2e1e04,
+ 0x3643c7,
+ 0x2e1246,
+ 0x214046,
+ 0x2eb045,
+ 0x2c7408,
+ 0x2976c4,
+ 0x2976c6,
+ 0x2799cb,
+ 0x212cc9,
+ 0x209e06,
+ 0x20c709,
+ 0x392486,
+ 0x3aae08,
+ 0x214183,
+ 0x2fb985,
+ 0x215a09,
+ 0x224085,
+ 0x2f9644,
+ 0x27acc6,
+ 0x2ed005,
+ 0x2f7346,
+ 0x309ec7,
+ 0x328dc6,
+ 0x3a174b,
+ 0x22c447,
+ 0x234886,
+ 0x3742c6,
+ 0x390446,
+ 0x291189,
+ 0x240aca,
+ 0x2b8ec5,
+ 0x21898d,
+ 0x2a9846,
+ 0x2babc6,
+ 0x2ded86,
+ 0x2f31c5,
+ 0x2e4d87,
+ 0x29fa87,
+ 0x22bd4e,
+ 0x20fbc3,
+ 0x2c8649,
+ 0x263709,
+ 0x32dd87,
+ 0x2804c7,
+ 0x2a2ec5,
+ 0x343f05,
+ 0x4a23734f,
+ 0x2d10c7,
+ 0x2d1288,
+ 0x2d25c4,
+ 0x2d2e86,
+ 0x4a64db02,
+ 0x2d7346,
+ 0x201686,
+ 0x2638ce,
+ 0x2ec54a,
+ 0x28b6c6,
+ 0x22d88a,
+ 0x209a09,
+ 0x323d05,
+ 0x393948,
+ 0x3aef46,
+ 0x359508,
+ 0x2392c8,
+ 0x34434b,
+ 0x233805,
+ 0x26ae88,
+ 0x2062cc,
+ 0x2bf807,
+ 0x252546,
+ 0x281fc8,
+ 0x2253c8,
+ 0x4aa09282,
+ 0x25604b,
+ 0x37b489,
+ 0x2cf2c9,
+ 0x2f02c7,
+ 0x3b3648,
+ 0x4ae289c8,
+ 0x20e64b,
+ 0x37dd09,
+ 0x33f58d,
+ 0x27d648,
+ 0x290188,
+ 0x4b201882,
+ 0x3b2f44,
+ 0x4b60dc42,
+ 0x2f9486,
+ 0x4ba038c2,
+ 0x2448ca,
+ 0x210546,
+ 0x22d208,
+ 0x289e88,
+ 0x2e4086,
+ 0x2eb5c6,
+ 0x2f7106,
+ 0x2f1b45,
+ 0x23c804,
+ 0x4be1de04,
+ 0x20ae86,
+ 0x29a787,
+ 0x4c2f7d07,
+ 0x2dc60b,
+ 0x32f089,
+ 0x227e0a,
+ 0x263144,
+ 0x369108,
+ 0x25c20d,
+ 0x2f1509,
+ 0x2f1748,
+ 0x2f2009,
+ 0x2f39c4,
+ 0x20ce44,
+ 0x283cc5,
+ 0x317b0b,
+ 0x34eec6,
+ 0x33c645,
+ 0x21fb89,
+ 0x233a08,
+ 0x263844,
+ 0x32db09,
+ 0x208f45,
+ 0x2c3788,
+ 0x238847,
+ 0x358c48,
+ 0x284e86,
+ 0x22b987,
+ 0x2984c9,
+ 0x311a89,
+ 0x372545,
+ 0x295645,
+ 0x4c626a82,
+ 0x306f44,
+ 0x30ce05,
+ 0x2c1846,
+ 0x327285,
+ 0x2b4707,
+ 0x20af85,
+ 0x27b7c4,
+ 0x3aca86,
+ 0x383487,
+ 0x232106,
+ 0x21e105,
+ 0x202608,
+ 0x233f85,
+ 0x205d07,
+ 0x20bc49,
+ 0x212e0a,
+ 0x2494c7,
+ 0x2494cc,
+ 0x24df46,
+ 0x2e9ac9,
+ 0x230505,
+ 0x2366c8,
+ 0x210c03,
+ 0x210c05,
+ 0x2f7b45,
+ 0x26e707,
+ 0x4ca27202,
+ 0x227a07,
+ 0x2e5206,
+ 0x345306,
+ 0x2e62c6,
+ 0x225306,
+ 0x2091c8,
+ 0x35b805,
+ 0x2e7b47,
+ 0x2e7b4d,
+ 0x21b083,
+ 0x21f305,
+ 0x21b087,
+ 0x26b308,
+ 0x21ac45,
+ 0x2281c8,
+ 0x2ab9c6,
+ 0x32b247,
+ 0x2c7bc5,
+ 0x233886,
+ 0x2cfac5,
+ 0x22dfca,
+ 0x2efec6,
+ 0x25dbc7,
+ 0x2bc605,
+ 0x2f44c7,
+ 0x2f8904,
+ 0x2f95c6,
+ 0x3624c5,
+ 0x32608b,
+ 0x2e10c9,
+ 0x23d74a,
+ 0x3725c8,
+ 0x3007c8,
+ 0x300f0c,
+ 0x306b47,
+ 0x308c48,
+ 0x30aa88,
+ 0x30dac5,
+ 0x338b4a,
+ 0x33aa09,
+ 0x4ce00202,
+ 0x200206,
+ 0x20d684,
+ 0x2ef889,
+ 0x275d49,
+ 0x27b1c7,
+ 0x2fa547,
+ 0x2b7c09,
+ 0x331308,
+ 0x33130f,
+ 0x2dfa86,
+ 0x2db10b,
+ 0x361545,
+ 0x361547,
+ 0x374c89,
+ 0x2171c6,
+ 0x32da87,
+ 0x2dde85,
+ 0x22f544,
+ 0x26e186,
+ 0x211984,
+ 0x2e6c47,
+ 0x34c5c8,
+ 0x4d2fb708,
+ 0x2fbe85,
+ 0x2fbfc7,
+ 0x245709,
+ 0x208444,
+ 0x208448,
+ 0x4d7190c8,
+ 0x23cdc4,
+ 0x230c88,
+ 0x3396c4,
+ 0x220389,
+ 0x333105,
+ 0x4da05bc2,
+ 0x2dfac5,
+ 0x2e6845,
+ 0x271b88,
+ 0x232847,
+ 0x4de03382,
+ 0x30cbc5,
+ 0x2d4e86,
+ 0x27a786,
+ 0x306f08,
+ 0x318308,
+ 0x327246,
+ 0x32e246,
+ 0x249009,
+ 0x345246,
+ 0x21708b,
+ 0x2a12c5,
+ 0x204686,
+ 0x382588,
+ 0x3152c6,
+ 0x298e46,
+ 0x21b94a,
+ 0x22f9ca,
+ 0x2e8245,
+ 0x35b8c7,
+ 0x2f0cc6,
+ 0x4e206602,
+ 0x21b1c7,
+ 0x2a9085,
+ 0x226b44,
+ 0x226b45,
+ 0x263046,
+ 0x27a447,
+ 0x20d405,
+ 0x22fb44,
+ 0x365008,
+ 0x298f05,
+ 0x33c8c7,
+ 0x39fa85,
+ 0x22df05,
+ 0x256b44,
+ 0x28fbc9,
+ 0x2ff988,
+ 0x2ecec6,
+ 0x2de9c6,
+ 0x2b9d46,
+ 0x4e700448,
+ 0x300647,
+ 0x3009cd,
+ 0x30120c,
+ 0x301809,
+ 0x301a49,
+ 0x4eb546c2,
+ 0x3a5503,
+ 0x20b303,
+ 0x2e1305,
+ 0x38ddca,
+ 0x327106,
+ 0x307905,
+ 0x30a084,
+ 0x30a08b,
+ 0x31bdcc,
+ 0x31c5cc,
+ 0x31c8d5,
+ 0x31d74d,
+ 0x31f44f,
+ 0x31f812,
+ 0x31fc8f,
+ 0x320052,
+ 0x3204d3,
+ 0x32098d,
+ 0x320f4d,
+ 0x3212ce,
+ 0x322a8e,
+ 0x3232cc,
+ 0x32368c,
+ 0x323acb,
+ 0x323e4e,
+ 0x324f92,
+ 0x326ecc,
+ 0x327610,
+ 0x3335d2,
+ 0x3347cc,
+ 0x334e8d,
+ 0x3351cc,
+ 0x337611,
+ 0x3384cd,
+ 0x33ac4d,
+ 0x33b24a,
+ 0x33b4cc,
+ 0x33bdcc,
+ 0x33c34c,
+ 0x33cbcc,
+ 0x33fc53,
+ 0x340450,
+ 0x340850,
+ 0x340e4d,
+ 0x34144c,
+ 0x342209,
+ 0x342f0d,
+ 0x343253,
+ 0x344911,
+ 0x344d53,
+ 0x34560f,
+ 0x3459cc,
+ 0x345ccf,
+ 0x34608d,
+ 0x34668f,
+ 0x346a50,
+ 0x3474ce,
+ 0x34ac8e,
+ 0x34b590,
+ 0x34ca8d,
+ 0x34d40e,
+ 0x34d78c,
+ 0x34e753,
+ 0x351e0e,
+ 0x352390,
+ 0x352791,
+ 0x352bcf,
+ 0x352f93,
+ 0x35424d,
+ 0x35458f,
+ 0x35494e,
+ 0x354fd0,
+ 0x3553c9,
+ 0x356390,
+ 0x356acf,
+ 0x35714f,
+ 0x357512,
+ 0x359e8e,
+ 0x35a74d,
+ 0x35cc4d,
+ 0x35cf8d,
+ 0x35f68d,
+ 0x35f9cd,
+ 0x35fd10,
+ 0x36010b,
+ 0x36058c,
+ 0x36090c,
+ 0x360c0c,
+ 0x360f0e,
+ 0x372c10,
+ 0x374452,
+ 0x3748cb,
+ 0x374ece,
+ 0x37524e,
+ 0x375ace,
+ 0x37604b,
+ 0x4ef76396,
+ 0x37724d,
+ 0x378354,
+ 0x378e0d,
+ 0x37ae55,
+ 0x37c04d,
+ 0x37c9cf,
+ 0x37d20f,
+ 0x38028f,
+ 0x38064e,
+ 0x380acd,
+ 0x382f11,
+ 0x385ecc,
+ 0x3861cc,
+ 0x3864cb,
+ 0x386c4c,
+ 0x38824f,
+ 0x388612,
+ 0x388fcd,
0x389f8c,
- 0x38a28d,
- 0x38a5cf,
- 0x38a98e,
- 0x38c88c,
- 0x38ce4d,
- 0x38d18b,
- 0x38e9cc,
- 0x38ef4d,
- 0x38f28e,
- 0x38f709,
- 0x3909d3,
- 0x3913cd,
- 0x39170d,
- 0x391d0c,
- 0x39218e,
- 0x392b0f,
- 0x392ecc,
- 0x3931cd,
- 0x39350f,
- 0x3938cc,
- 0x393fcc,
- 0x39444c,
- 0x39474c,
- 0x394e0d,
- 0x395152,
- 0x3957cc,
- 0x395acc,
- 0x395dd1,
- 0x39620f,
- 0x3965cf,
- 0x396993,
- 0x39764e,
- 0x397bcf,
- 0x397f8c,
- 0x48b982ce,
- 0x39864f,
- 0x398a16,
- 0x399c12,
- 0x39b88c,
- 0x39c24f,
- 0x39c8cd,
- 0x39cc0f,
- 0x39cfcc,
- 0x39d2cd,
- 0x39d60d,
- 0x39f4ce,
- 0x3a058c,
- 0x3a088c,
- 0x3a0b90,
- 0x3a3a91,
- 0x3a3ecb,
- 0x3a440c,
- 0x3a470e,
+ 0x38a40c,
+ 0x38a70d,
+ 0x38aa4f,
+ 0x38ae0e,
+ 0x38da8c,
+ 0x38e04d,
+ 0x38e38b,
+ 0x38ee8c,
+ 0x38f40d,
+ 0x38f74e,
+ 0x38fac9,
+ 0x390c53,
+ 0x39118d,
+ 0x3914cd,
+ 0x391acc,
+ 0x391f4e,
+ 0x39290f,
+ 0x392ccc,
+ 0x392fcd,
+ 0x39330f,
+ 0x3936cc,
+ 0x3943cc,
+ 0x39484c,
+ 0x394b4c,
+ 0x39520d,
+ 0x395552,
+ 0x396c0c,
+ 0x396f0c,
+ 0x397211,
+ 0x39764f,
+ 0x397a0f,
+ 0x397dd3,
+ 0x398a8e,
+ 0x398e0f,
+ 0x3991cc,
+ 0x4f39950e,
+ 0x39988f,
+ 0x399c56,
+ 0x39b312,
+ 0x39d64c,
+ 0x39e14f,
+ 0x39e7cd,
+ 0x39eb0f,
+ 0x39eecc,
+ 0x39f1cd,
+ 0x39f50d,
+ 0x3a0c4e,
+ 0x3a2b8c,
+ 0x3a2e8c,
+ 0x3a3190,
+ 0x3a4991,
+ 0x3a4dcb,
+ 0x3a510c,
+ 0x3a540e,
0x3a7051,
0x3a748e,
0x3a780d,
- 0x3ace8b,
- 0x3adbcf,
- 0x3aee94,
- 0x21c2c2,
- 0x21c2c2,
- 0x205903,
- 0x21c2c2,
- 0x205903,
- 0x21c2c2,
- 0x205e02,
- 0x3830c5,
+ 0x3aed0b,
+ 0x3afdcf,
+ 0x3b09d4,
+ 0x2630c2,
+ 0x2630c2,
+ 0x202583,
+ 0x2630c2,
+ 0x202583,
+ 0x2630c2,
+ 0x20ae82,
+ 0x372ac5,
0x3a6d4c,
- 0x21c2c2,
- 0x21c2c2,
- 0x205e02,
- 0x21c2c2,
- 0x290d45,
- 0x2a24c5,
- 0x21c2c2,
- 0x21c2c2,
- 0x211d42,
- 0x290d45,
- 0x312d49,
- 0x342b4c,
- 0x21c2c2,
- 0x21c2c2,
- 0x21c2c2,
- 0x21c2c2,
- 0x3830c5,
- 0x21c2c2,
- 0x21c2c2,
- 0x21c2c2,
- 0x21c2c2,
- 0x211d42,
- 0x312d49,
- 0x21c2c2,
- 0x21c2c2,
- 0x21c2c2,
- 0x2a24c5,
- 0x21c2c2,
- 0x2a24c5,
- 0x342b4c,
+ 0x2630c2,
+ 0x2630c2,
+ 0x20ae82,
+ 0x2630c2,
+ 0x29a385,
+ 0x212e05,
+ 0x2630c2,
+ 0x2630c2,
+ 0x211cc2,
+ 0x29a385,
+ 0x31e789,
+ 0x34460c,
+ 0x2630c2,
+ 0x2630c2,
+ 0x2630c2,
+ 0x2630c2,
+ 0x372ac5,
+ 0x2630c2,
+ 0x2630c2,
+ 0x2630c2,
+ 0x2630c2,
+ 0x211cc2,
+ 0x31e789,
+ 0x2630c2,
+ 0x2630c2,
+ 0x2630c2,
+ 0x212e05,
+ 0x2630c2,
+ 0x212e05,
+ 0x34460c,
0x3a6d4c,
- 0x323ac3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x238483,
- 0x2264c3,
- 0x141388,
- 0x4db44,
- 0xed208,
- 0x200882,
- 0x49a16582,
- 0x240003,
- 0x22b944,
- 0x208f43,
- 0x21eb04,
- 0x231ac6,
- 0x31d243,
- 0x34aa44,
- 0x26cc05,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x24690a,
- 0x3a5946,
- 0x3757cc,
- 0x880c8,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x2348c3,
- 0x2cc5c6,
- 0x238483,
- 0x2264c3,
- 0x21bd03,
- 0xd42,
- 0xdb7c7,
- 0xca908,
- 0xfd8e,
- 0x85792,
- 0x2ecb,
- 0x4a71f345,
- 0x4ab76d0c,
- 0x131007,
- 0x16e747,
- 0x119b8a,
- 0x3c550,
- 0x2988,
- 0x16e847,
- 0xae14b,
- 0x112089,
- 0x173507,
- 0x10ec87,
- 0x77847,
- 0x169c6,
- 0x132d48,
- 0x4b01e1c6,
- 0xa910d,
- 0x119550,
- 0x4b400d82,
- 0x131948,
- 0x680c7,
- 0x84109,
- 0x53e06,
- 0x908c8,
- 0x5e82,
- 0x9c34a,
- 0x8e507,
- 0xeaec7,
- 0xa5449,
- 0xa7188,
- 0x157f45,
- 0xe168e,
- 0xe9ce,
- 0x14c4f,
- 0x15309,
- 0x33c49,
- 0x6528b,
- 0x7cdcf,
- 0x8cdcc,
- 0xdcbcb,
- 0xd99c8,
- 0x12bd07,
- 0xede48,
- 0x11e50b,
- 0x13e94c,
- 0x14624c,
- 0x14f98c,
- 0x1524cd,
- 0x2b848,
- 0x30cc2,
- 0x1afb89,
- 0x14c24b,
- 0xbdb06,
- 0xce6c5,
- 0xd2d10,
- 0x1229c6,
- 0x51f05,
- 0xd6908,
- 0xdc047,
- 0xdc307,
- 0x163287,
- 0xeba4a,
- 0xca78a,
- 0x161186,
- 0x8db8d,
- 0x180248,
- 0x45e88,
- 0x47a49,
- 0xeb58c,
- 0x1526cb,
- 0x171ac4,
- 0xf3109,
- 0x44bc6,
- 0x6202,
- 0x155646,
- 0xfefc7,
- 0x6c2,
- 0xc0e85,
- 0x481,
- 0x3b583,
- 0x4af9eb86,
- 0x90c43,
- 0x1f82,
- 0x3a4c4,
- 0x1002,
- 0x24104,
- 0x9c2,
- 0x1182,
- 0x3182,
- 0x4f882,
- 0x2ec2,
- 0x104e82,
- 0x8c2,
- 0x1dec2,
- 0x37e42,
- 0x682,
- 0xf82,
- 0xb1d82,
- 0x343c3,
- 0x8042,
- 0x202,
- 0x6ac2,
- 0x21842,
- 0xb2c2,
- 0x32a02,
- 0xf1c2,
- 0x42,
- 0x5602,
- 0xa82,
- 0x2243,
- 0x74c2,
- 0x1982,
- 0xb09c2,
- 0x9682,
- 0xb402,
- 0x61c2,
- 0xa242,
- 0x9a1c2,
- 0x6742,
- 0x172e82,
- 0xe02,
- 0x9f82,
- 0x38483,
- 0x1dc2,
- 0x8382,
- 0x25c2,
- 0x2182,
- 0x46045,
- 0x6a42,
- 0x41542,
- 0x3e503,
- 0x4b42,
- 0x7982,
- 0x1402,
- 0x15c2,
- 0x1882,
- 0xcc2,
- 0x3282,
- 0x6202,
- 0x6b247,
- 0x212d03,
- 0x200882,
- 0x22d183,
- 0x2343c3,
- 0x211cc3,
- 0x201d83,
- 0x2348c3,
- 0x238483,
- 0x2025c3,
- 0x2264c3,
- 0x290c83,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x211cc3,
- 0x211003,
- 0x238483,
- 0x2025c3,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x200041,
- 0x211003,
- 0x238483,
- 0x201f43,
- 0x2264c3,
- 0x323ac3,
- 0x22d183,
- 0x2343c3,
- 0x25f643,
- 0x211cc3,
- 0x3112c3,
- 0x27cc03,
- 0x201f83,
- 0x25a603,
- 0x21eb03,
- 0x201604,
- 0x238483,
- 0x2264c3,
- 0x223ec3,
- 0x305fc4,
- 0x21e143,
- 0x4803,
- 0x203e03,
- 0x2a0cc8,
- 0x332a44,
- 0x317f8a,
- 0x330786,
- 0xda404,
- 0x3a2e47,
- 0x22138a,
- 0x347689,
- 0x3b3507,
- 0x20054a,
- 0x323ac3,
- 0x3822cb,
- 0x368b49,
- 0x2c4005,
- 0x2ca007,
- 0x16582,
- 0x22d183,
- 0x326647,
- 0x22a1c5,
- 0x2d60c9,
- 0x2343c3,
- 0x227846,
- 0x2ba0c3,
- 0x9f543,
- 0xfaa86,
- 0x4f4c6,
- 0x11d1c7,
- 0x3a8786,
- 0x213e45,
- 0x20c507,
- 0x338b87,
- 0x4d61eb03,
- 0x329007,
- 0x35eec3,
- 0x38e705,
- 0x201604,
- 0x221c08,
- 0x2af6cc,
- 0x2ad6c5,
- 0x363c06,
- 0x326507,
- 0x224b47,
- 0x205087,
- 0x206e48,
- 0x2597cf,
- 0x280b05,
- 0x240107,
- 0x27e347,
- 0x2a500a,
- 0x2ee209,
- 0x2d7185,
- 0x2d830a,
- 0xdea46,
- 0x2ba145,
- 0x374b84,
- 0x2b7486,
- 0x2fe5c7,
- 0x230bc7,
- 0x2a0a08,
- 0x214805,
- 0x22a0c6,
- 0x3a8245,
- 0x37a445,
- 0x21fd44,
- 0x31e907,
- 0x347cca,
- 0x365a48,
- 0x2edb86,
- 0x348c3,
- 0x2cf145,
- 0x238d06,
- 0x200346,
- 0x251e06,
- 0x211003,
- 0x388dc7,
- 0x27e2c5,
- 0x238483,
- 0x3b378d,
- 0x2025c3,
- 0x2a0b08,
- 0x3aac44,
- 0x205fc5,
- 0x2a4f06,
- 0x236b06,
- 0x20d6c7,
- 0x355747,
- 0x2641c5,
- 0x2264c3,
- 0x322c07,
- 0x33b009,
- 0x258f49,
- 0x2434ca,
- 0x242a42,
- 0x38e6c4,
- 0x2d7ac4,
- 0x210d87,
- 0x236d08,
- 0x2dce89,
- 0x3a3489,
- 0x2df807,
- 0x334206,
- 0xe1406,
- 0x2e26c4,
- 0x2e2cca,
- 0x2e5c88,
- 0x2e64c9,
- 0x2b6306,
- 0x3003c5,
- 0x365908,
- 0x2bf10a,
- 0x25b743,
- 0x306146,
- 0x2df907,
- 0x207c85,
- 0x3aab05,
- 0x242083,
- 0x252dc4,
- 0x21bf45,
- 0x27e747,
- 0x39fa45,
- 0x2f3bc6,
- 0xfa705,
- 0x212a43,
- 0x21cdc9,
- 0x238dcc,
- 0x2ab90c,
- 0x2c65c8,
- 0x28f8c7,
- 0x2ef748,
- 0x2efa8a,
- 0x2f0a4b,
- 0x368c88,
- 0x363d08,
- 0x36ee86,
- 0x341985,
- 0x36498a,
- 0x21ebc5,
- 0x203e42,
- 0x2bcdc7,
- 0x26a8c6,
- 0x353505,
- 0x2f1949,
- 0x38dec5,
- 0x376785,
- 0x38e2c9,
- 0x238b86,
- 0x261b88,
- 0x2d1343,
- 0x3a88c6,
- 0x270f06,
- 0x2fdcc5,
- 0x2fdcc9,
- 0x2dd5c9,
- 0x242d87,
- 0xfdb44,
- 0x2fdb47,
- 0x3a3389,
- 0x221585,
- 0x16f208,
- 0x355545,
- 0x355245,
- 0x399309,
- 0x201482,
- 0x21df44,
- 0x202e82,
- 0x2074c2,
- 0x293c45,
- 0x2da188,
- 0x374e45,
- 0x2bc883,
- 0x2bc885,
- 0x2ca3c3,
- 0x2111c2,
- 0x264a04,
- 0x233503,
- 0x207a82,
- 0x358704,
- 0x2d8003,
- 0x2014c2,
- 0x293cc3,
- 0x2898c4,
- 0x2d7703,
- 0x23a804,
- 0x201bc2,
- 0x21bc03,
- 0x219283,
- 0x208d82,
- 0x35b202,
- 0x2dd409,
- 0x2011c2,
- 0x286304,
- 0x200dc2,
- 0x365784,
- 0x3341c4,
- 0x3a1cc4,
- 0x206202,
- 0x23e802,
- 0x20dc03,
- 0x2f0083,
- 0x23f704,
- 0x27e8c4,
- 0x2d13c4,
- 0x2dd7c4,
- 0x2fd083,
- 0x3491c3,
- 0x2de9c4,
- 0x2fee04,
- 0x2ff346,
- 0x260dc2,
- 0x216582,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x200882,
- 0x323ac3,
- 0x22d183,
- 0x2343c3,
- 0x205403,
- 0x21eb03,
- 0x201604,
- 0x2dd6c4,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x21bd03,
- 0x2e3444,
- 0x29e943,
- 0x2b3783,
- 0x3436c4,
- 0x355346,
- 0x20ca03,
- 0x16e747,
- 0x219b83,
- 0x208143,
- 0x2b1a03,
- 0x206003,
- 0x2348c3,
- 0x376f85,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x2db443,
- 0x230743,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x202243,
- 0x238483,
- 0x234fc4,
- 0x2264c3,
- 0x29b704,
- 0x2b7285,
- 0x16e747,
- 0x216582,
- 0x201a42,
- 0x201f82,
- 0x205902,
- 0x201502,
- 0x22d183,
- 0x2374c4,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x217643,
- 0x224104,
- 0x880c8,
- 0x22d183,
- 0x2025c3,
- 0x245dc4,
- 0x880c8,
- 0x22d183,
- 0x247344,
- 0x201604,
- 0x2025c3,
- 0x202282,
- 0x2264c3,
- 0x215cc3,
- 0x52dc4,
- 0x2e9cc5,
- 0x203e42,
- 0x2fef43,
- 0x200882,
- 0x880c8,
- 0x216582,
- 0x2343c3,
- 0x21eb03,
- 0x200a82,
- 0x2264c3,
- 0x200882,
- 0x200707,
- 0x254705,
- 0x29f844,
- 0x385f86,
- 0x366a4b,
- 0x263a49,
- 0x363b46,
- 0x340a89,
- 0x2b2c88,
- 0x207103,
- 0x880c8,
- 0x22a807,
- 0x364288,
- 0x24f843,
- 0x21d184,
- 0x2226cb,
- 0x259145,
- 0x24b188,
- 0x2f2ec9,
- 0x25a203,
- 0x22d183,
- 0x205348,
- 0x2ee787,
- 0x24fe46,
- 0x2343c3,
- 0x24f947,
- 0x21eb03,
- 0x339b06,
- 0x202243,
- 0x22f9c7,
- 0x33a6c7,
- 0x390e87,
- 0x31e885,
- 0x209403,
- 0x205dcb,
- 0x36b4c8,
- 0x227548,
- 0x33b1c6,
- 0x367989,
- 0x335b07,
- 0x2f9145,
- 0x339444,
- 0x3478c8,
- 0x23d54a,
- 0x23d789,
- 0x346f03,
- 0x2696c5,
- 0x21bb83,
- 0x3ad706,
- 0x387704,
- 0x2fdec8,
- 0x38748b,
- 0x346dc5,
- 0x2b7006,
- 0x2b8e85,
- 0x2b9608,
- 0x2ba287,
- 0x206cc7,
- 0x317b87,
- 0x294544,
- 0x30a5c7,
- 0x294546,
- 0x211003,
- 0x2c2088,
- 0x268383,
- 0x2cab08,
- 0x2d3f45,
- 0x3251c8,
- 0x2345c7,
- 0x238483,
- 0x2447c3,
- 0x287dc4,
- 0x323647,
- 0x208fc3,
- 0x33a78b,
- 0x205003,
- 0x268344,
- 0x2e9d48,
- 0x2264c3,
- 0x2f3d45,
- 0x311145,
- 0x3250c6,
- 0x2117c5,
- 0x2d4304,
- 0x202002,
- 0x2e69c3,
- 0x374c0a,
- 0x3a1583,
- 0x306709,
- 0x30a2c6,
- 0x204e48,
- 0x289406,
- 0x214347,
- 0x2db948,
- 0x39a588,
- 0x2ebd43,
- 0x293d03,
- 0x272c09,
- 0x2f4c83,
- 0x2d8d06,
- 0x254386,
- 0x39f7c6,
- 0x3a1e09,
- 0x2fd784,
- 0x20e3c3,
- 0x2d6d05,
- 0x349589,
- 0x206dc3,
- 0x35a244,
- 0x2f2ac4,
- 0x36fc84,
- 0x35f906,
- 0x3b4303,
- 0x3b4308,
- 0x256a08,
- 0x39db86,
- 0x2f8f4b,
- 0x2f9288,
- 0x2f948b,
- 0x2fb949,
- 0x2fa987,
- 0x2fbdc8,
- 0x2fc983,
- 0x22ad86,
- 0x3a9247,
- 0x295245,
- 0x34b789,
- 0x33530d,
- 0x204c91,
- 0x22eb85,
- 0x200882,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x22d684,
- 0x21eb03,
- 0x202243,
- 0x211003,
- 0x238483,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x2348c3,
- 0x238483,
- 0x2264c3,
- 0x265903,
- 0x217643,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x2348c3,
- 0x238483,
- 0x2264c3,
- 0x221e42,
- 0x200141,
- 0x200882,
- 0x200001,
- 0x313b02,
- 0x880c8,
- 0x220045,
- 0x200481,
- 0x2d183,
- 0x200741,
- 0x200081,
- 0x200c81,
- 0x2333c2,
- 0x36e144,
- 0x383043,
- 0x2007c1,
- 0x200901,
- 0x200041,
- 0x2001c1,
- 0x2dda87,
- 0x2b8f8f,
- 0x2cacc6,
- 0x2000c1,
- 0x25b806,
- 0x200341,
- 0x200ac1,
- 0x341ece,
- 0x201501,
- 0x2264c3,
- 0x2014c1,
- 0x260e05,
- 0x202002,
- 0x241f85,
- 0x200b81,
- 0x200241,
- 0x200a01,
- 0x203e42,
- 0x2002c1,
- 0x204701,
- 0x20dec1,
- 0x200781,
- 0x200641,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x21ca03,
- 0x22d183,
- 0x21eb03,
- 0x89ec8,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x14da788,
- 0x880c8,
- 0x441c4,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x238483,
- 0x2264c3,
- 0x204803,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x22d684,
- 0x2264c3,
- 0x28fb85,
- 0x27f304,
- 0x22d183,
- 0x238483,
- 0x2264c3,
- 0xa014a,
- 0x216582,
- 0x22d183,
- 0x2326c9,
- 0x2343c3,
- 0x23af09,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x2e24c8,
- 0x2100c7,
- 0x2e9cc5,
- 0x200707,
- 0x366a4b,
- 0x365188,
- 0x340a89,
- 0x22a807,
- 0x205348,
- 0x339b06,
- 0x33a6c7,
- 0x227548,
- 0x33b1c6,
- 0x335b07,
- 0x23d789,
- 0x37c409,
- 0x2b7006,
- 0x2b7e45,
- 0x2c2088,
- 0x268383,
- 0x2cab08,
- 0x2345c7,
- 0x208fc3,
- 0x326387,
- 0x2117c5,
- 0x2dc608,
- 0x310205,
- 0x293d03,
- 0x33b9c9,
- 0x2aa9c7,
- 0x35a244,
- 0x2f2ac4,
- 0x2f8f4b,
- 0x2f9288,
- 0x2fa987,
- 0x22d183,
- 0x2343c3,
- 0x211cc3,
- 0x2264c3,
- 0x21e503,
- 0x21eb03,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x653cb,
- 0x200882,
- 0x216582,
- 0x2264c3,
- 0x880c8,
- 0x200882,
- 0x216582,
- 0x201f82,
- 0x200a82,
- 0x200342,
- 0x238483,
- 0x201502,
- 0x200882,
- 0x323ac3,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x201f82,
- 0x21eb03,
- 0x202243,
- 0x211003,
- 0x212444,
- 0x238483,
- 0x21ab43,
- 0x2264c3,
- 0x2fd784,
- 0x223ec3,
- 0x21eb03,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2025c3,
- 0x2264c3,
- 0x39bd47,
- 0x22d183,
- 0x256b87,
- 0x2edfc6,
- 0x219203,
- 0x206ac3,
- 0x21eb03,
- 0x220883,
- 0x201604,
- 0x284804,
- 0x2d43c6,
- 0x20bac3,
- 0x238483,
- 0x2264c3,
- 0x28fb85,
- 0x20d4c4,
- 0x31a083,
- 0x217a03,
- 0x2bcdc7,
- 0x20b445,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x219f02,
- 0x380383,
- 0x2b2c83,
- 0x323ac3,
- 0x5822d183,
- 0x22b782,
- 0x2343c3,
- 0x208f43,
- 0x21eb03,
- 0x201604,
- 0x36b683,
- 0x280b03,
- 0x211003,
- 0x212444,
- 0x58606bc2,
- 0x238483,
- 0x2264c3,
- 0x232dc3,
- 0x245483,
- 0x221e42,
- 0x223ec3,
- 0x880c8,
- 0x21eb03,
- 0x307e44,
- 0x323ac3,
- 0x216582,
- 0x22d183,
- 0x2374c4,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x202243,
- 0x2f5d44,
- 0x307b04,
- 0x2cc5c6,
- 0x212444,
- 0x238483,
- 0x2264c3,
- 0x21bd03,
- 0x26a8c6,
- 0x1737cb,
- 0x1e1c6,
- 0x23d0a,
- 0xfcb8a,
- 0x880c8,
- 0x3a8204,
- 0x22d183,
- 0x323a84,
- 0x2343c3,
- 0x247b84,
- 0x21eb03,
- 0x251283,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x32248b,
- 0x39d94a,
- 0x3b298c,
- 0x200882,
- 0x216582,
- 0x201f82,
- 0x2a9c05,
- 0x201604,
- 0x206742,
- 0x211003,
- 0x307b04,
- 0x205902,
- 0x201502,
- 0x217642,
- 0x221e42,
- 0x123ac3,
- 0x357309,
- 0x254208,
- 0x301189,
- 0x33a509,
- 0x35bd8a,
- 0x23808a,
- 0x20cc82,
- 0x21dec2,
- 0x16582,
- 0x22d183,
- 0x200bc2,
- 0x2402c6,
- 0x354502,
- 0x202982,
- 0x3861ce,
- 0x21bc4e,
- 0x278107,
- 0x32fe47,
- 0x26b302,
- 0x2343c3,
- 0x21eb03,
- 0x202842,
- 0x200a82,
- 0x23d1cf,
- 0x204ec2,
- 0x33b3c7,
- 0x24cf87,
- 0x256107,
- 0x26204c,
- 0x268b4c,
- 0x2057c4,
- 0x2696ca,
- 0x21bb82,
- 0x209682,
- 0x2b2684,
- 0x215bc2,
- 0x2bb4c2,
- 0x268d84,
- 0x21ac42,
- 0x20b402,
- 0x33b247,
- 0x233285,
- 0x20a242,
- 0x23d144,
- 0x372e82,
- 0x2cea08,
- 0x238483,
- 0x3a2308,
- 0x203082,
- 0x235885,
- 0x3a25c6,
- 0x2264c3,
- 0x206a42,
- 0x2dd0c7,
- 0x2002,
- 0x26ccc5,
- 0x393e85,
- 0x2166c2,
- 0x226442,
- 0x31864a,
- 0x26404a,
- 0x210fc2,
- 0x376c04,
- 0x201a02,
- 0x38e588,
+ 0x368883,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204ac3,
+ 0x200383,
+ 0x1f08,
+ 0x15444,
+ 0xc1348,
0x204cc2,
- 0x2fd448,
- 0x2f64c7,
- 0x2f67c9,
- 0x26cd42,
- 0x2fbb85,
- 0x2546c5,
- 0x2148cb,
- 0x2bfdcc,
- 0x22f848,
- 0x2fbf48,
- 0x260dc2,
+ 0x5020d1c2,
+ 0x243403,
+ 0x24c944,
+ 0x202743,
+ 0x38e8c4,
+ 0x22e886,
+ 0x213843,
+ 0x31aa84,
+ 0x288845,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x25084a,
+ 0x241f46,
+ 0x3755cc,
+ 0x15f048,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x22d603,
+ 0x201686,
+ 0x204ac3,
+ 0x200383,
+ 0x21aa03,
+ 0xaa288,
+ 0x3942,
+ 0x513856c5,
+ 0x2ac47,
+ 0xd7a88,
+ 0xc0ce,
+ 0x8c792,
+ 0x16780b,
+ 0x516db445,
+ 0x51adb44c,
+ 0xf207,
+ 0x13ecc7,
+ 0x1698ca,
+ 0x3efd0,
+ 0x1acd05,
+ 0x16e1cb,
+ 0x1672c8,
+ 0x13edc7,
+ 0x2f64b,
+ 0x11dd09,
+ 0x150f47,
+ 0x1b3c47,
+ 0x81187,
+ 0x20586,
+ 0x94b88,
+ 0x52028b86,
+ 0xafbcd,
+ 0x169290,
+ 0x52401742,
+ 0xfb48,
+ 0x71f47,
+ 0x7f149,
+ 0x59b46,
+ 0x99f08,
+ 0x74842,
+ 0xa4f4a,
+ 0x2d587,
+ 0x3b9c7,
+ 0xaa689,
+ 0xad708,
+ 0x15ae05,
+ 0x194e8e,
+ 0x14d4e,
+ 0x26f4f,
+ 0x2ccc9,
+ 0x4c809,
+ 0x77e8b,
+ 0x878cf,
+ 0x8fdcc,
+ 0xadd8b,
+ 0xc4d08,
+ 0xdc507,
+ 0x162908,
+ 0xfe04b,
+ 0x12a54c,
+ 0x141acc,
+ 0x147f4c,
+ 0x14b0cd,
+ 0x17de88,
+ 0x42602,
+ 0x104389,
+ 0x18528b,
+ 0xc8886,
+ 0x116f8b,
+ 0xdd5ca,
+ 0xde185,
+ 0xe4a90,
+ 0x1294c6,
+ 0x63c85,
+ 0xe6448,
+ 0xee547,
+ 0xee807,
+ 0x5e987,
+ 0xf92ca,
+ 0xd790a,
+ 0x177ac6,
+ 0x97ccd,
+ 0x1ae208,
+ 0x56608,
+ 0x56a89,
+ 0xb9905,
+ 0x19de4c,
+ 0x14b2cb,
+ 0x171c84,
+ 0xff749,
+ 0x8146,
+ 0x16c2,
+ 0x125886,
+ 0x10d947,
+ 0x6c82,
+ 0xcb605,
+ 0x29b04,
+ 0x701,
+ 0x2bc43,
+ 0x51fadbc6,
+ 0x9a283,
+ 0x8a42,
+ 0x2d584,
+ 0x1442,
+ 0x4ae04,
+ 0x1342,
+ 0x2f82,
+ 0x3682,
+ 0x1124c2,
+ 0xe542,
+ 0xdb442,
+ 0x2ac2,
+ 0x1c402,
+ 0x26982,
+ 0x4d02,
+ 0x3b02,
+ 0x34682,
+ 0x31b83,
+ 0x7d02,
+ 0x1c2,
+ 0x41c2,
+ 0xda42,
+ 0x642,
+ 0xdc2,
+ 0x18d82,
+ 0x1a02,
+ 0x2282,
+ 0x1d42,
+ 0x4303,
+ 0xb02,
+ 0x2f02,
+ 0xb5e02,
+ 0x1b02,
+ 0x5d82,
+ 0x32c2,
+ 0x73c2,
+ 0x17c2,
+ 0x1f02,
+ 0x173102,
+ 0x73fc2,
+ 0x5e402,
+ 0x4ac3,
+ 0x2c2,
+ 0x9282,
+ 0x1002,
+ 0x14602,
+ 0x1724c5,
+ 0x6ec2,
+ 0x1202,
+ 0x41703,
+ 0x682,
+ 0xd42,
+ 0x1702,
+ 0xe5c2,
+ 0x1ac2,
+ 0x3382,
+ 0x6902,
+ 0x16c2,
+ 0x73c07,
+ 0x213dc3,
+ 0x204cc2,
+ 0x2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x201d43,
+ 0x22d603,
+ 0x204ac3,
+ 0x20abc3,
+ 0x200383,
+ 0x29a2c3,
+ 0x1a5c3,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x20abc3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x200041,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x2104c3,
+ 0x200383,
+ 0x368883,
+ 0x2d0783,
+ 0x231b83,
+ 0x20fb43,
+ 0x2135c3,
+ 0x2300c3,
+ 0x287703,
+ 0x210503,
+ 0x234743,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204ac3,
+ 0x200383,
+ 0x24abc3,
+ 0x200604,
+ 0x250c83,
+ 0x5283,
+ 0x3abd03,
+ 0x329b88,
+ 0x2e8384,
+ 0x2c264a,
+ 0x224906,
+ 0x10f9c4,
+ 0x38c2c7,
+ 0x21eeca,
+ 0x2df949,
+ 0x3a3b07,
+ 0x3a7dca,
+ 0x368883,
+ 0x2e900b,
+ 0x303349,
+ 0x2b9e45,
+ 0x2d7187,
+ 0xd1c2,
+ 0x2d0783,
+ 0x204d07,
+ 0x248d45,
+ 0x2e1cc9,
+ 0x231b83,
+ 0x233606,
+ 0x2c56c3,
+ 0xe1183,
+ 0x109686,
+ 0x60546,
+ 0x137c7,
+ 0x217546,
+ 0x222645,
+ 0x2cf187,
+ 0x2da587,
+ 0x54b32ec3,
+ 0x334a07,
+ 0x3642c3,
+ 0x3a2385,
+ 0x2964c4,
+ 0x32e3c8,
+ 0x2751cc,
+ 0x3a5745,
+ 0x2a2086,
+ 0x204bc7,
+ 0x37ef47,
+ 0x25b8c7,
+ 0x31f248,
+ 0x307ecf,
+ 0x2dfb85,
+ 0x243507,
+ 0x2394c7,
+ 0x2a9b0a,
+ 0x2d7e49,
+ 0x30bc85,
+ 0x32194a,
+ 0x1b06,
+ 0x2c5745,
+ 0x376284,
+ 0x289dc6,
+ 0x2f8cc7,
+ 0x242507,
+ 0x38cbc8,
+ 0x214185,
+ 0x248c46,
+ 0x20c545,
+ 0x387845,
+ 0x212c04,
+ 0x2e3f87,
+ 0x20900a,
+ 0x234d48,
+ 0x356946,
+ 0x2d603,
+ 0x2e0405,
+ 0x26c686,
+ 0x3a46c6,
+ 0x263b86,
+ 0x20fbc3,
+ 0x389247,
+ 0x239445,
+ 0x204ac3,
+ 0x2dd88d,
+ 0x20abc3,
+ 0x38ccc8,
+ 0x39a5c4,
+ 0x27ba85,
+ 0x2a9a06,
+ 0x2362c6,
+ 0x204587,
+ 0x2ae707,
+ 0x270b05,
+ 0x200383,
+ 0x27f2c7,
+ 0x329709,
+ 0x22b689,
+ 0x2f590a,
+ 0x24cd82,
+ 0x3a2344,
+ 0x2e76c4,
+ 0x261787,
+ 0x2278c8,
+ 0x2ef309,
+ 0x21f1c9,
+ 0x2f0487,
+ 0x303806,
+ 0xf22c6,
+ 0x2f39c4,
+ 0x2f3fca,
+ 0x2f6a08,
+ 0x2f6fc9,
+ 0x2bfe86,
+ 0x2b6ec5,
+ 0x234c08,
+ 0x2c9c4a,
+ 0x22c6c3,
+ 0x200786,
+ 0x2f0587,
+ 0x217f85,
+ 0x39a485,
+ 0x2717c3,
+ 0x258a04,
+ 0x36da85,
+ 0x288e47,
+ 0x2ffac5,
+ 0x2ed686,
+ 0xfff05,
+ 0x264a03,
+ 0x28b789,
+ 0x27b84c,
+ 0x2a7e0c,
+ 0x2d3bc8,
+ 0x3ade87,
+ 0x2fc8c8,
+ 0x2fcc0a,
+ 0x2fd84b,
+ 0x303488,
+ 0x33f408,
+ 0x2363c6,
+ 0x262685,
+ 0x200f4a,
+ 0x219545,
+ 0x205bc2,
+ 0x2c7a87,
+ 0x2a32c6,
+ 0x355ec5,
+ 0x38e989,
+ 0x26b785,
+ 0x285ec5,
+ 0x3a1f49,
+ 0x257cc6,
+ 0x3b1088,
+ 0x23e0c3,
+ 0x3b3306,
+ 0x27ac06,
+ 0x30ba85,
+ 0x30ba89,
+ 0x2bc289,
+ 0x24d0c7,
+ 0x10b904,
+ 0x30b907,
+ 0x21f0c9,
+ 0x23c905,
+ 0x4bbc8,
+ 0x3b3205,
+ 0x339505,
+ 0x376c89,
+ 0x205ac2,
+ 0x2e95c4,
0x20d782,
- 0x200882,
- 0x880c8,
- 0x216582,
- 0x22d183,
- 0x201f82,
- 0x205902,
- 0x201502,
- 0x2264c3,
- 0x217642,
- 0x200882,
- 0x5a616582,
- 0x5aa1eb03,
- 0x332683,
- 0x206742,
- 0x238483,
- 0x364e83,
- 0x2264c3,
- 0x2db083,
- 0x26b346,
- 0x1617643,
- 0x880c8,
- 0x51f05,
- 0xa7dcd,
- 0x5f007,
- 0x5b200182,
- 0x5b601002,
- 0x5ba04802,
- 0x5be01842,
- 0x5c2108c2,
- 0x5c602ec2,
- 0x16e747,
- 0x5ca16582,
- 0x5ce30542,
- 0x5d21e582,
- 0x5d600f82,
- 0x21bc43,
- 0x1b4284,
- 0x20ddc3,
- 0x5da18fc2,
- 0x5de038c2,
- 0x47887,
- 0x5e214b82,
- 0x5e600902,
- 0x5ea02ac2,
- 0x5ee082c2,
- 0x5f205602,
- 0x5f600a82,
- 0xb97c5,
- 0x226743,
- 0x30ec04,
- 0x5fa15bc2,
- 0x5fe16c82,
- 0x60200102,
- 0x7508b,
- 0x60600982,
- 0x60e09782,
- 0x61206742,
- 0x61600342,
- 0x61a50042,
- 0x61e03042,
- 0x6220e842,
- 0x62600e02,
- 0x62a06bc2,
- 0x62e01302,
- 0x63205902,
- 0x6361d302,
- 0x63a04242,
- 0x63e425c2,
- 0x133184,
- 0x371183,
- 0x64206602,
- 0x64613942,
- 0x64a06942,
- 0x64e03742,
- 0x65201502,
- 0x65607a82,
- 0x65547,
- 0x65a07442,
- 0x65e07482,
- 0x66217642,
- 0x6660a442,
- 0xeb58c,
- 0x66a24982,
- 0x66e6f2c2,
- 0x6721dcc2,
- 0x67603dc2,
- 0x67a2d742,
- 0x67e1eb82,
- 0x68204702,
- 0x68606f42,
- 0x68a71282,
- 0x68e15ac2,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x75803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x60b6b683,
- 0x275803,
- 0x377004,
- 0x254106,
- 0x2e6a83,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x200482,
- 0x200482,
- 0x36b683,
- 0x275803,
- 0x6962d183,
- 0x2343c3,
- 0x2a0fc3,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x880c8,
- 0x216582,
- 0x22d183,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x245dc4,
- 0x216582,
- 0x22d183,
- 0x308703,
- 0x2343c3,
- 0x247344,
- 0x211cc3,
- 0x21eb03,
- 0x201604,
- 0x202243,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x215cc3,
- 0x2e9cc5,
- 0x241403,
- 0x223ec3,
- 0x216582,
- 0x22d183,
- 0x36b683,
- 0x238483,
- 0x2264c3,
- 0x200882,
- 0x323ac3,
- 0x880c8,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x231ac6,
- 0x201604,
- 0x202243,
- 0x212444,
- 0x238483,
- 0x2264c3,
+ 0x200b02,
+ 0x2ce985,
+ 0x30f748,
+ 0x2b9845,
+ 0x2c6fc3,
+ 0x2c6fc5,
+ 0x2d7543,
+ 0x210882,
+ 0x2e30c4,
+ 0x351903,
+ 0x204c82,
+ 0x35bb44,
+ 0x2e85c3,
+ 0x200e82,
+ 0x25e903,
+ 0x291704,
+ 0x2e7083,
+ 0x246f04,
+ 0x202602,
+ 0x21a903,
+ 0x215b43,
+ 0x206342,
+ 0x33c282,
+ 0x2bc0c9,
+ 0x202d82,
+ 0x28d304,
+ 0x201782,
+ 0x234a84,
+ 0x3037c4,
+ 0x2bcc44,
+ 0x2016c2,
+ 0x241a02,
+ 0x220883,
+ 0x225f83,
+ 0x387944,
+ 0x269e44,
+ 0x2bc484,
+ 0x2ce884,
+ 0x30b143,
+ 0x34f743,
+ 0x201a84,
+ 0x30d784,
+ 0x30e786,
+ 0x2e7782,
+ 0x20d1c2,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x204cc2,
+ 0x368883,
+ 0x2d0783,
+ 0x231b83,
+ 0x2001c3,
+ 0x332ec3,
+ 0x2964c4,
+ 0x2bc384,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x21aa03,
+ 0x2f4684,
+ 0x32f983,
+ 0x2bf3c3,
+ 0x345184,
+ 0x3b3006,
+ 0x211503,
+ 0x13ecc7,
+ 0x234fc3,
+ 0x23a943,
+ 0x2b6703,
+ 0x265383,
+ 0x22d603,
+ 0x2db6c5,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x2ed143,
+ 0x2ab343,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204303,
+ 0x204ac3,
+ 0x23ee04,
+ 0x200383,
+ 0x26a104,
+ 0x2c2d45,
+ 0x13ecc7,
+ 0x20d1c2,
+ 0x2000c2,
+ 0x208a42,
+ 0x202082,
+ 0x200382,
+ 0x2d0783,
+ 0x23a184,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x213e83,
+ 0x24ae04,
+ 0x15f048,
+ 0x2d0783,
+ 0x20abc3,
+ 0x1a5c3,
+ 0x24fe44,
+ 0x15f048,
+ 0x2d0783,
+ 0x251304,
+ 0x2964c4,
+ 0x20abc3,
+ 0x201882,
+ 0x200383,
+ 0x2202c3,
+ 0x58a04,
+ 0x370145,
+ 0x205bc2,
+ 0x30d8c3,
+ 0x204cc2,
+ 0x15f048,
+ 0x20d1c2,
+ 0x231b83,
+ 0x332ec3,
+ 0x201d42,
+ 0x200383,
+ 0x204cc2,
+ 0x15f048,
+ 0x231b83,
+ 0x332ec3,
+ 0x204303,
+ 0x20fbc3,
+ 0x30b544,
+ 0x204cc2,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x2da904,
+ 0x332ec3,
+ 0x204303,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x22d603,
+ 0x204ac3,
+ 0x200383,
+ 0x26a103,
+ 0x213e83,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x1a5c3,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x22d603,
+ 0x204ac3,
+ 0x200383,
+ 0x217082,
+ 0x200141,
+ 0x204cc2,
+ 0x200001,
+ 0x31f542,
+ 0x15f048,
+ 0x21d105,
+ 0x200701,
+ 0xd0783,
+ 0x200101,
+ 0x2000c1,
+ 0x201e41,
+ 0x29da82,
+ 0x36da04,
+ 0x372a43,
+ 0x200181,
+ 0x200941,
+ 0x200041,
+ 0x200081,
+ 0x2ed7c7,
+ 0x2eeccf,
+ 0x2fc146,
+ 0x201481,
+ 0x289786,
+ 0x200c01,
+ 0x2002c1,
+ 0x33168e,
+ 0x200381,
+ 0x200383,
+ 0x200e81,
+ 0x279e45,
+ 0x210582,
+ 0x2716c5,
+ 0x2003c1,
+ 0x200201,
+ 0x200241,
+ 0x205bc2,
+ 0x200a01,
+ 0x201a81,
+ 0x2005c1,
+ 0x2007c1,
+ 0x200cc1,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
0x21bd03,
- 0x22d183,
- 0x2343c3,
- 0x238483,
- 0x2264c3,
- 0x22d183,
- 0x1e1c6,
- 0x2343c3,
- 0x21eb03,
- 0xd1906,
- 0x238483,
- 0x2264c3,
- 0x308a48,
- 0x30b989,
- 0x31bcc9,
- 0x326c48,
- 0x37efc8,
- 0x37efc9,
- 0x333c5,
- 0x200882,
- 0x20b285,
- 0x231b43,
- 0x6c216582,
- 0x2343c3,
- 0x21eb03,
- 0x22f647,
- 0x206003,
- 0x211003,
- 0x238483,
- 0x201f43,
- 0x210783,
- 0x2025c3,
- 0x2264c3,
- 0x3a5946,
- 0x203e42,
- 0x223ec3,
- 0x880c8,
- 0x200882,
- 0x323ac3,
- 0x216582,
- 0x22d183,
- 0x2343c3,
- 0x21eb03,
- 0x201604,
- 0x211003,
- 0x238483,
- 0x2264c3,
- 0x217643,
- 0x14fa806,
+ 0x2d0783,
+ 0x332ec3,
+ 0x91d48,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x48803,
+ 0x200383,
+ 0x14ebc48,
+ 0x15f048,
+ 0x4dcc4,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x204ac3,
+ 0x200383,
+ 0x205283,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x2da904,
+ 0x200383,
+ 0x293ac5,
+ 0x343984,
+ 0x2d0783,
+ 0x204ac3,
+ 0x200383,
+ 0x16b18a,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x22f489,
+ 0x231b83,
+ 0x2d2389,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x2f37c8,
+ 0x226647,
+ 0x370145,
+ 0x3a7f87,
+ 0x26b0cb,
+ 0x215cc8,
+ 0x32eac9,
+ 0x228087,
+ 0x200108,
+ 0x36f906,
+ 0x2344c7,
+ 0x29c108,
+ 0x2ab806,
+ 0x31d407,
+ 0x2aa449,
+ 0x2ba749,
+ 0x2c2ac6,
+ 0x2c38c5,
+ 0x2cce08,
+ 0x2b4783,
+ 0x2d7c88,
+ 0x231d87,
+ 0x206583,
+ 0x31d287,
+ 0x217905,
+ 0x2eeb08,
+ 0x359105,
+ 0x2cea43,
+ 0x23c289,
+ 0x2b0e87,
+ 0x35d504,
+ 0x2ff244,
+ 0x307ccb,
+ 0x308288,
+ 0x309587,
+ 0x2d0783,
+ 0x231b83,
+ 0x2135c3,
+ 0x200383,
+ 0x236ec3,
+ 0x332ec3,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x77fcb,
+ 0x204cc2,
+ 0x20d1c2,
+ 0x200383,
+ 0x15f048,
+ 0x204cc2,
+ 0x20d1c2,
+ 0x208a42,
+ 0x201d42,
+ 0x203cc2,
+ 0x204ac3,
+ 0x200382,
+ 0x204cc2,
+ 0x368883,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x208a42,
+ 0x332ec3,
+ 0x204303,
+ 0x20fbc3,
+ 0x213184,
+ 0x204ac3,
+ 0x2183c3,
+ 0x200383,
+ 0x30b544,
+ 0x24abc3,
+ 0x332ec3,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x20abc3,
+ 0x200383,
+ 0x39db07,
+ 0x2d0783,
+ 0x26e5c7,
+ 0x362a86,
+ 0x215ac3,
+ 0x2041c3,
+ 0x332ec3,
+ 0x209e43,
+ 0x2964c4,
+ 0x38b704,
+ 0x30dbc6,
+ 0x201303,
+ 0x204ac3,
+ 0x200383,
+ 0x293ac5,
+ 0x318244,
+ 0x369dc3,
+ 0x37ed83,
+ 0x2c7a87,
+ 0x2387c5,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x203782,
+ 0x3ae343,
+ 0x2c2d43,
+ 0x368883,
+ 0x5fed0783,
+ 0x209c02,
+ 0x231b83,
+ 0x202743,
+ 0x332ec3,
+ 0x2964c4,
+ 0x23a0c3,
+ 0x2dfb83,
+ 0x20fbc3,
+ 0x213184,
+ 0x6020c002,
+ 0x204ac3,
+ 0x200383,
+ 0x209103,
+ 0x229b03,
+ 0x217082,
+ 0x24abc3,
+ 0x15f048,
+ 0x332ec3,
+ 0x1a5c3,
+ 0x2957c4,
+ 0x368883,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x23a184,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204303,
+ 0x2cee84,
+ 0x222044,
+ 0x201686,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x21aa03,
+ 0x2a32c6,
+ 0x3ddcb,
+ 0x28b86,
+ 0x4aa0a,
+ 0x10adca,
+ 0x15f048,
+ 0x20c504,
+ 0x2d0783,
+ 0x368844,
+ 0x231b83,
+ 0x256bc4,
+ 0x332ec3,
+ 0x262fc3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x32e84b,
+ 0x39f84a,
+ 0x3b478c,
+ 0x204cc2,
+ 0x20d1c2,
+ 0x208a42,
+ 0x2b0405,
+ 0x2964c4,
+ 0x201f02,
+ 0x20fbc3,
+ 0x222044,
+ 0x202082,
+ 0x200382,
+ 0x20c4c2,
+ 0x217082,
+ 0x168883,
+ 0xd882,
+ 0x2b2409,
+ 0x259f88,
+ 0x332d49,
+ 0x234309,
+ 0x23b18a,
+ 0x24550a,
+ 0x20a182,
+ 0x21c402,
+ 0xd1c2,
+ 0x2d0783,
+ 0x220802,
+ 0x2436c6,
+ 0x356fc2,
+ 0x20a542,
+ 0x21ad8e,
+ 0x21a94e,
+ 0x281a47,
+ 0x204a47,
+ 0x221202,
+ 0x231b83,
+ 0x332ec3,
+ 0x20b502,
+ 0x201d42,
+ 0x4143,
+ 0x24058f,
+ 0x26b142,
+ 0x362cc7,
+ 0x2fa1c7,
+ 0x39d487,
+ 0x31e28c,
+ 0x364d0c,
+ 0x202444,
+ 0x283b0a,
+ 0x21a882,
+ 0x201b02,
+ 0x2bc744,
+ 0x22b1c2,
+ 0x2c5c02,
+ 0x364f44,
+ 0x2184c2,
+ 0x205d82,
+ 0x5d83,
+ 0x2ab887,
+ 0x33d885,
+ 0x2073c2,
+ 0x240504,
+ 0x373102,
+ 0x2df088,
+ 0x204ac3,
+ 0x203808,
+ 0x203ac2,
+ 0x232d85,
+ 0x203ac6,
+ 0x200383,
+ 0x206ec2,
+ 0x2ef547,
+ 0x10582,
+ 0x350845,
+ 0x31d185,
+ 0x207c82,
+ 0x236b82,
+ 0x3a860a,
+ 0x27098a,
+ 0x212bc2,
+ 0x353f84,
+ 0x2018c2,
+ 0x3a2208,
+ 0x219682,
+ 0x2a2588,
+ 0x304987,
+ 0x304c89,
+ 0x2037c2,
+ 0x309e45,
+ 0x247e85,
+ 0x21424b,
+ 0x2ca84c,
+ 0x22c208,
+ 0x3186c8,
+ 0x2e7782,
+ 0x204642,
+ 0x204cc2,
+ 0x15f048,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x208a42,
+ 0x202082,
+ 0x200382,
+ 0x200383,
+ 0x20c4c2,
+ 0x204cc2,
+ 0x6260d1c2,
+ 0x62b32ec3,
+ 0x205d83,
+ 0x201f02,
+ 0x204ac3,
+ 0x3a8fc3,
+ 0x200383,
+ 0x2ec383,
+ 0x273d06,
+ 0x1613e83,
+ 0x15f048,
+ 0x63c85,
+ 0xae2cd,
+ 0xaafca,
+ 0x6ebc7,
+ 0x63201b82,
+ 0x63601442,
+ 0x63a00f82,
+ 0x63e02e02,
+ 0x642125c2,
+ 0x6460e542,
+ 0x13ecc7,
+ 0x64a0d1c2,
+ 0x64e0e482,
+ 0x6520fe42,
+ 0x65603b02,
+ 0x21a943,
+ 0x102c4,
+ 0x220a43,
+ 0x65a14002,
+ 0x65e023c2,
+ 0x51847,
+ 0x66214502,
+ 0x66600b82,
+ 0x66a00542,
+ 0x66e0a3c2,
+ 0x67202282,
+ 0x67601d42,
+ 0xbe445,
+ 0x221443,
+ 0x3b3bc4,
+ 0x67a2b1c2,
+ 0x67e42682,
+ 0x68202682,
+ 0x7e5cb,
+ 0x68600c02,
+ 0x68e513c2,
+ 0x69201f02,
+ 0x69603cc2,
+ 0x69a0bcc2,
+ 0x69e05f02,
+ 0x6a20b602,
+ 0x6a673fc2,
+ 0x6aa0c002,
+ 0x6ae04a02,
+ 0x6b202082,
+ 0x6b603702,
+ 0x6ba12982,
+ 0x6be31302,
+ 0x94fc4,
+ 0x358183,
+ 0x6c2126c2,
+ 0x6c61a582,
+ 0x6ca098c2,
+ 0x6ce00982,
+ 0x6d200382,
+ 0x6d604c82,
+ 0x78147,
+ 0x6da054c2,
+ 0x6de05502,
+ 0x6e20c4c2,
+ 0x6e609f42,
+ 0x19de4c,
+ 0x6ea22e82,
+ 0x6ee79242,
+ 0x6f200a02,
+ 0x6f606602,
+ 0x6fa019c2,
+ 0x6fe3b302,
+ 0x70206d02,
+ 0x70613882,
+ 0x70a7af82,
+ 0x70e43e02,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x75c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x68a3a0c3,
+ 0x2075c3,
+ 0x2db744,
+ 0x259e86,
+ 0x2f74c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x20d882,
+ 0x20d882,
+ 0x23a0c3,
+ 0x2075c3,
+ 0x716d0783,
+ 0x231b83,
+ 0x329e83,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x15f048,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x24fe44,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x3303c3,
+ 0x231b83,
+ 0x251304,
+ 0x2135c3,
+ 0x332ec3,
+ 0x2964c4,
+ 0x204303,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x2202c3,
+ 0x370145,
+ 0x2b2703,
+ 0x24abc3,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x23a0c3,
+ 0x204ac3,
+ 0x200383,
+ 0x204cc2,
+ 0x368883,
+ 0x15f048,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x22e886,
+ 0x2964c4,
+ 0x204303,
+ 0x213184,
+ 0x204ac3,
+ 0x200383,
+ 0x21aa03,
+ 0x2d0783,
+ 0x231b83,
+ 0x204ac3,
+ 0x200383,
+ 0x2d0783,
+ 0x28b86,
+ 0x231b83,
+ 0x332ec3,
+ 0xe1946,
+ 0x204ac3,
+ 0x200383,
+ 0x315cc8,
+ 0x318509,
+ 0x327a09,
+ 0x332548,
+ 0x37d888,
+ 0x37d889,
+ 0x9da85,
+ 0x204cc2,
+ 0x238605,
+ 0x205d43,
+ 0x7420d1c2,
+ 0x231b83,
+ 0x332ec3,
+ 0x33e387,
+ 0x265383,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x2104c3,
+ 0x212483,
+ 0x20abc3,
+ 0x200383,
+ 0x241f46,
+ 0x205bc2,
+ 0x24abc3,
+ 0x15f048,
+ 0x204cc2,
+ 0x368883,
+ 0x20d1c2,
+ 0x2d0783,
+ 0x231b83,
+ 0x332ec3,
+ 0x2964c4,
+ 0x20fbc3,
+ 0x204ac3,
+ 0x200383,
+ 0x213e83,
+ 0x153ca46,
}
// children is the list of nodes' children, the parent's wildcard bit and the
@@ -8636,439 +8623,471 @@ var children = [...]uint32{
0x40000000,
0x50000000,
0x60000000,
- 0x185c611,
- 0x1860617,
- 0x1880618,
- 0x19dc620,
- 0x19f0677,
- 0x1a0467c,
- 0x1a14681,
- 0x1a30685,
- 0x1a3468c,
- 0x1a4c68d,
- 0x1a70693,
- 0x1a7469c,
- 0x1a8c69d,
- 0x1a906a3,
+ 0x1860612,
+ 0x1864618,
+ 0x1884619,
+ 0x19e0621,
+ 0x19f4678,
+ 0x1a0867d,
+ 0x1a18682,
+ 0x1a34686,
+ 0x1a3868d,
+ 0x1a5068e,
+ 0x1a74694,
+ 0x1a7869d,
+ 0x1a9069e,
0x1a946a4,
- 0x1ab86a5,
- 0x1abc6ae,
- 0x21ac46af,
- 0x1b0c6b1,
- 0x1b106c3,
- 0x1b306c4,
- 0x1b446cc,
- 0x1b486d1,
- 0x1b786d2,
- 0x1b946de,
- 0x1bbc6e5,
- 0x1bc86ef,
- 0x1bcc6f2,
- 0x1c606f3,
- 0x1c74718,
- 0x1c8871d,
- 0x1cb8722,
- 0x1cc872e,
- 0x1cdc732,
- 0x1d00737,
- 0x1e18740,
- 0x1e1c786,
- 0x1e88787,
- 0x1e9c7a2,
- 0x1eb07a7,
- 0x1eb87ac,
- 0x1ec87ae,
- 0x1ecc7b2,
- 0x1ee47b3,
- 0x1f2c7b9,
- 0x1f447cb,
- 0x1f487d1,
- 0x1f4c7d2,
- 0x1f547d3,
- 0x1f907d5,
- 0x61f947e4,
- 0x1fa87e5,
- 0x1fac7ea,
- 0x1fb07eb,
- 0x1fc07ec,
- 0x20707f0,
- 0x207481c,
- 0x2207c81d,
- 0x2208081f,
+ 0x1a986a5,
+ 0x1ac06a6,
+ 0x1ac46b0,
+ 0x21acc6b1,
+ 0x1b146b3,
+ 0x1b186c5,
+ 0x1b386c6,
+ 0x1b4c6ce,
+ 0x1b506d3,
+ 0x1b806d4,
+ 0x1b9c6e0,
+ 0x1bc46e7,
+ 0x1bd06f1,
+ 0x1bd46f4,
+ 0x1c686f5,
+ 0x1c7c71a,
+ 0x1c9071f,
+ 0x1cc0724,
+ 0x1cd0730,
+ 0x1ce4734,
+ 0x1d08739,
+ 0x1e20742,
+ 0x1e24788,
+ 0x1e90789,
+ 0x1ea47a4,
+ 0x1eb87a9,
+ 0x1ec07ae,
+ 0x1ed07b0,
+ 0x1ed47b4,
+ 0x1eec7b5,
+ 0x1f347bb,
+ 0x1f4c7cd,
+ 0x1f507d3,
+ 0x1f547d4,
+ 0x1f5c7d5,
+ 0x1f987d7,
+ 0x61f9c7e6,
+ 0x1fb07e7,
+ 0x1fbc7ec,
+ 0x1fc07ef,
+ 0x1fd07f0,
+ 0x20807f4,
0x2084820,
- 0x20b8821,
- 0x20bc82e,
- 0x24f482f,
- 0x2254493d,
- 0x22548951,
- 0x2570952,
- 0x257895c,
- 0x2257c95e,
- 0x258495f,
- 0x22594961,
- 0x22598965,
- 0x25a4966,
- 0x225a8969,
- 0x25ac96a,
+ 0x22090821,
+ 0x22098824,
+ 0x20cc826,
+ 0x20d0833,
+ 0x2514834,
+ 0x225ac945,
0x225b096b,
- 0x25cc96c,
- 0x25e4973,
- 0x25e8979,
- 0x25f897a,
- 0x260097e,
- 0x22634980,
- 0x263898d,
- 0x264898e,
- 0x267c992,
+ 0x225b496c,
+ 0x225c096d,
+ 0x225c4970,
+ 0x225d0971,
+ 0x225d4974,
+ 0x225d8975,
+ 0x225dc976,
+ 0x225e0977,
+ 0x225e4978,
+ 0x225f0979,
+ 0x225f497c,
+ 0x2260097d,
+ 0x22604980,
+ 0x22608981,
+ 0x2260c982,
+ 0x22610983,
+ 0x22614984,
+ 0x2618985,
+ 0x2261c986,
+ 0x22628987,
+ 0x2262c98a,
+ 0x263498b,
+ 0x2264498d,
+ 0x22648991,
+ 0x2654992,
+ 0x22658995,
+ 0x265c996,
+ 0x22660997,
+ 0x267c998,
0x269499f,
- 0x26a89a5,
- 0x26d09aa,
- 0x26f09b4,
- 0x27209bc,
- 0x27489c8,
- 0x274c9d2,
- 0x27709d3,
- 0x27749dc,
- 0x27889dd,
- 0x278c9e2,
- 0x27909e3,
- 0x27b09e4,
- 0x27c09ec,
- 0x27d09f0,
- 0x27d49f4,
- 0x28489f5,
- 0x2864a12,
- 0x2870a19,
- 0x2884a1c,
- 0x289ca21,
- 0x28b0a27,
- 0x28c8a2c,
- 0x28e0a32,
- 0x28f8a38,
- 0x2914a3e,
- 0x292ca45,
- 0x298ca4b,
- 0x29a4a63,
- 0x29a8a69,
- 0x29bca6a,
- 0x2a00a6f,
- 0x2a80a80,
- 0x2aacaa0,
- 0x2ab0aab,
- 0x2ab8aac,
- 0x2ad8aae,
- 0x2adcab6,
- 0x2afcab7,
- 0x2b04abf,
- 0x2b3cac1,
- 0x2b78acf,
- 0x2b7cade,
- 0x2bbcadf,
- 0x2bd4aef,
- 0x2bf8af5,
- 0x2c18afe,
- 0x31dcb06,
- 0x31e8c77,
- 0x3208c7a,
- 0x33c4c82,
- 0x3494cf1,
- 0x3504d25,
- 0x355cd41,
- 0x3644d57,
- 0x369cd91,
- 0x36d8da7,
- 0x37d4db6,
- 0x38a0df5,
- 0x3938e28,
- 0x39c8e4e,
- 0x3a2ce72,
- 0x3c64e8b,
- 0x3d1cf19,
- 0x3de8f47,
- 0x3e34f7a,
- 0x3ebcf8d,
- 0x3ef8faf,
- 0x3f48fbe,
- 0x3fc0fd2,
- 0x63fc4ff0,
- 0x63fc8ff1,
- 0x63fccff2,
- 0x4048ff3,
- 0x40ad012,
- 0x412902b,
- 0x41a104a,
- 0x4221068,
- 0x428d088,
- 0x43b90a3,
- 0x44110ee,
- 0x64415104,
- 0x44ad105,
- 0x453512b,
- 0x458114d,
- 0x45e9160,
- 0x469117a,
- 0x47591a4,
- 0x47c11d6,
- 0x48d51f0,
- 0x648d9235,
- 0x648dd236,
- 0x4939237,
- 0x499524e,
- 0x4a25265,
- 0x4aa1289,
- 0x4ae52a8,
- 0x4bc92b9,
- 0x4bfd2f2,
- 0x4c5d2ff,
- 0x4cd1317,
- 0x4d59334,
- 0x4d99356,
- 0x4e09366,
- 0x64e0d382,
- 0x64e11383,
- 0x24e15384,
- 0x4e2d385,
- 0x4e4938b,
- 0x4e8d392,
- 0x4e9d3a3,
- 0x4eb53a7,
- 0x4f2d3ad,
- 0x4f353cb,
- 0x4f493cd,
- 0x4f613d2,
- 0x4f893d8,
- 0x4f8d3e2,
- 0x4f953e3,
- 0x4fa93e5,
- 0x4fc53ea,
- 0x4fc93f1,
- 0x4fd13f2,
- 0x500d3f4,
- 0x5021403,
- 0x5029408,
- 0x503140a,
- 0x503540c,
- 0x505940d,
- 0x507d416,
- 0x509541f,
- 0x5099425,
- 0x50a1426,
- 0x50a5428,
- 0x50f9429,
- 0x511d43e,
- 0x513d447,
- 0x515944f,
- 0x5169456,
- 0x517d45a,
- 0x518145f,
- 0x5189460,
- 0x519d462,
- 0x51ad467,
- 0x51b146b,
- 0x51cd46c,
- 0x5a5d473,
- 0x5a95697,
- 0x5ac16a5,
- 0x5ad96b0,
- 0x5af96b6,
- 0x5b196be,
- 0x5b5d6c6,
- 0x5b656d7,
- 0x25b696d9,
- 0x25b6d6da,
- 0x5b716db,
- 0x5c956dc,
- 0x25c99725,
- 0x25ca1726,
- 0x25ca9728,
- 0x25cb572a,
- 0x5cb972d,
- 0x5ce172e,
- 0x5d09738,
- 0x5d0d742,
- 0x25d45743,
- 0x5d59751,
- 0x68b1756,
- 0x68b5a2c,
- 0x68b9a2d,
- 0x268bda2e,
- 0x68c1a2f,
- 0x268c5a30,
- 0x68c9a31,
- 0x268d5a32,
- 0x68d9a35,
- 0x68dda36,
- 0x268e1a37,
- 0x68e5a38,
- 0x268eda39,
- 0x68f1a3b,
- 0x68f5a3c,
- 0x26905a3d,
- 0x6909a41,
- 0x690da42,
- 0x6911a43,
- 0x6915a44,
- 0x26919a45,
- 0x691da46,
- 0x6921a47,
- 0x6925a48,
- 0x6929a49,
- 0x26931a4a,
- 0x6935a4c,
- 0x6939a4d,
- 0x693da4e,
- 0x26941a4f,
- 0x6945a50,
- 0x2694da51,
- 0x26951a53,
- 0x696da54,
- 0x6979a5b,
- 0x69b9a5e,
- 0x69bda6e,
- 0x69e1a6f,
- 0x6b31a78,
- 0x26b39acc,
- 0x26b3dace,
- 0x26b41acf,
- 0x6b49ad0,
- 0x6c25ad2,
- 0x6c29b09,
- 0x6c55b0a,
- 0x6c75b15,
- 0x6c81b1d,
- 0x6ca1b20,
- 0x6cd9b28,
- 0x6f71b36,
- 0x702dbdc,
- 0x7041c0b,
- 0x7075c10,
- 0x70a5c1d,
- 0x70c1c29,
- 0x70e5c30,
- 0x7101c39,
- 0x711dc40,
- 0x7141c47,
- 0x7151c50,
- 0x7185c54,
- 0x71a1c61,
- 0x73adc68,
- 0x73d1ceb,
- 0x73f1cf4,
- 0x7405cfc,
- 0x7419d01,
- 0x7439d06,
- 0x74ddd0e,
- 0x74f9d37,
- 0x7515d3e,
+ 0x26989a5,
+ 0x26a89a6,
+ 0x26b09aa,
+ 0x26e49ac,
+ 0x26e89b9,
+ 0x26f89ba,
+ 0x27909be,
+ 0x227949e4,
+ 0x279c9e5,
+ 0x27a09e7,
+ 0x27b89e8,
+ 0x27cc9ee,
+ 0x27f49f3,
+ 0x28149fd,
+ 0x2844a05,
+ 0x286ca11,
+ 0x2870a1b,
+ 0x2894a1c,
+ 0x2898a25,
+ 0x28aca26,
+ 0x28b0a2b,
+ 0x28b4a2c,
+ 0x28d4a2d,
+ 0x28eca35,
+ 0x28f0a3b,
+ 0x228f4a3c,
+ 0x28f8a3d,
+ 0x2908a3e,
+ 0x290ca42,
+ 0x2984a43,
+ 0x29a0a61,
+ 0x29aca68,
+ 0x29c0a6b,
+ 0x29d8a70,
+ 0x29eca76,
+ 0x2a04a7b,
+ 0x2a1ca81,
+ 0x2a34a87,
+ 0x2a50a8d,
+ 0x2a68a94,
+ 0x2ac8a9a,
+ 0x2ae0ab2,
+ 0x2ae4ab8,
+ 0x2af8ab9,
+ 0x2b3cabe,
+ 0x2bbcacf,
+ 0x2be8aef,
+ 0x2becafa,
+ 0x2bf4afb,
+ 0x2c14afd,
+ 0x2c18b05,
+ 0x2c38b06,
+ 0x2c40b0e,
+ 0x2c78b10,
+ 0x2cb8b1e,
+ 0x2cbcb2e,
+ 0x2d0cb2f,
+ 0x2d10b43,
+ 0x22d14b44,
+ 0x2d2cb45,
+ 0x2d50b4b,
+ 0x2d70b54,
+ 0x3334b5c,
+ 0x3340ccd,
+ 0x3360cd0,
+ 0x351ccd8,
+ 0x35ecd47,
+ 0x365cd7b,
+ 0x36b4d97,
+ 0x379cdad,
+ 0x37f4de7,
+ 0x3830dfd,
+ 0x392ce0c,
+ 0x39f8e4b,
+ 0x3a90e7e,
+ 0x3b20ea4,
+ 0x3b84ec8,
+ 0x3dbcee1,
+ 0x3e74f6f,
+ 0x3f40f9d,
+ 0x3f8cfd0,
+ 0x4014fe3,
+ 0x4051005,
+ 0x40a1014,
+ 0x4119028,
+ 0x6411d046,
+ 0x64121047,
+ 0x64125048,
+ 0x41a1049,
+ 0x41fd068,
+ 0x427907f,
+ 0x42f109e,
+ 0x43710bc,
+ 0x43dd0dc,
+ 0x45090f7,
+ 0x4561142,
+ 0x64565158,
+ 0x45fd159,
+ 0x468517f,
+ 0x46d11a1,
+ 0x47391b4,
+ 0x47e11ce,
+ 0x48a91f8,
+ 0x491122a,
+ 0x4a25244,
+ 0x64a29289,
+ 0x64a2d28a,
+ 0x4a8928b,
+ 0x4ae52a2,
+ 0x4b752b9,
+ 0x4bf12dd,
+ 0x4c352fc,
+ 0x4d1930d,
+ 0x4d4d346,
+ 0x4dad353,
+ 0x4e2136b,
+ 0x4ea9388,
+ 0x4ee93aa,
+ 0x4f593ba,
+ 0x64f5d3d6,
+ 0x64f613d7,
+ 0x24f653d8,
+ 0x4f7d3d9,
+ 0x4f993df,
+ 0x4fdd3e6,
+ 0x4fed3f7,
+ 0x50053fb,
+ 0x507d401,
+ 0x508541f,
+ 0x5099421,
+ 0x50b1426,
+ 0x50d942c,
+ 0x50dd436,
+ 0x50e5437,
+ 0x50f9439,
+ 0x511543e,
+ 0x5119445,
+ 0x5121446,
+ 0x515d448,
+ 0x5171457,
+ 0x517945c,
+ 0x518145e,
+ 0x5185460,
+ 0x51a9461,
+ 0x51cd46a,
+ 0x51e5473,
+ 0x51e9479,
+ 0x51f147a,
+ 0x51f547c,
+ 0x524d47d,
+ 0x5271493,
+ 0x529149c,
+ 0x52ad4a4,
+ 0x52bd4ab,
+ 0x52d14af,
+ 0x52d54b4,
+ 0x52dd4b5,
+ 0x52f14b7,
+ 0x53014bc,
+ 0x53054c0,
+ 0x53214c1,
+ 0x5bb14c8,
+ 0x5be96ec,
+ 0x5c156fa,
+ 0x5c2d705,
+ 0x5c4d70b,
+ 0x5c6d713,
+ 0x5cb171b,
+ 0x5cb972c,
+ 0x25cbd72e,
+ 0x25cc172f,
+ 0x5cc5730,
+ 0x5e01731,
+ 0x25e05780,
+ 0x25e11781,
+ 0x25e19784,
+ 0x25e25786,
+ 0x5e29789,
+ 0x5e2d78a,
+ 0x5e5578b,
+ 0x5e7d795,
+ 0x5e8179f,
+ 0x5eb97a0,
+ 0x5ecd7ae,
+ 0x6a257b3,
+ 0x6a29a89,
+ 0x6a2da8a,
+ 0x26a31a8b,
+ 0x6a35a8c,
+ 0x26a39a8d,
+ 0x6a3da8e,
+ 0x26a49a8f,
+ 0x6a4da92,
+ 0x6a51a93,
+ 0x26a55a94,
+ 0x6a59a95,
+ 0x26a61a96,
+ 0x6a65a98,
+ 0x6a69a99,
+ 0x26a79a9a,
+ 0x6a7da9e,
+ 0x6a81a9f,
+ 0x6a85aa0,
+ 0x6a89aa1,
+ 0x26a8daa2,
+ 0x6a91aa3,
+ 0x6a95aa4,
+ 0x6a99aa5,
+ 0x6a9daa6,
+ 0x26aa5aa7,
+ 0x6aa9aa9,
+ 0x6aadaaa,
+ 0x6ab1aab,
+ 0x26ab5aac,
+ 0x6ab9aad,
+ 0x26ac1aae,
+ 0x26ac5ab0,
+ 0x6ae1ab1,
+ 0x6aedab8,
+ 0x6b2dabb,
+ 0x6b31acb,
+ 0x6b55acc,
+ 0x6b59ad5,
+ 0x6cc1ad6,
+ 0x26cc5b30,
+ 0x26ccdb31,
+ 0x26cd1b33,
+ 0x26cd5b34,
+ 0x6cddb35,
+ 0x6db9b37,
+ 0x6dbdb6e,
+ 0x6de9b6f,
+ 0x6dedb7a,
+ 0x6e0db7b,
+ 0x6e19b83,
+ 0x6e39b86,
+ 0x6e71b8e,
+ 0x7109b9c,
+ 0x71c5c42,
+ 0x71d9c71,
+ 0x720dc76,
+ 0x723dc83,
+ 0x7259c8f,
+ 0x727dc96,
+ 0x7299c9f,
+ 0x72b5ca6,
+ 0x72d9cad,
+ 0x72e9cb6,
+ 0x72edcba,
+ 0x7321cbb,
+ 0x733dcc8,
+ 0x7359ccf,
+ 0x737dcd6,
+ 0x739dcdf,
+ 0x73b1ce7,
+ 0x73c5cec,
+ 0x73c9cf1,
+ 0x73e9cf2,
+ 0x748dcfa,
+ 0x74a9d23,
+ 0x74c9d2a,
+ 0x74cdd32,
+ 0x74d1d33,
+ 0x74d5d34,
+ 0x74e9d35,
+ 0x7509d3a,
+ 0x7515d42,
0x7519d45,
- 0x751dd46,
- 0x7521d47,
- 0x7535d48,
- 0x7555d4d,
- 0x7561d55,
- 0x7565d58,
- 0x7595d59,
- 0x7615d65,
- 0x7629d85,
- 0x762dd8a,
- 0x7645d8b,
- 0x7649d91,
- 0x7655d92,
- 0x7659d95,
- 0x7675d96,
- 0x76b1d9d,
- 0x76b5dac,
- 0x76d5dad,
- 0x7725db5,
- 0x773ddc9,
- 0x7791dcf,
- 0x7795de4,
- 0x7799de5,
- 0x77ddde6,
- 0x77eddf7,
- 0x7825dfb,
- 0x7855e09,
- 0x7991e15,
- 0x79b5e64,
- 0x79e1e6d,
- 0x79ede78,
- 0x79f1e7b,
- 0x7b01e7c,
- 0x7b0dec0,
- 0x7b19ec3,
- 0x7b25ec6,
- 0x7b31ec9,
- 0x7b3decc,
- 0x7b49ecf,
- 0x7b55ed2,
- 0x7b61ed5,
- 0x7b6ded8,
+ 0x7549d46,
+ 0x75c9d52,
+ 0x75ddd72,
+ 0x75e1d77,
+ 0x75f9d78,
+ 0x75fdd7e,
+ 0x7609d7f,
+ 0x760dd82,
+ 0x7629d83,
+ 0x7665d8a,
+ 0x7669d99,
+ 0x7689d9a,
+ 0x76d9da2,
+ 0x76f1db6,
+ 0x7745dbc,
+ 0x7749dd1,
+ 0x774ddd2,
+ 0x7751dd3,
+ 0x7795dd4,
+ 0x77a5de5,
+ 0x77ddde9,
+ 0x780ddf7,
+ 0x7955e03,
+ 0x7979e55,
+ 0x79a5e5e,
+ 0x79b1e69,
+ 0x79b9e6c,
+ 0x7ac9e6e,
+ 0x7ad5eb2,
+ 0x7ae1eb5,
+ 0x7aedeb8,
+ 0x7af9ebb,
+ 0x7b05ebe,
+ 0x7b11ec1,
+ 0x7b1dec4,
+ 0x7b29ec7,
+ 0x7b35eca,
+ 0x7b41ecd,
+ 0x7b4ded0,
+ 0x7b59ed3,
+ 0x7b65ed6,
+ 0x7b6ded9,
0x7b79edb,
0x7b85ede,
0x7b91ee1,
0x7b9dee4,
- 0x7ba5ee7,
- 0x7bb1ee9,
- 0x7bbdeec,
- 0x7bc9eef,
- 0x7bd5ef2,
- 0x7be1ef5,
- 0x7bedef8,
- 0x7bf9efb,
- 0x7c05efe,
- 0x7c11f01,
- 0x7c1df04,
- 0x7c29f07,
- 0x7c35f0a,
- 0x7c41f0d,
+ 0x7ba9ee7,
+ 0x7bb5eea,
+ 0x7bc1eed,
+ 0x7bcdef0,
+ 0x7bd9ef3,
+ 0x7be5ef6,
+ 0x7bf1ef9,
+ 0x7bfdefc,
+ 0x7c09eff,
+ 0x7c15f02,
+ 0x7c21f05,
+ 0x7c2df08,
+ 0x7c39f0b,
+ 0x7c41f0e,
0x7c4df10,
0x7c59f13,
0x7c65f16,
0x7c71f19,
- 0x7c79f1c,
- 0x7c85f1e,
- 0x7c91f21,
- 0x7c9df24,
- 0x7ca9f27,
- 0x7cb5f2a,
- 0x7cc1f2d,
- 0x7ccdf30,
- 0x7cd9f33,
- 0x7ce5f36,
+ 0x7c7df1c,
+ 0x7c89f1f,
+ 0x7c95f22,
+ 0x7ca1f25,
+ 0x7cadf28,
+ 0x7cb9f2b,
+ 0x7cc5f2e,
+ 0x7cd1f31,
+ 0x7cddf34,
+ 0x7ce5f37,
0x7cf1f39,
0x7cfdf3c,
0x7d09f3f,
0x7d15f42,
- 0x7d1df45,
- 0x7d29f47,
- 0x7d35f4a,
- 0x7d41f4d,
- 0x7d4df50,
- 0x7d59f53,
- 0x7d65f56,
- 0x7d71f59,
- 0x7d7df5c,
- 0x7d81f5f,
- 0x7d8df60,
- 0x7da5f63,
- 0x7da9f69,
- 0x7db9f6a,
- 0x7dd1f6e,
- 0x7e15f74,
- 0x7e29f85,
- 0x7e5df8a,
- 0x7e6df97,
- 0x7e89f9b,
- 0x7ea1fa2,
- 0x7ea5fa8,
- 0x27ee9fa9,
- 0x7eedfba,
- 0x7f19fbb,
- 0x7f1dfc6,
+ 0x7d21f45,
+ 0x7d2df48,
+ 0x7d39f4b,
+ 0x7d45f4e,
+ 0x7d49f51,
+ 0x7d55f52,
+ 0x7d6df55,
+ 0x7d71f5b,
+ 0x7d81f5c,
+ 0x7d99f60,
+ 0x7dddf66,
+ 0x7df1f77,
+ 0x7e25f7c,
+ 0x7e35f89,
+ 0x7e51f8d,
+ 0x7e69f94,
+ 0x7e6df9a,
+ 0x27eb1f9b,
+ 0x7eb5fac,
+ 0x7ee1fad,
+ 0x7ee5fb8,
}
-// max children 434 (capacity 511)
-// max text offset 27930 (capacity 32767)
+// max children 466 (capacity 511)
+// max text offset 28023 (capacity 32767)
// max text length 36 (capacity 63)
-// max hi 8135 (capacity 16383)
-// max lo 8134 (capacity 16383)
+// max hi 8121 (capacity 16383)
+// max lo 8120 (capacity 16383)
diff --git a/vendor/golang.org/x/net/publicsuffix/table_test.go b/vendor/golang.org/x/net/publicsuffix/table_test.go
index 5433f3b..f60c80e 100644
--- a/vendor/golang.org/x/net/publicsuffix/table_test.go
+++ b/vendor/golang.org/x/net/publicsuffix/table_test.go
@@ -541,6 +541,7 @@ var rules = [...]string{
"org.cw",
"cx",
"gov.cx",
+ "cy",
"ac.cy",
"biz.cy",
"com.cy",
@@ -2207,9 +2208,7 @@ var rules = [...]string{
"aso.kumamoto.jp",
"choyo.kumamoto.jp",
"gyokuto.kumamoto.jp",
- "hitoyoshi.kumamoto.jp",
"kamiamakusa.kumamoto.jp",
- "kashima.kumamoto.jp",
"kikuchi.kumamoto.jp",
"kumamoto.kumamoto.jp",
"mashiki.kumamoto.jp",
@@ -3968,20 +3967,21 @@ var rules = [...]string{
"net.ng",
"org.ng",
"sch.ng",
- "com.ni",
- "gob.ni",
- "edu.ni",
- "org.ni",
- "nom.ni",
- "net.ni",
- "mil.ni",
- "co.ni",
- "biz.ni",
- "web.ni",
- "int.ni",
+ "ni",
"ac.ni",
+ "biz.ni",
+ "co.ni",
+ "com.ni",
+ "edu.ni",
+ "gob.ni",
"in.ni",
"info.ni",
+ "int.ni",
+ "mil.ni",
+ "net.ni",
+ "nom.ni",
+ "org.ni",
+ "web.ni",
"nl",
"bv.nl",
"no",
@@ -4775,6 +4775,7 @@ var rules = [...]string{
"net.om",
"org.om",
"pro.om",
+ "onion",
"org",
"pa",
"ac.pa",
@@ -5126,133 +5127,9 @@ var rules = [...]string{
"org.rs",
"ru",
"ac.ru",
- "com.ru",
"edu.ru",
- "int.ru",
- "net.ru",
- "org.ru",
- "pp.ru",
- "adygeya.ru",
- "altai.ru",
- "amur.ru",
- "arkhangelsk.ru",
- "astrakhan.ru",
- "bashkiria.ru",
- "belgorod.ru",
- "bir.ru",
- "bryansk.ru",
- "buryatia.ru",
- "cbg.ru",
- "chel.ru",
- "chelyabinsk.ru",
- "chita.ru",
- "chukotka.ru",
- "chuvashia.ru",
- "dagestan.ru",
- "dudinka.ru",
- "e-burg.ru",
- "grozny.ru",
- "irkutsk.ru",
- "ivanovo.ru",
- "izhevsk.ru",
- "jar.ru",
- "joshkar-ola.ru",
- "kalmykia.ru",
- "kaluga.ru",
- "kamchatka.ru",
- "karelia.ru",
- "kazan.ru",
- "kchr.ru",
- "kemerovo.ru",
- "khabarovsk.ru",
- "khakassia.ru",
- "khv.ru",
- "kirov.ru",
- "koenig.ru",
- "komi.ru",
- "kostroma.ru",
- "krasnoyarsk.ru",
- "kuban.ru",
- "kurgan.ru",
- "kursk.ru",
- "lipetsk.ru",
- "magadan.ru",
- "mari.ru",
- "mari-el.ru",
- "marine.ru",
- "mordovia.ru",
- "msk.ru",
- "murmansk.ru",
- "nalchik.ru",
- "nnov.ru",
- "nov.ru",
- "novosibirsk.ru",
- "nsk.ru",
- "omsk.ru",
- "orenburg.ru",
- "oryol.ru",
- "palana.ru",
- "penza.ru",
- "perm.ru",
- "ptz.ru",
- "rnd.ru",
- "ryazan.ru",
- "sakhalin.ru",
- "samara.ru",
- "saratov.ru",
- "simbirsk.ru",
- "smolensk.ru",
- "spb.ru",
- "stavropol.ru",
- "stv.ru",
- "surgut.ru",
- "tambov.ru",
- "tatarstan.ru",
- "tom.ru",
- "tomsk.ru",
- "tsaritsyn.ru",
- "tsk.ru",
- "tula.ru",
- "tuva.ru",
- "tver.ru",
- "tyumen.ru",
- "udm.ru",
- "udmurtia.ru",
- "ulan-ude.ru",
- "vladikavkaz.ru",
- "vladimir.ru",
- "vladivostok.ru",
- "volgograd.ru",
- "vologda.ru",
- "voronezh.ru",
- "vrn.ru",
- "vyatka.ru",
- "yakutia.ru",
- "yamal.ru",
- "yaroslavl.ru",
- "yekaterinburg.ru",
- "yuzhno-sakhalinsk.ru",
- "amursk.ru",
- "baikal.ru",
- "cmw.ru",
- "fareast.ru",
- "jamal.ru",
- "kms.ru",
- "k-uralsk.ru",
- "kustanai.ru",
- "kuzbass.ru",
- "mytis.ru",
- "nakhodka.ru",
- "nkz.ru",
- "norilsk.ru",
- "oskol.ru",
- "pyatigorsk.ru",
- "rubtsovsk.ru",
- "snz.ru",
- "syzran.ru",
- "vdonsk.ru",
- "zgrad.ru",
"gov.ru",
+ "int.ru",
"mil.ru",
"test.ru",
"rw",
@@ -6379,7 +6256,6 @@ var rules = [...]string{
"education",
"email",
"emerck",
- "emerson",
"energy",
"engineer",
"engineering",
@@ -6542,6 +6418,7 @@ var rules = [...]string{
"honda",
"honeywell",
"horse",
+ "hospital",
"host",
"hosting",
"hot",
@@ -7293,43 +7170,64 @@ var rules = [...]string{
"*.alces.network",
"*.alwaysdata.net",
"cloudfront.net",
- "compute.amazonaws.com",
- "ap-northeast-1.compute.amazonaws.com",
- "ap-northeast-2.compute.amazonaws.com",
- "ap-southeast-1.compute.amazonaws.com",
- "ap-southeast-2.compute.amazonaws.com",
- "eu-central-1.compute.amazonaws.com",
- "eu-west-1.compute.amazonaws.com",
- "sa-east-1.compute.amazonaws.com",
- "us-gov-west-1.compute.amazonaws.com",
- "us-west-1.compute.amazonaws.com",
- "us-west-2.compute.amazonaws.com",
- "compute-1.amazonaws.com",
- "z-1.compute-1.amazonaws.com",
- "z-2.compute-1.amazonaws.com",
+ "*.compute.amazonaws.com",
+ "*.compute-1.amazonaws.com",
+ "*.compute.amazonaws.com.cn",
"us-east-1.amazonaws.com",
- "compute.amazonaws.com.cn",
- "cn-north-1.compute.amazonaws.com.cn",
- "elasticbeanstalk.com",
- "elb.amazonaws.com",
- "s3.amazonaws.com",
+ "elasticbeanstalk.cn-north-1.amazonaws.com.cn",
+ "*.elasticbeanstalk.com",
+ "*.elb.amazonaws.com",
+ "*.elb.amazonaws.com.cn",
+ "*.s3.amazonaws.com",
"s3-ap-northeast-1.amazonaws.com",
"s3-ap-northeast-2.amazonaws.com",
+ "s3-ap-south-1.amazonaws.com",
"s3-ap-southeast-1.amazonaws.com",
"s3-ap-southeast-2.amazonaws.com",
+ "s3-ca-central-1.amazonaws.com",
"s3-eu-central-1.amazonaws.com",
"s3-eu-west-1.amazonaws.com",
"s3-external-1.amazonaws.com",
- "s3-external-2.amazonaws.com",
"s3-fips-us-gov-west-1.amazonaws.com",
"s3-sa-east-1.amazonaws.com",
"s3-us-gov-west-1.amazonaws.com",
+ "s3-us-east-2.amazonaws.com",
"s3-us-west-1.amazonaws.com",
"s3-us-west-2.amazonaws.com",
"s3.ap-northeast-2.amazonaws.com",
+ "s3.ap-south-1.amazonaws.com",
"s3.cn-north-1.amazonaws.com.cn",
+ "s3.ca-central-1.amazonaws.com",
"s3.eu-central-1.amazonaws.com",
+ "s3.us-east-2.amazonaws.com",
+ "s3.dualstack.ap-northeast-1.amazonaws.com",
+ "s3.dualstack.ap-northeast-2.amazonaws.com",
+ "s3.dualstack.ap-south-1.amazonaws.com",
+ "s3.dualstack.ap-southeast-1.amazonaws.com",
+ "s3.dualstack.ap-southeast-2.amazonaws.com",
+ "s3.dualstack.ca-central-1.amazonaws.com",
+ "s3.dualstack.eu-central-1.amazonaws.com",
+ "s3.dualstack.eu-west-1.amazonaws.com",
+ "s3.dualstack.sa-east-1.amazonaws.com",
+ "s3.dualstack.us-east-1.amazonaws.com",
+ "s3.dualstack.us-east-2.amazonaws.com",
+ "s3-website-us-east-1.amazonaws.com",
+ "s3-website-us-west-1.amazonaws.com",
+ "s3-website-us-west-2.amazonaws.com",
+ "s3-website-ap-northeast-1.amazonaws.com",
+ "s3-website-ap-southeast-1.amazonaws.com",
+ "s3-website-ap-southeast-2.amazonaws.com",
+ "s3-website-eu-west-1.amazonaws.com",
+ "s3-website-sa-east-1.amazonaws.com",
+ "s3-website.ap-northeast-2.amazonaws.com",
+ "s3-website.ap-south-1.amazonaws.com",
+ "s3-website.ca-central-1.amazonaws.com",
+ "s3-website.eu-central-1.amazonaws.com",
+ "s3-website.us-east-2.amazonaws.com",
+ "t3l3p0rt.net",
+ "tele.amune.org",
"on-aptible.com",
+ "user.party.eus",
"pimienta.org",
"poivron.org",
"potager.org",
@@ -7402,6 +7300,15 @@ var rules = [...]string{
"co.nl",
"co.no",
"*.platform.sh",
+ "dyn.cosidns.de",
+ "dynamisches-dns.de",
+ "dnsupdater.de",
+ "internet-dns.de",
+ "l-o-g-i-n.de",
+ "dynamic-dns.info",
+ "feste-ip.net",
+ "knx-server.net",
+ "static-access.net",
"realm.cz",
"*.cryptonomic.net",
"cupcake.is",
@@ -7701,8 +7608,19 @@ var rules = [...]string{
"webhop.org",
"worse-than.tv",
"writesthisblog.com",
+ "ddnss.de",
+ "dyn.ddnss.de",
+ "dyndns.ddnss.de",
+ "dyndns1.de",
+ "dyn-ip24.de",
+ "home-webserver.de",
+ "dyn.home-webserver.de",
+ "myhome-server.de",
+ "ddnss.org",
"dynv6.net",
"e4.cz",
+ "enonic.io",
+ "customer.enonic.io",
"eu.org",
"al.eu.org",
"asso.eu.org",
@@ -7764,11 +7682,14 @@ var rules = [...]string{
"us-1.evennode.com",
"us-2.evennode.com",
"apps.fbsbx.com",
+ "map.fastly.net",
+ "a.prod.fastly.net",
+ "global.prod.fastly.net",
"a.ssl.fastly.net",
"b.ssl.fastly.net",
"global.ssl.fastly.net",
- "a.prod.fastly.net",
- "global.prod.fastly.net",
+ "fastlylb.net",
+ "map.fastlylb.net",
"fhapp.xyz",
"firebaseapp.com",
"flynnhub.com",
@@ -7778,9 +7699,12 @@ var rules = [...]string{
"fbxos.fr",
"freebox-os.fr",
"freeboxos.fr",
+ "myfusion.cloud",
+ "futurehosting.at",
"futuremailing.at",
"*.ex.ortsinfo.at",
"*.kunden.ortsinfo.at",
+ "*.statics.cloud",
"service.gov.uk",
"github.io",
"githubusercontent.com",
@@ -7790,7 +7714,7 @@ var rules = [...]string{
"gist.githubcloud.com",
"*.githubcloudusercontent.com",
"gitlab.io",
- "ro.com",
+ "homeoffice.gov.uk",
"ro.im",
"shop.ro",
"goip.de",
@@ -8036,6 +7960,7 @@ var rules = [...]string{
"pantheonsite.io",
"gotpantheon.com",
"mypep.link",
+ "on-web.fr",
"xen.prgmr.com",
"priv.at",
"protonet.io",
@@ -8054,19 +7979,34 @@ var rules = [...]string{
"sandcats.io",
"logoip.de",
"logoip.com",
+ "firewall-gateway.com",
+ "firewall-gateway.de",
+ "my-gateway.de",
+ "my-router.de",
+ "spdns.de",
+ "spdns.eu",
+ "firewall-gateway.net",
+ "my-firewall.org",
+ "myfirewall.org",
+ "spdns.org",
"biz.ua",
"co.ua",
"pp.ua",
+ "shiftedit.io",
"myshopblocks.com",
+ "1kapp.com",
+ "appchizi.com",
+ "applinzi.com",
"sinaapp.com",
"vipsinaapp.com",
- "1kapp.com",
"bounty-full.com",
"alpha.bounty-full.com",
"beta.bounty-full.com",
"static.land",
"dev.static.land",
"sites.static.land",
+ "apps.lair.io",
+ "*.stolos.io",
"spacekit.io",
"stackspace.space",
"diskstation.me",
@@ -8094,16 +8034,41 @@ var rules = [...]string{
"*.transurl.eu",
"*.transurl.nl",
"tuxfamily.org",
+ "dd-dns.de",
+ "diskstation.eu",
+ "diskstation.org",
+ "dray-dns.de",
+ "draydns.de",
+ "dyn-vpn.de",
+ "dynvpn.de",
+ "mein-vigor.de",
+ "my-vigor.de",
+ "my-wan.de",
+ "syno-ds.de",
+ "synology-diskstation.de",
+ "synology-ds.de",
"hk.com",
"hk.org",
"ltd.hk",
"inc.hk",
"lib.de.us",
"router.management",
+ "remotewd.com",
"wmflabs.org",
"yolasite.com",
+ "ybo.faith",
+ "yombo.me",
+ "homelink.one",
+ "ybo.party",
+ "ybo.review",
+ "ybo.science",
+ "ybo.trade",
"za.net",
"za.org",
+ "now.sh",
+ "cc.ua",
+ "inf.ua",
+ "ltd.ua",
}
var nodeLabels = [...]string{
@@ -8497,7 +8462,6 @@ var nodeLabels = [...]string{
"eg",
"email",
"emerck",
- "emerson",
"energy",
"engineer",
"engineering",
@@ -8693,6 +8657,7 @@ var nodeLabels = [...]string{
"honda",
"honeywell",
"horse",
+ "hospital",
"host",
"hosting",
"hot",
@@ -9034,6 +8999,7 @@ var nodeLabels = [...]string{
"omega",
"one",
"ong",
+ "onion",
"onl",
"online",
"onyourside",
@@ -9811,6 +9777,7 @@ var nodeLabels = [...]string{
"ac",
"biz",
"co",
+ "futurehosting",
"futuremailing",
"gv",
"info",
@@ -10134,6 +10101,8 @@ var nodeLabels = [...]string{
"gov",
"mil",
"magentosite",
+ "myfusion",
+ "statics",
"cloudns",
"co",
"com",
@@ -10186,8 +10155,9 @@ var nodeLabels = [...]string{
"amazonaws",
"cn-north-1",
"compute",
+ "elb",
+ "elasticbeanstalk",
"s3",
- "cn-north-1",
"arts",
"com",
"edu",
@@ -10209,6 +10179,8 @@ var nodeLabels = [...]string{
"africa",
"alpha-myqnapcloud",
"amazonaws",
+ "appchizi",
+ "applinzi",
"appspot",
"ar",
"betainabox",
@@ -10265,6 +10237,7 @@ var nodeLabels = [...]string{
"familyds",
"fbsbx",
"firebaseapp",
+ "firewall-gateway",
"flynnhub",
"freebox-os",
"freeboxos",
@@ -10429,8 +10402,8 @@ var nodeLabels = [...]string{
"qc",
"quicksytes",
"rackmaze",
+ "remotewd",
"rhcloud",
- "ro",
"ru",
"sa",
"saves-the-whales",
@@ -10472,39 +10445,75 @@ var nodeLabels = [...]string{
"xenapponazure",
"yolasite",
"za",
+ "ap-northeast-1",
"ap-northeast-2",
+ "ap-south-1",
+ "ap-southeast-1",
+ "ap-southeast-2",
+ "ca-central-1",
"compute",
"compute-1",
"elb",
"eu-central-1",
+ "eu-west-1",
"s3",
"s3-ap-northeast-1",
"s3-ap-northeast-2",
+ "s3-ap-south-1",
"s3-ap-southeast-1",
"s3-ap-southeast-2",
+ "s3-ca-central-1",
"s3-eu-central-1",
"s3-eu-west-1",
"s3-external-1",
- "s3-external-2",
"s3-fips-us-gov-west-1",
"s3-sa-east-1",
+ "s3-us-east-2",
"s3-us-gov-west-1",
"s3-us-west-1",
"s3-us-west-2",
- "us-east-1",
- "s3",
- "ap-northeast-1",
- "ap-northeast-2",
- "ap-southeast-1",
- "ap-southeast-2",
- "eu-central-1",
- "eu-west-1",
+ "s3-website-ap-northeast-1",
+ "s3-website-ap-southeast-1",
+ "s3-website-ap-southeast-2",
+ "s3-website-eu-west-1",
+ "s3-website-sa-east-1",
+ "s3-website-us-east-1",
+ "s3-website-us-west-1",
+ "s3-website-us-west-2",
"sa-east-1",
- "us-gov-west-1",
- "us-west-1",
- "us-west-2",
- "z-1",
- "z-2",
+ "us-east-1",
+ "us-east-2",
+ "dualstack",
+ "s3",
+ "dualstack",
+ "s3",
+ "s3-website",
+ "s3",
+ "dualstack",
+ "s3",
+ "s3-website",
+ "s3",
+ "dualstack",
+ "s3",
+ "dualstack",
+ "s3",
+ "dualstack",
+ "s3",
+ "s3-website",
+ "s3",
+ "dualstack",
+ "s3",
+ "s3-website",
+ "s3",
+ "dualstack",
+ "s3",
+ "dualstack",
+ "s3",
+ "dualstack",
+ "s3",
+ "dualstack",
+ "s3",
+ "s3-website",
"s3",
"alpha",
"beta",
@@ -10559,17 +10568,46 @@ var nodeLabels = [...]string{
"realm",
"blogspot",
"com",
+ "cosidns",
+ "dd-dns",
+ "ddnss",
"dnshome",
+ "dnsupdater",
+ "dray-dns",
+ "draydns",
+ "dyn-ip24",
+ "dyn-vpn",
+ "dynamisches-dns",
+ "dyndns1",
+ "dynvpn",
+ "firewall-gateway",
"fuettertdasnetz",
"goip",
+ "home-webserver",
+ "internet-dns",
"isteingeek",
"istmein",
"keymachine",
+ "l-o-g-i-n",
"lebtimnetz",
"leitungsen",
"logoip",
+ "mein-vigor",
+ "my-gateway",
+ "my-router",
+ "my-vigor",
+ "my-wan",
+ "myhome-server",
+ "spdns",
+ "syno-ds",
+ "synology-diskstation",
+ "synology-ds",
"taifun-dns",
"traeumtgerade",
+ "dyn",
+ "dyn",
+ "dyndns",
+ "dyn",
"biz",
"blogspot",
"co",
@@ -10648,9 +10686,14 @@ var nodeLabels = [...]string{
"net",
"org",
"cloudns",
+ "diskstation",
"mycd",
+ "spdns",
"transurl",
"wellbeingzone",
+ "party",
+ "user",
+ "ybo",
"aland",
"blogspot",
"dy",
@@ -10679,6 +10722,7 @@ var nodeLabels = [...]string{
"medecin",
"nom",
"notaires",
+ "on-web",
"pharmacien",
"port",
"prd",
@@ -10878,6 +10922,7 @@ var nodeLabels = [...]string{
"barrell-of-knowledge",
"cloudns",
"dvrcam",
+ "dynamic-dns",
"dyndns",
"for-our",
"groks-the",
@@ -10896,16 +10941,22 @@ var nodeLabels = [...]string{
"com",
"dedyn",
"drud",
+ "enonic",
"github",
"gitlab",
"hasura-app",
"hzc",
+ "lair",
"ngrok",
"nid",
"pantheonsite",
"protonet",
"sandcats",
+ "shiftedit",
"spacekit",
+ "stolos",
+ "customer",
+ "apps",
"com",
"edu",
"gov",
@@ -12226,9 +12277,7 @@ var nodeLabels = [...]string{
"aso",
"choyo",
"gyokuto",
- "hitoyoshi",
"kamiamakusa",
- "kashima",
"kikuchi",
"kumamoto",
"mashiki",
@@ -13289,6 +13338,7 @@ var nodeLabels = [...]string{
"priv",
"synology",
"webhop",
+ "yombo",
"co",
"com",
"edu",
@@ -13986,6 +14036,9 @@ var nodeLabels = [...]string{
"endofinternet",
"familyds",
"fastly",
+ "fastlylb",
+ "feste-ip",
+ "firewall-gateway",
"from-az",
"from-co",
"from-la",
@@ -14005,6 +14058,7 @@ var nodeLabels = [...]string{
"isa-geek",
"jp",
"kicks-ass",
+ "knx-server",
"mydissent",
"myeffect",
"myfritz",
@@ -14027,12 +14081,15 @@ var nodeLabels = [...]string{
"serveblog",
"serveftp",
"serveminecraft",
+ "static-access",
"sytes",
+ "t3l3p0rt",
"thruhere",
"uk",
"webhop",
"za",
"r",
+ "map",
"prod",
"ssl",
"a",
@@ -14040,6 +14097,7 @@ var nodeLabels = [...]string{
"a",
"b",
"global",
+ "map",
"alces",
"arts",
"com",
@@ -14883,7 +14941,9 @@ var nodeLabels = [...]string{
"net",
"org",
"pro",
+ "homelink",
"ae",
+ "amune",
"blogdns",
"blogsite",
"bmoattachments",
@@ -14895,6 +14955,8 @@ var nodeLabels = [...]string{
"cloudns",
"collegefan",
"couchpotatofries",
+ "ddnss",
+ "diskstation",
"dnsalias",
"dnsdojo",
"doesntexist",
@@ -14942,6 +15004,8 @@ var nodeLabels = [...]string{
"kicks-ass",
"misconfused",
"mlbfan",
+ "my-firewall",
+ "myfirewall",
"myftp",
"mysecuritycamera",
"nflfan",
@@ -14957,6 +15021,7 @@ var nodeLabels = [...]string{
"servebbs",
"serveftp",
"servegame",
+ "spdns",
"stuff-4-sale",
"sweetpepper",
"tunk",
@@ -14967,6 +15032,7 @@ var nodeLabels = [...]string{
"wmflabs",
"za",
"zapto",
+ "tele",
"c",
"rsc",
"origin",
@@ -15040,6 +15106,7 @@ var nodeLabels = [...]string{
"nom",
"org",
"sld",
+ "ybo",
"blogspot",
"com",
"edu",
@@ -15359,6 +15426,7 @@ var nodeLabels = [...]string{
"blogspot",
"com",
"nom",
+ "ybo",
"arts",
"blogspot",
"com",
@@ -15380,136 +15448,12 @@ var nodeLabels = [...]string{
"in",
"org",
"ac",
- "adygeya",
- "altai",
- "amur",
- "amursk",
- "arkhangelsk",
- "astrakhan",
- "baikal",
- "bashkiria",
- "belgorod",
- "bir",
"blogspot",
- "bryansk",
- "buryatia",
- "cbg",
- "chel",
- "chelyabinsk",
- "chita",
- "chukotka",
- "chuvashia",
- "cmw",
- "com",
- "dagestan",
- "dudinka",
- "e-burg",
"edu",
- "fareast",
"gov",
- "grozny",
"int",
- "irkutsk",
- "ivanovo",
- "izhevsk",
- "jamal",
- "jar",
- "joshkar-ola",
- "k-uralsk",
- "kalmykia",
- "kaluga",
- "kamchatka",
- "karelia",
- "kazan",
- "kchr",
- "kemerovo",
- "khabarovsk",
- "khakassia",
- "khv",
- "kirov",
- "kms",
- "koenig",
- "komi",
- "kostroma",
- "krasnoyarsk",
- "kuban",
- "kurgan",
- "kursk",
- "kustanai",
- "kuzbass",
- "lipetsk",
- "magadan",
- "mari",
- "mari-el",
- "marine",
"mil",
- "mordovia",
- "msk",
- "murmansk",
- "mytis",
- "nakhodka",
- "nalchik",
- "net",
- "nkz",
- "nnov",
- "norilsk",
- "nov",
- "novosibirsk",
- "nsk",
- "omsk",
- "orenburg",
- "org",
- "oryol",
- "oskol",
- "palana",
- "penza",
- "perm",
- "pp",
- "ptz",
- "pyatigorsk",
- "rnd",
- "rubtsovsk",
- "ryazan",
- "sakhalin",
- "samara",
- "saratov",
- "simbirsk",
- "smolensk",
- "snz",
- "spb",
- "stavropol",
- "stv",
- "surgut",
- "syzran",
- "tambov",
- "tatarstan",
"test",
- "tom",
- "tomsk",
- "tsaritsyn",
- "tsk",
- "tula",
- "tuva",
- "tver",
- "tyumen",
- "udm",
- "udmurtia",
- "ulan-ude",
- "vdonsk",
- "vladikavkaz",
- "vladimir",
- "vladivostok",
- "volgograd",
- "vologda",
- "voronezh",
- "vrn",
- "vyatka",
- "yakutia",
- "yamal",
- "yaroslavl",
- "yekaterinburg",
- "yuzhno-sakhalinsk",
- "zgrad",
"ac",
"co",
"com",
@@ -15537,6 +15481,7 @@ var nodeLabels = [...]string{
"gov",
"net",
"org",
+ "ybo",
"com",
"edu",
"gov",
@@ -15598,6 +15543,7 @@ var nodeLabels = [...]string{
"hashbang",
"mil",
"net",
+ "now",
"org",
"platform",
"blogspot",
@@ -15761,6 +15707,7 @@ var nodeLabels = [...]string{
"web",
"blogspot",
"gov",
+ "ybo",
"aero",
"biz",
"co",
@@ -15809,6 +15756,7 @@ var nodeLabels = [...]string{
"sc",
"tv",
"biz",
+ "cc",
"cherkassy",
"cherkasy",
"chernigov",
@@ -15832,6 +15780,7 @@ var nodeLabels = [...]string{
"gov",
"if",
"in",
+ "inf",
"ivano-frankivsk",
"kh",
"kharkiv",
@@ -15849,6 +15798,7 @@ var nodeLabels = [...]string{
"kyiv",
"lg",
"lt",
+ "ltd",
"lugansk",
"lutsk",
"lv",
@@ -15910,6 +15860,7 @@ var nodeLabels = [...]string{
"blogspot",
"no-ip",
"wellbeingzone",
+ "homeoffice",
"service",
"ak",
"al",
diff --git a/vendor/golang.org/x/net/route/address.go b/vendor/golang.org/x/net/route/address.go
index a56909c..e6bfa39 100644
--- a/vendor/golang.org/x/net/route/address.go
+++ b/vendor/golang.org/x/net/route/address.go
@@ -24,6 +24,39 @@ type LinkAddr struct {
// Family implements the Family method of Addr interface.
func (a *LinkAddr) Family() int { return sysAF_LINK }
+func (a *LinkAddr) lenAndSpace() (int, int) {
+ l := 8 + len(a.Name) + len(a.Addr)
+ return l, roundup(l)
+}
+
+func (a *LinkAddr) marshal(b []byte) (int, error) {
+ l, ll := a.lenAndSpace()
+ if len(b) < ll {
+ return 0, errShortBuffer
+ }
+ nlen, alen := len(a.Name), len(a.Addr)
+ if nlen > 255 || alen > 255 {
+ return 0, errInvalidAddr
+ }
+ b[0] = byte(l)
+ b[1] = sysAF_LINK
+ if a.Index > 0 {
+ nativeEndian.PutUint16(b[2:4], uint16(a.Index))
+ }
+ data := b[8:]
+ if nlen > 0 {
+ b[5] = byte(nlen)
+ copy(data[:nlen], a.Addr)
+ data = data[nlen:]
+ }
+ if alen > 0 {
+ b[6] = byte(alen)
+ copy(data[:alen], a.Name)
+ data = data[alen:]
+ }
+ return ll, nil
+}
+
func parseLinkAddr(b []byte) (Addr, error) {
if len(b) < 8 {
return nil, errInvalidAddr
@@ -90,6 +123,21 @@ type Inet4Addr struct {
// Family implements the Family method of Addr interface.
func (a *Inet4Addr) Family() int { return sysAF_INET }
+func (a *Inet4Addr) lenAndSpace() (int, int) {
+ return sizeofSockaddrInet, roundup(sizeofSockaddrInet)
+}
+
+func (a *Inet4Addr) marshal(b []byte) (int, error) {
+ l, ll := a.lenAndSpace()
+ if len(b) < ll {
+ return 0, errShortBuffer
+ }
+ b[0] = byte(l)
+ b[1] = sysAF_INET
+ copy(b[4:8], a.IP[:])
+ return ll, nil
+}
+
// An Inet6Addr represents an internet address for IPv6.
type Inet6Addr struct {
IP [16]byte // IP address
@@ -99,18 +147,36 @@ type Inet6Addr struct {
// Family implements the Family method of Addr interface.
func (a *Inet6Addr) Family() int { return sysAF_INET6 }
+func (a *Inet6Addr) lenAndSpace() (int, int) {
+ return sizeofSockaddrInet6, roundup(sizeofSockaddrInet6)
+}
+
+func (a *Inet6Addr) marshal(b []byte) (int, error) {
+ l, ll := a.lenAndSpace()
+ if len(b) < ll {
+ return 0, errShortBuffer
+ }
+ b[0] = byte(l)
+ b[1] = sysAF_INET6
+ copy(b[8:24], a.IP[:])
+ if a.ZoneID > 0 {
+ nativeEndian.PutUint32(b[24:28], uint32(a.ZoneID))
+ }
+ return ll, nil
+}
+
// parseInetAddr parses b as an internet address for IPv4 or IPv6.
func parseInetAddr(af int, b []byte) (Addr, error) {
switch af {
case sysAF_INET:
- if len(b) < 16 {
+ if len(b) < sizeofSockaddrInet {
return nil, errInvalidAddr
}
a := &Inet4Addr{}
copy(a.IP[:], b[4:8])
return a, nil
case sysAF_INET6:
- if len(b) < 28 {
+ if len(b) < sizeofSockaddrInet6 {
return nil, errInvalidAddr
}
a := &Inet6Addr{ZoneID: int(nativeEndian.Uint32(b[24:28]))}
@@ -174,7 +240,7 @@ func parseKernelInetAddr(af int, b []byte) (int, Addr, error) {
off6 = 8 // offset of in6_addr
)
switch {
- case b[0] == 28: // size of sockaddr_in6
+ case b[0] == sizeofSockaddrInet6:
a := &Inet6Addr{}
copy(a.IP[:], b[off6:off6+16])
return int(b[0]), a, nil
@@ -186,7 +252,7 @@ func parseKernelInetAddr(af int, b []byte) (int, Addr, error) {
copy(a.IP[:], b[l-off6:l])
}
return int(b[0]), a, nil
- case b[0] == 16: // size of sockaddr_in
+ case b[0] == sizeofSockaddrInet:
a := &Inet4Addr{}
copy(a.IP[:], b[off4:off4+4])
return int(b[0]), a, nil
@@ -211,6 +277,24 @@ type DefaultAddr struct {
// Family implements the Family method of Addr interface.
func (a *DefaultAddr) Family() int { return a.af }
+func (a *DefaultAddr) lenAndSpace() (int, int) {
+ l := len(a.Raw)
+ return l, roundup(l)
+}
+
+func (a *DefaultAddr) marshal(b []byte) (int, error) {
+ l, ll := a.lenAndSpace()
+ if len(b) < ll {
+ return 0, errShortBuffer
+ }
+ if l > 255 {
+ return 0, errInvalidAddr
+ }
+ b[1] = byte(l)
+ copy(b[:l], a.Raw)
+ return ll, nil
+}
+
func parseDefaultAddr(b []byte) (Addr, error) {
if len(b) < 2 || len(b) < int(b[0]) {
return nil, errInvalidAddr
@@ -219,6 +303,66 @@ func parseDefaultAddr(b []byte) (Addr, error) {
return a, nil
}
+func addrsSpace(as []Addr) int {
+ var l int
+ for _, a := range as {
+ switch a := a.(type) {
+ case *LinkAddr:
+ _, ll := a.lenAndSpace()
+ l += ll
+ case *Inet4Addr:
+ _, ll := a.lenAndSpace()
+ l += ll
+ case *Inet6Addr:
+ _, ll := a.lenAndSpace()
+ l += ll
+ case *DefaultAddr:
+ _, ll := a.lenAndSpace()
+ l += ll
+ }
+ }
+ return l
+}
+
+// marshalAddrs marshals as and returns a bitmap indicating which
+// address is stored in b.
+func marshalAddrs(b []byte, as []Addr) (uint, error) {
+ var attrs uint
+ for i, a := range as {
+ switch a := a.(type) {
+ case *LinkAddr:
+ l, err := a.marshal(b)
+ if err != nil {
+ return 0, err
+ }
+ b = b[l:]
+ attrs |= 1 << uint(i)
+ case *Inet4Addr:
+ l, err := a.marshal(b)
+ if err != nil {
+ return 0, err
+ }
+ b = b[l:]
+ attrs |= 1 << uint(i)
+ case *Inet6Addr:
+ l, err := a.marshal(b)
+ if err != nil {
+ return 0, err
+ }
+ b = b[l:]
+ attrs |= 1 << uint(i)
+ case *DefaultAddr:
+ l, err := a.marshal(b)
+ if err != nil {
+ return 0, err
+ }
+ b = b[l:]
+ attrs |= 1 << uint(i)
+ }
+ }
+ return attrs, nil
+}
+
func parseAddrs(attrs uint, fn func(int, []byte) (int, Addr, error), b []byte) ([]Addr, error) {
var as [sysRTAX_MAX]Addr
af := int(sysAF_UNSPEC)
diff --git a/vendor/golang.org/x/net/route/binary.go b/vendor/golang.org/x/net/route/binary.go
index 4c56163..6910520 100644
--- a/vendor/golang.org/x/net/route/binary.go
+++ b/vendor/golang.org/x/net/route/binary.go
@@ -9,7 +9,7 @@ package route
// This file contains duplicates of encoding/binary package.
//
// This package is supposed to be used by the net package of standard
-// library. Therefore a package set used in the package must be the
+// library. Therefore the package set used in the package must be the
// same as net package.
var (
diff --git a/vendor/golang.org/x/net/route/defs_darwin.go b/vendor/golang.org/x/net/route/defs_darwin.go
index f452ad1..e771644 100644
--- a/vendor/golang.org/x/net/route/defs_darwin.go
+++ b/vendor/golang.org/x/net/route/defs_darwin.go
@@ -13,6 +13,8 @@ package route
#include
#include
#include
+
+#include
*/
import "C"
@@ -23,6 +25,8 @@ const (
sysAF_LINK = C.AF_LINK
sysAF_INET6 = C.AF_INET6
+ sysSOCK_RAW = C.SOCK_RAW
+
sysNET_RT_DUMP = C.NET_RT_DUMP
sysNET_RT_FLAGS = C.NET_RT_FLAGS
sysNET_RT_IFLIST = C.NET_RT_IFLIST
@@ -103,4 +107,8 @@ const (
sizeofRtMsghdrDarwin15 = C.sizeof_struct_rt_msghdr
sizeofRtMsghdr2Darwin15 = C.sizeof_struct_rt_msghdr2
sizeofRtMetricsDarwin15 = C.sizeof_struct_rt_metrics
+
+ sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
)
diff --git a/vendor/golang.org/x/net/route/defs_dragonfly.go b/vendor/golang.org/x/net/route/defs_dragonfly.go
index c737751..dd31de2 100644
--- a/vendor/golang.org/x/net/route/defs_dragonfly.go
+++ b/vendor/golang.org/x/net/route/defs_dragonfly.go
@@ -13,6 +13,8 @@ package route
#include
#include
#include
+
+#include
*/
import "C"
@@ -23,6 +25,8 @@ const (
sysAF_LINK = C.AF_LINK
sysAF_INET6 = C.AF_INET6
+ sysSOCK_RAW = C.SOCK_RAW
+
sysNET_RT_DUMP = C.NET_RT_DUMP
sysNET_RT_FLAGS = C.NET_RT_FLAGS
sysNET_RT_IFLIST = C.NET_RT_IFLIST
@@ -102,4 +106,8 @@ const (
sizeofRtMsghdrDragonFlyBSD4 = C.sizeof_struct_rt_msghdr
sizeofRtMetricsDragonFlyBSD4 = C.sizeof_struct_rt_metrics
+
+ sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
)
diff --git a/vendor/golang.org/x/net/route/defs_freebsd.go b/vendor/golang.org/x/net/route/defs_freebsd.go
index 8f834e8..d95594d 100644
--- a/vendor/golang.org/x/net/route/defs_freebsd.go
+++ b/vendor/golang.org/x/net/route/defs_freebsd.go
@@ -14,6 +14,8 @@ package route
#include
#include
+#include
+
struct if_data_freebsd7 {
u_char ifi_type;
u_char ifi_physical;
@@ -222,6 +224,8 @@ const (
sysAF_LINK = C.AF_LINK
sysAF_INET6 = C.AF_INET6
+ sysSOCK_RAW = C.SOCK_RAW
+
sysNET_RT_DUMP = C.NET_RT_DUMP
sysNET_RT_FLAGS = C.NET_RT_FLAGS
sysNET_RT_IFLIST = C.NET_RT_IFLIST
@@ -326,4 +330,8 @@ const (
sizeofIfDataFreeBSD9Emu = C.sizeof_struct_if_data_freebsd9
sizeofIfDataFreeBSD10Emu = C.sizeof_struct_if_data_freebsd10
sizeofIfDataFreeBSD11Emu = C.sizeof_struct_if_data_freebsd11
+
+ sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
)
diff --git a/vendor/golang.org/x/net/route/defs_netbsd.go b/vendor/golang.org/x/net/route/defs_netbsd.go
index b18d85e..b0abd54 100644
--- a/vendor/golang.org/x/net/route/defs_netbsd.go
+++ b/vendor/golang.org/x/net/route/defs_netbsd.go
@@ -13,6 +13,8 @@ package route
#include
#include
#include
+
+#include
*/
import "C"
@@ -23,6 +25,8 @@ const (
sysAF_LINK = C.AF_LINK
sysAF_INET6 = C.AF_INET6
+ sysSOCK_RAW = C.SOCK_RAW
+
sysNET_RT_DUMP = C.NET_RT_DUMP
sysNET_RT_FLAGS = C.NET_RT_FLAGS
sysNET_RT_IFLIST = C.NET_RT_IFLIST
@@ -101,4 +105,8 @@ const (
sizeofRtMsghdrNetBSD7 = C.sizeof_struct_rt_msghdr
sizeofRtMetricsNetBSD7 = C.sizeof_struct_rt_metrics
+
+ sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
)
diff --git a/vendor/golang.org/x/net/route/defs_openbsd.go b/vendor/golang.org/x/net/route/defs_openbsd.go
index 5df7a43..0f66d36 100644
--- a/vendor/golang.org/x/net/route/defs_openbsd.go
+++ b/vendor/golang.org/x/net/route/defs_openbsd.go
@@ -13,6 +13,8 @@ package route
#include
#include
#include
+
+#include
*/
import "C"
@@ -23,6 +25,8 @@ const (
sysAF_LINK = C.AF_LINK
sysAF_INET6 = C.AF_INET6
+ sysSOCK_RAW = C.SOCK_RAW
+
sysNET_RT_DUMP = C.NET_RT_DUMP
sysNET_RT_FLAGS = C.NET_RT_FLAGS
sysNET_RT_IFLIST = C.NET_RT_IFLIST
@@ -91,3 +95,11 @@ const (
sysRTAX_LABEL = C.RTAX_LABEL
sysRTAX_MAX = C.RTAX_MAX
)
+
+const (
+ sizeofRtMsghdr = C.sizeof_struct_rt_msghdr
+
+ sizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
+ sizeofSockaddrInet = C.sizeof_struct_sockaddr_in
+ sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
+)
diff --git a/vendor/golang.org/x/net/route/message.go b/vendor/golang.org/x/net/route/message.go
index d7ae0eb..0fa7e09 100644
--- a/vendor/golang.org/x/net/route/message.go
+++ b/vendor/golang.org/x/net/route/message.go
@@ -7,9 +7,6 @@
package route
// A Message represents a routing message.
-//
-// Note: This interface will be changed to support Marshal method in
-// future version.
type Message interface {
// Sys returns operating system-specific information.
Sys() []Sys
@@ -52,11 +49,10 @@ func ParseRIB(typ RIBType, b []byte) ([]Message, error) {
b = b[l:]
continue
}
- mtyp := int(b[3])
- if fn, ok := parseFns[mtyp]; !ok {
+ if w, ok := wireFormats[int(b[3])]; !ok {
nskips++
} else {
- m, err := fn(typ, b)
+ m, err := w.parse(typ, b)
if err != nil {
return nil, err
}
diff --git a/vendor/golang.org/x/net/route/message_darwin_test.go b/vendor/golang.org/x/net/route/message_darwin_test.go
index 3fdd12d..316aa75 100644
--- a/vendor/golang.org/x/net/route/message_darwin_test.go
+++ b/vendor/golang.org/x/net/route/message_darwin_test.go
@@ -7,21 +7,28 @@ package route
import "testing"
func TestFetchAndParseRIBOnDarwin(t *testing.T) {
- for _, af := range []int{sysAF_UNSPEC, sysAF_INET, sysAF_INET6} {
- for _, typ := range []RIBType{sysNET_RT_FLAGS, sysNET_RT_DUMP2, sysNET_RT_IFLIST2} {
- ms, err := fetchAndParseRIB(af, typ)
+ for _, typ := range []RIBType{sysNET_RT_FLAGS, sysNET_RT_DUMP2, sysNET_RT_IFLIST2} {
+ var lastErr error
+ var ms []Message
+ for _, af := range []int{sysAF_UNSPEC, sysAF_INET, sysAF_INET6} {
+ rs, err := fetchAndParseRIB(af, typ)
if err != nil {
- t.Error(err)
+ lastErr = err
continue
}
- ss, err := msgs(ms).validate()
- if err != nil {
- t.Errorf("%v %d %v", addrFamily(af), typ, err)
- continue
- }
- for _, s := range ss {
- t.Log(s)
- }
+ ms = append(ms, rs...)
+ }
+ if len(ms) == 0 && lastErr != nil {
+ t.Error(typ, lastErr)
+ continue
+ }
+ ss, err := msgs(ms).validate()
+ if err != nil {
+ t.Error(typ, err)
+ continue
+ }
+ for _, s := range ss {
+ t.Log(s)
}
}
}
diff --git a/vendor/golang.org/x/net/route/message_freebsd_test.go b/vendor/golang.org/x/net/route/message_freebsd_test.go
index 785c273..db4b567 100644
--- a/vendor/golang.org/x/net/route/message_freebsd_test.go
+++ b/vendor/golang.org/x/net/route/message_freebsd_test.go
@@ -6,26 +6,32 @@ package route
import (
"testing"
- "time"
"unsafe"
)
func TestFetchAndParseRIBOnFreeBSD(t *testing.T) {
- for _, af := range []int{sysAF_UNSPEC, sysAF_INET, sysAF_INET6} {
- for _, typ := range []RIBType{sysNET_RT_IFMALIST} {
- ms, err := fetchAndParseRIB(af, typ)
+ for _, typ := range []RIBType{sysNET_RT_IFMALIST} {
+ var lastErr error
+ var ms []Message
+ for _, af := range []int{sysAF_UNSPEC, sysAF_INET, sysAF_INET6} {
+ rs, err := fetchAndParseRIB(af, typ)
if err != nil {
- t.Error(err)
+ lastErr = err
continue
}
- ss, err := msgs(ms).validate()
- if err != nil {
- t.Errorf("%v %d %v", addrFamily(af), typ, err)
- continue
- }
- for _, s := range ss {
- t.Log(s)
- }
+ ms = append(ms, rs...)
+ }
+ if len(ms) == 0 && lastErr != nil {
+ t.Error(typ, lastErr)
+ continue
+ }
+ ss, err := msgs(ms).validate()
+ if err != nil {
+ t.Error(typ, err)
+ continue
+ }
+ for _, s := range ss {
+ t.Log(s)
}
}
}
@@ -48,58 +54,38 @@ func TestFetchAndParseRIBOnFreeBSD10AndAbove(t *testing.T) {
{typ: sysNET_RT_IFLIST},
{typ: sysNET_RT_IFLISTL},
}
- for _, af := range []int{sysAF_UNSPEC, sysAF_INET, sysAF_INET6} {
+ for i := range tests {
var lastErr error
- for i := 0; i < 3; i++ {
- for j := range tests {
- var err error
- if tests[j].b, err = FetchRIB(af, tests[j].typ, 0); err != nil {
- lastErr = err
- time.Sleep(10 * time.Millisecond)
- }
- }
- if lastErr == nil {
- break
- }
- }
- if lastErr != nil {
- t.Error(af, lastErr)
- continue
- }
- for i := range tests {
- var err error
- if tests[i].msgs, err = ParseRIB(tests[i].typ, tests[i].b); err != nil {
- lastErr = err
- t.Error(af, err)
- }
- }
- if lastErr != nil {
- continue
- }
- for i := range tests {
- var err error
- tests[i].ss, err = msgs(tests[i].msgs).validate()
+ for _, af := range []int{sysAF_UNSPEC, sysAF_INET, sysAF_INET6} {
+ rs, err := fetchAndParseRIB(af, tests[i].typ)
if err != nil {
lastErr = err
- t.Error(af, err)
- }
- for _, s := range tests[i].ss {
- t.Log(s)
- }
- }
- if lastErr != nil {
- continue
- }
- for i := len(tests) - 1; i > 0; i-- {
- if len(tests[i].ss) != len(tests[i-1].ss) {
- t.Errorf("got %v; want %v", tests[i].ss, tests[i-1].ss)
continue
}
- for j, s1 := range tests[i].ss {
- s0 := tests[i-1].ss[j]
- if s1 != s0 {
- t.Errorf("got %s; want %s", s1, s0)
- }
+ tests[i].msgs = append(tests[i].msgs, rs...)
+ }
+ if len(tests[i].msgs) == 0 && lastErr != nil {
+ t.Error(tests[i].typ, lastErr)
+ continue
+ }
+ tests[i].ss, lastErr = msgs(tests[i].msgs).validate()
+ if lastErr != nil {
+ t.Error(tests[i].typ, lastErr)
+ continue
+ }
+ for _, s := range tests[i].ss {
+ t.Log(s)
+ }
+ }
+ for i := len(tests) - 1; i > 0; i-- {
+ if len(tests[i].ss) != len(tests[i-1].ss) {
+ t.Errorf("got %v; want %v", tests[i].ss, tests[i-1].ss)
+ continue
+ }
+ for j, s1 := range tests[i].ss {
+ s0 := tests[i-1].ss[j]
+ if s1 != s0 {
+ t.Errorf("got %s; want %s", s1, s0)
}
}
}
diff --git a/vendor/golang.org/x/net/route/message_test.go b/vendor/golang.org/x/net/route/message_test.go
index c0c7c57..e848dab 100644
--- a/vendor/golang.org/x/net/route/message_test.go
+++ b/vendor/golang.org/x/net/route/message_test.go
@@ -14,30 +14,54 @@ import (
)
func TestFetchAndParseRIB(t *testing.T) {
- for _, af := range []int{sysAF_UNSPEC, sysAF_INET, sysAF_INET6} {
- for _, typ := range []RIBType{sysNET_RT_DUMP, sysNET_RT_IFLIST} {
- ms, err := fetchAndParseRIB(af, typ)
+ for _, typ := range []RIBType{sysNET_RT_DUMP, sysNET_RT_IFLIST} {
+ var lastErr error
+ var ms []Message
+ for _, af := range []int{sysAF_UNSPEC, sysAF_INET, sysAF_INET6} {
+ rs, err := fetchAndParseRIB(af, typ)
if err != nil {
- t.Error(err)
+ lastErr = err
continue
}
- ss, err := msgs(ms).validate()
- if err != nil {
- t.Errorf("%v %d %v", addrFamily(af), typ, err)
- continue
- }
- for _, s := range ss {
- t.Log(s)
- }
+ ms = append(ms, rs...)
+ }
+ if len(ms) == 0 && lastErr != nil {
+ t.Error(typ, lastErr)
+ continue
+ }
+ ss, err := msgs(ms).validate()
+ if err != nil {
+ t.Error(typ, err)
+ continue
+ }
+ for _, s := range ss {
+ t.Log(typ, s)
}
}
}
+var (
+ rtmonSock int
+ rtmonErr error
+)
+
+func init() {
+ // We need to keep rtmonSock alive to avoid treading on
+ // recycled socket descriptors.
+ rtmonSock, rtmonErr = syscall.Socket(sysAF_ROUTE, sysSOCK_RAW, sysAF_UNSPEC)
+}
+
+// TestMonitorAndParseRIB leaks a worker goroutine and a socket
+// descriptor but that's intentional.
func TestMonitorAndParseRIB(t *testing.T) {
if testing.Short() || os.Getuid() != 0 {
t.Skip("must be root")
}
+ if rtmonErr != nil {
+ t.Fatal(rtmonErr)
+ }
+
// We suppose that using an IPv4 link-local address and the
// dot1Q ID for Token Ring and FDDI doesn't harm anyone.
pv := &propVirtual{addr: "169.254.0.1", mask: "255.255.255.0"}
@@ -49,16 +73,18 @@ func TestMonitorAndParseRIB(t *testing.T) {
}
pv.teardown()
- s, err := syscall.Socket(syscall.AF_ROUTE, syscall.SOCK_RAW, syscall.AF_UNSPEC)
- if err != nil {
- t.Fatal(err)
- }
- defer syscall.Close(s)
-
go func() {
b := make([]byte, os.Getpagesize())
for {
- n, err := syscall.Read(s, b)
+ // There's no easy way to unblock this read
+ // call because the routing message exchange
+ // over routing socket is a connectionless
+ // message-oriented protocol, no control plane
+ // for signaling connectivity, and we cannot
+ // use the net package of standard library due
+ // to the lack of support for routing socket
+ // and circular dependency.
+ n, err := syscall.Read(rtmonSock, b)
if err != nil {
return
}
@@ -116,3 +142,98 @@ func TestParseRIBWithFuzz(t *testing.T) {
}
}
}
+
+func TestRouteMessage(t *testing.T) {
+ s, err := syscall.Socket(sysAF_ROUTE, sysSOCK_RAW, sysAF_UNSPEC)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer syscall.Close(s)
+
+ var ms []RouteMessage
+ for _, af := range []int{sysAF_INET, sysAF_INET6} {
+ if _, err := fetchAndParseRIB(af, sysNET_RT_DUMP); err != nil {
+ t.Log(err)
+ continue
+ }
+ switch af {
+ case sysAF_INET:
+ ms = append(ms, []RouteMessage{
+ {
+ Type: sysRTM_GET,
+ Addrs: []Addr{
+ &Inet4Addr{IP: [4]byte{127, 0, 0, 1}},
+ nil,
+ nil,
+ nil,
+ &LinkAddr{},
+ &Inet4Addr{},
+ nil,
+ &Inet4Addr{},
+ },
+ },
+ {
+ Type: sysRTM_GET,
+ Addrs: []Addr{
+ &Inet4Addr{IP: [4]byte{127, 0, 0, 1}},
+ },
+ },
+ }...)
+ case sysAF_INET6:
+ ms = append(ms, []RouteMessage{
+ {
+ Type: sysRTM_GET,
+ Addrs: []Addr{
+ &Inet6Addr{IP: [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}},
+ nil,
+ nil,
+ nil,
+ &LinkAddr{},
+ &Inet6Addr{},
+ nil,
+ &Inet6Addr{},
+ },
+ },
+ {
+ Type: sysRTM_GET,
+ Addrs: []Addr{
+ &Inet6Addr{IP: [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}},
+ },
+ },
+ }...)
+ }
+ }
+ for i, m := range ms {
+ m.ID = uintptr(os.Getpid())
+ m.Seq = i + 1
+ wb, err := m.Marshal()
+ if err != nil {
+ t.Fatalf("%v: %v", m, err)
+ }
+ if _, err := syscall.Write(s, wb); err != nil {
+ t.Fatalf("%v: %v", m, err)
+ }
+ rb := make([]byte, os.Getpagesize())
+ n, err := syscall.Read(s, rb)
+ if err != nil {
+ t.Fatalf("%v: %v", m, err)
+ }
+ rms, err := ParseRIB(0, rb[:n])
+ if err != nil {
+ t.Fatalf("%v: %v", m, err)
+ }
+ for _, rm := range rms {
+ err := rm.(*RouteMessage).Err
+ if err != nil {
+ t.Errorf("%v: %v", m, err)
+ }
+ }
+ ss, err := msgs(rms).validate()
+ if err != nil {
+ t.Fatalf("%v: %v", m, err)
+ }
+ for _, s := range ss {
+ t.Log(s)
+ }
+ }
+}
diff --git a/vendor/golang.org/x/net/route/route.go b/vendor/golang.org/x/net/route/route.go
index c986e29..081da0d 100644
--- a/vendor/golang.org/x/net/route/route.go
+++ b/vendor/golang.org/x/net/route/route.go
@@ -24,21 +24,70 @@ var (
errMessageTooShort = errors.New("message too short")
errInvalidMessage = errors.New("invalid message")
errInvalidAddr = errors.New("invalid address")
+ errShortBuffer = errors.New("short buffer")
)
// A RouteMessage represents a message conveying an address prefix, a
// nexthop address and an output interface.
+//
+// Unlike other messages, this message can be used to query adjacency
+// information for the given address prefix, to add a new route, and
+// to delete or modify the existing route from the routing information
+// base inside the kernel by writing and reading route messages on a
+// routing socket.
+//
+// For the manipulation of routing information, the route message must
+// contain appropriate fields that include:
+//
+// Version =
+// Type =
+// Flags =
+// Index =
+// ID =
+// Seq =
+// Addrs =
+//
+// The Type field specifies a type of manipulation, the Flags field
+// specifies a class of target information and the Addrs field
+// specifies target information like the following:
+//
+// route.RouteMessage{
+// Version: RTM_VERSION,
+// Type: RTM_GET,
+// Flags: RTF_UP | RTF_HOST,
+// ID: uintptr(os.Getpid()),
+// Seq: 1,
+// Addrs: []route.Addrs{
+// RTAX_DST: &route.Inet4Addr{ ... },
+// RTAX_IFP: &route.LinkAddr{ ... },
+// RTAX_BRD: &route.Inet4Addr{ ... },
+// },
+// }
+//
+// The values for the above fields depend on the implementation of
+// each operating system.
+//
+// The Err field on a response message contains an error value on the
+// requested operation. If non-nil, the requested operation is failed.
type RouteMessage struct {
- Version int // message version
- Type int // message type
- Flags int // route flags
- Index int // interface index when atatched
- Addrs []Addr // addresses
+ Version int // message version
+ Type int // message type
+ Flags int // route flags
+ Index int // interface index when atatched
+ ID uintptr // sender's identifier; usually process ID
+ Seq int // sequence number
+ Err error // error on requested operation
+ Addrs []Addr // addresses
extOff int // offset of header extension
raw []byte // raw message
}
+// Marshal returns the binary encoding of m.
+func (m *RouteMessage) Marshal() ([]byte, error) {
+ return m.marshal()
+}
+
// A RIBType reprensents a type of routing information base.
type RIBType int
diff --git a/vendor/golang.org/x/net/route/route_classic.go b/vendor/golang.org/x/net/route/route_classic.go
index d333c6a..61b2bb4 100644
--- a/vendor/golang.org/x/net/route/route_classic.go
+++ b/vendor/golang.org/x/net/route/route_classic.go
@@ -6,6 +6,36 @@
package route
+import "syscall"
+
+func (m *RouteMessage) marshal() ([]byte, error) {
+ w, ok := wireFormats[m.Type]
+ if !ok {
+ return nil, errUnsupportedMessage
+ }
+ l := w.bodyOff + addrsSpace(m.Addrs)
+ b := make([]byte, l)
+ nativeEndian.PutUint16(b[:2], uint16(l))
+ if m.Version == 0 {
+ b[2] = sysRTM_VERSION
+ } else {
+ b[2] = byte(m.Version)
+ }
+ b[3] = byte(m.Type)
+ nativeEndian.PutUint32(b[8:12], uint32(m.Flags))
+ nativeEndian.PutUint16(b[4:6], uint16(m.Index))
+ nativeEndian.PutUint32(b[16:20], uint32(m.ID))
+ nativeEndian.PutUint32(b[20:24], uint32(m.Seq))
+ attrs, err := marshalAddrs(b[w.bodyOff:], m.Addrs)
+ if err != nil {
+ return nil, err
+ }
+ if attrs > 0 {
+ nativeEndian.PutUint32(b[12:16], uint32(attrs))
+ }
+ return b, nil
+}
+
func (w *wireFormat) parseRouteMessage(typ RIBType, b []byte) (Message, error) {
if len(b) < w.bodyOff {
return nil, errMessageTooShort
@@ -19,9 +49,15 @@ func (w *wireFormat) parseRouteMessage(typ RIBType, b []byte) (Message, error) {
Type: int(b[3]),
Flags: int(nativeEndian.Uint32(b[8:12])),
Index: int(nativeEndian.Uint16(b[4:6])),
+ ID: uintptr(nativeEndian.Uint32(b[16:20])),
+ Seq: int(nativeEndian.Uint32(b[20:24])),
extOff: w.extOff,
raw: b[:l],
}
+ errno := syscall.Errno(nativeEndian.Uint32(b[28:32]))
+ if errno != 0 {
+ m.Err = errno
+ }
var err error
m.Addrs, err = parseAddrs(uint(nativeEndian.Uint32(b[12:16])), parseKernelInetAddr, b[w.bodyOff:])
if err != nil {
diff --git a/vendor/golang.org/x/net/route/route_openbsd.go b/vendor/golang.org/x/net/route/route_openbsd.go
index 76eae40..daf2e90 100644
--- a/vendor/golang.org/x/net/route/route_openbsd.go
+++ b/vendor/golang.org/x/net/route/route_openbsd.go
@@ -4,8 +4,35 @@
package route
+import "syscall"
+
+func (m *RouteMessage) marshal() ([]byte, error) {
+ l := sizeofRtMsghdr + addrsSpace(m.Addrs)
+ b := make([]byte, l)
+ nativeEndian.PutUint16(b[:2], uint16(l))
+ if m.Version == 0 {
+ b[2] = sysRTM_VERSION
+ } else {
+ b[2] = byte(m.Version)
+ }
+ b[3] = byte(m.Type)
+ nativeEndian.PutUint16(b[4:6], uint16(sizeofRtMsghdr))
+ nativeEndian.PutUint32(b[16:20], uint32(m.Flags))
+ nativeEndian.PutUint16(b[6:8], uint16(m.Index))
+ nativeEndian.PutUint32(b[24:28], uint32(m.ID))
+ nativeEndian.PutUint32(b[28:32], uint32(m.Seq))
+ attrs, err := marshalAddrs(b[sizeofRtMsghdr:], m.Addrs)
+ if err != nil {
+ return nil, err
+ }
+ if attrs > 0 {
+ nativeEndian.PutUint32(b[12:16], uint32(attrs))
+ }
+ return b, nil
+}
+
func (*wireFormat) parseRouteMessage(_ RIBType, b []byte) (Message, error) {
- if len(b) < 40 {
+ if len(b) < sizeofRtMsghdr {
return nil, errMessageTooShort
}
l := int(nativeEndian.Uint16(b[:2]))
@@ -17,12 +44,18 @@ func (*wireFormat) parseRouteMessage(_ RIBType, b []byte) (Message, error) {
Type: int(b[3]),
Flags: int(nativeEndian.Uint32(b[16:20])),
Index: int(nativeEndian.Uint16(b[6:8])),
+ ID: uintptr(nativeEndian.Uint32(b[24:28])),
+ Seq: int(nativeEndian.Uint32(b[28:32])),
raw: b[:l],
}
ll := int(nativeEndian.Uint16(b[4:6]))
if len(b) < ll {
return nil, errInvalidMessage
}
+ errno := syscall.Errno(nativeEndian.Uint32(b[32:36]))
+ if errno != 0 {
+ m.Err = errno
+ }
as, err := parseAddrs(uint(nativeEndian.Uint32(b[12:16])), parseKernelInetAddr, b[ll:])
if err != nil {
return nil, err
diff --git a/vendor/golang.org/x/net/route/sys.go b/vendor/golang.org/x/net/route/sys.go
index 80ca83a..3d0ee9b 100644
--- a/vendor/golang.org/x/net/route/sys.go
+++ b/vendor/golang.org/x/net/route/sys.go
@@ -11,7 +11,7 @@ import "unsafe"
var (
nativeEndian binaryByteOrder
kernelAlign int
- parseFns map[int]parseFn
+ wireFormats map[int]*wireFormat
)
func init() {
@@ -22,7 +22,7 @@ func init() {
} else {
nativeEndian = bigEndian
}
- kernelAlign, parseFns = probeRoutingStack()
+ kernelAlign, wireFormats = probeRoutingStack()
}
func roundup(l int) int {
@@ -32,9 +32,8 @@ func roundup(l int) int {
return (l + kernelAlign - 1) & ^(kernelAlign - 1)
}
-type parseFn func(RIBType, []byte) (Message, error)
-
type wireFormat struct {
extOff int // offset of header extension
bodyOff int // offset of message body
+ parse func(RIBType, []byte) (Message, error)
}
diff --git a/vendor/golang.org/x/net/route/sys_darwin.go b/vendor/golang.org/x/net/route/sys_darwin.go
index fff3a0f..e742c91 100644
--- a/vendor/golang.org/x/net/route/sys_darwin.go
+++ b/vendor/golang.org/x/net/route/sys_darwin.go
@@ -49,32 +49,39 @@ func (m *InterfaceMessage) Sys() []Sys {
}
}
-func probeRoutingStack() (int, map[int]parseFn) {
+func probeRoutingStack() (int, map[int]*wireFormat) {
rtm := &wireFormat{extOff: 36, bodyOff: sizeofRtMsghdrDarwin15}
+ rtm.parse = rtm.parseRouteMessage
rtm2 := &wireFormat{extOff: 36, bodyOff: sizeofRtMsghdr2Darwin15}
+ rtm2.parse = rtm2.parseRouteMessage
ifm := &wireFormat{extOff: 16, bodyOff: sizeofIfMsghdrDarwin15}
+ ifm.parse = ifm.parseInterfaceMessage
ifm2 := &wireFormat{extOff: 32, bodyOff: sizeofIfMsghdr2Darwin15}
+ ifm2.parse = ifm2.parseInterfaceMessage
ifam := &wireFormat{extOff: sizeofIfaMsghdrDarwin15, bodyOff: sizeofIfaMsghdrDarwin15}
+ ifam.parse = ifam.parseInterfaceAddrMessage
ifmam := &wireFormat{extOff: sizeofIfmaMsghdrDarwin15, bodyOff: sizeofIfmaMsghdrDarwin15}
+ ifmam.parse = ifmam.parseInterfaceMulticastAddrMessage
ifmam2 := &wireFormat{extOff: sizeofIfmaMsghdr2Darwin15, bodyOff: sizeofIfmaMsghdr2Darwin15}
+ ifmam2.parse = ifmam2.parseInterfaceMulticastAddrMessage
// Darwin kernels require 32-bit aligned access to routing facilities.
- return 4, map[int]parseFn{
- sysRTM_ADD: rtm.parseRouteMessage,
- sysRTM_DELETE: rtm.parseRouteMessage,
- sysRTM_CHANGE: rtm.parseRouteMessage,
- sysRTM_GET: rtm.parseRouteMessage,
- sysRTM_LOSING: rtm.parseRouteMessage,
- sysRTM_REDIRECT: rtm.parseRouteMessage,
- sysRTM_MISS: rtm.parseRouteMessage,
- sysRTM_LOCK: rtm.parseRouteMessage,
- sysRTM_RESOLVE: rtm.parseRouteMessage,
- sysRTM_NEWADDR: ifam.parseInterfaceAddrMessage,
- sysRTM_DELADDR: ifam.parseInterfaceAddrMessage,
- sysRTM_IFINFO: ifm.parseInterfaceMessage,
- sysRTM_NEWMADDR: ifmam.parseInterfaceMulticastAddrMessage,
- sysRTM_DELMADDR: ifmam.parseInterfaceMulticastAddrMessage,
- sysRTM_IFINFO2: ifm2.parseInterfaceMessage,
- sysRTM_NEWMADDR2: ifmam2.parseInterfaceMulticastAddrMessage,
- sysRTM_GET2: rtm2.parseRouteMessage,
+ return 4, map[int]*wireFormat{
+ sysRTM_ADD: rtm,
+ sysRTM_DELETE: rtm,
+ sysRTM_CHANGE: rtm,
+ sysRTM_GET: rtm,
+ sysRTM_LOSING: rtm,
+ sysRTM_REDIRECT: rtm,
+ sysRTM_MISS: rtm,
+ sysRTM_LOCK: rtm,
+ sysRTM_RESOLVE: rtm,
+ sysRTM_NEWADDR: ifam,
+ sysRTM_DELADDR: ifam,
+ sysRTM_IFINFO: ifm,
+ sysRTM_NEWMADDR: ifmam,
+ sysRTM_DELMADDR: ifmam,
+ sysRTM_IFINFO2: ifm2,
+ sysRTM_NEWMADDR2: ifmam2,
+ sysRTM_GET2: rtm2,
}
}
diff --git a/vendor/golang.org/x/net/route/sys_dragonfly.go b/vendor/golang.org/x/net/route/sys_dragonfly.go
index da848b3..b175cb1 100644
--- a/vendor/golang.org/x/net/route/sys_dragonfly.go
+++ b/vendor/golang.org/x/net/route/sys_dragonfly.go
@@ -44,28 +44,33 @@ func (m *InterfaceMessage) Sys() []Sys {
}
}
-func probeRoutingStack() (int, map[int]parseFn) {
+func probeRoutingStack() (int, map[int]*wireFormat) {
var p uintptr
rtm := &wireFormat{extOff: 40, bodyOff: sizeofRtMsghdrDragonFlyBSD4}
+ rtm.parse = rtm.parseRouteMessage
ifm := &wireFormat{extOff: 16, bodyOff: sizeofIfMsghdrDragonFlyBSD4}
+ ifm.parse = ifm.parseInterfaceMessage
ifam := &wireFormat{extOff: sizeofIfaMsghdrDragonFlyBSD4, bodyOff: sizeofIfaMsghdrDragonFlyBSD4}
+ ifam.parse = ifam.parseInterfaceAddrMessage
ifmam := &wireFormat{extOff: sizeofIfmaMsghdrDragonFlyBSD4, bodyOff: sizeofIfmaMsghdrDragonFlyBSD4}
+ ifmam.parse = ifmam.parseInterfaceMulticastAddrMessage
ifanm := &wireFormat{extOff: sizeofIfAnnouncemsghdrDragonFlyBSD4, bodyOff: sizeofIfAnnouncemsghdrDragonFlyBSD4}
- return int(unsafe.Sizeof(p)), map[int]parseFn{
- sysRTM_ADD: rtm.parseRouteMessage,
- sysRTM_DELETE: rtm.parseRouteMessage,
- sysRTM_CHANGE: rtm.parseRouteMessage,
- sysRTM_GET: rtm.parseRouteMessage,
- sysRTM_LOSING: rtm.parseRouteMessage,
- sysRTM_REDIRECT: rtm.parseRouteMessage,
- sysRTM_MISS: rtm.parseRouteMessage,
- sysRTM_LOCK: rtm.parseRouteMessage,
- sysRTM_RESOLVE: rtm.parseRouteMessage,
- sysRTM_NEWADDR: ifam.parseInterfaceAddrMessage,
- sysRTM_DELADDR: ifam.parseInterfaceAddrMessage,
- sysRTM_IFINFO: ifm.parseInterfaceMessage,
- sysRTM_NEWMADDR: ifmam.parseInterfaceMulticastAddrMessage,
- sysRTM_DELMADDR: ifmam.parseInterfaceMulticastAddrMessage,
- sysRTM_IFANNOUNCE: ifanm.parseInterfaceAnnounceMessage,
+ ifanm.parse = ifanm.parseInterfaceAnnounceMessage
+ return int(unsafe.Sizeof(p)), map[int]*wireFormat{
+ sysRTM_ADD: rtm,
+ sysRTM_DELETE: rtm,
+ sysRTM_CHANGE: rtm,
+ sysRTM_GET: rtm,
+ sysRTM_LOSING: rtm,
+ sysRTM_REDIRECT: rtm,
+ sysRTM_MISS: rtm,
+ sysRTM_LOCK: rtm,
+ sysRTM_RESOLVE: rtm,
+ sysRTM_NEWADDR: ifam,
+ sysRTM_DELADDR: ifam,
+ sysRTM_IFINFO: ifm,
+ sysRTM_NEWMADDR: ifmam,
+ sysRTM_DELMADDR: ifmam,
+ sysRTM_IFANNOUNCE: ifanm,
}
}
diff --git a/vendor/golang.org/x/net/route/sys_freebsd.go b/vendor/golang.org/x/net/route/sys_freebsd.go
index 7b05c1a..010d4ae 100644
--- a/vendor/golang.org/x/net/route/sys_freebsd.go
+++ b/vendor/golang.org/x/net/route/sys_freebsd.go
@@ -54,7 +54,7 @@ func (m *InterfaceMessage) Sys() []Sys {
}
}
-func probeRoutingStack() (int, map[int]parseFn) {
+func probeRoutingStack() (int, map[int]*wireFormat) {
var p uintptr
wordSize := int(unsafe.Sizeof(p))
align := int(unsafe.Sizeof(p))
@@ -130,21 +130,26 @@ func probeRoutingStack() (int, map[int]parseFn) {
ifm.bodyOff = sizeofIfMsghdrFreeBSD11
}
}
- return align, map[int]parseFn{
- sysRTM_ADD: rtm.parseRouteMessage,
- sysRTM_DELETE: rtm.parseRouteMessage,
- sysRTM_CHANGE: rtm.parseRouteMessage,
- sysRTM_GET: rtm.parseRouteMessage,
- sysRTM_LOSING: rtm.parseRouteMessage,
- sysRTM_REDIRECT: rtm.parseRouteMessage,
- sysRTM_MISS: rtm.parseRouteMessage,
- sysRTM_LOCK: rtm.parseRouteMessage,
- sysRTM_RESOLVE: rtm.parseRouteMessage,
- sysRTM_NEWADDR: ifam.parseInterfaceAddrMessage,
- sysRTM_DELADDR: ifam.parseInterfaceAddrMessage,
- sysRTM_IFINFO: ifm.parseInterfaceMessage,
- sysRTM_NEWMADDR: ifmam.parseInterfaceMulticastAddrMessage,
- sysRTM_DELMADDR: ifmam.parseInterfaceMulticastAddrMessage,
- sysRTM_IFANNOUNCE: ifanm.parseInterfaceAnnounceMessage,
+ rtm.parse = rtm.parseRouteMessage
+ ifm.parse = ifm.parseInterfaceMessage
+ ifam.parse = ifam.parseInterfaceAddrMessage
+ ifmam.parse = ifmam.parseInterfaceMulticastAddrMessage
+ ifanm.parse = ifanm.parseInterfaceAnnounceMessage
+ return align, map[int]*wireFormat{
+ sysRTM_ADD: rtm,
+ sysRTM_DELETE: rtm,
+ sysRTM_CHANGE: rtm,
+ sysRTM_GET: rtm,
+ sysRTM_LOSING: rtm,
+ sysRTM_REDIRECT: rtm,
+ sysRTM_MISS: rtm,
+ sysRTM_LOCK: rtm,
+ sysRTM_RESOLVE: rtm,
+ sysRTM_NEWADDR: ifam,
+ sysRTM_DELADDR: ifam,
+ sysRTM_IFINFO: ifm,
+ sysRTM_NEWMADDR: ifmam,
+ sysRTM_DELMADDR: ifmam,
+ sysRTM_IFANNOUNCE: ifanm,
}
}
diff --git a/vendor/golang.org/x/net/route/sys_netbsd.go b/vendor/golang.org/x/net/route/sys_netbsd.go
index 4d8076b..b4e3301 100644
--- a/vendor/golang.org/x/net/route/sys_netbsd.go
+++ b/vendor/golang.org/x/net/route/sys_netbsd.go
@@ -42,26 +42,30 @@ func (m *InterfaceMessage) Sys() []Sys {
}
}
-func probeRoutingStack() (int, map[int]parseFn) {
+func probeRoutingStack() (int, map[int]*wireFormat) {
rtm := &wireFormat{extOff: 40, bodyOff: sizeofRtMsghdrNetBSD7}
+ rtm.parse = rtm.parseRouteMessage
ifm := &wireFormat{extOff: 16, bodyOff: sizeofIfMsghdrNetBSD7}
+ ifm.parse = ifm.parseInterfaceMessage
ifam := &wireFormat{extOff: sizeofIfaMsghdrNetBSD7, bodyOff: sizeofIfaMsghdrNetBSD7}
+ ifam.parse = ifam.parseInterfaceAddrMessage
ifanm := &wireFormat{extOff: sizeofIfAnnouncemsghdrNetBSD7, bodyOff: sizeofIfAnnouncemsghdrNetBSD7}
+ ifanm.parse = ifanm.parseInterfaceAnnounceMessage
// NetBSD 6 and above kernels require 64-bit aligned access to
// routing facilities.
- return 8, map[int]parseFn{
- sysRTM_ADD: rtm.parseRouteMessage,
- sysRTM_DELETE: rtm.parseRouteMessage,
- sysRTM_CHANGE: rtm.parseRouteMessage,
- sysRTM_GET: rtm.parseRouteMessage,
- sysRTM_LOSING: rtm.parseRouteMessage,
- sysRTM_REDIRECT: rtm.parseRouteMessage,
- sysRTM_MISS: rtm.parseRouteMessage,
- sysRTM_LOCK: rtm.parseRouteMessage,
- sysRTM_RESOLVE: rtm.parseRouteMessage,
- sysRTM_NEWADDR: ifam.parseInterfaceAddrMessage,
- sysRTM_DELADDR: ifam.parseInterfaceAddrMessage,
- sysRTM_IFANNOUNCE: ifanm.parseInterfaceAnnounceMessage,
- sysRTM_IFINFO: ifm.parseInterfaceMessage,
+ return 8, map[int]*wireFormat{
+ sysRTM_ADD: rtm,
+ sysRTM_DELETE: rtm,
+ sysRTM_CHANGE: rtm,
+ sysRTM_GET: rtm,
+ sysRTM_LOSING: rtm,
+ sysRTM_REDIRECT: rtm,
+ sysRTM_MISS: rtm,
+ sysRTM_LOCK: rtm,
+ sysRTM_RESOLVE: rtm,
+ sysRTM_NEWADDR: ifam,
+ sysRTM_DELADDR: ifam,
+ sysRTM_IFANNOUNCE: ifanm,
+ sysRTM_IFINFO: ifm,
}
}
diff --git a/vendor/golang.org/x/net/route/sys_openbsd.go b/vendor/golang.org/x/net/route/sys_openbsd.go
index 26d0438..8798dc4 100644
--- a/vendor/golang.org/x/net/route/sys_openbsd.go
+++ b/vendor/golang.org/x/net/route/sys_openbsd.go
@@ -51,22 +51,29 @@ func (m *InterfaceMessage) Sys() []Sys {
}
}
-func probeRoutingStack() (int, map[int]parseFn) {
+func probeRoutingStack() (int, map[int]*wireFormat) {
var p uintptr
- nooff := &wireFormat{extOff: -1, bodyOff: -1}
- return int(unsafe.Sizeof(p)), map[int]parseFn{
- sysRTM_ADD: nooff.parseRouteMessage,
- sysRTM_DELETE: nooff.parseRouteMessage,
- sysRTM_CHANGE: nooff.parseRouteMessage,
- sysRTM_GET: nooff.parseRouteMessage,
- sysRTM_LOSING: nooff.parseRouteMessage,
- sysRTM_REDIRECT: nooff.parseRouteMessage,
- sysRTM_MISS: nooff.parseRouteMessage,
- sysRTM_LOCK: nooff.parseRouteMessage,
- sysRTM_RESOLVE: nooff.parseRouteMessage,
- sysRTM_NEWADDR: nooff.parseInterfaceAddrMessage,
- sysRTM_DELADDR: nooff.parseInterfaceAddrMessage,
- sysRTM_IFINFO: nooff.parseInterfaceMessage,
- sysRTM_IFANNOUNCE: nooff.parseInterfaceAnnounceMessage,
+ rtm := &wireFormat{extOff: -1, bodyOff: -1}
+ rtm.parse = rtm.parseRouteMessage
+ ifm := &wireFormat{extOff: -1, bodyOff: -1}
+ ifm.parse = ifm.parseInterfaceMessage
+ ifam := &wireFormat{extOff: -1, bodyOff: -1}
+ ifam.parse = ifam.parseInterfaceAddrMessage
+ ifanm := &wireFormat{extOff: -1, bodyOff: -1}
+ ifanm.parse = ifanm.parseInterfaceAnnounceMessage
+ return int(unsafe.Sizeof(p)), map[int]*wireFormat{
+ sysRTM_ADD: rtm,
+ sysRTM_DELETE: rtm,
+ sysRTM_CHANGE: rtm,
+ sysRTM_GET: rtm,
+ sysRTM_LOSING: rtm,
+ sysRTM_REDIRECT: rtm,
+ sysRTM_MISS: rtm,
+ sysRTM_LOCK: rtm,
+ sysRTM_RESOLVE: rtm,
+ sysRTM_NEWADDR: ifam,
+ sysRTM_DELADDR: ifam,
+ sysRTM_IFINFO: ifm,
+ sysRTM_IFANNOUNCE: ifanm,
}
}
diff --git a/vendor/golang.org/x/net/route/syscall.go b/vendor/golang.org/x/net/route/syscall.go
index d136325..c211188 100644
--- a/vendor/golang.org/x/net/route/syscall.go
+++ b/vendor/golang.org/x/net/route/syscall.go
@@ -11,10 +11,6 @@ import (
"unsafe"
)
-// TODO: replace with runtime.KeepAlive when available
-//go:noescape
-func keepAlive(p unsafe.Pointer)
-
var zero uintptr
func sysctl(mib []int32, old *byte, oldlen *uintptr, new *byte, newlen uintptr) error {
@@ -25,7 +21,6 @@ func sysctl(mib []int32, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
p = unsafe.Pointer(&zero)
}
_, _, errno := syscall.Syscall6(syscall.SYS___SYSCTL, uintptr(p), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
- keepAlive(p)
if errno != 0 {
return error(errno)
}
diff --git a/vendor/golang.org/x/net/route/syscall.s b/vendor/golang.org/x/net/route/syscall.s
deleted file mode 100644
index fa6297f..0000000
--- a/vendor/golang.org/x/net/route/syscall.s
+++ /dev/null
@@ -1,8 +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.
-
-#include "textflag.h"
-
-TEXT ·keepAlive(SB),NOSPLIT,$0
- RET
diff --git a/vendor/golang.org/x/net/route/zsys_darwin.go b/vendor/golang.org/x/net/route/zsys_darwin.go
index 265b81c..4e2e1ab 100644
--- a/vendor/golang.org/x/net/route/zsys_darwin.go
+++ b/vendor/golang.org/x/net/route/zsys_darwin.go
@@ -10,6 +10,8 @@ const (
sysAF_LINK = 0x12
sysAF_INET6 = 0x1e
+ sysSOCK_RAW = 0x3
+
sysNET_RT_DUMP = 0x1
sysNET_RT_FLAGS = 0x2
sysNET_RT_IFLIST = 0x3
@@ -90,4 +92,8 @@ const (
sizeofRtMsghdrDarwin15 = 0x5c
sizeofRtMsghdr2Darwin15 = 0x5c
sizeofRtMetricsDarwin15 = 0x38
+
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
)
diff --git a/vendor/golang.org/x/net/route/zsys_dragonfly.go b/vendor/golang.org/x/net/route/zsys_dragonfly.go
index dd36dec..719c88d 100644
--- a/vendor/golang.org/x/net/route/zsys_dragonfly.go
+++ b/vendor/golang.org/x/net/route/zsys_dragonfly.go
@@ -10,6 +10,8 @@ const (
sysAF_LINK = 0x12
sysAF_INET6 = 0x1c
+ sysSOCK_RAW = 0x3
+
sysNET_RT_DUMP = 0x1
sysNET_RT_FLAGS = 0x2
sysNET_RT_IFLIST = 0x3
@@ -89,4 +91,8 @@ const (
sizeofRtMsghdrDragonFlyBSD4 = 0x98
sizeofRtMetricsDragonFlyBSD4 = 0x70
+
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
)
diff --git a/vendor/golang.org/x/net/route/zsys_freebsd_386.go b/vendor/golang.org/x/net/route/zsys_freebsd_386.go
index 9bac2e3..b03bc01 100644
--- a/vendor/golang.org/x/net/route/zsys_freebsd_386.go
+++ b/vendor/golang.org/x/net/route/zsys_freebsd_386.go
@@ -10,6 +10,8 @@ const (
sysAF_LINK = 0x12
sysAF_INET6 = 0x1c
+ sysSOCK_RAW = 0x3
+
sysNET_RT_DUMP = 0x1
sysNET_RT_FLAGS = 0x2
sysNET_RT_IFLIST = 0x3
@@ -117,4 +119,8 @@ const (
sizeofIfDataFreeBSD9Emu = 0x98
sizeofIfDataFreeBSD10Emu = 0x98
sizeofIfDataFreeBSD11Emu = 0x98
+
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
)
diff --git a/vendor/golang.org/x/net/route/zsys_freebsd_amd64.go b/vendor/golang.org/x/net/route/zsys_freebsd_amd64.go
index b1920d7..0b675b3 100644
--- a/vendor/golang.org/x/net/route/zsys_freebsd_amd64.go
+++ b/vendor/golang.org/x/net/route/zsys_freebsd_amd64.go
@@ -10,6 +10,8 @@ const (
sysAF_LINK = 0x12
sysAF_INET6 = 0x1c
+ sysSOCK_RAW = 0x3
+
sysNET_RT_DUMP = 0x1
sysNET_RT_FLAGS = 0x2
sysNET_RT_IFLIST = 0x3
@@ -114,4 +116,8 @@ const (
sizeofIfDataFreeBSD9Emu = 0x98
sizeofIfDataFreeBSD10Emu = 0x98
sizeofIfDataFreeBSD11Emu = 0x98
+
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
)
diff --git a/vendor/golang.org/x/net/route/zsys_freebsd_arm.go b/vendor/golang.org/x/net/route/zsys_freebsd_arm.go
index a034d6f..58f8ea1 100644
--- a/vendor/golang.org/x/net/route/zsys_freebsd_arm.go
+++ b/vendor/golang.org/x/net/route/zsys_freebsd_arm.go
@@ -10,6 +10,8 @@ const (
sysAF_LINK = 0x12
sysAF_INET6 = 0x1c
+ sysSOCK_RAW = 0x3
+
sysNET_RT_DUMP = 0x1
sysNET_RT_FLAGS = 0x2
sysNET_RT_IFLIST = 0x3
@@ -114,4 +116,8 @@ const (
sizeofIfDataFreeBSD9Emu = 0x60
sizeofIfDataFreeBSD10Emu = 0x60
sizeofIfDataFreeBSD11Emu = 0x98
+
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
)
diff --git a/vendor/golang.org/x/net/route/zsys_netbsd.go b/vendor/golang.org/x/net/route/zsys_netbsd.go
index aa4aad1..e0df45e 100644
--- a/vendor/golang.org/x/net/route/zsys_netbsd.go
+++ b/vendor/golang.org/x/net/route/zsys_netbsd.go
@@ -10,6 +10,8 @@ const (
sysAF_LINK = 0x12
sysAF_INET6 = 0x18
+ sysSOCK_RAW = 0x3
+
sysNET_RT_DUMP = 0x1
sysNET_RT_FLAGS = 0x2
sysNET_RT_IFLIST = 0x5
@@ -88,4 +90,8 @@ const (
sizeofRtMsghdrNetBSD7 = 0x78
sizeofRtMetricsNetBSD7 = 0x50
+
+ sizeofSockaddrStorage = 0x80
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
)
diff --git a/vendor/golang.org/x/net/route/zsys_openbsd.go b/vendor/golang.org/x/net/route/zsys_openbsd.go
index 4fadc4e..f5a1ff9 100644
--- a/vendor/golang.org/x/net/route/zsys_openbsd.go
+++ b/vendor/golang.org/x/net/route/zsys_openbsd.go
@@ -10,6 +10,8 @@ const (
sysAF_LINK = 0x12
sysAF_INET6 = 0x18
+ sysSOCK_RAW = 0x3
+
sysNET_RT_DUMP = 0x1
sysNET_RT_FLAGS = 0x2
sysNET_RT_IFLIST = 0x3
@@ -78,3 +80,11 @@ const (
sysRTAX_LABEL = 0xa
sysRTAX_MAX = 0xb
)
+
+const (
+ sizeofRtMsghdr = 0x60
+
+ sizeofSockaddrStorage = 0x100
+ sizeofSockaddrInet = 0x10
+ sizeofSockaddrInet6 = 0x1c
+)
diff --git a/vendor/golang.org/x/net/trace/events.go b/vendor/golang.org/x/net/trace/events.go
index e66c7e3..d8daec1 100644
--- a/vendor/golang.org/x/net/trace/events.go
+++ b/vendor/golang.org/x/net/trace/events.go
@@ -21,11 +21,6 @@ import (
"time"
)
-var eventsTmpl = template.Must(template.New("events").Funcs(template.FuncMap{
- "elapsed": elapsed,
- "trimSpace": strings.TrimSpace,
-}).Parse(eventsHTML))
-
const maxEventsPerLog = 100
type bucket struct {
@@ -101,7 +96,7 @@ func RenderEvents(w http.ResponseWriter, req *http.Request, sensitive bool) {
famMu.RLock()
defer famMu.RUnlock()
- if err := eventsTmpl.Execute(w, data); err != nil {
+ if err := eventsTmpl().Execute(w, data); err != nil {
log.Printf("net/trace: Failed executing template: %v", err)
}
}
@@ -421,6 +416,19 @@ func freeEventLog(el *eventLog) {
}
}
+var eventsTmplCache *template.Template
+var eventsTmplOnce sync.Once
+
+func eventsTmpl() *template.Template {
+ eventsTmplOnce.Do(func() {
+ eventsTmplCache = template.Must(template.New("events").Funcs(template.FuncMap{
+ "elapsed": elapsed,
+ "trimSpace": strings.TrimSpace,
+ }).Parse(eventsHTML))
+ })
+ return eventsTmplCache
+}
+
const eventsHTML = `
diff --git a/vendor/golang.org/x/net/trace/histogram.go b/vendor/golang.org/x/net/trace/histogram.go
index bb42aa5..9bf4286 100644
--- a/vendor/golang.org/x/net/trace/histogram.go
+++ b/vendor/golang.org/x/net/trace/histogram.go
@@ -12,6 +12,7 @@ import (
"html/template"
"log"
"math"
+ "sync"
"golang.org/x/net/internal/timeseries"
)
@@ -320,15 +321,20 @@ func (h *histogram) newData() *data {
func (h *histogram) html() template.HTML {
buf := new(bytes.Buffer)
- if err := distTmpl.Execute(buf, h.newData()); err != nil {
+ if err := distTmpl().Execute(buf, h.newData()); err != nil {
buf.Reset()
log.Printf("net/trace: couldn't execute template: %v", err)
}
return template.HTML(buf.String())
}
-// Input: data
-var distTmpl = template.Must(template.New("distTmpl").Parse(`
+var distTmplCache *template.Template
+var distTmplOnce sync.Once
+
+func distTmpl() *template.Template {
+ distTmplOnce.Do(func() {
+ // Input: data
+ distTmplCache = template.Must(template.New("distTmpl").Parse(`
Count: {{.Count}}
@@ -354,3 +360,6 @@ var distTmpl = template.Must(template.New("distTmpl").Parse(`
{{end}}
`))
+ })
+ return distTmplCache
+}
diff --git a/vendor/golang.org/x/net/trace/trace.go b/vendor/golang.org/x/net/trace/trace.go
index ecd766e..3d9b646 100644
--- a/vendor/golang.org/x/net/trace/trace.go
+++ b/vendor/golang.org/x/net/trace/trace.go
@@ -77,7 +77,6 @@ import (
"sync/atomic"
"time"
- "golang.org/x/net/context"
"golang.org/x/net/internal/timeseries"
)
@@ -238,7 +237,7 @@ func Render(w io.Writer, req *http.Request, sensitive bool) {
completedMu.RLock()
defer completedMu.RUnlock()
- if err := pageTmpl.ExecuteTemplate(w, "Page", data); err != nil {
+ if err := pageTmpl().ExecuteTemplate(w, "Page", data); err != nil {
log.Printf("net/trace: Failed executing template: %v", err)
}
}
@@ -271,18 +270,6 @@ type contextKeyT string
var contextKey = contextKeyT("golang.org/x/net/trace.Trace")
-// NewContext returns a copy of the parent context
-// and associates it with a Trace.
-func NewContext(ctx context.Context, tr Trace) context.Context {
- return context.WithValue(ctx, contextKey, tr)
-}
-
-// FromContext returns the Trace bound to the context, if any.
-func FromContext(ctx context.Context) (tr Trace, ok bool) {
- tr, ok = ctx.Value(contextKey).(Trace)
- return
-}
-
// Trace represents an active request.
type Trace interface {
// LazyLog adds x to the event log. It will be evaluated each time the
@@ -902,10 +889,18 @@ func elapsed(d time.Duration) string {
return string(b)
}
-var pageTmpl = template.Must(template.New("Page").Funcs(template.FuncMap{
- "elapsed": elapsed,
- "add": func(a, b int) int { return a + b },
-}).Parse(pageHTML))
+var pageTmplCache *template.Template
+var pageTmplOnce sync.Once
+
+func pageTmpl() *template.Template {
+ pageTmplOnce.Do(func() {
+ pageTmplCache = template.Must(template.New("Page").Funcs(template.FuncMap{
+ "elapsed": elapsed,
+ "add": func(a, b int) int { return a + b },
+ }).Parse(pageHTML))
+ })
+ return pageTmplCache
+}
const pageHTML = `
{{template "Prolog" .}}
diff --git a/vendor/golang.org/x/net/trace/trace_go16.go b/vendor/golang.org/x/net/trace/trace_go16.go
new file mode 100644
index 0000000..d608191
--- /dev/null
+++ b/vendor/golang.org/x/net/trace/trace_go16.go
@@ -0,0 +1,21 @@
+// 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.7
+
+package trace
+
+import "golang.org/x/net/context"
+
+// NewContext returns a copy of the parent context
+// and associates it with a Trace.
+func NewContext(ctx context.Context, tr Trace) context.Context {
+ return context.WithValue(ctx, contextKey, tr)
+}
+
+// FromContext returns the Trace bound to the context, if any.
+func FromContext(ctx context.Context) (tr Trace, ok bool) {
+ tr, ok = ctx.Value(contextKey).(Trace)
+ return
+}
diff --git a/vendor/golang.org/x/net/trace/trace_go17.go b/vendor/golang.org/x/net/trace/trace_go17.go
new file mode 100644
index 0000000..df6e1fb
--- /dev/null
+++ b/vendor/golang.org/x/net/trace/trace_go17.go
@@ -0,0 +1,21 @@
+// 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.7
+
+package trace
+
+import "context"
+
+// NewContext returns a copy of the parent context
+// and associates it with a Trace.
+func NewContext(ctx context.Context, tr Trace) context.Context {
+ return context.WithValue(ctx, contextKey, tr)
+}
+
+// FromContext returns the Trace bound to the context, if any.
+func FromContext(ctx context.Context) (tr Trace, ok bool) {
+ tr, ok = ctx.Value(contextKey).(Trace)
+ return
+}
diff --git a/vendor/golang.org/x/net/trace/trace_test.go b/vendor/golang.org/x/net/trace/trace_test.go
index c6aad86..bfd9dfe 100644
--- a/vendor/golang.org/x/net/trace/trace_test.go
+++ b/vendor/golang.org/x/net/trace/trace_test.go
@@ -70,6 +70,20 @@ func TestAuthRequest(t *testing.T) {
}
}
+// TestParseTemplate checks that all templates used by this package are valid
+// as they are parsed on first usage
+func TestParseTemplate(t *testing.T) {
+ if tmpl := distTmpl(); tmpl == nil {
+ t.Error("invalid template returned from distTmpl()")
+ }
+ if tmpl := pageTmpl(); tmpl == nil {
+ t.Error("invalid template returned from pageTmpl()")
+ }
+ if tmpl := eventsTmpl(); tmpl == nil {
+ t.Error("invalid template returned from eventsTmpl()")
+ }
+}
+
func benchmarkTrace(b *testing.B, maxEvents, numEvents int) {
numSpans := (b.N + numEvents + 1) / numEvents
diff --git a/vendor/golang.org/x/net/webdav/internal/xml/marshal.go b/vendor/golang.org/x/net/webdav/internal/xml/marshal.go
index 3c3b6ac..cb82ec2 100644
--- a/vendor/golang.org/x/net/webdav/internal/xml/marshal.go
+++ b/vendor/golang.org/x/net/webdav/internal/xml/marshal.go
@@ -26,9 +26,9 @@ const (
//
// Marshal handles an array or slice by marshalling each of the elements.
// Marshal handles a pointer by marshalling the value it points at or, if the
-// pointer is nil, by writing nothing. Marshal handles an interface value by
+// pointer is nil, by writing nothing. Marshal handles an interface value by
// marshalling the value it contains or, if the interface value is nil, by
-// writing nothing. Marshal handles all other data by writing one or more XML
+// writing nothing. Marshal handles all other data by writing one or more XML
// elements containing the data.
//
// The name for the XML elements is taken from, in order of preference:
@@ -61,7 +61,7 @@ const (
// value were part of the outer struct.
//
// If a field uses a tag "a>b>c", then the element c will be nested inside
-// parent elements a and b. Fields that appear next to each other that name
+// parent elements a and b. Fields that appear next to each other that name
// the same parent will be enclosed in one XML element.
//
// See MarshalIndent for an example.
@@ -222,7 +222,7 @@ func (enc *Encoder) EncodeToken(t Token) error {
return p.cachedWriteError()
case ProcInst:
// First token to be encoded which is also a ProcInst with target of xml
- // is the xml declaration. The only ProcInst where target of xml is allowed.
+ // is the xml declaration. The only ProcInst where target of xml is allowed.
if t.Target == "xml" && p.Buffered() != 0 {
return fmt.Errorf("xml: EncodeToken of ProcInst xml target only valid for xml declaration, first token encoded")
}
diff --git a/vendor/golang.org/x/net/webdav/internal/xml/read.go b/vendor/golang.org/x/net/webdav/internal/xml/read.go
index 3ece08c..4089056 100644
--- a/vendor/golang.org/x/net/webdav/internal/xml/read.go
+++ b/vendor/golang.org/x/net/webdav/internal/xml/read.go
@@ -27,7 +27,7 @@ import (
// discarded.
//
// Because Unmarshal uses the reflect package, it can only assign
-// to exported (upper case) fields. Unmarshal uses a case-sensitive
+// to exported (upper case) fields. Unmarshal uses a case-sensitive
// comparison to match XML element names to tag values and struct
// field names.
//
@@ -37,7 +37,7 @@ import (
//
// * If the struct has a field of type []byte or string with tag
// ",innerxml", Unmarshal accumulates the raw XML nested inside the
-// element in that field. The rest of the rules still apply.
+// element in that field. The rest of the rules still apply.
//
// * If the struct has a field named XMLName of type xml.Name,
// Unmarshal records the element name in that field.
@@ -59,7 +59,7 @@ import (
//
// * If the XML element contains comments, they are accumulated in
// the first struct field that has tag ",comment". The struct
-// field may have type []byte or string. If there is no such
+// field may have type []byte or string. If there is no such
// field, the comments are discarded.
//
// * If the XML element contains a sub-element whose name matches
@@ -102,7 +102,7 @@ import (
//
// Unmarshal maps an XML element or attribute value to an integer or
// floating-point field by setting the field to the result of
-// interpreting the string value in decimal. There is no check for
+// interpreting the string value in decimal. There is no check for
// overflow.
//
// Unmarshal maps an XML element to an xml.Name by recording the
diff --git a/vendor/golang.org/x/net/webdav/internal/xml/xml.go b/vendor/golang.org/x/net/webdav/internal/xml/xml.go
index ffab4a7..5b79cbe 100644
--- a/vendor/golang.org/x/net/webdav/internal/xml/xml.go
+++ b/vendor/golang.org/x/net/webdav/internal/xml/xml.go
@@ -252,7 +252,7 @@ func NewDecoder(r io.Reader) *Decoder {
//
// Slices of bytes in the returned token data refer to the
// parser's internal buffer and remain valid only until the next
-// call to Token. To acquire a copy of the bytes, call CopyToken
+// call to Token. To acquire a copy of the bytes, call CopyToken
// or the token's Copy method.
//
// Token expands self-closing elements such as
@@ -360,7 +360,7 @@ func (d *Decoder) switchToReader(r io.Reader) {
}
// Parsing state - stack holds old name space translations
-// and the current set of open elements. The translations to pop when
+// and the current set of open elements. The translations to pop when
// ending a given tag are *below* it on the stack, which is
// more work but forced on us by XML.
type stack struct {
@@ -1253,7 +1253,7 @@ func isNameString(s string) bool {
// These tables were generated by cut and paste from Appendix B of
// the XML spec at http://www.xml.com/axml/testaxml.htm
-// and then reformatting. First corresponds to (Letter | '_' | ':')
+// and then reformatting. First corresponds to (Letter | '_' | ':')
// and second corresponds to NameChar.
var first = &unicode.RangeTable{
diff --git a/vendor/golang.org/x/net/xsrftoken/xsrf.go b/vendor/golang.org/x/net/xsrftoken/xsrf.go
index 881bf19..bc861e1 100644
--- a/vendor/golang.org/x/net/xsrftoken/xsrf.go
+++ b/vendor/golang.org/x/net/xsrftoken/xsrf.go
@@ -27,15 +27,18 @@ func clean(s string) string {
// Generate returns a URL-safe secure XSRF token that expires in 24 hours.
//
-// key is a secret key for your application.
-// userID is a unique identifier for the user.
-// actionID is the action the user is taking (e.g. POSTing to a particular path).
+// key is a secret key for your application; it must be non-empty.
+// userID is an optional unique identifier for the user.
+// actionID is an optional action the user is taking (e.g. POSTing to a particular path).
func Generate(key, userID, actionID string) string {
return generateTokenAtTime(key, userID, actionID, time.Now())
}
// generateTokenAtTime is like Generate, but returns a token that expires 24 hours from now.
func generateTokenAtTime(key, userID, actionID string, now time.Time) string {
+ if len(key) == 0 {
+ panic("zero length xsrf secret key")
+ }
// Round time up and convert to milliseconds.
milliTime := (now.UnixNano() + 1e6 - 1) / 1e6
@@ -57,6 +60,9 @@ func Valid(token, key, userID, actionID string) bool {
// validTokenAtTime reports whether a token is valid at the given time.
func validTokenAtTime(token, key, userID, actionID string, now time.Time) bool {
+ if len(key) == 0 {
+ panic("zero length xsrf secret key")
+ }
// Extract the issue time of the token.
sep := strings.LastIndex(token, ":")
if sep < 0 {