diff --git a/CHANGELOG.md b/CHANGELOG.md index dac15fc..537da8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,25 @@ # Changelog -## 1.0.0 - 2019-01-04 +## 1.1.1 (2020-06-23) + +* Fixed the memory reader's inspect method to no longer attempt to modify a + frozen string. Pull request by Tietew. GitHub #35. + +## 1.1.0 (2020-01-08) + +* The method `get_with_prefix_length` was added. This method returns both + the record and the network prefix length associated with the record in + the database. +* Simplified a check for whether to return early in the decoder. Pull + request by Ivan Palamarchuk. GitHub #12. +* Support for Ruby 2.3 was dropped since it is now end of life. + +## 1.0.0 (2019-01-04) + * We no longer include the database's buffer in inspect output. This avoids showing excessive output when creating a memory reader in irb. Reported by Wojciech Wnętrzak. GitHub #6. -## 1.0.0.beta - 2018-12-24 +## 1.0.0.beta (2018-12-24) + * Initial implementation. diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..7f4f5e9 --- /dev/null +++ b/Gemfile @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +source 'https://rubygems.org' + +gemspec diff --git a/README.dev.md b/README.dev.md index 4a54e40..c9212af 100644 --- a/README.dev.md +++ b/README.dev.md @@ -1,11 +1,15 @@ # How to release -* Update changelog and set release date -* Bump version in `maxmind-db.gemspec` +* Ensure tests pass: `rake` +* Update changelog: Set version and release date +* Set version in `maxmind-db.gemspec` +* Add them: `git add -p` * Commit: `git commit -m v1.0.0` * Tag: `git tag -a v1.0.0 -m v1.0.0` * Clean up to be sure nothing stray gets into gem: `git clean -dxff` * Create `.gem` file: `gem build maxmind-db.gemspec` * Complete prerequisites (see below) + * You only need to do this if `~/.gem/credentials` is missing + `:rubygems_api_key`. * Upload to rubygems.org: `gem push maxmind-db-1.0.0.gem` * Push: `git push` * Push tag: `git push --tags` diff --git a/README.md b/README.md index 852e826..d0299ac 100644 --- a/README.md +++ b/README.md @@ -11,13 +11,6 @@ ``` gem install maxmind-db -``` - -Or from source: - -``` -gem build maxmind-db.spec -gem install ./maxmind-db-xxx.gem ``` ## Usage @@ -43,8 +36,7 @@ ## Requirements -This code requires Ruby version 2.3 or higher. Older versions may work, but -are not supported. +This code requires Ruby version 2.4 or higher. ## Contributing @@ -65,7 +57,7 @@ ## Copyright and License -This software is Copyright (c) 2018 - 2019 by MaxMind, Inc. +This software is Copyright (c) 2018 - 2020 by MaxMind, Inc. This is free software, licensed under the [Apache License, Version 2.0](LICENSE-APACHE) or the [MIT License](LICENSE-MIT), at your option. diff --git a/Rakefile b/Rakefile index b7ff8af..5c4059d 100644 --- a/Rakefile +++ b/Rakefile @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'rake/testtask' require 'rubocop/rake_task' diff --git a/bin/mmdb-benchmark.rb b/bin/mmdb-benchmark.rb index 9b948f2..723e1b2 100755 --- a/bin/mmdb-benchmark.rb +++ b/bin/mmdb-benchmark.rb @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true require 'maxmind/db' @@ -27,9 +28,11 @@ end def print_usage - STDERR.puts "Usage: #{$PROGRAM_NAME} [IP file]" + # rubocop:disable Style/StderrPuts + STDERR.puts "Usage: #{$PROGRAM_NAME} " STDERR.puts STDERR.puts 'Benchmark by reading IPs from the IP file and looking up each one in the MMDB file.' + # rubocop:enable Style/StderrPuts end def benchmark(reader, file) diff --git a/lib/maxmind/db/decoder.rb b/lib/maxmind/db/decoder.rb index e63b0b3..c9f750f 100644 --- a/lib/maxmind/db/decoder.rb +++ b/lib/maxmind/db/decoder.rb @@ -1,13 +1,17 @@ +# frozen_string_literal: true + require 'maxmind/db/errors' -module MaxMind # :nodoc: +module MaxMind class DB - # +Decoder+ decodes a {MaxMind DB}[http://maxmind.github.io/MaxMind-DB/] + # +Decoder+ decodes a {MaxMind DB}[https://maxmind.github.io/MaxMind-DB/] # data section. # # Typically you will interact with this class through a Reader rather than # directly. - class Decoder # :nodoc: + # + # @!visibility private + class Decoder # Create a +Decoder+. # # +io+ is the DB. It must provide a +read+ method. It must be opened in @@ -47,44 +51,44 @@ def decode_double(size, offset) verify_size(8, size) buf = @io.read(offset, 8) - [buf.unpack('G'.freeze)[0], offset + 8] + [buf.unpack1('G'), offset + 8] end def decode_float(size, offset) verify_size(4, size) buf = @io.read(offset, 4) - [buf.unpack('g'.freeze)[0], offset + 4] + [buf.unpack1('g'), offset + 4] end def verify_size(expected, actual) return if expected == actual raise InvalidDatabaseError, - 'The MaxMind DB file\'s data section contains bad data (unknown data type or corrupt data)'.freeze + 'The MaxMind DB file\'s data section contains bad data (unknown data type or corrupt data)' end def decode_int32(size, offset) - decode_int('l>'.freeze, 4, size, offset) + decode_int('l>', 4, size, offset) end def decode_uint16(size, offset) - decode_int('n'.freeze, 2, size, offset) + decode_int('n', 2, size, offset) end def decode_uint32(size, offset) - decode_int('N'.freeze, 4, size, offset) + decode_int('N', 4, size, offset) end def decode_uint64(size, offset) - decode_int('Q>'.freeze, 8, size, offset) + decode_int('Q>', 8, size, offset) end def decode_int(type_code, type_size, size, offset) return 0, offset if size == 0 buf = @io.read(offset, size) - buf = buf.rjust(type_size, "\x00".freeze) if size != type_size - [buf.unpack(type_code)[0], offset + size] + buf = buf.rjust(type_size, "\x00") if size != type_size + [buf.unpack1(type_code), offset + size] end def decode_uint128(size, offset) @@ -93,14 +97,14 @@ buf = @io.read(offset, size) if size <= 8 - buf = buf.rjust(8, "\x00".freeze) - return buf.unpack('Q>'.freeze)[0], offset + size - end - - a_bytes = buf[0...-8].rjust(8, "\x00".freeze) + buf = buf.rjust(8, "\x00") + return buf.unpack1('Q>'), offset + size + end + + a_bytes = buf[0...-8].rjust(8, "\x00") b_bytes = buf[-8...buf.length] - a = a_bytes.unpack('Q>'.freeze)[0] - b = b_bytes.unpack('Q>'.freeze)[0] + a = a_bytes.unpack1('Q>') + b = b_bytes.unpack1('Q>') a <<= 64 [a | b, offset + size] end @@ -122,19 +126,19 @@ when 0 new_offset = offset + 1 buf = (size & 0x7).chr << @io.read(offset, 1) - pointer = buf.unpack('n'.freeze)[0] + @pointer_base + pointer = buf.unpack1('n') + @pointer_base when 1 new_offset = offset + 2 - buf = "\x00".freeze.b << (size & 0x7).chr << @io.read(offset, 2) - pointer = buf.unpack('N'.freeze)[0] + 2048 + @pointer_base + buf = "\x00".b << (size & 0x7).chr << @io.read(offset, 2) + pointer = buf.unpack1('N') + 2048 + @pointer_base when 2 new_offset = offset + 3 buf = (size & 0x7).chr << @io.read(offset, 3) - pointer = buf.unpack('N'.freeze)[0] + 526_336 + @pointer_base + pointer = buf.unpack1('N') + 526_336 + @pointer_base else new_offset = offset + 4 buf = @io.read(offset, 4) - pointer = buf.unpack('N'.freeze)[0] + @pointer_base + pointer = buf.unpack1('N') + @pointer_base end return pointer, new_offset if @pointer_test @@ -208,9 +212,7 @@ def size_from_ctrl_byte(ctrl_byte, offset, type_num) size = ctrl_byte & 0x1f - return size, offset if type_num == 1 - - return size, offset if size < 29 + return size, offset if type_num == 1 || size < 29 if size == 29 size_bytes = @io.read(offset, 1) @@ -220,12 +222,12 @@ if size == 30 size_bytes = @io.read(offset, 2) - size = 285 + size_bytes.unpack('n'.freeze)[0] + size = 285 + size_bytes.unpack1('n') return size, offset + 2 end - size_bytes = "\x00".freeze.b << @io.read(offset, 3) - size = 65_821 + size_bytes.unpack('N'.freeze)[0] + size_bytes = "\x00".b << @io.read(offset, 3) + size = 65_821 + size_bytes.unpack1('N') [size, offset + 3] end end diff --git a/lib/maxmind/db/errors.rb b/lib/maxmind/db/errors.rb index 1ff6f36..3eb2237 100644 --- a/lib/maxmind/db/errors.rb +++ b/lib/maxmind/db/errors.rb @@ -1,7 +1,9 @@ -module MaxMind # :nodoc: +# frozen_string_literal: true + +module MaxMind class DB # An InvalidDatabaseError means the {MaxMind - # DB}[http://maxmind.github.io/MaxMind-DB/] file is corrupt or invalid. + # DB}[https://maxmind.github.io/MaxMind-DB/] file is corrupt or invalid. class InvalidDatabaseError < RuntimeError end end diff --git a/lib/maxmind/db/file_reader.rb b/lib/maxmind/db/file_reader.rb index 06ab115..99d99d4 100644 --- a/lib/maxmind/db/file_reader.rb +++ b/lib/maxmind/db/file_reader.rb @@ -1,10 +1,13 @@ +# frozen_string_literal: true + require 'maxmind/db/errors' -module MaxMind # :nodoc: +module MaxMind class DB - class FileReader # :nodoc: + # @!visibility private + class FileReader def initialize(filename) - @fh = File.new(filename, 'rb'.freeze) + @fh = File.new(filename, 'rb') @size = @fh.size @mutex = Mutex.new end @@ -16,7 +19,7 @@ end def read(offset, size) - return ''.freeze.b if size == 0 + return ''.b if size == 0 # When we support only Ruby 2.5+, remove this and require pread. if @fh.respond_to?(:pread) @@ -28,7 +31,7 @@ end end - raise InvalidDatabaseError, 'The MaxMind DB file contains bad data'.freeze if buf.nil? || buf.length != size + raise InvalidDatabaseError, 'The MaxMind DB file contains bad data' if buf.nil? || buf.length != size buf end diff --git a/lib/maxmind/db/memory_reader.rb b/lib/maxmind/db/memory_reader.rb index bfd8e4b..061bd54 100644 --- a/lib/maxmind/db/memory_reader.rb +++ b/lib/maxmind/db/memory_reader.rb @@ -1,6 +1,9 @@ -module MaxMind # :nodoc: +# frozen_string_literal: true + +module MaxMind class DB - class MemoryReader # :nodoc: + # @!visibility private + class MemoryReader def initialize(filename, options = {}) if options[:is_buffer] @buf = filename @@ -8,7 +11,7 @@ return end - @buf = File.read(filename, mode: 'rb'.freeze).freeze + @buf = File.read(filename, mode: 'rb').freeze @size = @buf.length end @@ -16,8 +19,7 @@ # Override to not show @buf in inspect to avoid showing it in irb. def inspect - s = "#<#{self.class.name}:0x#{self.class.object_id.to_s(16)} " - s << '@size=' << @size.inspect << '>' + "#<#{self.class.name}:0x#{self.class.object_id.to_s(16)}, @size=#{@size.inspect}>" end def close; end diff --git a/lib/maxmind/db/metadata.rb b/lib/maxmind/db/metadata.rb index 2c3287e..b1c5cec 100644 --- a/lib/maxmind/db/metadata.rb +++ b/lib/maxmind/db/metadata.rb @@ -1,40 +1,64 @@ -module MaxMind # :nodoc: +# frozen_string_literal: true + +module MaxMind class DB # Metadata holds metadata about a {MaxMind - # DB}[http://maxmind.github.io/MaxMind-DB/] file. + # DB}[https://maxmind.github.io/MaxMind-DB/] file. See + # https://maxmind.github.io/MaxMind-DB/#database-metadata for the + # specification. class Metadata # The number of nodes in the database. + # + # @return [Integer] attr_reader :node_count # The bit size of a record in the search tree. + # + # @return [Integer] attr_reader :record_size # The IP version of the data in the database. A value of 4 means the # database only supports IPv4. A database with a value of 6 may support # both IPv4 and IPv6 lookups. + # + # @return [Integer] attr_reader :ip_version # A string identifying the database type. e.g., "GeoIP2-City". + # + # @return [String] attr_reader :database_type # An array of locale codes supported by the database. + # + # @return [Array] attr_reader :languages # The major version number of the binary format used when creating the # database. + # + # @return [Integer] attr_reader :binary_format_major_version # The minor version number of the binary format used when creating the # database. + # + # @return [Integer] attr_reader :binary_format_minor_version # The Unix epoch for the build time of the database. + # + # @return [Integer] attr_reader :build_epoch # A hash from locales to text descriptions of the database. + # + # @return [Hash] attr_reader :description # +m+ is a hash representing the metadata map. + # + # @!visibility private def initialize(map) @node_count = map['node_count'] @record_size = map['record_size'] @@ -48,11 +72,15 @@ end # The size of a node in bytes. + # + # @return [Integer] def node_byte_size @record_size / 4 end # The size of the search tree in bytes. + # + # @return [Integer] def search_tree_size @node_count * node_byte_size end diff --git a/lib/maxmind/db.rb b/lib/maxmind/db.rb index f0c305b..ac53e5c 100644 --- a/lib/maxmind/db.rb +++ b/lib/maxmind/db.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'ipaddr' require 'maxmind/db/decoder' require 'maxmind/db/errors' @@ -5,11 +7,11 @@ require 'maxmind/db/memory_reader.rb' require 'maxmind/db/metadata.rb' -module MaxMind # :nodoc: +module MaxMind # DB provides a way to read {MaxMind DB - # files}[http://maxmind.github.io/MaxMind-DB/]. - # - # {MaxMind DB}[http://maxmind.github.io/MaxMind-DB/] is a binary file format + # files}[https://maxmind.github.io/MaxMind-DB/]. + # + # {MaxMind DB}[https://maxmind.github.io/MaxMind-DB/] is a binary file format # that stores data indexed by IP address subnets (IPv4 or IPv6). # # This class is a pure Ruby implementation of a reader for the format. @@ -29,11 +31,6 @@ # end # # reader.close - # - # == Exceptions - # - # DB raises an InvalidDatabaseError if the database is corrupt or invalid. It - # can raise other exceptions, such as ArgumentError, if other errors occur. class DB # Choose the default method to open the database. Currently the default is # MODE_FILE. @@ -45,11 +42,13 @@ MODE_MEMORY = :MODE_MEMORY # Treat the database parameter as containing a database already read into # memory. It must be a binary string. This primarily exists for testing. - MODE_PARAM_IS_BUFFER = :MODE_PARAM_IS_BUFFER # :nodoc: + # + # @!visibility private + MODE_PARAM_IS_BUFFER = :MODE_PARAM_IS_BUFFER DATA_SECTION_SEPARATOR_SIZE = 16 private_constant :DATA_SECTION_SEPARATOR_SIZE - METADATA_START_MARKER = "\xAB\xCD\xEFMaxMind.com".freeze.b.freeze + METADATA_START_MARKER = "\xAB\xCD\xEFMaxMind.com".b.freeze private_constant :METADATA_START_MARKER METADATA_START_MARKER_LENGTH = 14 private_constant :METADATA_START_MARKER_LENGTH @@ -57,31 +56,33 @@ private_constant :METADATA_MAX_SIZE # Return the metadata associated with the {MaxMind - # DB}[http://maxmind.github.io/MaxMind-DB/] as a Metadata object. + # DB}[https://maxmind.github.io/MaxMind-DB/] + # + # @return [MaxMind::DB::Metadata] attr_reader :metadata # Create a DB. A DB provides a way to read {MaxMind DB - # files}[http://maxmind.github.io/MaxMind-DB/]. If you're performing + # files}[https://maxmind.github.io/MaxMind-DB/]. If you're performing # multiple lookups, it's most efficient to create one DB and reuse it. # # Once created, the DB is safe to use for lookups from multiple threads. It # is safe to use after forking only if you use MODE_MEMORY or if your # version of Ruby supports IO#pread. # - # Creating the DB may raise an exception if initialization fails. - # - # +database+ is a path to a {MaxMind - # DB}[http://maxmind.github.io/MaxMind-DB/]. - # - # +options+ is an option hash where each key is a symbol. The options - # control the behaviour of the DB. - # - # The available options are: - # - # [+:mode+] defines how to open the database. It may be one of MODE_AUTO, - # MODE_FILE, or MODE_MEMORY. If you don't provide one, DB uses - # MODE_AUTO. Refer to the definition of those constants for an - # explanation of their meaning. + # @param database [String] a path to a {MaxMind + # DB}[https://maxmind.github.io/MaxMind-DB/]. + # + # @param options [Hash] options controlling the behavior of + # the DB. + # + # @option options [Symbol] :mode Defines how to open the database. It may + # be one of MODE_AUTO, MODE_FILE, or MODE_MEMORY. If you don't provide + # one, DB uses MODE_AUTO. Refer to the definition of those constants for + # an explanation of their meaning. + # + # @raise [InvalidDatabaseError] if the database is corrupt or invalid. + # + # @raise [ArgumentError] if the mode is invalid. def initialize(database, options = {}) options[:mode] = MODE_AUTO unless options.key?(:mode) @@ -93,7 +94,7 @@ when MODE_PARAM_IS_BUFFER @io = MemoryReader.new(database, is_buffer: true) else - raise ArgumentError, 'Invalid mode'.freeze + raise ArgumentError, 'Invalid mode' end begin @@ -123,17 +124,45 @@ end end - # Return the record for the +ip_address+ in the {MaxMind - # DB}[http://maxmind.github.io/MaxMind-DB/]. The record can be one of + # Return the record for the IP address in the {MaxMind + # DB}[https://maxmind.github.io/MaxMind-DB/]. The record can be one of # several types and depends on the contents of the database. # - # If no record is found for +ip_address+, +get+ returns +nil+. - # - # +get+ raises an exception if there is an error performing the lookup. - # - # +ip_address+ is a string in the standard notation. It may be IPv4 or - # IPv6. + # If no record is found for the IP address, +get+ returns +nil+. + # + # @param ip_address [String] a string in the standard notation. It may be + # IPv4 or IPv6. + # + # @raise [ArgumentError] if you attempt to look up an IPv6 address in an + # IPv4-only database. + # + # @raise [InvalidDatabaseError] if the database is corrupt or invalid. + # + # @return [Object, nil] def get(ip_address) + record, = get_with_prefix_length(ip_address) + + record + end + + # Return an array containing the record for the IP address in the + # {MaxMind DB}[https://maxmind.github.io/MaxMind-DB/] and its associated + # network prefix length. The record can be one of several types and + # depends on the contents of the database. + # + # If no record is found for the IP address, the record will be +nil+ and + # the prefix length will be the value for the missing network. + # + # @param ip_address [String] a string in the standard notation. It may be + # IPv4 or IPv6. + # + # @raise [ArgumentError] if you attempt to look up an IPv6 address in an + # IPv4-only database. + # + # @raise [InvalidDatabaseError] if the database is corrupt or invalid. + # + # @return [Array<(Object, Integer)>] + def get_with_prefix_length(ip_address) ip = IPAddr.new(ip_address) # We could check the IP has the correct prefix (32 or 128) but I do not # for performance reasons. @@ -144,10 +173,10 @@ "Error looking up #{ip}. You attempted to look up an IPv6 address in an IPv4-only database." end - pointer = find_address_in_tree(ip, ip_version) - return nil if pointer == 0 - - resolve_data_pointer(pointer) + pointer, depth = find_address_in_tree(ip, ip_version) + return nil, depth if pointer == 0 + + [resolve_data_pointer(pointer), depth] end private @@ -165,19 +194,22 @@ node = start_node(bit_count) node_count = @node_count - bit_count.times do |i| - break if node >= node_count - - c = packed[i >> 3].ord - bit = 1 & (c >> 7 - (i % 8)) + + depth = 0 + loop do + break if depth >= bit_count || node >= node_count + + c = packed[depth >> 3].ord + bit = 1 & (c >> 7 - (depth % 8)) node = read_node(node, bit) - end - - return 0 if node == node_count - - return node if node > node_count - - raise InvalidDatabaseError, 'Invalid node in search tree'.freeze + depth += 1 + end + + return 0, depth if node == node_count + + return node, depth if node > node_count + + raise InvalidDatabaseError, 'Invalid node in search tree' end def start_node(length) @@ -197,48 +229,43 @@ # Read a record from the indicated node. Index indicates whether it's the # left (0) or right (1) record. - # - # rubocop:disable Metrics/CyclomaticComplexity def read_node(node_number, index) base_offset = node_number * @node_byte_size if @record_size == 24 offset = index == 0 ? base_offset : base_offset + 3 buf = @io.read(offset, 3) - node_bytes = "\x00".freeze.b << buf - # When we support only Ruby 2.4+, we can change String#unpack calls - # that take the first element to String#unpack1. - return node_bytes.unpack('N'.freeze)[0] + node_bytes = "\x00".b << buf + return node_bytes.unpack1('N') end if @record_size == 28 if index == 0 buf = @io.read(base_offset, 4) - n = buf.unpack('N'.freeze)[0] + n = buf.unpack1('N') last24 = n >> 8 first4 = (n & 0xf0) << 20 return first4 | last24 end buf = @io.read(base_offset + 3, 4) - return buf.unpack('N'.freeze)[0] & 0x0fffffff + return buf.unpack1('N') & 0x0fffffff end if @record_size == 32 offset = index == 0 ? base_offset : base_offset + 4 node_bytes = @io.read(offset, 4) - return node_bytes.unpack('N'.freeze)[0] + return node_bytes.unpack1('N') end raise InvalidDatabaseError, "Unsupported record size: #{@record_size}" end - # rubocop:enable Metrics/CyclomaticComplexity def resolve_data_pointer(pointer) offset_in_file = pointer - @node_count + @search_tree_size if offset_in_file >= @size raise InvalidDatabaseError, - 'The MaxMind DB file\'s search tree is corrupt'.freeze + 'The MaxMind DB file\'s search tree is corrupt' end data, = @decoder.decode(offset_in_file) @@ -257,7 +284,7 @@ end raise InvalidDatabaseError, - 'Metadata section not found. Is this a valid MaxMind DB file?'.freeze + 'Metadata section not found. Is this a valid MaxMind DB file?' end def at_metadata?(index) @@ -268,8 +295,7 @@ # Close the DB and return resources to the system. # - # There is no useful return value. #close raises an exception if there is - # an error. + # @return [void] def close @io.close end diff --git a/maxmind-db.gemspec b/maxmind-db.gemspec index 29646af..8fa3605 100644 --- a/maxmind-db.gemspec +++ b/maxmind-db.gemspec @@ -1,19 +1,27 @@ +# frozen_string_literal: true + Gem::Specification.new do |s| s.authors = ['William Storey'] s.files = Dir['**/*'] s.name = 'maxmind-db' s.summary = 'A gem for reading MaxMind DB files.' - s.version = '1.0.0' + s.version = '1.1.1' s.description = 'A gem for reading MaxMind DB files. MaxMind DB is a binary file format that stores data indexed by IP address subnets (IPv4 or IPv6).' - s.email = 'wstorey@maxmind.com' + s.email = 'support@maxmind.com' s.homepage = 'https://github.com/maxmind/MaxMind-DB-Reader-ruby' s.licenses = ['Apache-2.0', 'MIT'] s.metadata = { 'bug_tracker_uri' => 'https://github.com/maxmind/MaxMind-DB-Reader-ruby/issues', 'changelog_uri' => 'https://github.com/maxmind/MaxMind-DB-Reader-ruby/blob/master/CHANGELOG.md', - 'documentation_uri' => 'https://github.com/maxmind/MaxMind-DB-Reader-ruby', + 'documentation_uri' => 'https://www.rubydoc.info/gems/maxmind-db', 'homepage_uri' => 'https://github.com/maxmind/MaxMind-DB-Reader-ruby', 'source_code_uri' => 'https://github.com/maxmind/MaxMind-DB-Reader-ruby', } + s.required_ruby_version = '>= 2.4.0' + + s.add_development_dependency 'minitest' + s.add_development_dependency 'rake' + s.add_development_dependency 'rubocop' + s.add_development_dependency 'rubocop-performance' end diff --git a/test/data/MaxMind-DB-spec.md b/test/data/MaxMind-DB-spec.md index 4d9017b..6f0b1b0 100644 --- a/test/data/MaxMind-DB-spec.md +++ b/test/data/MaxMind-DB-spec.md @@ -175,7 +175,8 @@ | <------------- node --------------->| | 23 .. 0 | 27..24 | 27..24 | 23 .. 0 | -Note, the last 4 bits of each pointer are combined into the middle byte. +Note 4 bits of each pointer are combined into the middle byte. For both +records, they are prepended and end up in the most significant position. #### 32 bits (large database), one node is 8 bytes @@ -206,17 +207,22 @@ If the record value is *greater* than the number of nodes in the search tree, then it is an actual pointer value pointing into the data section. The value -of the pointer is calculated from the start of the data section, *not* from -the start of the file. +of the pointer is relative to the start of the data section, *not* the +start of the file. In order to determine where in the data section we should start looking, we use the following formula: $data_section_offset = ( $record_value - $node_count ) - 16 -The `16` is the size of the data section separator (see below for details). - -The reason that we subtract the `$node_count` is best demonstrated by an example. +The 16 is the size of the data section separator. We subtract it because we +want to permit pointing to the first byte of the data section. Recall that +the record value cannot equal the node count as that means there is no +data. Instead, we choose to start values that go to the data section at +`$node_count + 16`. (This has the side effect that record values +`$node_count + 1` through `$node_count + 15` inclusive are not valid). + +This is best demonstrated by an example: Let's assume we have a 24-bit tree with 1,000 nodes. Each node contains 48 bits, or 6 bytes. The size of the tree is 6,000 bytes. @@ -233,9 +239,14 @@ In order to determine where in the file this offset really points to, we also need to know where the data section starts. This can be calculated by determining the size of the search tree in bytes and then adding an additional -16 bytes for the data section separator. - -So the final formula to determine the offset in the file is: +16 bytes for the data section separator: + + $offset_in_file = $data_section_offset + + $search_tree_size_in_bytes + + 16 + +Since we subtract and then add 16, the final formula to determine the +offset in the file can be simplified to: $offset_in_file = ( $record_value - $node_count ) + $search_tree_size_in_bytes @@ -539,6 +550,7 @@ * [Perl](https://github.com/maxmind/MaxMind-DB-Reader-perl) * [PHP](https://github.com/maxmind/MaxMind-DB-Reader-php) * [Python](https://github.com/maxmind/MaxMind-DB-Reader-python) +* [Ruby](https://github.com/maxmind/MaxMind-DB-Reader-ruby) ## Authors diff --git a/test/data/MaxMind-DB-test-metadata-pointers.mmdb b/test/data/MaxMind-DB-test-metadata-pointers.mmdb index 5705606..9a9f625 100644 Binary files a/test/data/MaxMind-DB-test-metadata-pointers.mmdb and b/test/data/MaxMind-DB-test-metadata-pointers.mmdb differ diff --git a/test/data/source-data/GeoIP2-Anonymous-IP-Test.json b/test/data/source-data/GeoIP2-Anonymous-IP-Test.json index bfe2b25..61b03cf 100644 --- a/test/data/source-data/GeoIP2-Anonymous-IP-Test.json +++ b/test/data/source-data/GeoIP2-Anonymous-IP-Test.json @@ -6,7 +6,14 @@ } }, { - "::81.2.69.0/120": { + "::1.124.213.1/128" : { + "is_anonymous" : true, + "is_anonymous_vpn" : true, + "is_tor_exit_node" : true + } + }, + { + "::81.2.69.0/120" : { "is_anonymous" : true, "is_anonymous_vpn" : true, "is_hosting_provider" : true, diff --git a/test/data/source-data/GeoIP2-City-Test.json b/test/data/source-data/GeoIP2-City-Test.json index 9d5e773..df03779 100644 --- a/test/data/source-data/GeoIP2-City-Test.json +++ b/test/data/source-data/GeoIP2-City-Test.json @@ -31,8 +31,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35.68536", - "longitude" : "139.75309", + "latitude" : 35.68536, + "longitude" : 139.75309, "time_zone" : "Asia/Tokyo" }, "registered_country" : { @@ -83,8 +83,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "37", - "longitude" : "127.5", + "latitude" : 37, + "longitude" : 127.5, "time_zone" : "Asia/Seoul" }, "registered_country" : { @@ -135,8 +135,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "37", - "longitude" : "127.5", + "latitude" : 37, + "longitude" : 127.5, "time_zone" : "Asia/Seoul" }, "registered_country" : { @@ -187,8 +187,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "24", - "longitude" : "121", + "latitude" : 24, + "longitude" : 121, "time_zone" : "Asia/Taipei" }, "registered_country" : { @@ -239,8 +239,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35.68536", - "longitude" : "139.75309", + "latitude" : 35.68536, + "longitude" : 139.75309, "time_zone" : "Asia/Tokyo" }, "registered_country" : { @@ -291,8 +291,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35", - "longitude" : "105" + "latitude" : 35, + "longitude" : 105 }, "registered_country" : { "geoname_id" : 1814991, @@ -342,8 +342,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35", - "longitude" : "105" + "latitude" : 35, + "longitude" : 105 }, "registered_country" : { "geoname_id" : 1814991, @@ -393,8 +393,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35", - "longitude" : "105" + "latitude" : 35, + "longitude" : 105 }, "registered_country" : { "geoname_id" : 1814991, @@ -444,8 +444,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35", - "longitude" : "105" + "latitude" : 35, + "longitude" : 105 }, "registered_country" : { "geoname_id" : 1814991, @@ -495,8 +495,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35.68536", - "longitude" : "139.75309", + "latitude" : 35.68536, + "longitude" : 139.75309, "time_zone" : "Asia/Tokyo" }, "registered_country" : { @@ -547,8 +547,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35.68536", - "longitude" : "139.75309", + "latitude" : 35.68536, + "longitude" : 139.75309, "time_zone" : "Asia/Tokyo" }, "registered_country" : { @@ -599,8 +599,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35.68536", - "longitude" : "139.75309", + "latitude" : 35.68536, + "longitude" : 139.75309, "time_zone" : "Asia/Tokyo" }, "registered_country" : { @@ -651,8 +651,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "37", - "longitude" : "127.5", + "latitude" : 37, + "longitude" : 127.5, "time_zone" : "Asia/Seoul" }, "registered_country" : { @@ -703,8 +703,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35.68536", - "longitude" : "139.75309", + "latitude" : 35.68536, + "longitude" : 139.75309, "time_zone" : "Asia/Tokyo" }, "registered_country" : { @@ -755,8 +755,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "37", - "longitude" : "127.5", + "latitude" : 37, + "longitude" : 127.5, "time_zone" : "Asia/Seoul" }, "registered_country" : { @@ -807,8 +807,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "24", - "longitude" : "121", + "latitude" : 24, + "longitude" : 121, "time_zone" : "Asia/Taipei" }, "registered_country" : { @@ -859,8 +859,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "37", - "longitude" : "127.5", + "latitude" : 37, + "longitude" : 127.5, "time_zone" : "Asia/Seoul" }, "registered_country" : { @@ -911,8 +911,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35.68536", - "longitude" : "139.75309", + "latitude" : 35.68536, + "longitude" : 139.75309, "time_zone" : "Asia/Tokyo" }, "registered_country" : { @@ -963,8 +963,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35.68536", - "longitude" : "139.75309", + "latitude" : 35.68536, + "longitude" : 139.75309, "time_zone" : "Asia/Tokyo" }, "registered_country" : { @@ -1015,8 +1015,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35.68536", - "longitude" : "139.75309", + "latitude" : 35.68536, + "longitude" : 139.75309, "time_zone" : "Asia/Tokyo" }, "registered_country" : { @@ -1067,8 +1067,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "37", - "longitude" : "127.5", + "latitude" : 37, + "longitude" : 127.5, "time_zone" : "Asia/Seoul" }, "registered_country" : { @@ -1119,8 +1119,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "37", - "longitude" : "127.5", + "latitude" : 37, + "longitude" : 127.5, "time_zone" : "Asia/Seoul" }, "registered_country" : { @@ -1171,8 +1171,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35.68536", - "longitude" : "139.75309", + "latitude" : 35.68536, + "longitude" : 139.75309, "time_zone" : "Asia/Tokyo" }, "registered_country" : { @@ -1223,8 +1223,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35.68536", - "longitude" : "139.75309", + "latitude" : 35.68536, + "longitude" : 139.75309, "time_zone" : "Asia/Tokyo" }, "registered_country" : { @@ -1275,8 +1275,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "37", - "longitude" : "127.5", + "latitude" : 37, + "longitude" : 127.5, "time_zone" : "Asia/Seoul" }, "registered_country" : { @@ -1327,8 +1327,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "22.25", - "longitude" : "114.16667", + "latitude" : 22.25, + "longitude" : 114.16667, "time_zone" : "Asia/Hong_Kong" }, "registered_country" : { @@ -1379,8 +1379,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35.68536", - "longitude" : "139.75309", + "latitude" : 35.68536, + "longitude" : 139.75309, "time_zone" : "Asia/Tokyo" }, "registered_country" : { @@ -1431,8 +1431,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35.68536", - "longitude" : "139.75309", + "latitude" : 35.68536, + "longitude" : 139.75309, "time_zone" : "Asia/Tokyo" }, "registered_country" : { @@ -1483,8 +1483,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35.68536", - "longitude" : "139.75309", + "latitude" : 35.68536, + "longitude" : 139.75309, "time_zone" : "Asia/Tokyo" }, "registered_country" : { @@ -1535,8 +1535,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "62", - "longitude" : "10", + "latitude" : 62, + "longitude" : 10, "time_zone" : "Europe/Oslo" }, "registered_country" : { @@ -1587,8 +1587,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "31.5", - "longitude" : "34.75", + "latitude" : 31.5, + "longitude" : 34.75, "time_zone" : "Asia/Jerusalem" }, "registered_country" : { @@ -1640,8 +1640,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "46", - "longitude" : "2", + "latitude" : 46, + "longitude" : 2, "time_zone" : "Europe/Paris" }, "registered_country" : { @@ -1693,8 +1693,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "47.00016", - "longitude" : "8.01427", + "latitude" : 47.00016, + "longitude" : 8.01427, "time_zone" : "Europe/Zurich" }, "registered_country" : { @@ -1746,8 +1746,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "62", - "longitude" : "15", + "latitude" : 62, + "longitude" : 15, "time_zone" : "Europe/Stockholm" }, "registered_country" : { @@ -1799,8 +1799,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "26", - "longitude" : "50.5", + "latitude" : 26, + "longitude" : 50.5, "time_zone" : "Asia/Bahrain" }, "registered_country" : { @@ -1851,8 +1851,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -1903,8 +1903,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52", - "longitude" : "20", + "latitude" : 52, + "longitude" : 20, "time_zone" : "Europe/Warsaw" }, "registered_country" : { @@ -1956,8 +1956,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "62", - "longitude" : "10", + "latitude" : 62, + "longitude" : 10, "time_zone" : "Europe/Oslo" }, "registered_country" : { @@ -2009,8 +2009,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -2063,8 +2063,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "42.83333", - "longitude" : "12.83333", + "latitude" : 42.83333, + "longitude" : 12.83333, "time_zone" : "Europe/Rome" }, "registered_country" : { @@ -2117,8 +2117,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "64", - "longitude" : "26", + "latitude" : 64, + "longitude" : 26, "time_zone" : "Europe/Helsinki" }, "registered_country" : { @@ -2170,8 +2170,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "53", - "longitude" : "28", + "latitude" : 53, + "longitude" : 28, "time_zone" : "Europe/Minsk" }, "registered_country" : { @@ -2223,8 +2223,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "49.75", - "longitude" : "15", + "latitude" : 49.75, + "longitude" : 15, "time_zone" : "Europe/Prague" }, "registered_country" : { @@ -2276,8 +2276,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "32", - "longitude" : "53", + "latitude" : 32, + "longitude" : 53, "time_zone" : "Asia/Tehran" }, "registered_country" : { @@ -2328,8 +2328,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "49", - "longitude" : "32" + "latitude" : 49, + "longitude" : 32 }, "registered_country" : { "geoname_id" : 690791, @@ -2380,8 +2380,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "46", - "longitude" : "2", + "latitude" : 46, + "longitude" : 2, "time_zone" : "Europe/Paris" }, "registered_country" : { @@ -2433,8 +2433,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "32", - "longitude" : "53", + "latitude" : 32, + "longitude" : 53, "time_zone" : "Asia/Tehran" }, "registered_country" : { @@ -2486,8 +2486,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -2540,8 +2540,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "47", - "longitude" : "20", + "latitude" : 47, + "longitude" : 20, "time_zone" : "Europe/Budapest" }, "registered_country" : { @@ -2594,8 +2594,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "62", - "longitude" : "15", + "latitude" : 62, + "longitude" : 15, "time_zone" : "Europe/Stockholm" }, "registered_country" : { @@ -2648,8 +2648,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -2702,8 +2702,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "64", - "longitude" : "26", + "latitude" : 64, + "longitude" : 26, "time_zone" : "Europe/Helsinki" }, "registered_country" : { @@ -2756,8 +2756,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -2795,8 +2795,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "48.69096", - "longitude" : "9.14062", + "latitude" : 48.69096, + "longitude" : 9.14062, "time_zone" : "Europe/Vaduz" } } @@ -2834,8 +2834,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -2888,8 +2888,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "46", - "longitude" : "2", + "latitude" : 46, + "longitude" : 2, "time_zone" : "Europe/Paris" }, "registered_country" : { @@ -2942,8 +2942,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "40", - "longitude" : "-4" + "latitude" : 40, + "longitude" : -4 }, "registered_country" : { "geoname_id" : 2510769, @@ -2995,8 +2995,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -3049,8 +3049,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "46", - "longitude" : "2", + "latitude" : 46, + "longitude" : 2, "time_zone" : "Europe/Paris" }, "registered_country" : { @@ -3103,8 +3103,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -3157,8 +3157,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -3211,8 +3211,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "43", - "longitude" : "25", + "latitude" : 43, + "longitude" : 25, "time_zone" : "Europe/Sofia" }, "registered_country" : { @@ -3265,8 +3265,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -3318,8 +3318,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "47.00016", - "longitude" : "8.01427", + "latitude" : 47.00016, + "longitude" : 8.01427, "time_zone" : "Europe/Zurich" }, "registered_country" : { @@ -3370,8 +3370,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "32", - "longitude" : "53", + "latitude" : 32, + "longitude" : 53, "time_zone" : "Asia/Tehran" }, "registered_country" : { @@ -3423,8 +3423,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "46", - "longitude" : "2", + "latitude" : 46, + "longitude" : 2, "time_zone" : "Europe/Paris" }, "registered_country" : { @@ -3477,8 +3477,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "46", - "longitude" : "25", + "latitude" : 46, + "longitude" : 25, "time_zone" : "Europe/Bucharest" }, "registered_country" : { @@ -3530,8 +3530,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -3581,8 +3581,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -3632,8 +3632,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "62", - "longitude" : "10", + "latitude" : 62, + "longitude" : 10, "time_zone" : "Europe/Oslo" }, "registered_country" : { @@ -3685,8 +3685,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "62", - "longitude" : "15", + "latitude" : 62, + "longitude" : 15, "time_zone" : "Europe/Stockholm" }, "registered_country" : { @@ -3739,8 +3739,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "50.83333", - "longitude" : "4", + "latitude" : 50.83333, + "longitude" : 4, "time_zone" : "Europe/Brussels" }, "registered_country" : { @@ -3792,8 +3792,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "39.05901", - "longitude" : "34.91155", + "latitude" : 39.05901, + "longitude" : 34.91155, "time_zone" : "Europe/Istanbul" }, "registered_country" : { @@ -3844,8 +3844,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "39.05901", - "longitude" : "34.91155", + "latitude" : 39.05901, + "longitude" : 34.91155, "time_zone" : "Europe/Istanbul" }, "registered_country" : { @@ -3897,8 +3897,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -3951,8 +3951,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -4005,8 +4005,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "47.33333", - "longitude" : "13.33333", + "latitude" : 47.33333, + "longitude" : 13.33333, "time_zone" : "Europe/Vienna" }, "registered_country" : { @@ -4058,8 +4058,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -4110,8 +4110,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -4164,8 +4164,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "46", - "longitude" : "25", + "latitude" : 46, + "longitude" : 25, "time_zone" : "Europe/Bucharest" }, "registered_country" : { @@ -4217,8 +4217,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -4268,8 +4268,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -4319,8 +4319,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -4370,8 +4370,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "39.05901", - "longitude" : "34.91155", + "latitude" : 39.05901, + "longitude" : 34.91155, "time_zone" : "Europe/Istanbul" }, "registered_country" : { @@ -4422,8 +4422,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -4473,8 +4473,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "49", - "longitude" : "32" + "latitude" : 49, + "longitude" : 32 }, "registered_country" : { "geoname_id" : 690791, @@ -4524,8 +4524,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "41", - "longitude" : "20", + "latitude" : 41, + "longitude" : 20, "time_zone" : "Europe/Tirane" }, "registered_country" : { @@ -4577,8 +4577,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -4631,8 +4631,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "62", - "longitude" : "15", + "latitude" : 62, + "longitude" : 15, "time_zone" : "Europe/Stockholm" }, "registered_country" : { @@ -4684,8 +4684,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -4735,8 +4735,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -4786,8 +4786,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "31.5", - "longitude" : "34.75", + "latitude" : 31.5, + "longitude" : 34.75, "time_zone" : "Asia/Jerusalem" }, "registered_country" : { @@ -4838,8 +4838,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -4889,8 +4889,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "33.83333", - "longitude" : "35.83333", + "latitude" : 33.83333, + "longitude" : 35.83333, "time_zone" : "Asia/Beirut" }, "registered_country" : { @@ -4941,8 +4941,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "32", - "longitude" : "53", + "latitude" : 32, + "longitude" : 53, "time_zone" : "Asia/Tehran" }, "registered_country" : { @@ -4993,8 +4993,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "39.05901", - "longitude" : "34.91155", + "latitude" : 39.05901, + "longitude" : 34.91155, "time_zone" : "Europe/Istanbul" }, "registered_country" : { @@ -5046,8 +5046,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -5099,8 +5099,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "32", - "longitude" : "53", + "latitude" : 32, + "longitude" : 53, "time_zone" : "Asia/Tehran" }, "registered_country" : { @@ -5152,8 +5152,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "46", - "longitude" : "2", + "latitude" : 46, + "longitude" : 2, "time_zone" : "Europe/Paris" }, "registered_country" : { @@ -5206,8 +5206,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52.5", - "longitude" : "5.75", + "latitude" : 52.5, + "longitude" : 5.75, "time_zone" : "Europe/Amsterdam" }, "registered_country" : { @@ -5259,8 +5259,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "29.5", - "longitude" : "47.75", + "latitude" : 29.5, + "longitude" : 47.75, "time_zone" : "Asia/Kuwait" }, "registered_country" : { @@ -5311,8 +5311,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "47.00016", - "longitude" : "8.01427", + "latitude" : 47.00016, + "longitude" : 8.01427, "time_zone" : "Europe/Zurich" }, "registered_country" : { @@ -5364,8 +5364,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -5418,8 +5418,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52", - "longitude" : "20", + "latitude" : 52, + "longitude" : 20, "time_zone" : "Europe/Warsaw" }, "registered_country" : { @@ -5472,8 +5472,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -5526,8 +5526,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52.5", - "longitude" : "5.75", + "latitude" : 52.5, + "longitude" : 5.75, "time_zone" : "Europe/Amsterdam" }, "registered_country" : { @@ -5580,8 +5580,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "47.33333", - "longitude" : "13.33333", + "latitude" : 47.33333, + "longitude" : 13.33333, "time_zone" : "Europe/Vienna" }, "registered_country" : { @@ -5633,8 +5633,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "25", - "longitude" : "45", + "latitude" : 25, + "longitude" : 45, "time_zone" : "Asia/Riyadh" }, "registered_country" : { @@ -5686,8 +5686,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -5740,8 +5740,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -5794,8 +5794,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "42.83333", - "longitude" : "12.83333", + "latitude" : 42.83333, + "longitude" : 12.83333, "time_zone" : "Europe/Rome" }, "registered_country" : { @@ -5847,8 +5847,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "53", - "longitude" : "28", + "latitude" : 53, + "longitude" : 28, "time_zone" : "Europe/Minsk" }, "registered_country" : { @@ -5899,8 +5899,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "62", - "longitude" : "10", + "latitude" : 62, + "longitude" : 10, "time_zone" : "Europe/Oslo" }, "registered_country" : { @@ -5952,8 +5952,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "42.83333", - "longitude" : "12.83333", + "latitude" : 42.83333, + "longitude" : 12.83333, "time_zone" : "Europe/Rome" }, "registered_country" : { @@ -6006,8 +6006,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "46", - "longitude" : "2", + "latitude" : 46, + "longitude" : 2, "time_zone" : "Europe/Paris" }, "registered_country" : { @@ -6060,8 +6060,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "62", - "longitude" : "15", + "latitude" : 62, + "longitude" : 15, "time_zone" : "Europe/Stockholm" }, "registered_country" : { @@ -6114,8 +6114,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -6167,8 +6167,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -6219,8 +6219,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52.5", - "longitude" : "5.75", + "latitude" : 52.5, + "longitude" : 5.75, "time_zone" : "Europe/Amsterdam" }, "registered_country" : { @@ -6273,8 +6273,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "46", - "longitude" : "2", + "latitude" : 46, + "longitude" : 2, "time_zone" : "Europe/Paris" }, "registered_country" : { @@ -6326,8 +6326,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "44.81892", - "longitude" : "20.45998", + "latitude" : 44.81892, + "longitude" : 20.45998, "time_zone" : "Europe/Belgrade" }, "registered_country" : { @@ -6378,8 +6378,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "62", - "longitude" : "10", + "latitude" : 62, + "longitude" : 10, "time_zone" : "Europe/Oslo" }, "registered_country" : { @@ -6430,8 +6430,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -6482,8 +6482,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "46", - "longitude" : "2", + "latitude" : 46, + "longitude" : 2, "time_zone" : "Europe/Paris" }, "registered_country" : { @@ -6535,8 +6535,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -6587,8 +6587,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "46", - "longitude" : "2", + "latitude" : 46, + "longitude" : 2, "time_zone" : "Europe/Paris" }, "registered_country" : { @@ -6640,8 +6640,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "31", - "longitude" : "36", + "latitude" : 31, + "longitude" : 36, "time_zone" : "Asia/Amman" }, "registered_country" : { @@ -6692,8 +6692,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -6743,8 +6743,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "28", - "longitude" : "17", + "latitude" : 28, + "longitude" : 17, "time_zone" : "Africa/Tripoli" }, "registered_country" : { @@ -6796,8 +6796,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -6849,8 +6849,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "39.05901", - "longitude" : "34.91155", + "latitude" : 39.05901, + "longitude" : 34.91155, "time_zone" : "Europe/Istanbul" }, "registered_country" : { @@ -6902,8 +6902,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52", - "longitude" : "20", + "latitude" : 52, + "longitude" : 20, "time_zone" : "Europe/Warsaw" }, "registered_country" : { @@ -6956,8 +6956,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -7009,8 +7009,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -7060,8 +7060,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -7112,8 +7112,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "53", - "longitude" : "-8", + "latitude" : 53, + "longitude" : -8, "time_zone" : "Europe/Dublin" }, "registered_country" : { @@ -7166,8 +7166,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "46", - "longitude" : "25", + "latitude" : 46, + "longitude" : 25, "time_zone" : "Europe/Bucharest" }, "registered_country" : { @@ -7219,8 +7219,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "31.5", - "longitude" : "34.75", + "latitude" : 31.5, + "longitude" : 34.75, "time_zone" : "Asia/Jerusalem" }, "registered_country" : { @@ -7272,8 +7272,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "62", - "longitude" : "15", + "latitude" : 62, + "longitude" : 15, "time_zone" : "Europe/Stockholm" }, "registered_country" : { @@ -7325,8 +7325,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "47.00016", - "longitude" : "8.01427", + "latitude" : 47.00016, + "longitude" : 8.01427, "time_zone" : "Europe/Zurich" }, "registered_country" : { @@ -7378,8 +7378,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -7432,8 +7432,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52", - "longitude" : "20", + "latitude" : 52, + "longitude" : 20, "time_zone" : "Europe/Warsaw" }, "registered_country" : { @@ -7486,8 +7486,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52", - "longitude" : "20", + "latitude" : 52, + "longitude" : 20, "time_zone" : "Europe/Warsaw" }, "registered_country" : { @@ -7539,8 +7539,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -7591,8 +7591,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -7644,8 +7644,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -7696,8 +7696,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "46", - "longitude" : "2", + "latitude" : 46, + "longitude" : 2, "time_zone" : "Europe/Paris" }, "registered_country" : { @@ -7750,8 +7750,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "46", - "longitude" : "2", + "latitude" : 46, + "longitude" : 2, "time_zone" : "Europe/Paris" }, "registered_country" : { @@ -7803,8 +7803,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -7840,8 +7840,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "48.69096", - "longitude" : "9.14062", + "latitude" : 48.69096, + "longitude" : 9.14062, "time_zone" : "Europe/Vaduz" } } @@ -7878,8 +7878,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "40.5", - "longitude" : "47.5", + "latitude" : 40.5, + "longitude" : 47.5, "time_zone" : "Asia/Baku" }, "registered_country" : { @@ -7930,8 +7930,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "62", - "longitude" : "10", + "latitude" : 62, + "longitude" : 10, "time_zone" : "Europe/Oslo" }, "registered_country" : { @@ -7982,8 +7982,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "39.05901", - "longitude" : "34.91155", + "latitude" : 39.05901, + "longitude" : 34.91155, "time_zone" : "Europe/Istanbul" }, "registered_country" : { @@ -8035,8 +8035,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -8088,8 +8088,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "25", - "longitude" : "45", + "latitude" : 25, + "longitude" : 45, "time_zone" : "Asia/Riyadh" }, "registered_country" : { @@ -8140,8 +8140,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "49", - "longitude" : "32" + "latitude" : 49, + "longitude" : 32 }, "registered_country" : { "geoname_id" : 690791, @@ -8191,8 +8191,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -8243,8 +8243,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52.5", - "longitude" : "5.75", + "latitude" : 52.5, + "longitude" : 5.75, "time_zone" : "Europe/Amsterdam" }, "registered_country" : { @@ -8297,8 +8297,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "62", - "longitude" : "15", + "latitude" : 62, + "longitude" : 15, "time_zone" : "Europe/Stockholm" }, "registered_country" : { @@ -8350,8 +8350,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -8401,8 +8401,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -8452,8 +8452,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "39.05901", - "longitude" : "34.91155", + "latitude" : 39.05901, + "longitude" : 34.91155, "time_zone" : "Europe/Istanbul" }, "registered_country" : { @@ -8504,8 +8504,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -8556,8 +8556,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "49.75", - "longitude" : "15", + "latitude" : 49.75, + "longitude" : 15, "time_zone" : "Europe/Prague" }, "registered_country" : { @@ -8609,8 +8609,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "26", - "longitude" : "50.5", + "latitude" : 26, + "longitude" : 50.5, "time_zone" : "Asia/Bahrain" }, "registered_country" : { @@ -8661,8 +8661,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "49", - "longitude" : "32" + "latitude" : 49, + "longitude" : 32 }, "registered_country" : { "geoname_id" : 690791, @@ -8713,8 +8713,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -8766,8 +8766,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "31", - "longitude" : "36", + "latitude" : 31, + "longitude" : 36, "time_zone" : "Asia/Amman" }, "registered_country" : { @@ -8819,8 +8819,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -8873,8 +8873,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -8927,8 +8927,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "46", - "longitude" : "2", + "latitude" : 46, + "longitude" : 2, "time_zone" : "Europe/Paris" }, "registered_country" : { @@ -8980,8 +8980,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "49", - "longitude" : "32" + "latitude" : 49, + "longitude" : 32 }, "registered_country" : { "geoname_id" : 690791, @@ -9032,8 +9032,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -9085,8 +9085,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "32", - "longitude" : "53", + "latitude" : 32, + "longitude" : 53, "time_zone" : "Asia/Tehran" }, "registered_country" : { @@ -9138,8 +9138,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "46", - "longitude" : "2", + "latitude" : 46, + "longitude" : 2, "time_zone" : "Europe/Paris" }, "registered_country" : { @@ -9191,8 +9191,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -9242,8 +9242,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "62", - "longitude" : "10", + "latitude" : 62, + "longitude" : 10, "time_zone" : "Europe/Oslo" }, "registered_country" : { @@ -9295,8 +9295,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -9349,8 +9349,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -9403,8 +9403,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52", - "longitude" : "20", + "latitude" : 52, + "longitude" : 20, "time_zone" : "Europe/Warsaw" }, "registered_country" : { @@ -9456,8 +9456,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "24", - "longitude" : "54", + "latitude" : 24, + "longitude" : 54, "time_zone" : "Asia/Dubai" }, "registered_country" : { @@ -9509,8 +9509,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -9562,8 +9562,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "62", - "longitude" : "10", + "latitude" : 62, + "longitude" : 10, "time_zone" : "Europe/Oslo" }, "registered_country" : { @@ -9615,8 +9615,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "40", - "longitude" : "-4" + "latitude" : 40, + "longitude" : -4 }, "registered_country" : { "geoname_id" : 2510769, @@ -9667,8 +9667,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -9719,8 +9719,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -9772,8 +9772,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -9823,8 +9823,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "40", - "longitude" : "45", + "latitude" : 40, + "longitude" : 45, "time_zone" : "Asia/Yerevan" }, "registered_country" : { @@ -9876,8 +9876,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52.5", - "longitude" : "5.75", + "latitude" : 52.5, + "longitude" : 5.75, "time_zone" : "Europe/Amsterdam" }, "registered_country" : { @@ -9930,8 +9930,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52.5", - "longitude" : "5.75", + "latitude" : 52.5, + "longitude" : 5.75, "time_zone" : "Europe/Amsterdam" }, "registered_country" : { @@ -9984,8 +9984,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52.5", - "longitude" : "5.75", + "latitude" : 52.5, + "longitude" : 5.75, "time_zone" : "Europe/Amsterdam" }, "registered_country" : { @@ -10037,8 +10037,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -10088,8 +10088,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -10139,8 +10139,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "33.83333", - "longitude" : "35.83333", + "latitude" : 33.83333, + "longitude" : 35.83333, "time_zone" : "Asia/Beirut" }, "registered_country" : { @@ -10192,8 +10192,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52", - "longitude" : "20", + "latitude" : 52, + "longitude" : 20, "time_zone" : "Europe/Warsaw" }, "registered_country" : { @@ -10246,8 +10246,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "62", - "longitude" : "15", + "latitude" : 62, + "longitude" : 15, "time_zone" : "Europe/Stockholm" }, "registered_country" : { @@ -10300,8 +10300,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52", - "longitude" : "20", + "latitude" : 52, + "longitude" : 20, "time_zone" : "Europe/Warsaw" }, "registered_country" : { @@ -10353,8 +10353,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "60", - "longitude" : "100" + "latitude" : 60, + "longitude" : 100 }, "registered_country" : { "geoname_id" : 2017370, @@ -10405,8 +10405,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52.5", - "longitude" : "5.75", + "latitude" : 52.5, + "longitude" : 5.75, "time_zone" : "Europe/Amsterdam" }, "registered_country" : { @@ -10459,8 +10459,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -10513,8 +10513,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52", - "longitude" : "20", + "latitude" : 52, + "longitude" : 20, "time_zone" : "Europe/Warsaw" }, "registered_country" : { @@ -10566,8 +10566,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "32", - "longitude" : "53", + "latitude" : 32, + "longitude" : 53, "time_zone" : "Asia/Tehran" }, "registered_country" : { @@ -10619,8 +10619,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "47", - "longitude" : "20", + "latitude" : 47, + "longitude" : 20, "time_zone" : "Europe/Budapest" }, "registered_country" : { @@ -10673,8 +10673,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -10727,8 +10727,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -10780,8 +10780,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "25", - "longitude" : "45", + "latitude" : 25, + "longitude" : 45, "time_zone" : "Asia/Riyadh" }, "registered_country" : { @@ -10832,8 +10832,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "39.05901", - "longitude" : "34.91155", + "latitude" : 39.05901, + "longitude" : 34.91155, "time_zone" : "Europe/Istanbul" }, "registered_country" : { @@ -10885,8 +10885,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -10939,8 +10939,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52", - "longitude" : "20", + "latitude" : 52, + "longitude" : 20, "time_zone" : "Europe/Warsaw" }, "registered_country" : { @@ -10993,8 +10993,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -11047,8 +11047,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -11101,8 +11101,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "42.83333", - "longitude" : "12.83333", + "latitude" : 42.83333, + "longitude" : 12.83333, "time_zone" : "Europe/Rome" }, "registered_country" : { @@ -11155,8 +11155,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52", - "longitude" : "20", + "latitude" : 52, + "longitude" : 20, "time_zone" : "Europe/Warsaw" }, "registered_country" : { @@ -11209,8 +11209,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "62", - "longitude" : "15", + "latitude" : 62, + "longitude" : 15, "time_zone" : "Europe/Stockholm" }, "registered_country" : { @@ -11263,8 +11263,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "56", - "longitude" : "10", + "latitude" : 56, + "longitude" : 10, "time_zone" : "Europe/Copenhagen" }, "registered_country" : { @@ -11316,8 +11316,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "62", - "longitude" : "10", + "latitude" : 62, + "longitude" : 10, "time_zone" : "Europe/Oslo" }, "registered_country" : { @@ -11369,8 +11369,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -11423,8 +11423,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -11477,8 +11477,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "42.83333", - "longitude" : "12.83333", + "latitude" : 42.83333, + "longitude" : 12.83333, "time_zone" : "Europe/Rome" }, "registered_country" : { @@ -11531,8 +11531,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "56", - "longitude" : "10", + "latitude" : 56, + "longitude" : 10, "time_zone" : "Europe/Copenhagen" }, "registered_country" : { @@ -11585,8 +11585,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "47.33333", - "longitude" : "13.33333", + "latitude" : 47.33333, + "longitude" : 13.33333, "time_zone" : "Europe/Vienna" }, "registered_country" : { @@ -11639,8 +11639,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "52.5", - "longitude" : "5.75", + "latitude" : 52.5, + "longitude" : 5.75, "time_zone" : "Europe/Amsterdam" }, "registered_country" : { @@ -11693,8 +11693,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -11747,8 +11747,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "42.83333", - "longitude" : "12.83333", + "latitude" : 42.83333, + "longitude" : 12.83333, "time_zone" : "Europe/Rome" }, "registered_country" : { @@ -11801,8 +11801,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.75844", - "longitude" : "-2.69531", + "latitude" : 54.75844, + "longitude" : -2.69531, "time_zone" : "Europe/London" }, "registered_country" : { @@ -11855,8 +11855,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "42.83333", - "longitude" : "12.83333", + "latitude" : 42.83333, + "longitude" : 12.83333, "time_zone" : "Europe/Rome" }, "registered_country" : { @@ -11908,8 +11908,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "54.25", - "longitude" : "-4.5", + "latitude" : 54.25, + "longitude" : -4.5, "time_zone" : "Europe/Isle_of_Man" }, "registered_country" : { @@ -11961,8 +11961,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5", - "longitude" : "10.5", + "latitude" : 51.5, + "longitude" : 10.5, "time_zone" : "Europe/Berlin" }, "registered_country" : { @@ -12013,8 +12013,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "36.13333", - "longitude" : "-5.35", + "latitude" : 36.13333, + "longitude" : -5.35, "time_zone" : "Europe/Gibraltar" }, "registered_country" : { @@ -12035,7 +12035,7 @@ { "::2.125.160.216/125" : { "city" : { - "geoname_id" : "2655045", + "geoname_id" : 2655045, "names" : { "en" : "Boxford" } @@ -12071,8 +12071,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.7500", - "longitude" : "-1.2500", + "latitude" : 51.75, + "longitude" : -1.25, "time_zone" : "Europe/London" }, "postal" : { @@ -12119,7 +12119,7 @@ { "::81.2.69.142/127" : { "city" : { - "geoname_id" : "2643743", + "geoname_id" : 2643743, "names" : { "de" : "London", "en" : "London", @@ -12161,8 +12161,8 @@ }, "location" : { "accuracy_radius" : 10, - "latitude" : "51.5142", - "longitude" : "-0.0931", + "latitude" : 51.5142, + "longitude" : -0.0931, "time_zone" : "Europe/London" }, "registered_country" : { @@ -12196,7 +12196,7 @@ { "::81.2.69.144/124" : { "city" : { - "geoname_id" : "2643743", + "geoname_id" : 2643743, "names" : { "de" : "London", "en" : "London", @@ -12238,8 +12238,8 @@ }, "location" : { "accuracy_radius" : 3, - "latitude" : "51.5142", - "longitude" : "-0.0931", + "latitude" : 51.5142, + "longitude" : -0.0931, "time_zone" : "Europe/London" }, "registered_country" : { @@ -12273,7 +12273,7 @@ { "::81.2.69.160/123" : { "city" : { - "geoname_id" : "2643743", + "geoname_id" : 2643743, "names" : { "de" : "London", "en" : "London", @@ -12315,8 +12315,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5142", - "longitude" : "-0.0931", + "latitude" : 51.5142, + "longitude" : -0.0931, "time_zone" : "Europe/London" }, "registered_country" : { @@ -12350,7 +12350,7 @@ { "::81.2.69.192/124" : { "city" : { - "geoname_id" : "2643743", + "geoname_id" : 2643743, "names" : { "de" : "London", "en" : "London", @@ -12392,8 +12392,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5142", - "longitude" : "-0.0931", + "latitude" : 51.5142, + "longitude" : -0.0931, "time_zone" : "Europe/London" }, "registered_country" : { @@ -12427,7 +12427,7 @@ { "::216.160.83.56/125" : { "city" : { - "geoname_id" : "5803556", + "geoname_id" : 5803556, "names" : { "en" : "Milton", "ru" : "Мильтон" @@ -12463,9 +12463,9 @@ }, "location" : { "accuracy_radius" : 22, - "latitude" : "47.2513", - "longitude" : "-122.3149", - "metro_code" : "819", + "latitude" : 47.2513, + "longitude" : -122.3149, + "metro_code" : 819, "time_zone" : "America/Los_Angeles" }, "postal" : { @@ -12505,7 +12505,7 @@ { "::89.160.20.112/124" : { "city" : { - "geoname_id" : "2694762", + "geoname_id" : 2694762, "names" : { "de" : "Linköping", "en" : "Linköping", @@ -12545,8 +12545,8 @@ }, "location" : { "accuracy_radius" : 76, - "latitude" : "58.4167", - "longitude" : "15.6167", + "latitude" : 58.4167, + "longitude" : 15.6167, "time_zone" : "Europe/Stockholm" }, "registered_country" : { @@ -12579,7 +12579,7 @@ { "::89.160.20.128/121" : { "city" : { - "geoname_id" : "2694762", + "geoname_id" : 2694762, "names" : { "de" : "Linköping", "en" : "Linköping", @@ -12619,8 +12619,8 @@ }, "location" : { "accuracy_radius" : 76, - "latitude" : "58.4167", - "longitude" : "15.6167", + "latitude" : 58.4167, + "longitude" : 15.6167, "time_zone" : "Europe/Stockholm" }, "registered_country" : { @@ -12682,8 +12682,8 @@ }, "location" : { "accuracy_radius" : 534, - "latitude" : "27.5000", - "longitude" : "90.5000", + "latitude" : 27.5, + "longitude" : 90.5, "time_zone" : "Asia/Thimphu" }, "registered_country" : { @@ -12702,7 +12702,7 @@ } }, "traits" : { - "is_anonymous_proxy" : 1 + "is_anonymous_proxy" : true } } }, @@ -12738,8 +12738,8 @@ }, "location" : { "accuracy_radius" : 121, - "latitude" : "13", - "longitude" : "122", + "latitude" : 13, + "longitude" : 122, "time_zone" : "Asia/Manila" }, "postal" : { diff --git a/test/data/source-data/GeoIP2-Country-Test.json b/test/data/source-data/GeoIP2-Country-Test.json index b697551..756237c 100644 --- a/test/data/source-data/GeoIP2-Country-Test.json +++ b/test/data/source-data/GeoIP2-Country-Test.json @@ -46,7 +46,7 @@ } }, { - "2001:220::/32" : { + "2001:220::1/128" : { "continent" : { "code" : "AS", "geoname_id" : 6255147, @@ -92,7 +92,7 @@ } }, { - "2001:230::/32" : { + "2001:220::2/127" : { "continent" : { "code" : "AS", "geoname_id" : 6255147, @@ -138,7 +138,7 @@ } }, { - "2001:238::/32" : { + "2001:220::4/126" : { "continent" : { "code" : "AS", "geoname_id" : 6255147, @@ -154,6 +154,4424 @@ } }, "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::8/125" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::10/124" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::20/123" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::40/122" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::80/121" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::100/120" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::200/119" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::400/118" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::800/117" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::1000/116" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::2000/115" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::4000/114" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::8000/113" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::1:0/112" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::2:0/111" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::4:0/110" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::8:0/109" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::10:0/108" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::20:0/107" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::40:0/106" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::80:0/105" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::100:0/104" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::200:0/103" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::400:0/102" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::800:0/101" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::1000:0/100" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::2000:0/99" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::4000:0/98" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::8000:0/97" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::1:0:0/96" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::2:0:0/95" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::4:0:0/94" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::8:0:0/93" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::10:0:0/92" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::20:0:0/91" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::40:0:0/90" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::80:0:0/89" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::100:0:0/88" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::200:0:0/87" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::400:0:0/86" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::800:0:0/85" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::1000:0:0/84" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::2000:0:0/83" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::4000:0:0/82" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::8000:0:0/81" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:0:1::/80" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:0:2::/79" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:0:4::/78" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:0:8::/77" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:0:10::/76" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:0:20::/75" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:0:40::/74" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:0:80::/73" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:0:100::/72" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:0:200::/71" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:0:400::/70" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:0:800::/69" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:0:1000::/68" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:0:2000::/67" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:0:4000::/66" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:0:8000::/65" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:1::/64" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:2::/63" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:4::/62" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:8::/61" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:10::/60" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:20::/59" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:40::/58" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:80::/57" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:100::/56" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:200::/55" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:400::/54" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:800::/53" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:1000::/52" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:2000::/51" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:4000::/50" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:0:8000::/49" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:1::/48" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:2::/47" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:4::/46" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:8::/45" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:10::/44" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:20::/43" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:40::/42" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:80::/41" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:100::/40" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:200::/39" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:400::/38" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:800::/37" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:1000::/36" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:2000::/35" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:4000::/34" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220:8000::/33" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:220::/128" : { + "continent" : { + "code" : "EU", + "geoname_id" : 6255148, + "names" : { + "de" : "Europa", + "en" : "Europe", + "es" : "Europa", + "fr" : "Europe", + "ja" : "ヨーロッパ", + "pt-BR" : "Europa", + "ru" : "Европа", + "zh-CN" : "欧洲" + } + }, + "country" : { + "geoname_id" : 2661886, + "is_in_european_union" : true, + "iso_code" : "SE", + "names" : { + "de" : "Schweden", + "en" : "Sweden", + "es" : "Suecia", + "fr" : "Suède", + "ja" : "スウェーデン王国", + "pt-BR" : "Suécia", + "ru" : "Швеция", + "zh-CN" : "瑞典" + } + }, + "registered_country" : { + "geoname_id" : 2921044, + "is_in_european_union" : true, + "iso_code" : "DE", + "names" : { + "de" : "Deutschland", + "en" : "Germany", + "es" : "Alemania", + "fr" : "Allemagne", + "ja" : "ドイツ連邦共和国", + "pt-BR" : "Alemanha", + "ru" : "Германия", + "zh-CN" : "德国" + } + } + } + }, + { + "2001:230::/32" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + }, + "registered_country" : { + "geoname_id" : 1835841, + "iso_code" : "KR", + "names" : { + "de" : "Republik Korea", + "en" : "South Korea", + "es" : "Corea, República de", + "fr" : "Corée du Sud", + "ja" : "大韓民国", + "pt-BR" : "Coréia, República da", + "ru" : "Южная Корея", + "zh-CN" : "韩国" + } + } + } + }, + { + "2001:238::/32" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { "geoname_id" : 1668284, "iso_code" : "TW", "names" : { @@ -2482,8 +6900,8 @@ } }, "location" : { - "latitude" : "48.69096", - "longitude" : "9.14062", + "latitude" : 48.69096, + "longitude" : 9.14062, "time_zone" : "Europe/Vaduz" } } @@ -6977,8 +11395,8 @@ } }, "location" : { - "latitude" : "48.69096", - "longitude" : "9.14062", + "latitude" : 48.69096, + "longitude" : 9.14062, "time_zone" : "Europe/Vaduz" } } @@ -10740,9 +15158,6 @@ "zh-CN" : "英国" } }, - "postal" : { - "code" : "OX1" - }, "registered_country" : { "geoname_id" : 3017382, "is_in_european_union" : true, @@ -10761,6 +15176,106 @@ } }, { + "::74.209.24.0/116" : { + "continent" : { + "code" : "NA", + "geoname_id" : 6255149, + "names" : { + "de" : "Nordamerika", + "en" : "North America", + "es" : "Norteamérica", + "fr" : "Amérique du Nord", + "ja" : "北アメリカ", + "pt-BR" : "América do Norte", + "ru" : "Северная Америка", + "zh-CN" : "北美洲" + } + }, + "country" : { + "geoname_id" : 6252001, + "iso_code" : "US", + "names" : { + "de" : "USA", + "en" : "United States", + "es" : "Estados Unidos", + "fr" : "États-Unis", + "ja" : "アメリカ合衆国", + "pt-BR" : "Estados Unidos", + "ru" : "США", + "zh-CN" : "美国" + } + }, + "registered_country" : { + "geoname_id" : 6252001, + "iso_code" : "US", + "names" : { + "de" : "USA", + "en" : "United States", + "es" : "Estados Unidos", + "fr" : "États-Unis", + "ja" : "アメリカ合衆国", + "pt-BR" : "Estados Unidos", + "ru" : "США", + "zh-CN" : "美国" + } + }, + "traits" : { + "is_anonymous_proxy" : true, + "is_satellite_provider" : true + } + } + }, + { + "::75.209.24.0/128" : { + "continent" : { + "code" : "NA", + "geoname_id" : 6255149, + "names" : { + "de" : "Nordamerika", + "en" : "North America", + "es" : "Norteamérica", + "fr" : "Amérique du Nord", + "ja" : "北アメリカ", + "pt-BR" : "América do Norte", + "ru" : "Северная Америка", + "zh-CN" : "北美洲" + } + }, + "country" : { + "geoname_id" : 6252001, + "iso_code" : "US", + "names" : { + "de" : "USA", + "en" : "United States", + "es" : "Estados Unidos", + "fr" : "États-Unis", + "ja" : "アメリカ合衆国", + "pt-BR" : "Estados Unidos", + "ru" : "США", + "zh-CN" : "美国" + } + }, + "registered_country" : { + "geoname_id" : 6252001, + "iso_code" : "US", + "names" : { + "de" : "USA", + "en" : "United States", + "es" : "Estados Unidos", + "fr" : "États-Unis", + "ja" : "アメリカ合衆国", + "pt-BR" : "Estados Unidos", + "ru" : "США", + "zh-CN" : "美国" + } + }, + "traits" : { + "is_anonymous_proxy" : true, + "is_satellite_provider" : true + } + } + }, + { "::81.2.69.142/127" : { "continent" : { "code" : "EU", @@ -10978,9 +15493,6 @@ "zh-CN" : "美国" } }, - "postal" : { - "code" : "98354" - }, "registered_country" : { "geoname_id" : 2635167, "is_in_european_union" : true, @@ -11140,7 +15652,7 @@ } }, "traits" : { - "is_anonymous_proxy" : 1 + "is_anonymous_proxy" : true } } }, @@ -11173,9 +15685,6 @@ "ru" : "Филиппины", "zh-CN" : "菲律宾" } - }, - "postal" : { - "code" : "34021" }, "registered_country" : { "geoname_id" : 1694008, @@ -11255,6 +15764,66 @@ } }, { + "::175.16.199.0/120" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "geoname_id" : 1814991, + "iso_code" : "CN", + "names" : { + "de" : "China", + "en" : "China", + "es" : "China", + "fr" : "Chine", + "ja" : "中国", + "pt-BR" : "China", + "ru" : "Китай", + "zh-CN" : "中国" + } + }, + "registered_country" : { + "geoname_id" : 1814991, + "iso_code" : "CN", + "names" : { + "de" : "China", + "en" : "China", + "es" : "China", + "fr" : "Chine", + "ja" : "中国", + "pt-BR" : "China", + "ru" : "Китай", + "zh-CN" : "中国" + } + } + } + }, + { + "::212.47.235.81/128" : { + "traits" : { + "is_anonymous_proxy" : true + } + } + }, + { + "::212.47.235.82/128" : { + "traits" : { + "is_satellite_provider" : true + } + } + }, + { "::217.65.48.0/125" : { "continent" : { "code" : "EU", diff --git a/test/data/source-data/GeoIP2-Enterprise-Test.json b/test/data/source-data/GeoIP2-Enterprise-Test.json index 9e43441..cd5b06e 100644 --- a/test/data/source-data/GeoIP2-Enterprise-Test.json +++ b/test/data/source-data/GeoIP2-Enterprise-Test.json @@ -3,7 +3,7 @@ "::2.125.160.216/125" : { "city" : { "confidence" : 50, - "geoname_id" : "2655045", + "geoname_id" : 2655045, "names" : { "en" : "Boxford" } @@ -40,8 +40,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.7500", - "longitude" : "-1.2500", + "latitude" : 51.75, + "longitude" : -1.25, "time_zone" : "Europe/London" }, "postal" : { @@ -120,8 +120,8 @@ }, "location" : { "accuracy_radius" : 534, - "latitude" : "27.5000", - "longitude" : "90.5000", + "latitude" : 27.5, + "longitude" : 90.5, "time_zone" : "Asia/Thimphu" }, "registered_country" : { @@ -152,15 +152,15 @@ { "::74.209.24.0/116" : { "city" : { - "confidence" : "11", - "geoname_id" : "5112335", + "confidence" : 11, + "geoname_id" : 5112335, "names" : { "en" : "Chatham" } }, "continent" : { "code" : "NA", - "geoname_id" : "6255149", + "geoname_id" : 6255149, "names" : { "de" : "Nordamerika", "en" : "North America", @@ -173,8 +173,8 @@ } }, "country" : { - "confidence" : "99", - "geoname_id" : "6252001", + "confidence" : 99, + "geoname_id" : 6252001, "iso_code" : "US", "names" : { "de" : "USA", @@ -188,18 +188,18 @@ } }, "location" : { - "accuracy_radius" : "27", - "latitude" : "42.347800", - "longitude" : "-73.554900", - "metro_code" : "532", + "accuracy_radius" : 27, + "latitude" : 42.3478, + "longitude" : -73.5549, + "metro_code" : 532, "time_zone" : "America/New_York" }, "postal" : { "code" : "12037", - "confidence" : "11" - }, - "registered_country" : { - "geoname_id" : "6252001", + "confidence" : 11 + }, + "registered_country" : { + "geoname_id" : 6252001, "iso_code" : "US", "names" : { "de" : "USA", @@ -214,8 +214,8 @@ }, "subdivisions" : [ { - "confidence" : "93", - "geoname_id" : "5128638", + "confidence" : 93, + "geoname_id" : 5128638, "iso_code" : "NY", "names" : { "de" : "New York", @@ -230,7 +230,7 @@ } ], "traits" : { - "autonomous_system_number" : "14671", + "autonomous_system_number" : 14671, "autonomous_system_organization" : "FairPoint Communications", "connection_type" : "Cable/DSL", "domain" : "frpt.net", @@ -247,7 +247,7 @@ "::81.2.69.160/123" : { "city" : { "confidence" : 42, - "geoname_id" : "2643743", + "geoname_id" : 2643743, "names" : { "de" : "London", "en" : "London", @@ -290,8 +290,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5142", - "longitude" : "-0.0931", + "latitude" : 51.5142, + "longitude" : -0.0931, "time_zone" : "Europe/London" }, "registered_country" : { @@ -334,7 +334,7 @@ "::89.160.20.112/124" : { "city" : { "confidence" : 51, - "geoname_id" : "2694762", + "geoname_id" : 2694762, "names" : { "de" : "Linköping", "en" : "Linköping", @@ -375,8 +375,8 @@ }, "location" : { "accuracy_radius" : 76, - "latitude" : "58.4167", - "longitude" : "15.6167", + "latitude" : 58.4167, + "longitude" : 15.6167, "time_zone" : "Europe/Stockholm" }, "registered_country" : { @@ -528,8 +528,8 @@ }, "location" : { "accuracy_radius" : 121, - "latitude" : "13", - "longitude" : "122", + "latitude" : 13, + "longitude" : 122, "time_zone" : "Asia/Manila" }, "postal" : { @@ -571,7 +571,7 @@ "::216.160.83.56/125" : { "city" : { "confidence" : 40, - "geoname_id" : "5803556", + "geoname_id" : 5803556, "names" : { "en" : "Milton", "ru" : "Мильтон" @@ -608,9 +608,9 @@ }, "location" : { "accuracy_radius" : 22, - "latitude" : "47.2513", - "longitude" : "-122.3149", - "metro_code" : "819", + "latitude" : 47.2513, + "longitude" : -122.3149, + "metro_code" : 819, "time_zone" : "America/Los_Angeles" }, "postal" : { diff --git a/test/data/source-data/GeoIP2-ISP-Test.json b/test/data/source-data/GeoIP2-ISP-Test.json index 2ef4993..c746d55 100644 --- a/test/data/source-data/GeoIP2-ISP-Test.json +++ b/test/data/source-data/GeoIP2-ISP-Test.json @@ -403,6 +403,14 @@ } }, { + "::23.32.32.1/128" : { + "autonomous_system_number" : 262589, + "autonomous_system_organization" : "INTERNEXA Brasil Operadora de Telecomunicações S.A", + "isp" : "INTERNEXA Brasil Operadora de Telecomunicações S.A", + "organization" : "INTERNEXA Brasil Operadora de Telecomunicações S.A" + } + }, + { "::23.192.0.0/107" : { "autonomous_system_number" : 35994, "autonomous_system_organization" : "Akamai Technologies, Inc.", diff --git a/test/data/source-data/GeoIP2-Precision-Enterprise-Test.json b/test/data/source-data/GeoIP2-Precision-Enterprise-Test.json index 23a6631..edc8dff 100644 --- a/test/data/source-data/GeoIP2-Precision-Enterprise-Test.json +++ b/test/data/source-data/GeoIP2-Precision-Enterprise-Test.json @@ -1,11 +1,74 @@ [ { - "::2.125.160.216/125" : { + "::1.124.213.0/120" : { + "continent" : { + "code" : "AS", + "geoname_id" : 6255147, + "names" : { + "de" : "Asien", + "en" : "Asia", + "es" : "Asia", + "fr" : "Asie", + "ja" : "アジア", + "pt-BR" : "Ásia", + "ru" : "Азия", + "zh-CN" : "亚洲" + } + }, + "country" : { + "confidence" : 99, + "geoname_id" : 130758, + "iso_code" : "IR", + "names" : { + "de" : "Iran (Islamische Republik)", + "en" : "Iran", + "es" : "Irán", + "fr" : "Iran", + "ja" : "イラン・イスラム共和国", + "pt-BR" : "Irã", + "ru" : "Иран", + "zh-CN" : "伊朗伊斯兰共和国" + } + }, + "location" : { + "accuracy_radius" : 50, + "latitude" : 35.6961, + "longitude" : 51.4231, + "time_zone" : "Asia/Tehran" + }, + "registered_country" : { + "geoname_id" : 130758, + "iso_code" : "IR", + "names" : { + "de" : "Iran (Islamische Republik)", + "en" : "Iran", + "es" : "Irán", + "fr" : "Iran", + "ja" : "イラン・イスラム共和国", + "pt-BR" : "Irã", + "ru" : "Иран", + "zh-CN" : "伊朗伊斯兰共和国" + } + }, + "traits" : { + "autonomous_system_number" : 44244, + "autonomous_system_organization" : "Iran Cell Service and Communication Company", + "connection_type" : "Cellular", + "isp" : "Iran Cell Service and Communication Company", + "organization" : "Iran Cell Service and Communication Company", + "user_type" : "cellular" + } + } + }, + { + "::1.231.232.0/120" : { "city" : { - "confidence" : 50, - "geoname_id" : "2655045", - "names" : { - "en" : "Boxford" + "confidence" : 60, + "geoname_id" : 709334, + "names" : { + "de" : "Dschankoj", + "en" : "Dzhankoy", + "ru" : "Джанкой" } }, "continent" : { @@ -23,6 +86,87 @@ } }, "country" : { + "confidence" : 80, + "geoname_id" : 690791, + "iso_code" : "UA", + "names" : { + "de" : "Ukraine", + "en" : "Ukraine", + "es" : "Ucrania", + "fr" : "Ukraine", + "ja" : "ウクライナ共和国", + "pt-BR" : "Ucrânia", + "ru" : "Украина", + "zh-CN" : "乌克兰" + } + }, + "location" : { + "accuracy_radius" : 200, + "latitude" : 45.7117, + "longitude" : 34.3927, + "time_zone" : "Europe/Simferopol" + }, + "registered_country" : { + "geoname_id" : 690791, + "iso_code" : "UA", + "names" : { + "de" : "Ukraine", + "en" : "Ukraine", + "es" : "Ucrania", + "fr" : "Ukraine", + "ja" : "ウクライナ共和国", + "pt-BR" : "Ucrânia", + "ru" : "Украина", + "zh-CN" : "乌克兰" + } + }, + "subdivisions" : [ + { + "confidence" : 70, + "geoname_id" : 703883, + "iso_code" : "43", + "names" : { + "de" : "Krim", + "en" : "Autonomous Republic of Crimea", + "fr" : "République autonome de Crimée", + "ru" : "Республика Крым" + } + } + ], + "traits" : { + "autonomous_system_number" : 28761, + "autonomous_system_organization" : "CrimeaCom South LLC", + "connection_type" : "Cable/DSL", + "isp" : "CrimeaCom South LLC", + "organization" : "CrimeaCom South LLC", + "user_type" : "residential" + } + } + }, + { + "::2.125.160.216/125" : { + "city" : { + "confidence" : 50, + "geoname_id" : 2655045, + "names" : { + "en" : "Boxford" + } + }, + "continent" : { + "code" : "EU", + "geoname_id" : 6255148, + "names" : { + "de" : "Europa", + "en" : "Europe", + "es" : "Europa", + "fr" : "Europe", + "ja" : "ヨーロッパ", + "pt-BR" : "Europa", + "ru" : "Европа", + "zh-CN" : "欧洲" + } + }, + "country" : { "confidence" : 95, "geoname_id" : 2635167, "is_in_european_union" : true, @@ -40,8 +184,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.7500", - "longitude" : "-1.2500", + "latitude" : 51.75, + "longitude" : -1.25, "time_zone" : "Europe/London" }, "postal" : { @@ -507,8 +651,8 @@ }, "location" : { "accuracy_radius" : 534, - "latitude" : "27.5000", - "longitude" : "90.5000", + "latitude" : 27.5, + "longitude" : 90.5, "time_zone" : "Asia/Thimphu" }, "registered_country" : { @@ -539,15 +683,15 @@ { "::74.209.24.0/116" : { "city" : { - "confidence" : "11", - "geoname_id" : "5112335", + "confidence" : 11, + "geoname_id" : 5112335, "names" : { "en" : "Chatham" } }, "continent" : { "code" : "NA", - "geoname_id" : "6255149", + "geoname_id" : 6255149, "names" : { "de" : "Nordamerika", "en" : "North America", @@ -560,8 +704,8 @@ } }, "country" : { - "confidence" : "99", - "geoname_id" : "6252001", + "confidence" : 99, + "geoname_id" : 6252001, "iso_code" : "US", "names" : { "de" : "USA", @@ -575,18 +719,18 @@ } }, "location" : { - "accuracy_radius" : "27", - "latitude" : "42.347800", - "longitude" : "-73.554900", - "metro_code" : "532", + "accuracy_radius" : 27, + "latitude" : 42.3478, + "longitude" : -73.5549, + "metro_code" : 532, "time_zone" : "America/New_York" }, "postal" : { "code" : "12037", - "confidence" : "11" - }, - "registered_country" : { - "geoname_id" : "6252001", + "confidence" : 11 + }, + "registered_country" : { + "geoname_id" : 6252001, "iso_code" : "US", "names" : { "de" : "USA", @@ -601,8 +745,8 @@ }, "subdivisions" : [ { - "confidence" : "93", - "geoname_id" : "5128638", + "confidence" : 93, + "geoname_id" : 5128638, "iso_code" : "NY", "names" : { "de" : "New York", @@ -617,7 +761,7 @@ } ], "traits" : { - "autonomous_system_number" : "14671", + "autonomous_system_number" : 14671, "autonomous_system_organization" : "FairPoint Communications", "connection_type" : "Cable/DSL", "domain" : "frpt.net", @@ -631,10 +775,104 @@ } }, { + "::75.209.24.0/128" : { + "city" : { + "confidence" : 11, + "geoname_id" : 5112335, + "names" : { + "en" : "Chatham" + } + }, + "continent" : { + "code" : "NA", + "geoname_id" : 6255149, + "names" : { + "de" : "Nordamerika", + "en" : "North America", + "es" : "Norteamérica", + "fr" : "Amérique du Nord", + "ja" : "北アメリカ", + "pt-BR" : "América do Norte", + "ru" : "Северная Америка", + "zh-CN" : "北美洲" + } + }, + "country" : { + "confidence" : 99, + "geoname_id" : 6252001, + "iso_code" : "US", + "names" : { + "de" : "USA", + "en" : "United States", + "es" : "Estados Unidos", + "fr" : "États-Unis", + "ja" : "アメリカ合衆国", + "pt-BR" : "Estados Unidos", + "ru" : "США", + "zh-CN" : "美国" + } + }, + "location" : { + "accuracy_radius" : 27, + "latitude" : 42.3478, + "longitude" : -73.5549, + "metro_code" : 532, + "time_zone" : "America/New_York" + }, + "postal" : { + "code" : "12037", + "confidence" : 11 + }, + "registered_country" : { + "geoname_id" : 6252001, + "iso_code" : "US", + "names" : { + "de" : "USA", + "en" : "United States", + "es" : "Estados Unidos", + "fr" : "États-Unis", + "ja" : "アメリカ合衆国", + "pt-BR" : "Estados Unidos", + "ru" : "США", + "zh-CN" : "美国" + } + }, + "subdivisions" : [ + { + "confidence" : 93, + "geoname_id" : 5128638, + "iso_code" : "NY", + "names" : { + "de" : "New York", + "en" : "New York", + "es" : "Nueva York", + "fr" : "New York", + "ja" : "ニューヨーク州", + "pt-BR" : "Nova Iorque", + "ru" : "Нью-Йорк", + "zh-CN" : "纽约州" + } + } + ], + "traits" : { + "autonomous_system_number" : 14671, + "autonomous_system_organization" : "FairPoint Communications", + "connection_type" : "Cable/DSL", + "domain" : "frpt.net", + "is_anonymous_proxy" : true, + "is_legitimate_proxy" : true, + "is_satellite_provider" : true, + "isp" : "Fairpoint Communications", + "organization" : "Fairpoint Communications", + "user_type" : "residential" + } + } + }, + { "::81.2.69.142/127" : { "city" : { "confidence" : 50, - "geoname_id" : "2643743", + "geoname_id" : 2643743, "names" : { "de" : "London", "en" : "London", @@ -677,8 +915,8 @@ }, "location" : { "accuracy_radius" : 10, - "latitude" : "51.5142", - "longitude" : "-0.0931", + "latitude" : 51.5142, + "longitude" : -0.0931, "time_zone" : "Europe/London" }, "registered_country" : { @@ -717,7 +955,7 @@ "::81.2.69.160/123" : { "city" : { "confidence" : 42, - "geoname_id" : "2643743", + "geoname_id" : 2643743, "names" : { "de" : "London", "en" : "London", @@ -760,8 +998,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "51.5142", - "longitude" : "-0.0931", + "latitude" : 51.5142, + "longitude" : -0.0931, "time_zone" : "Europe/London" }, "registered_country" : { @@ -803,7 +1041,7 @@ "::89.160.20.112/124" : { "city" : { "confidence" : 51, - "geoname_id" : "2694762", + "geoname_id" : 2694762, "names" : { "de" : "Linköping", "en" : "Linköping", @@ -844,8 +1082,8 @@ }, "location" : { "accuracy_radius" : 76, - "latitude" : "58.4167", - "longitude" : "15.6167", + "latitude" : 58.4167, + "longitude" : 15.6167, "time_zone" : "Europe/Stockholm" }, "registered_country" : { @@ -1187,8 +1425,8 @@ }, "location" : { "accuracy_radius" : 121, - "latitude" : "13", - "longitude" : "122", + "latitude" : 13, + "longitude" : 122, "time_zone" : "Asia/Manila" }, "postal" : { @@ -1322,7 +1560,7 @@ "::216.160.83.56/125" : { "city" : { "confidence" : 40, - "geoname_id" : "5803556", + "geoname_id" : 5803556, "names" : { "en" : "Milton", "ru" : "Мильтон" @@ -1359,9 +1597,9 @@ }, "location" : { "accuracy_radius" : 22, - "latitude" : "47.2513", - "longitude" : "-122.3149", - "metro_code" : "819", + "latitude" : 47.2513, + "longitude" : -122.3149, + "metro_code" : 819, "time_zone" : "America/Los_Angeles" }, "postal" : { @@ -1440,8 +1678,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35.68536", - "longitude" : "139.75309", + "latitude" : 35.68536, + "longitude" : 139.75309, "time_zone" : "Asia/Tokyo" }, "registered_country" : { @@ -1493,8 +1731,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "35", - "longitude" : "105" + "latitude" : 35, + "longitude" : 105 }, "registered_country" : { "geoname_id" : 1814991, @@ -1546,8 +1784,8 @@ }, "location" : { "accuracy_radius" : 100, - "latitude" : "49.75", - "longitude" : "15", + "latitude" : 49.75, + "longitude" : 15, "time_zone" : "Europe/Prague" }, "registered_country" : { @@ -1594,5 +1832,187 @@ "user_type" : "cellular" } } + }, + { + "2001:219::/32" : { + "city" : { + "confidence" : 51, + "geoname_id" : 2694762, + "names" : { + "de" : "Linköping", + "en" : "Linköping", + "fr" : "Linköping", + "ja" : "リンシェーピング", + "zh-CN" : "林雪平" + } + }, + "continent" : { + "code" : "EU", + "geoname_id" : 6255148, + "names" : { + "de" : "Europa", + "en" : "Europe", + "es" : "Europa", + "fr" : "Europe", + "ja" : "ヨーロッパ", + "pt-BR" : "Europa", + "ru" : "Европа", + "zh-CN" : "欧洲" + } + }, + "country" : { + "confidence" : 99, + "geoname_id" : 2661886, + "is_in_european_union" : true, + "iso_code" : "SE", + "names" : { + "de" : "Schweden", + "en" : "Sweden", + "es" : "Suecia", + "fr" : "Suède", + "ja" : "スウェーデン王国", + "pt-BR" : "Suécia", + "ru" : "Швеция", + "zh-CN" : "瑞典" + } + }, + "location" : { + "accuracy_radius" : 76, + "latitude" : 58.4167, + "longitude" : 15.6167, + "metro_code" : 4, + "time_zone" : "Europe/Stockholm" + }, + "postal" : { + "code" : "138 20", + "confidence" : 20 + }, + "registered_country" : { + "geoname_id" : 2921044, + "is_in_european_union" : true, + "iso_code" : "DE", + "names" : { + "de" : "Deutschland", + "en" : "Germany", + "es" : "Alemania", + "fr" : "Allemagne", + "ja" : "ドイツ連邦共和国", + "pt-BR" : "Alemanha", + "ru" : "Германия", + "zh-CN" : "德国" + } + }, + "subdivisions" : [ + { + "confidence" : 51, + "geoname_id" : 2685867, + "iso_code" : "E", + "names" : { + "en" : "Östergötland County", + "fr" : "Comté d'Östergötland" + } + } + ], + "traits" : { + "autonomous_system_number" : 29518, + "autonomous_system_organization" : "Bredband2 AB", + "connection_type" : "Corporate", + "domain" : "bredband2.com", + "isp" : "Bredband2 AB", + "organization" : "Bevtec", + "user_type" : "government" + } + } + }, + { + "2001:220::/128" : { + "city" : { + "confidence" : 51, + "geoname_id" : 2694762, + "names" : { + "de" : "Linköping", + "en" : "Linköping", + "fr" : "Linköping", + "ja" : "リンシェーピング", + "zh-CN" : "林雪平" + } + }, + "continent" : { + "code" : "EU", + "geoname_id" : 6255148, + "names" : { + "de" : "Europa", + "en" : "Europe", + "es" : "Europa", + "fr" : "Europe", + "ja" : "ヨーロッパ", + "pt-BR" : "Europa", + "ru" : "Европа", + "zh-CN" : "欧洲" + } + }, + "country" : { + "confidence" : 99, + "geoname_id" : 2661886, + "is_in_european_union" : true, + "iso_code" : "SE", + "names" : { + "de" : "Schweden", + "en" : "Sweden", + "es" : "Suecia", + "fr" : "Suède", + "ja" : "スウェーデン王国", + "pt-BR" : "Suécia", + "ru" : "Швеция", + "zh-CN" : "瑞典" + } + }, + "location" : { + "accuracy_radius" : 76, + "latitude" : 58.4167, + "longitude" : 15.6167, + "metro_code" : 4, + "time_zone" : "Europe/Stockholm" + }, + "postal" : { + "code" : "138 20", + "confidence" : 20 + }, + "registered_country" : { + "geoname_id" : 2921044, + "is_in_european_union" : true, + "iso_code" : "DE", + "names" : { + "de" : "Deutschland", + "en" : "Germany", + "es" : "Alemania", + "fr" : "Allemagne", + "ja" : "ドイツ連邦共和国", + "pt-BR" : "Alemanha", + "ru" : "Германия", + "zh-CN" : "德国" + } + }, + "subdivisions" : [ + { + "confidence" : 51, + "geoname_id" : 2685867, + "iso_code" : "E", + "names" : { + "en" : "Östergötland County", + "fr" : "Comté d'Östergötland" + } + } + ], + "traits" : { + "autonomous_system_number" : 29518, + "autonomous_system_organization" : "Bredband2 AB", + "connection_type" : "Corporate", + "domain" : "bredband2.com", + "isp" : "Bredband2 AB", + "organization" : "Bevtec", + "user_type" : "government" + } + } } ] diff --git a/test/data/source-data/GeoIP2-Static-IP-Score-Test.json b/test/data/source-data/GeoIP2-Static-IP-Score-Test.json new file mode 100644 index 0000000..49bafdd --- /dev/null +++ b/test/data/source-data/GeoIP2-Static-IP-Score-Test.json @@ -0,0 +1,2132 @@ +[ + { + "::1.0.0.0/111" : { + "score" : 0.01 + } + }, + { + "::1.2.0.0/119" : { + "score" : 0.02 + } + }, + { + "::1.2.2.0/120" : { + "score" : 0.03 + } + }, + { + "::1.2.3.0/126" : { + "score" : 0.04 + } + }, + { + "::1.2.3.4/128" : { + "score" : 0.05 + } + }, + { + "::1.2.3.5/128" : { + "score" : 0.06 + } + }, + { + "::1.2.3.6/128" : { + "score" : 0.07 + } + }, + { + "::1.2.3.7/128" : { + "score" : 0.08 + } + }, + { + "::1.2.3.8/125" : { + "score" : 0.09 + } + }, + { + "::1.2.3.16/124" : { + "score" : 0.1 + } + }, + { + "::1.2.3.32/123" : { + "score" : 0.11 + } + }, + { + "::1.2.3.64/122" : { + "score" : 0.12 + } + }, + { + "::1.2.3.128/121" : { + "score" : 0.13 + } + }, + { + "::1.2.4.0/118" : { + "score" : 0.14 + } + }, + { + "::1.2.8.0/117" : { + "score" : 0.15 + } + }, + { + "::1.2.16.0/116" : { + "score" : 0.16 + } + }, + { + "::1.2.32.0/115" : { + "score" : 0.17 + } + }, + { + "::1.2.64.0/114" : { + "score" : 0.18 + } + }, + { + "::1.2.128.0/113" : { + "score" : 0.19 + } + }, + { + "::1.3.0.0/112" : { + "score" : 0.2 + } + }, + { + "::1.4.0.0/110" : { + "score" : 0.21 + } + }, + { + "::1.8.0.0/109" : { + "score" : 0.22 + } + }, + { + "::1.16.0.0/108" : { + "score" : 0.23 + } + }, + { + "::1.32.0.0/107" : { + "score" : 0.24 + } + }, + { + "::1.64.0.0/106" : { + "score" : 0.25 + } + }, + { + "::1.128.0.0/105" : { + "score" : 0.26 + } + }, + { + "::2.0.0.0/103" : { + "score" : 0.27 + } + }, + { + "::4.0.0.0/102" : { + "score" : 0.28 + } + }, + { + "::8.0.0.0/103" : { + "score" : 0.29 + } + }, + { + "::11.0.0.0/104" : { + "score" : 0.3 + } + }, + { + "::12.0.0.0/102" : { + "score" : 0.31 + } + }, + { + "::16.0.0.0/100" : { + "score" : 0.32 + } + }, + { + "::32.0.0.0/99" : { + "score" : 0.33 + } + }, + { + "::64.0.0.0/99" : { + "score" : 0.34 + } + }, + { + "::75.209.24.0/128" : { + "score" : 0.35 + } + }, + { + "::96.0.0.0/102" : { + "score" : 0.36 + } + }, + { + "::100.0.0.0/106" : { + "score" : 0.37 + } + }, + { + "::100.128.0.0/105" : { + "score" : 0.38 + } + }, + { + "::101.0.0.0/104" : { + "score" : 0.39 + } + }, + { + "::102.0.0.0/103" : { + "score" : 0.4 + } + }, + { + "::104.0.0.0/101" : { + "score" : 0.41 + } + }, + { + "::112.0.0.0/101" : { + "score" : 0.42 + } + }, + { + "::120.0.0.0/102" : { + "score" : 0.43 + } + }, + { + "::124.0.0.0/103" : { + "score" : 0.44 + } + }, + { + "::126.0.0.0/104" : { + "score" : 0.45 + } + }, + { + "::128.0.0.0/99" : { + "score" : 0.46 + } + }, + { + "::160.0.0.0/101" : { + "score" : 0.47 + } + }, + { + "::168.0.0.0/104" : { + "score" : 0.48 + } + }, + { + "::169.0.0.0/105" : { + "score" : 0.49 + } + }, + { + "::169.128.0.0/106" : { + "score" : 0.5 + } + }, + { + "::169.192.0.0/107" : { + "score" : 0.51 + } + }, + { + "::169.224.0.0/108" : { + "score" : 0.52 + } + }, + { + "::169.240.0.0/109" : { + "score" : 0.53 + } + }, + { + "::169.248.0.0/110" : { + "score" : 0.54 + } + }, + { + "::169.252.0.0/111" : { + "score" : 0.55 + } + }, + { + "::169.255.0.0/112" : { + "score" : 0.56 + } + }, + { + "::170.0.0.0/103" : { + "score" : 0.57 + } + }, + { + "::172.0.0.0/108" : { + "score" : 0.58 + } + }, + { + "::172.32.0.0/107" : { + "score" : 0.59 + } + }, + { + "::172.64.0.0/106" : { + "score" : 0.6 + } + }, + { + "::172.128.0.0/105" : { + "score" : 0.61 + } + }, + { + "::173.0.0.0/104" : { + "score" : 0.62 + } + }, + { + "::174.0.0.0/103" : { + "score" : 0.63 + } + }, + { + "::176.0.0.0/100" : { + "score" : 0.64 + } + }, + { + "::192.0.0.8/125" : { + "score" : 0.65 + } + }, + { + "::192.0.0.16/124" : { + "score" : 0.66 + } + }, + { + "::192.0.0.32/123" : { + "score" : 0.67 + } + }, + { + "::192.0.0.64/122" : { + "score" : 0.68 + } + }, + { + "::192.0.0.128/121" : { + "score" : 0.69 + } + }, + { + "::192.0.1.0/120" : { + "score" : 0.7 + } + }, + { + "::192.0.3.0/120" : { + "score" : 0.71 + } + }, + { + "::192.0.4.0/118" : { + "score" : 0.72 + } + }, + { + "::192.0.8.0/117" : { + "score" : 0.73 + } + }, + { + "::192.0.16.0/116" : { + "score" : 0.74 + } + }, + { + "::192.0.32.0/115" : { + "score" : 0.75 + } + }, + { + "::192.0.64.0/114" : { + "score" : 0.76 + } + }, + { + "::192.0.128.0/113" : { + "score" : 0.77 + } + }, + { + "::192.1.0.0/112" : { + "score" : 0.78 + } + }, + { + "::192.2.0.0/111" : { + "score" : 0.79 + } + }, + { + "::192.4.0.0/110" : { + "score" : 0.8 + } + }, + { + "::192.8.0.0/109" : { + "score" : 0.81 + } + }, + { + "::192.16.0.0/108" : { + "score" : 0.82 + } + }, + { + "::192.32.0.0/107" : { + "score" : 0.83 + } + }, + { + "::192.64.0.0/108" : { + "score" : 0.84 + } + }, + { + "::192.80.0.0/109" : { + "score" : 0.85 + } + }, + { + "::192.88.0.0/114" : { + "score" : 0.86 + } + }, + { + "::192.88.64.0/115" : { + "score" : 0.87 + } + }, + { + "::192.88.96.0/119" : { + "score" : 0.88 + } + }, + { + "::192.88.98.0/120" : { + "score" : 0.89 + } + }, + { + "::192.88.100.0/118" : { + "score" : 0.9 + } + }, + { + "::192.88.104.0/117" : { + "score" : 0.91 + } + }, + { + "::192.88.112.0/116" : { + "score" : 0.92 + } + }, + { + "::192.88.128.0/113" : { + "score" : 0.93 + } + }, + { + "::192.89.0.0/112" : { + "score" : 0.94 + } + }, + { + "::192.90.0.0/111" : { + "score" : 0.95 + } + }, + { + "::192.92.0.0/110" : { + "score" : 0.96 + } + }, + { + "::192.96.0.0/107" : { + "score" : 0.97 + } + }, + { + "::192.128.0.0/107" : { + "score" : 0.98 + } + }, + { + "::192.160.0.0/109" : { + "score" : 0.99 + } + }, + { + "::192.169.0.0/112" : { + "score" : 1.0 + } + }, + { + "::192.170.0.0/111" : { + "score" : 1.01 + } + }, + { + "::192.172.0.0/110" : { + "score" : 1.02 + } + }, + { + "::192.176.0.0/108" : { + "score" : 1.03 + } + }, + { + "::192.192.0.0/106" : { + "score" : 1.04 + } + }, + { + "::193.0.0.0/104" : { + "score" : 1.05 + } + }, + { + "::194.0.0.0/103" : { + "score" : 1.06 + } + }, + { + "::196.0.0.0/103" : { + "score" : 1.07 + } + }, + { + "::198.0.0.0/108" : { + "score" : 1.08 + } + }, + { + "::198.16.0.0/111" : { + "score" : 1.09 + } + }, + { + "::198.20.0.0/110" : { + "score" : 1.1 + } + }, + { + "::198.24.0.0/109" : { + "score" : 1.11 + } + }, + { + "::198.32.0.0/108" : { + "score" : 1.12 + } + }, + { + "::198.48.0.0/111" : { + "score" : 1.13 + } + }, + { + "::198.50.0.0/112" : { + "score" : 1.14 + } + }, + { + "::198.51.0.0/114" : { + "score" : 1.15 + } + }, + { + "::198.51.64.0/115" : { + "score" : 1.16 + } + }, + { + "::198.51.96.0/118" : { + "score" : 1.17 + } + }, + { + "::198.51.101.0/120" : { + "score" : 1.18 + } + }, + { + "::198.51.102.0/119" : { + "score" : 1.19 + } + }, + { + "::198.51.104.0/117" : { + "score" : 1.2 + } + }, + { + "::198.51.112.0/116" : { + "score" : 1.21 + } + }, + { + "::198.51.128.0/113" : { + "score" : 1.22 + } + }, + { + "::198.52.0.0/110" : { + "score" : 1.23 + } + }, + { + "::198.56.0.0/109" : { + "score" : 1.24 + } + }, + { + "::198.64.0.0/106" : { + "score" : 1.25 + } + }, + { + "::198.128.0.0/105" : { + "score" : 1.26 + } + }, + { + "::199.0.0.0/104" : { + "score" : 1.27 + } + }, + { + "::200.0.0.0/103" : { + "score" : 1.28 + } + }, + { + "::202.0.0.0/104" : { + "score" : 1.29 + } + }, + { + "::203.0.0.0/114" : { + "score" : 1.3 + } + }, + { + "::203.0.64.0/115" : { + "score" : 1.31 + } + }, + { + "::203.0.96.0/116" : { + "score" : 1.32 + } + }, + { + "::203.0.112.0/120" : { + "score" : 1.33 + } + }, + { + "::203.0.114.0/119" : { + "score" : 1.34 + } + }, + { + "::203.0.116.0/118" : { + "score" : 1.35 + } + }, + { + "::203.0.120.0/117" : { + "score" : 1.36 + } + }, + { + "::203.0.128.0/113" : { + "score" : 1.37 + } + }, + { + "::203.1.0.0/112" : { + "score" : 1.38 + } + }, + { + "::203.2.0.0/111" : { + "score" : 1.39 + } + }, + { + "::203.4.0.0/110" : { + "score" : 1.4 + } + }, + { + "::203.8.0.0/109" : { + "score" : 1.41 + } + }, + { + "::203.16.0.0/108" : { + "score" : 1.42 + } + }, + { + "::203.32.0.0/107" : { + "score" : 1.43 + } + }, + { + "::203.64.0.0/106" : { + "score" : 1.44 + } + }, + { + "::203.128.0.0/105" : { + "score" : 1.45 + } + }, + { + "::204.0.0.0/102" : { + "score" : 1.46 + } + }, + { + "::208.0.0.0/100" : { + "score" : 1.47 + } + }, + { + "::1:0:0:0/80" : { + "score" : 1.48 + } + }, + { + "::2:0:0:0/79" : { + "score" : 1.49 + } + }, + { + "::4:0:0:0/78" : { + "score" : 1.5 + } + }, + { + "::8:0:0:0/77" : { + "score" : 1.51 + } + }, + { + "::10:0:0:0/76" : { + "score" : 1.52 + } + }, + { + "::20:0:0:0/75" : { + "score" : 1.53 + } + }, + { + "::40:0:0:0/74" : { + "score" : 1.54 + } + }, + { + "::80:0:0:0/73" : { + "score" : 1.55 + } + }, + { + "::100:0:0:0/72" : { + "score" : 1.56 + } + }, + { + "::200:0:0:0/71" : { + "score" : 1.57 + } + }, + { + "::400:0:0:0/70" : { + "score" : 1.58 + } + }, + { + "::800:0:0:0/69" : { + "score" : 1.59 + } + }, + { + "::1000:0:0:0/68" : { + "score" : 1.6 + } + }, + { + "::2000:0:0:0/67" : { + "score" : 1.61 + } + }, + { + "::4000:0:0:0/66" : { + "score" : 1.62 + } + }, + { + "::8000:0:0:0/65" : { + "score" : 1.63 + } + }, + { + "0:0:0:1::/64" : { + "score" : 1.64 + } + }, + { + "0:0:0:2::/63" : { + "score" : 1.65 + } + }, + { + "0:0:0:4::/62" : { + "score" : 1.66 + } + }, + { + "0:0:0:8::/61" : { + "score" : 1.67 + } + }, + { + "0:0:0:10::/60" : { + "score" : 1.68 + } + }, + { + "0:0:0:20::/59" : { + "score" : 1.69 + } + }, + { + "0:0:0:40::/58" : { + "score" : 1.7 + } + }, + { + "0:0:0:80::/57" : { + "score" : 1.71 + } + }, + { + "0:0:0:100::/56" : { + "score" : 1.72 + } + }, + { + "0:0:0:200::/55" : { + "score" : 1.73 + } + }, + { + "0:0:0:400::/54" : { + "score" : 1.74 + } + }, + { + "0:0:0:800::/53" : { + "score" : 1.75 + } + }, + { + "0:0:0:1000::/52" : { + "score" : 1.76 + } + }, + { + "0:0:0:2000::/51" : { + "score" : 1.77 + } + }, + { + "0:0:0:4000::/50" : { + "score" : 1.78 + } + }, + { + "0:0:0:8000::/49" : { + "score" : 1.79 + } + }, + { + "0:0:1::/48" : { + "score" : 1.8 + } + }, + { + "0:0:2::/47" : { + "score" : 1.81 + } + }, + { + "0:0:4::/46" : { + "score" : 1.82 + } + }, + { + "0:0:8::/45" : { + "score" : 1.83 + } + }, + { + "0:0:10::/44" : { + "score" : 1.84 + } + }, + { + "0:0:20::/43" : { + "score" : 1.85 + } + }, + { + "0:0:40::/42" : { + "score" : 1.86 + } + }, + { + "0:0:80::/41" : { + "score" : 1.87 + } + }, + { + "0:0:100::/40" : { + "score" : 1.88 + } + }, + { + "0:0:200::/39" : { + "score" : 1.89 + } + }, + { + "0:0:400::/38" : { + "score" : 1.9 + } + }, + { + "0:0:800::/37" : { + "score" : 1.91 + } + }, + { + "0:0:1000::/36" : { + "score" : 1.92 + } + }, + { + "0:0:2000::/35" : { + "score" : 1.93 + } + }, + { + "0:0:4000::/34" : { + "score" : 1.94 + } + }, + { + "0:0:8000::/33" : { + "score" : 1.95 + } + }, + { + "0:1::/32" : { + "score" : 1.96 + } + }, + { + "0:2::/31" : { + "score" : 1.97 + } + }, + { + "0:4::/30" : { + "score" : 1.98 + } + }, + { + "0:8::/29" : { + "score" : 1.99 + } + }, + { + "0:10::/28" : { + "score" : 2.0 + } + }, + { + "0:20::/27" : { + "score" : 2.01 + } + }, + { + "0:40::/26" : { + "score" : 2.02 + } + }, + { + "0:80::/25" : { + "score" : 2.03 + } + }, + { + "0:100::/24" : { + "score" : 2.04 + } + }, + { + "0:200::/23" : { + "score" : 2.05 + } + }, + { + "0:400::/22" : { + "score" : 2.06 + } + }, + { + "0:800::/21" : { + "score" : 2.07 + } + }, + { + "0:1000::/20" : { + "score" : 2.08 + } + }, + { + "0:2000::/19" : { + "score" : 2.09 + } + }, + { + "0:4000::/18" : { + "score" : 2.1 + } + }, + { + "0:8000::/17" : { + "score" : 2.11 + } + }, + { + "1::/16" : { + "score" : 2.12 + } + }, + { + "2::/15" : { + "score" : 2.13 + } + }, + { + "4::/14" : { + "score" : 2.14 + } + }, + { + "8::/13" : { + "score" : 2.15 + } + }, + { + "10::/12" : { + "score" : 2.16 + } + }, + { + "20::/11" : { + "score" : 2.17 + } + }, + { + "40::/10" : { + "score" : 2.18 + } + }, + { + "80::/9" : { + "score" : 2.19 + } + }, + { + "100:0:0:1::/64" : { + "score" : 2.2 + } + }, + { + "100:0:0:2::/63" : { + "score" : 2.21 + } + }, + { + "100:0:0:4::/62" : { + "score" : 2.22 + } + }, + { + "100:0:0:8::/61" : { + "score" : 2.23 + } + }, + { + "100:0:0:10::/60" : { + "score" : 2.24 + } + }, + { + "100:0:0:20::/59" : { + "score" : 2.25 + } + }, + { + "100:0:0:40::/58" : { + "score" : 2.26 + } + }, + { + "100:0:0:80::/57" : { + "score" : 2.27 + } + }, + { + "100:0:0:100::/56" : { + "score" : 2.28 + } + }, + { + "100:0:0:200::/55" : { + "score" : 2.29 + } + }, + { + "100:0:0:400::/54" : { + "score" : 2.3 + } + }, + { + "100:0:0:800::/53" : { + "score" : 2.31 + } + }, + { + "100:0:0:1000::/52" : { + "score" : 2.32 + } + }, + { + "100:0:0:2000::/51" : { + "score" : 2.33 + } + }, + { + "100:0:0:4000::/50" : { + "score" : 2.34 + } + }, + { + "100:0:0:8000::/49" : { + "score" : 2.35 + } + }, + { + "100:0:1::/48" : { + "score" : 2.36 + } + }, + { + "100:0:2::/47" : { + "score" : 2.37 + } + }, + { + "100:0:4::/46" : { + "score" : 2.38 + } + }, + { + "100:0:8::/45" : { + "score" : 2.39 + } + }, + { + "100:0:10::/44" : { + "score" : 2.4 + } + }, + { + "100:0:20::/43" : { + "score" : 2.41 + } + }, + { + "100:0:40::/42" : { + "score" : 2.42 + } + }, + { + "100:0:80::/41" : { + "score" : 2.43 + } + }, + { + "100:0:100::/40" : { + "score" : 2.44 + } + }, + { + "100:0:200::/39" : { + "score" : 2.45 + } + }, + { + "100:0:400::/38" : { + "score" : 2.46 + } + }, + { + "100:0:800::/37" : { + "score" : 2.47 + } + }, + { + "100:0:1000::/36" : { + "score" : 2.48 + } + }, + { + "100:0:2000::/35" : { + "score" : 2.49 + } + }, + { + "100:0:4000::/34" : { + "score" : 2.5 + } + }, + { + "100:0:8000::/33" : { + "score" : 2.51 + } + }, + { + "100:1::/32" : { + "score" : 2.52 + } + }, + { + "100:2::/31" : { + "score" : 2.53 + } + }, + { + "100:4::/30" : { + "score" : 2.54 + } + }, + { + "100:8::/29" : { + "score" : 2.55 + } + }, + { + "100:10::/28" : { + "score" : 2.56 + } + }, + { + "100:20::/27" : { + "score" : 2.57 + } + }, + { + "100:40::/26" : { + "score" : 2.58 + } + }, + { + "100:80::/25" : { + "score" : 2.59 + } + }, + { + "100:100::/24" : { + "score" : 2.6 + } + }, + { + "100:200::/23" : { + "score" : 2.61 + } + }, + { + "100:400::/22" : { + "score" : 2.62 + } + }, + { + "100:800::/21" : { + "score" : 2.63 + } + }, + { + "100:1000::/20" : { + "score" : 2.64 + } + }, + { + "100:2000::/19" : { + "score" : 2.65 + } + }, + { + "100:4000::/18" : { + "score" : 2.66 + } + }, + { + "100:8000::/17" : { + "score" : 2.67 + } + }, + { + "101::/16" : { + "score" : 2.68 + } + }, + { + "102::/15" : { + "score" : 2.69 + } + }, + { + "104::/14" : { + "score" : 2.7 + } + }, + { + "108::/13" : { + "score" : 2.71 + } + }, + { + "110::/12" : { + "score" : 2.72 + } + }, + { + "120::/11" : { + "score" : 2.73 + } + }, + { + "140::/10" : { + "score" : 2.74 + } + }, + { + "180::/9" : { + "score" : 2.75 + } + }, + { + "200::/7" : { + "score" : 2.76 + } + }, + { + "400::/6" : { + "score" : 2.77 + } + }, + { + "800::/5" : { + "score" : 2.78 + } + }, + { + "1000::/4" : { + "score" : 2.79 + } + }, + { + "2000::/16" : { + "score" : 2.8 + } + }, + { + "2001:200::/23" : { + "score" : 2.81 + } + }, + { + "2001:220::/128" : { + "score" : 2.82 + } + }, + { + "2001:400::/22" : { + "score" : 2.83 + } + }, + { + "2001:800::/22" : { + "score" : 2.84 + } + }, + { + "2001:c00::/24" : { + "score" : 2.85 + } + }, + { + "2001:d00::/25" : { + "score" : 2.86 + } + }, + { + "2001:d80::/27" : { + "score" : 2.87 + } + }, + { + "2001:da0::/28" : { + "score" : 2.88 + } + }, + { + "2001:db0::/29" : { + "score" : 2.89 + } + }, + { + "2001:db9::/32" : { + "score" : 2.9 + } + }, + { + "2001:dba::/31" : { + "score" : 2.91 + } + }, + { + "2001:dbc::/30" : { + "score" : 2.92 + } + }, + { + "2001:dc0::/26" : { + "score" : 2.93 + } + }, + { + "2001:e00::/23" : { + "score" : 2.94 + } + }, + { + "2001:1000::/20" : { + "score" : 2.95 + } + }, + { + "2001:2000::/19" : { + "score" : 2.96 + } + }, + { + "2001:4000::/18" : { + "score" : 2.97 + } + }, + { + "2001:8000::/18" : { + "score" : 2.98 + } + }, + { + "2001:c000::/19" : { + "score" : 2.99 + } + }, + { + "2001:e000::/21" : { + "score" : 3.0 + } + }, + { + "2001:e800::/22" : { + "score" : 3.01 + } + }, + { + "2001:ec00::/24" : { + "score" : 3.02 + } + }, + { + "2001:ed00::/25" : { + "score" : 3.03 + } + }, + { + "2001:ed80::/27" : { + "score" : 3.04 + } + }, + { + "2001:eda0::/28" : { + "score" : 3.05 + } + }, + { + "2001:edb0::/29" : { + "score" : 3.06 + } + }, + { + "2001:edb8::/48" : { + "score" : 3.07 + } + }, + { + "2001:edb8:1::/64" : { + "score" : 3.08 + } + }, + { + "2001:edb8:1:1::/64" : { + "score" : 3.09 + } + }, + { + "2001:edb8:1:2::/63" : { + "score" : 3.1 + } + }, + { + "2001:edb8:1:4::/62" : { + "score" : 3.11 + } + }, + { + "2001:edb8:1:8::/61" : { + "score" : 3.12 + } + }, + { + "2001:edb8:1:10::/60" : { + "score" : 3.13 + } + }, + { + "2001:edb8:1:20::/59" : { + "score" : 3.14 + } + }, + { + "2001:edb8:1:40::/58" : { + "score" : 3.15 + } + }, + { + "2001:edb8:1:80::/57" : { + "score" : 3.16 + } + }, + { + "2001:edb8:1:100::/56" : { + "score" : 3.17 + } + }, + { + "2001:edb8:1:200::/55" : { + "score" : 3.18 + } + }, + { + "2001:edb8:1:400::/54" : { + "score" : 3.19 + } + }, + { + "2001:edb8:1:800::/53" : { + "score" : 3.2 + } + }, + { + "2001:edb8:1:1000::/52" : { + "score" : 3.21 + } + }, + { + "2001:edb8:1:2000::/51" : { + "score" : 3.22 + } + }, + { + "2001:edb8:1:4000::/50" : { + "score" : 3.23 + } + }, + { + "2001:edb8:1:8000::/49" : { + "score" : 3.24 + } + }, + { + "2001:edb8:2::/47" : { + "score" : 3.25 + } + }, + { + "2001:edb8:4::/46" : { + "score" : 3.26 + } + }, + { + "2001:edb8:8::/45" : { + "score" : 3.27 + } + }, + { + "2001:edb8:10::/44" : { + "score" : 3.28 + } + }, + { + "2001:edb8:20::/43" : { + "score" : 3.29 + } + }, + { + "2001:edb8:40::/42" : { + "score" : 3.3 + } + }, + { + "2001:edb8:80::/41" : { + "score" : 3.31 + } + }, + { + "2001:edb8:100::/40" : { + "score" : 3.32 + } + }, + { + "2001:edb8:200::/39" : { + "score" : 3.33 + } + }, + { + "2001:edb8:400::/38" : { + "score" : 3.34 + } + }, + { + "2001:edb8:800::/37" : { + "score" : 3.35 + } + }, + { + "2001:edb8:1000::/36" : { + "score" : 3.36 + } + }, + { + "2001:edb8:2000::/35" : { + "score" : 3.37 + } + }, + { + "2001:edb8:4000::/34" : { + "score" : 3.38 + } + }, + { + "2001:edb8:8000::/38" : { + "score" : 3.39 + } + }, + { + "2001:edb8:8400::/40" : { + "score" : 3.4 + } + }, + { + "2001:edb8:8500::/41" : { + "score" : 3.41 + } + }, + { + "2001:edb8:8580::/43" : { + "score" : 3.42 + } + }, + { + "2001:edb8:85a0::/47" : { + "score" : 3.43 + } + }, + { + "2001:edb8:85a2::/48" : { + "score" : 3.44 + } + }, + { + "2001:edb8:85a3::/64" : { + "score" : 3.45 + } + }, + { + "2001:edb8:85a3:1::/64" : { + "score" : 3.46 + } + }, + { + "2001:edb8:85a3:2::/63" : { + "score" : 3.47 + } + }, + { + "2001:edb8:85a3:4::/62" : { + "score" : 3.48 + } + }, + { + "2001:edb8:85a3:8::/61" : { + "score" : 3.49 + } + }, + { + "2001:edb8:85a3:10::/60" : { + "score" : 3.5 + } + }, + { + "2001:edb8:85a3:20::/59" : { + "score" : 3.51 + } + }, + { + "2001:edb8:85a3:40::/58" : { + "score" : 3.52 + } + }, + { + "2001:edb8:85a3:80::/57" : { + "score" : 3.53 + } + }, + { + "2001:edb8:85a3:100::/56" : { + "score" : 3.54 + } + }, + { + "2001:edb8:85a3:200::/55" : { + "score" : 3.55 + } + }, + { + "2001:edb8:85a3:400::/54" : { + "score" : 3.56 + } + }, + { + "2001:edb8:85a3:800::/53" : { + "score" : 3.57 + } + }, + { + "2001:edb8:85a3:1000::/52" : { + "score" : 3.58 + } + }, + { + "2001:edb8:85a3:2000::/51" : { + "score" : 3.59 + } + }, + { + "2001:edb8:85a3:4000::/50" : { + "score" : 3.6 + } + }, + { + "2001:edb8:85a3:8000::/49" : { + "score" : 3.61 + } + }, + { + "2001:edb8:85a4::/46" : { + "score" : 3.62 + } + }, + { + "2001:edb8:85a8::/45" : { + "score" : 3.63 + } + }, + { + "2001:edb8:85b0::/44" : { + "score" : 3.64 + } + }, + { + "2001:edb8:85c0::/42" : { + "score" : 3.65 + } + }, + { + "2001:edb8:8600::/39" : { + "score" : 3.66 + } + }, + { + "2001:edb8:8800::/37" : { + "score" : 3.67 + } + }, + { + "2001:edb8:9000::/36" : { + "score" : 3.68 + } + }, + { + "2001:edb8:a000::/35" : { + "score" : 3.69 + } + }, + { + "2001:edb8:c000::/36" : { + "score" : 3.7 + } + }, + { + "2001:edb8:d000::/37" : { + "score" : 3.71 + } + }, + { + "2001:edb8:d800::/38" : { + "score" : 3.72 + } + }, + { + "2001:edb8:dc00::/39" : { + "score" : 3.73 + } + }, + { + "2001:edb8:de00::/41" : { + "score" : 3.74 + } + }, + { + "2001:edb8:de80::/43" : { + "score" : 3.75 + } + }, + { + "2001:edb8:dea0::/45" : { + "score" : 3.76 + } + }, + { + "2001:edb8:dea8::/46" : { + "score" : 3.77 + } + }, + { + "2001:edb8:deac::/48" : { + "score" : 3.78 + } + }, + { + "2001:edb8:dead::/49" : { + "score" : 3.79 + } + }, + { + "2001:edb8:dead:8000::/50" : { + "score" : 3.8 + } + }, + { + "2001:edb8:dead:c000::/52" : { + "score" : 3.81 + } + }, + { + "2001:edb8:dead:d000::/53" : { + "score" : 3.82 + } + }, + { + "2001:edb8:dead:d800::/54" : { + "score" : 3.83 + } + }, + { + "2001:edb8:dead:dc00::/55" : { + "score" : 3.84 + } + }, + { + "2001:edb8:dead:de00::/57" : { + "score" : 3.85 + } + }, + { + "2001:edb8:dead:de80::/59" : { + "score" : 3.86 + } + }, + { + "2001:edb8:dead:dea0::/61" : { + "score" : 3.87 + } + }, + { + "2001:edb8:dead:dea8::/62" : { + "score" : 3.88 + } + }, + { + "2001:edb8:dead:deac::/64" : { + "score" : 3.89 + } + }, + { + "2001:edb8:dead:dead::/64" : { + "score" : 3.9 + } + }, + { + "2001:edb8:dead:deae::/63" : { + "score" : 3.91 + } + }, + { + "2001:edb8:dead:deb0::/60" : { + "score" : 3.92 + } + }, + { + "2001:edb8:dead:dec0::/58" : { + "score" : 3.93 + } + }, + { + "2001:edb8:dead:df00::/56" : { + "score" : 3.94 + } + }, + { + "2001:edb8:dead:e000::/51" : { + "score" : 3.95 + } + }, + { + "2001:edb8:deae::/47" : { + "score" : 3.96 + } + }, + { + "2001:edb8:deb0::/44" : { + "score" : 3.97 + } + }, + { + "2001:edb8:dec0::/42" : { + "score" : 3.98 + } + }, + { + "2001:edb8:df00::/40" : { + "score" : 3.99 + } + }, + { + "2001:edb8:e000::/35" : { + "score" : 4.0 + } + }, + { + "2001:edb9::/32" : { + "score" : 4.01 + } + }, + { + "2001:edba::/31" : { + "score" : 4.02 + } + }, + { + "2001:edbc::/30" : { + "score" : 4.03 + } + }, + { + "2001:edc0::/26" : { + "score" : 4.04 + } + }, + { + "2001:ee00::/23" : { + "score" : 4.05 + } + }, + { + "2001:f000::/20" : { + "score" : 4.06 + } + }, + { + "2003::/16" : { + "score" : 4.07 + } + }, + { + "2004::/14" : { + "score" : 4.08 + } + }, + { + "2008::/13" : { + "score" : 4.09 + } + }, + { + "2010::/12" : { + "score" : 4.1 + } + }, + { + "2020::/11" : { + "score" : 4.11 + } + }, + { + "2040::/10" : { + "score" : 4.12 + } + }, + { + "2080::/9" : { + "score" : 4.13 + } + }, + { + "2100::/8" : { + "score" : 4.14 + } + }, + { + "2200::/7" : { + "score" : 4.15 + } + }, + { + "2400::/6" : { + "score" : 4.16 + } + }, + { + "2800::/5" : { + "score" : 4.17 + } + }, + { + "3000::/4" : { + "score" : 4.18 + } + }, + { + "4000::/2" : { + "score" : 4.19 + } + }, + { + "8000::/2" : { + "score" : 4.2 + } + }, + { + "c000::/3" : { + "score" : 4.21 + } + }, + { + "e000::/4" : { + "score" : 4.22 + } + }, + { + "f000::/5" : { + "score" : 4.23 + } + }, + { + "f800::/6" : { + "score" : 4.24 + } + }, + { + "fe00::/9" : { + "score" : 4.25 + } + }, + { + "fec0::/10" : { + "score" : 4.26 + } + } +] diff --git a/test/data/source-data/GeoIP2-User-Count-Test.json b/test/data/source-data/GeoIP2-User-Count-Test.json index 16b5988..95126a1 100644 --- a/test/data/source-data/GeoIP2-User-Count-Test.json +++ b/test/data/source-data/GeoIP2-User-Count-Test.json @@ -1,2824 +1,2837 @@ [ - { - "::1.0.0.0/111" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::1.2.0.0/119" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::1.2.2.0/120" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::1.2.3.0/126" : { - "ipv4_24" : 4, - "ipv4_32" : 0 - } - }, - { - "::1.2.3.4/128" : { - "ipv4_24" : 4, - "ipv4_32" : 3 - } - }, - { - "::1.2.3.5/128" : { - "ipv4_32" : 1, - "ipv4_24" : 4 - } - }, - { - "::1.2.3.6/128" : { - "ipv4_32" : 1, - "ipv4_24" : 4 - } - }, - { - "::1.2.3.7/128" : { - "ipv4_24" : 4, - "ipv4_32" : 0 - } - }, - { - "::1.2.3.8/125" : { - "ipv4_32" : 0, - "ipv4_24" : 4 - } - }, - { - "::1.2.3.16/124" : { - "ipv4_32" : 0, - "ipv4_24" : 4 - } - }, - { - "::1.2.3.32/123" : { - "ipv4_24" : 4, - "ipv4_32" : 0 - } - }, - { - "::1.2.3.64/122" : { - "ipv4_24" : 4, - "ipv4_32" : 0 - } - }, - { - "::1.2.3.128/121" : { - "ipv4_32" : 0, - "ipv4_24" : 4 - } - }, - { - "::1.2.4.0/118" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::1.2.8.0/117" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::1.2.16.0/116" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::1.2.32.0/115" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::1.2.64.0/114" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::1.2.128.0/113" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::1.3.0.0/112" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::1.4.0.0/110" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::1.8.0.0/109" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::1.16.0.0/108" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::1.32.0.0/107" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::1.64.0.0/106" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::1.128.0.0/105" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::2.0.0.0/103" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::4.0.0.0/102" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::8.0.0.0/103" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::11.0.0.0/104" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::12.0.0.0/102" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::16.0.0.0/100" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::32.0.0.0/99" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::64.0.0.0/99" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::96.0.0.0/102" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::100.0.0.0/106" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::100.128.0.0/105" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::101.0.0.0/104" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::102.0.0.0/103" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::104.0.0.0/101" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::112.0.0.0/101" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::120.0.0.0/102" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::124.0.0.0/103" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::126.0.0.0/104" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::128.0.0.0/99" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::160.0.0.0/101" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::168.0.0.0/104" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::169.0.0.0/105" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::169.128.0.0/106" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::169.192.0.0/107" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::169.224.0.0/108" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::169.240.0.0/109" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::169.248.0.0/110" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::169.252.0.0/111" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::169.255.0.0/112" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::170.0.0.0/103" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::172.0.0.0/108" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::172.32.0.0/107" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::172.64.0.0/106" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::172.128.0.0/105" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::173.0.0.0/104" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::174.0.0.0/103" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::176.0.0.0/100" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::192.0.0.8/125" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.0.0.16/124" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::192.0.0.32/123" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::192.0.0.64/122" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.0.0.128/121" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::192.0.1.0/120" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.0.3.0/120" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::192.0.4.0/118" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.0.8.0/117" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.0.16.0/116" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.0.32.0/115" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.0.64.0/114" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.0.128.0/113" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::192.1.0.0/112" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.2.0.0/111" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.4.0.0/110" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.8.0.0/109" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::192.16.0.0/108" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::192.32.0.0/107" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.64.0.0/108" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::192.80.0.0/109" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::192.88.0.0/114" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::192.88.64.0/115" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::192.88.96.0/119" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.88.98.0/120" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.88.100.0/118" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.88.104.0/117" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::192.88.112.0/116" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::192.88.128.0/113" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.89.0.0/112" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.90.0.0/111" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.92.0.0/110" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.96.0.0/107" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.128.0.0/107" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.160.0.0/109" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::192.169.0.0/112" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::192.170.0.0/111" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::192.172.0.0/110" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.176.0.0/108" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::192.192.0.0/106" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::193.0.0.0/104" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::194.0.0.0/103" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::196.0.0.0/103" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::198.0.0.0/108" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::198.16.0.0/111" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::198.20.0.0/110" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::198.24.0.0/109" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::198.32.0.0/108" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::198.48.0.0/111" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::198.50.0.0/112" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::198.51.0.0/114" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::198.51.64.0/115" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::198.51.96.0/118" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::198.51.101.0/120" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::198.51.102.0/119" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::198.51.104.0/117" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::198.51.112.0/116" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::198.51.128.0/113" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::198.52.0.0/110" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::198.56.0.0/109" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::198.64.0.0/106" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::198.128.0.0/105" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::199.0.0.0/104" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::200.0.0.0/103" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::202.0.0.0/104" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::203.0.0.0/114" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::203.0.64.0/115" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::203.0.96.0/116" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::203.0.112.0/120" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::203.0.114.0/119" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::203.0.116.0/118" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::203.0.120.0/117" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::203.0.128.0/113" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::203.1.0.0/112" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::203.2.0.0/111" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::203.4.0.0/110" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::203.8.0.0/109" : { - "ipv4_24" : 0, - "ipv4_32" : 0 - } - }, - { - "::203.16.0.0/108" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::203.32.0.0/107" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::203.64.0.0/106" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::203.128.0.0/105" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::204.0.0.0/102" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::208.0.0.0/100" : { - "ipv4_32" : 0, - "ipv4_24" : 0 - } - }, - { - "::1:0:0:0/80" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "::2:0:0:0/79" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "::4:0:0:0/78" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "::8:0:0:0/77" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "::10:0:0:0/76" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "::20:0:0:0/75" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "::40:0:0:0/74" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "::80:0:0:0/73" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "::100:0:0:0/72" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "::200:0:0:0/71" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "::400:0:0:0/70" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "::800:0:0:0/69" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "::1000:0:0:0/68" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "::2000:0:0:0/67" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "::4000:0:0:0/66" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "::8000:0:0:0/65" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "0:0:0:1::/64" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "0:0:0:2::/63" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:0:4::/62" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:0:8::/61" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "0:0:0:10::/60" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:0:20::/59" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "0:0:0:40::/58" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "0:0:0:80::/57" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:0:100::/56" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:0:200::/55" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "0:0:0:400::/54" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:0:800::/53" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "0:0:0:1000::/52" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "0:0:0:2000::/51" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:0:4000::/50" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:0:8000::/49" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:1::/48" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:2::/47" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:4::/46" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "0:0:8::/45" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:10::/44" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "0:0:20::/43" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:40::/42" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:80::/41" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:100::/40" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:200::/39" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "0:0:400::/38" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "0:0:800::/37" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:1000::/36" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "0:0:2000::/35" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:4000::/34" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "0:0:8000::/33" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "0:1::/32" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "0:2::/31" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "0:4::/30" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "0:8::/29" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "0:10::/28" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "0:20::/27" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "0:40::/26" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "0:80::/25" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "0:100::/24" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "0:200::/23" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "0:400::/22" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "0:800::/21" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "0:1000::/20" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "0:2000::/19" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "0:4000::/18" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "0:8000::/17" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "1::/16" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "2::/15" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "4::/14" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "8::/13" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "10::/12" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "20::/11" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "40::/10" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "80::/9" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "100:0:0:1::/64" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "100:0:0:2::/63" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "100:0:0:4::/62" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "100:0:0:8::/61" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "100:0:0:10::/60" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "100:0:0:20::/59" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "100:0:0:40::/58" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "100:0:0:80::/57" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "100:0:0:100::/56" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "100:0:0:200::/55" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "100:0:0:400::/54" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "100:0:0:800::/53" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "100:0:0:1000::/52" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "100:0:0:2000::/51" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "100:0:0:4000::/50" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "100:0:0:8000::/49" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "100:0:1::/48" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "100:0:2::/47" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "100:0:4::/46" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "100:0:8::/45" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "100:0:10::/44" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "100:0:20::/43" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "100:0:40::/42" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "100:0:80::/41" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "100:0:100::/40" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "100:0:200::/39" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "100:0:400::/38" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "100:0:800::/37" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "100:0:1000::/36" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "100:0:2000::/35" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "100:0:4000::/34" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "100:0:8000::/33" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "100:1::/32" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "100:2::/31" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "100:4::/30" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "100:8::/29" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "100:10::/28" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "100:20::/27" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "100:40::/26" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "100:80::/25" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "100:100::/24" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "100:200::/23" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "100:400::/22" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "100:800::/21" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "100:1000::/20" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "100:2000::/19" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "100:4000::/18" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "100:8000::/17" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "101::/16" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "102::/15" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "104::/14" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "108::/13" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "110::/12" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "120::/11" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "140::/10" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "180::/9" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "200::/7" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "400::/6" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "800::/5" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "1000::/4" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "2000::/16" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "2001:200::/23" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "2001:400::/22" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:800::/22" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:c00::/24" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "2001:d00::/25" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:d80::/27" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "2001:da0::/28" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:db0::/29" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "2001:db9::/32" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:dba::/31" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "2001:dbc::/30" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "2001:dc0::/26" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "2001:e00::/23" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:1000::/20" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "2001:2000::/19" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "2001:4000::/18" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "2001:8000::/18" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:c000::/19" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "2001:e000::/21" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "2001:e800::/22" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:ec00::/24" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:ed00::/25" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:ed80::/27" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "2001:eda0::/28" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "2001:edb0::/29" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:edb8::/48" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 0 - } - }, - { - "2001:edb8:1::/64" : { - "ipv6_32" : 5, - "ipv6_48" : 1, - "ipv6_64" : 1 - } - }, - { - "2001:edb8:1:1::/64" : { - "ipv6_32" : 5, - "ipv6_48" : 1, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:1:2::/63" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 1 - } - }, - { - "2001:edb8:1:4::/62" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 1 - } - }, - { - "2001:edb8:1:8::/61" : { - "ipv6_32" : 5, - "ipv6_48" : 1, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:1:10::/60" : { - "ipv6_64" : 0, - "ipv6_48" : 1, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:1:20::/59" : { - "ipv6_48" : 1, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:1:40::/58" : { - "ipv6_32" : 5, - "ipv6_48" : 1, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:1:80::/57" : { - "ipv6_48" : 1, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:1:100::/56" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 1 - } - }, - { - "2001:edb8:1:200::/55" : { - "ipv6_64" : 0, - "ipv6_48" : 1, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:1:400::/54" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 1 - } - }, - { - "2001:edb8:1:800::/53" : { - "ipv6_64" : 0, - "ipv6_48" : 1, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:1:1000::/52" : { - "ipv6_64" : 0, - "ipv6_48" : 1, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:1:2000::/51" : { - "ipv6_64" : 0, - "ipv6_48" : 1, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:1:4000::/50" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 1 - } - }, - { - "2001:edb8:1:8000::/49" : { - "ipv6_48" : 1, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:2::/47" : { - "ipv6_32" : 5, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:4::/46" : { - "ipv6_48" : 0, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:8::/45" : { - "ipv6_48" : 0, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:10::/44" : { - "ipv6_32" : 5, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:20::/43" : { - "ipv6_32" : 5, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:40::/42" : { - "ipv6_32" : 5, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:80::/41" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:100::/40" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:200::/39" : { - "ipv6_48" : 0, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:400::/38" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 0 - } - }, - { - "2001:edb8:800::/37" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:1000::/36" : { - "ipv6_48" : 0, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:2000::/35" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 0 - } - }, - { - "2001:edb8:4000::/34" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 0 - } - }, - { - "2001:edb8:8000::/38" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 0 - } - }, - { - "2001:edb8:8400::/40" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 0 - } - }, - { - "2001:edb8:8500::/41" : { - "ipv6_32" : 5, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:8580::/43" : { - "ipv6_48" : 0, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:85a0::/47" : { - "ipv6_48" : 0, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:85a2::/48" : { - "ipv6_48" : 0, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:85a3::/64" : { - "ipv6_48" : 4, - "ipv6_32" : 5, - "ipv6_64" : 3 - } - }, - { - "2001:edb8:85a3:1::/64" : { - "ipv6_32" : 5, - "ipv6_48" : 4, - "ipv6_64" : 2 - } - }, - { - "2001:edb8:85a3:2::/63" : { - "ipv6_32" : 5, - "ipv6_48" : 4, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:85a3:4::/62" : { - "ipv6_64" : 0, - "ipv6_48" : 4, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:85a3:8::/61" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 4 - } - }, - { - "2001:edb8:85a3:10::/60" : { - "ipv6_48" : 4, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:85a3:20::/59" : { - "ipv6_32" : 5, - "ipv6_48" : 4, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:85a3:40::/58" : { - "ipv6_32" : 5, - "ipv6_48" : 4, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:85a3:80::/57" : { - "ipv6_64" : 0, - "ipv6_48" : 4, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:85a3:100::/56" : { - "ipv6_32" : 5, - "ipv6_48" : 4, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:85a3:200::/55" : { - "ipv6_64" : 0, - "ipv6_48" : 4, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:85a3:400::/54" : { - "ipv6_64" : 0, - "ipv6_48" : 4, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:85a3:800::/53" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 4 - } - }, - { - "2001:edb8:85a3:1000::/52" : { - "ipv6_64" : 0, - "ipv6_48" : 4, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:85a3:2000::/51" : { - "ipv6_48" : 4, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:85a3:4000::/50" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 4 - } - }, - { - "2001:edb8:85a3:8000::/49" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 4 - } - }, - { - "2001:edb8:85a4::/46" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 0 - } - }, - { - "2001:edb8:85a8::/45" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 0 - } - }, - { - "2001:edb8:85b0::/44" : { - "ipv6_48" : 0, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:85c0::/42" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:8600::/39" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 0 - } - }, - { - "2001:edb8:8800::/37" : { - "ipv6_48" : 0, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:9000::/36" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 0 - } - }, - { - "2001:edb8:a000::/35" : { - "ipv6_32" : 5, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:c000::/36" : { - "ipv6_48" : 0, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:d000::/37" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:d800::/38" : { - "ipv6_32" : 5, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:dc00::/39" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:de00::/41" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:de80::/43" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:dea0::/45" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 0 - } - }, - { - "2001:edb8:dea8::/46" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:deac::/48" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 0 - } - }, - { - "2001:edb8:dead::/49" : { - "ipv6_32" : 5, - "ipv6_48" : 2, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:dead:8000::/50" : { - "ipv6_32" : 5, - "ipv6_48" : 2, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:dead:c000::/52" : { - "ipv6_32" : 5, - "ipv6_48" : 2, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:dead:d000::/53" : { - "ipv6_32" : 5, - "ipv6_48" : 2, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:dead:d800::/54" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 2 - } - }, - { - "2001:edb8:dead:dc00::/55" : { - "ipv6_32" : 5, - "ipv6_48" : 2, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:dead:de00::/57" : { - "ipv6_64" : 0, - "ipv6_48" : 2, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:dead:de80::/59" : { - "ipv6_64" : 0, - "ipv6_48" : 2, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:dead:dea0::/61" : { - "ipv6_48" : 2, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:dead:dea8::/62" : { - "ipv6_32" : 5, - "ipv6_48" : 2, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:dead:deac::/64" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 2 - } - }, - { - "2001:edb8:dead:dead::/64" : { - "ipv6_48" : 2, - "ipv6_32" : 5, - "ipv6_64" : 2 - } - }, - { - "2001:edb8:dead:deae::/63" : { - "ipv6_32" : 5, - "ipv6_48" : 2, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:dead:deb0::/60" : { - "ipv6_64" : 0, - "ipv6_32" : 5, - "ipv6_48" : 2 - } - }, - { - "2001:edb8:dead:dec0::/58" : { - "ipv6_64" : 0, - "ipv6_48" : 2, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:dead:df00::/56" : { - "ipv6_48" : 2, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:dead:e000::/51" : { - "ipv6_32" : 5, - "ipv6_48" : 2, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:deae::/47" : { - "ipv6_48" : 0, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:deb0::/44" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 5 - } - }, - { - "2001:edb8:dec0::/42" : { - "ipv6_32" : 5, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:df00::/40" : { - "ipv6_48" : 0, - "ipv6_32" : 5, - "ipv6_64" : 0 - } - }, - { - "2001:edb8:e000::/35" : { - "ipv6_32" : 5, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:edb9::/32" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "2001:edba::/31" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "2001:edbc::/30" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:edc0::/26" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "2001:ee00::/23" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "2001:f000::/20" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "2003::/16" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "2004::/14" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "2008::/13" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "2010::/12" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "2020::/11" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "2040::/10" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "2080::/9" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "2100::/8" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "2200::/7" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "2400::/6" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "2800::/5" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "3000::/4" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "4000::/2" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - }, - { - "8000::/2" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "c000::/3" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "e000::/4" : { - "ipv6_64" : 0, - "ipv6_48" : 0, - "ipv6_32" : 0 - } - }, - { - "f000::/5" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "f800::/6" : { - "ipv6_32" : 0, - "ipv6_48" : 0, - "ipv6_64" : 0 - } - }, - { - "fe00::/9" : { - "ipv6_48" : 0, - "ipv6_32" : 0, - "ipv6_64" : 0 - } - }, - { - "fec0::/10" : { - "ipv6_64" : 0, - "ipv6_32" : 0, - "ipv6_48" : 0 - } - } + { + "::1.0.0.0/111" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::1.2.0.0/119" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::1.2.2.0/120" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::1.2.3.0/126" : { + "ipv4_24" : 4, + "ipv4_32" : 0 + } + }, + { + "::1.2.3.4/128" : { + "ipv4_24" : 4, + "ipv4_32" : 3 + } + }, + { + "::1.2.3.5/128" : { + "ipv4_24" : 4, + "ipv4_32" : 1 + } + }, + { + "::1.2.3.6/128" : { + "ipv4_24" : 4, + "ipv4_32" : 1 + } + }, + { + "::1.2.3.7/128" : { + "ipv4_24" : 4, + "ipv4_32" : 0 + } + }, + { + "::1.2.3.8/125" : { + "ipv4_24" : 4, + "ipv4_32" : 0 + } + }, + { + "::1.2.3.16/124" : { + "ipv4_24" : 4, + "ipv4_32" : 0 + } + }, + { + "::1.2.3.32/123" : { + "ipv4_24" : 4, + "ipv4_32" : 0 + } + }, + { + "::1.2.3.64/122" : { + "ipv4_24" : 4, + "ipv4_32" : 0 + } + }, + { + "::1.2.3.128/121" : { + "ipv4_24" : 4, + "ipv4_32" : 0 + } + }, + { + "::1.2.4.0/118" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::1.2.8.0/117" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::1.2.16.0/116" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::1.2.32.0/115" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::1.2.64.0/114" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::1.2.128.0/113" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::1.3.0.0/112" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::1.4.0.0/110" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::1.8.0.0/109" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::1.16.0.0/108" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::1.32.0.0/107" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::1.64.0.0/106" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::1.128.0.0/105" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::2.0.0.0/103" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::4.0.0.0/102" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::8.0.0.0/103" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::11.0.0.0/104" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::12.0.0.0/102" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::16.0.0.0/100" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::32.0.0.0/99" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::64.0.0.0/99" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::75.209.24.0/128" : { + "ipv4_24" : 1, + "ipv4_32" : 1 + } + }, + { + "::96.0.0.0/102" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::100.0.0.0/106" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::100.128.0.0/105" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::101.0.0.0/104" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::102.0.0.0/103" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::104.0.0.0/101" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::112.0.0.0/101" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::120.0.0.0/102" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::124.0.0.0/103" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::126.0.0.0/104" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::128.0.0.0/99" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::160.0.0.0/101" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::168.0.0.0/104" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::169.0.0.0/105" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::169.128.0.0/106" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::169.192.0.0/107" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::169.224.0.0/108" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::169.240.0.0/109" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::169.248.0.0/110" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::169.252.0.0/111" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::169.255.0.0/112" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::170.0.0.0/103" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::172.0.0.0/108" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::172.32.0.0/107" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::172.64.0.0/106" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::172.128.0.0/105" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::173.0.0.0/104" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::174.0.0.0/103" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::176.0.0.0/100" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.0.0.8/125" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.0.0.16/124" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.0.0.32/123" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.0.0.64/122" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.0.0.128/121" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.0.1.0/120" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.0.3.0/120" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.0.4.0/118" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.0.8.0/117" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.0.16.0/116" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.0.32.0/115" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.0.64.0/114" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.0.128.0/113" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.1.0.0/112" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.2.0.0/111" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.4.0.0/110" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.8.0.0/109" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.16.0.0/108" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.32.0.0/107" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.64.0.0/108" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.80.0.0/109" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.88.0.0/114" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.88.64.0/115" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.88.96.0/119" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.88.98.0/120" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.88.100.0/118" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.88.104.0/117" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.88.112.0/116" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.88.128.0/113" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.89.0.0/112" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.90.0.0/111" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.92.0.0/110" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.96.0.0/107" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.128.0.0/107" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.160.0.0/109" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.169.0.0/112" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.170.0.0/111" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.172.0.0/110" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.176.0.0/108" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::192.192.0.0/106" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::193.0.0.0/104" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::194.0.0.0/103" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::196.0.0.0/103" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.0.0.0/108" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.16.0.0/111" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.20.0.0/110" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.24.0.0/109" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.32.0.0/108" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.48.0.0/111" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.50.0.0/112" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.51.0.0/114" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.51.64.0/115" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.51.96.0/118" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.51.101.0/120" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.51.102.0/119" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.51.104.0/117" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.51.112.0/116" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.51.128.0/113" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.52.0.0/110" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.56.0.0/109" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.64.0.0/106" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::198.128.0.0/105" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::199.0.0.0/104" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::200.0.0.0/103" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::202.0.0.0/104" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::203.0.0.0/114" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::203.0.64.0/115" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::203.0.96.0/116" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::203.0.112.0/120" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::203.0.114.0/119" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::203.0.116.0/118" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::203.0.120.0/117" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::203.0.128.0/113" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::203.1.0.0/112" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::203.2.0.0/111" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::203.4.0.0/110" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::203.8.0.0/109" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::203.16.0.0/108" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::203.32.0.0/107" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::203.64.0.0/106" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::203.128.0.0/105" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::204.0.0.0/102" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::208.0.0.0/100" : { + "ipv4_24" : 0, + "ipv4_32" : 0 + } + }, + { + "::1:0:0:0/80" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "::2:0:0:0/79" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "::4:0:0:0/78" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "::8:0:0:0/77" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "::10:0:0:0/76" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "::20:0:0:0/75" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "::40:0:0:0/74" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "::80:0:0:0/73" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "::100:0:0:0/72" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "::200:0:0:0/71" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "::400:0:0:0/70" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "::800:0:0:0/69" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "::1000:0:0:0/68" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "::2000:0:0:0/67" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "::4000:0:0:0/66" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "::8000:0:0:0/65" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:0:1::/64" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:0:2::/63" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:0:4::/62" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:0:8::/61" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:0:10::/60" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:0:20::/59" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:0:40::/58" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:0:80::/57" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:0:100::/56" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:0:200::/55" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:0:400::/54" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:0:800::/53" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:0:1000::/52" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:0:2000::/51" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:0:4000::/50" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:0:8000::/49" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:1::/48" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:2::/47" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:4::/46" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:8::/45" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:10::/44" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:20::/43" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:40::/42" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:80::/41" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:100::/40" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:200::/39" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:400::/38" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:800::/37" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:1000::/36" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:2000::/35" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:4000::/34" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:0:8000::/33" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:1::/32" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:2::/31" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:4::/30" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:8::/29" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:10::/28" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:20::/27" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:40::/26" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:80::/25" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:100::/24" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:200::/23" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:400::/22" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:800::/21" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:1000::/20" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:2000::/19" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:4000::/18" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "0:8000::/17" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "1::/16" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2::/15" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "4::/14" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "8::/13" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "10::/12" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "20::/11" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "40::/10" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "80::/9" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:0:1::/64" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:0:2::/63" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:0:4::/62" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:0:8::/61" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:0:10::/60" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:0:20::/59" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:0:40::/58" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:0:80::/57" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:0:100::/56" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:0:200::/55" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:0:400::/54" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:0:800::/53" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:0:1000::/52" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:0:2000::/51" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:0:4000::/50" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:0:8000::/49" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:1::/48" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:2::/47" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:4::/46" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:8::/45" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:10::/44" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:20::/43" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:40::/42" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:80::/41" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:100::/40" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:200::/39" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:400::/38" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:800::/37" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:1000::/36" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:2000::/35" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:4000::/34" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:0:8000::/33" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:1::/32" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:2::/31" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:4::/30" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:8::/29" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:10::/28" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:20::/27" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:40::/26" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:80::/25" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:100::/24" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:200::/23" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:400::/22" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:800::/21" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:1000::/20" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:2000::/19" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:4000::/18" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "100:8000::/17" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "101::/16" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "102::/15" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "104::/14" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "108::/13" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "110::/12" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "120::/11" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "140::/10" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "180::/9" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "200::/7" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "400::/6" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "800::/5" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "1000::/4" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2000::/16" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:200::/23" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:220::/128" : { + "ipv6_32" : 1, + "ipv6_48" : 1, + "ipv6_64" : 1 + } + }, + { + "2001:400::/22" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:800::/22" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:c00::/24" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:d00::/25" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:d80::/27" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:da0::/28" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:db0::/29" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:db9::/32" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:dba::/31" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:dbc::/30" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:dc0::/26" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:e00::/23" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:1000::/20" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:2000::/19" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:4000::/18" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:8000::/18" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:c000::/19" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:e000::/21" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:e800::/22" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:ec00::/24" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:ed00::/25" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:ed80::/27" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:eda0::/28" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb0::/29" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8::/48" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:1::/64" : { + "ipv6_32" : 5, + "ipv6_48" : 1, + "ipv6_64" : 1 + } + }, + { + "2001:edb8:1:1::/64" : { + "ipv6_32" : 5, + "ipv6_48" : 1, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:1:2::/63" : { + "ipv6_32" : 5, + "ipv6_48" : 1, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:1:4::/62" : { + "ipv6_32" : 5, + "ipv6_48" : 1, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:1:8::/61" : { + "ipv6_32" : 5, + "ipv6_48" : 1, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:1:10::/60" : { + "ipv6_32" : 5, + "ipv6_48" : 1, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:1:20::/59" : { + "ipv6_32" : 5, + "ipv6_48" : 1, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:1:40::/58" : { + "ipv6_32" : 5, + "ipv6_48" : 1, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:1:80::/57" : { + "ipv6_32" : 5, + "ipv6_48" : 1, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:1:100::/56" : { + "ipv6_32" : 5, + "ipv6_48" : 1, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:1:200::/55" : { + "ipv6_32" : 5, + "ipv6_48" : 1, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:1:400::/54" : { + "ipv6_32" : 5, + "ipv6_48" : 1, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:1:800::/53" : { + "ipv6_32" : 5, + "ipv6_48" : 1, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:1:1000::/52" : { + "ipv6_32" : 5, + "ipv6_48" : 1, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:1:2000::/51" : { + "ipv6_32" : 5, + "ipv6_48" : 1, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:1:4000::/50" : { + "ipv6_32" : 5, + "ipv6_48" : 1, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:1:8000::/49" : { + "ipv6_32" : 5, + "ipv6_48" : 1, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:2::/47" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:4::/46" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:8::/45" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:10::/44" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:20::/43" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:40::/42" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:80::/41" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:100::/40" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:200::/39" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:400::/38" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:800::/37" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:1000::/36" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:2000::/35" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:4000::/34" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:8000::/38" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:8400::/40" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:8500::/41" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:8580::/43" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a0::/47" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a2::/48" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a3::/64" : { + "ipv6_32" : 5, + "ipv6_48" : 4, + "ipv6_64" : 3 + } + }, + { + "2001:edb8:85a3:1::/64" : { + "ipv6_32" : 5, + "ipv6_48" : 4, + "ipv6_64" : 2 + } + }, + { + "2001:edb8:85a3:2::/63" : { + "ipv6_32" : 5, + "ipv6_48" : 4, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a3:4::/62" : { + "ipv6_32" : 5, + "ipv6_48" : 4, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a3:8::/61" : { + "ipv6_32" : 5, + "ipv6_48" : 4, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a3:10::/60" : { + "ipv6_32" : 5, + "ipv6_48" : 4, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a3:20::/59" : { + "ipv6_32" : 5, + "ipv6_48" : 4, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a3:40::/58" : { + "ipv6_32" : 5, + "ipv6_48" : 4, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a3:80::/57" : { + "ipv6_32" : 5, + "ipv6_48" : 4, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a3:100::/56" : { + "ipv6_32" : 5, + "ipv6_48" : 4, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a3:200::/55" : { + "ipv6_32" : 5, + "ipv6_48" : 4, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a3:400::/54" : { + "ipv6_32" : 5, + "ipv6_48" : 4, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a3:800::/53" : { + "ipv6_32" : 5, + "ipv6_48" : 4, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a3:1000::/52" : { + "ipv6_32" : 5, + "ipv6_48" : 4, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a3:2000::/51" : { + "ipv6_32" : 5, + "ipv6_48" : 4, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a3:4000::/50" : { + "ipv6_32" : 5, + "ipv6_48" : 4, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a3:8000::/49" : { + "ipv6_32" : 5, + "ipv6_48" : 4, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a4::/46" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85a8::/45" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85b0::/44" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:85c0::/42" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:8600::/39" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:8800::/37" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:9000::/36" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:a000::/35" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:c000::/36" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:d000::/37" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:d800::/38" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dc00::/39" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:de00::/41" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:de80::/43" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dea0::/45" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dea8::/46" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:deac::/48" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dead::/49" : { + "ipv6_32" : 5, + "ipv6_48" : 2, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dead:8000::/50" : { + "ipv6_32" : 5, + "ipv6_48" : 2, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dead:c000::/52" : { + "ipv6_32" : 5, + "ipv6_48" : 2, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dead:d000::/53" : { + "ipv6_32" : 5, + "ipv6_48" : 2, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dead:d800::/54" : { + "ipv6_32" : 5, + "ipv6_48" : 2, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dead:dc00::/55" : { + "ipv6_32" : 5, + "ipv6_48" : 2, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dead:de00::/57" : { + "ipv6_32" : 5, + "ipv6_48" : 2, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dead:de80::/59" : { + "ipv6_32" : 5, + "ipv6_48" : 2, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dead:dea0::/61" : { + "ipv6_32" : 5, + "ipv6_48" : 2, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dead:dea8::/62" : { + "ipv6_32" : 5, + "ipv6_48" : 2, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dead:deac::/64" : { + "ipv6_32" : 5, + "ipv6_48" : 2, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dead:dead::/64" : { + "ipv6_32" : 5, + "ipv6_48" : 2, + "ipv6_64" : 2 + } + }, + { + "2001:edb8:dead:deae::/63" : { + "ipv6_32" : 5, + "ipv6_48" : 2, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dead:deb0::/60" : { + "ipv6_32" : 5, + "ipv6_48" : 2, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dead:dec0::/58" : { + "ipv6_32" : 5, + "ipv6_48" : 2, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dead:df00::/56" : { + "ipv6_32" : 5, + "ipv6_48" : 2, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dead:e000::/51" : { + "ipv6_32" : 5, + "ipv6_48" : 2, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:deae::/47" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:deb0::/44" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:dec0::/42" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:df00::/40" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb8:e000::/35" : { + "ipv6_32" : 5, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edb9::/32" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edba::/31" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edbc::/30" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:edc0::/26" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:ee00::/23" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2001:f000::/20" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2003::/16" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2004::/14" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2008::/13" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2010::/12" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2020::/11" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2040::/10" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2080::/9" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2100::/8" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2200::/7" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2400::/6" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "2800::/5" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "3000::/4" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "4000::/2" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "8000::/2" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "c000::/3" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "e000::/4" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "f000::/5" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "f800::/6" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "fe00::/9" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + }, + { + "fec0::/10" : { + "ipv6_32" : 0, + "ipv6_48" : 0, + "ipv6_64" : 0 + } + } ] diff --git a/test/data/test-data/GeoIP2-Anonymous-IP-Test.mmdb b/test/data/test-data/GeoIP2-Anonymous-IP-Test.mmdb index d1ca49f..3ea306b 100644 Binary files a/test/data/test-data/GeoIP2-Anonymous-IP-Test.mmdb and b/test/data/test-data/GeoIP2-Anonymous-IP-Test.mmdb differ diff --git a/test/data/test-data/GeoIP2-City-Test-Broken-Double-Format.mmdb b/test/data/test-data/GeoIP2-City-Test-Broken-Double-Format.mmdb index 35a987e..168340e 100644 Binary files a/test/data/test-data/GeoIP2-City-Test-Broken-Double-Format.mmdb and b/test/data/test-data/GeoIP2-City-Test-Broken-Double-Format.mmdb differ diff --git a/test/data/test-data/GeoIP2-City-Test-Invalid-Node-Count.mmdb b/test/data/test-data/GeoIP2-City-Test-Invalid-Node-Count.mmdb index 9be826b..9eadcf2 100644 Binary files a/test/data/test-data/GeoIP2-City-Test-Invalid-Node-Count.mmdb and b/test/data/test-data/GeoIP2-City-Test-Invalid-Node-Count.mmdb differ diff --git a/test/data/test-data/GeoIP2-City-Test.mmdb b/test/data/test-data/GeoIP2-City-Test.mmdb index 2e7c95c..c304794 100644 Binary files a/test/data/test-data/GeoIP2-City-Test.mmdb and b/test/data/test-data/GeoIP2-City-Test.mmdb differ diff --git a/test/data/test-data/GeoIP2-Connection-Type-Test.mmdb b/test/data/test-data/GeoIP2-Connection-Type-Test.mmdb index 70a936a..2d5196f 100644 Binary files a/test/data/test-data/GeoIP2-Connection-Type-Test.mmdb and b/test/data/test-data/GeoIP2-Connection-Type-Test.mmdb differ diff --git a/test/data/test-data/GeoIP2-Country-Test.mmdb b/test/data/test-data/GeoIP2-Country-Test.mmdb index 18823c1..434e2ce 100644 Binary files a/test/data/test-data/GeoIP2-Country-Test.mmdb and b/test/data/test-data/GeoIP2-Country-Test.mmdb differ diff --git a/test/data/test-data/GeoIP2-DensityIncome-Test.mmdb b/test/data/test-data/GeoIP2-DensityIncome-Test.mmdb index e9bc65b..2edc726 100644 Binary files a/test/data/test-data/GeoIP2-DensityIncome-Test.mmdb and b/test/data/test-data/GeoIP2-DensityIncome-Test.mmdb differ diff --git a/test/data/test-data/GeoIP2-Domain-Test.mmdb b/test/data/test-data/GeoIP2-Domain-Test.mmdb index b2b354d..b3070a5 100644 Binary files a/test/data/test-data/GeoIP2-Domain-Test.mmdb and b/test/data/test-data/GeoIP2-Domain-Test.mmdb differ diff --git a/test/data/test-data/GeoIP2-Enterprise-Test.mmdb b/test/data/test-data/GeoIP2-Enterprise-Test.mmdb index 7ba857d..35cb64b 100644 Binary files a/test/data/test-data/GeoIP2-Enterprise-Test.mmdb and b/test/data/test-data/GeoIP2-Enterprise-Test.mmdb differ diff --git a/test/data/test-data/GeoIP2-ISP-Test.mmdb b/test/data/test-data/GeoIP2-ISP-Test.mmdb index 01c17be..89ff76c 100644 Binary files a/test/data/test-data/GeoIP2-ISP-Test.mmdb and b/test/data/test-data/GeoIP2-ISP-Test.mmdb differ diff --git a/test/data/test-data/GeoIP2-Precision-Enterprise-Test.mmdb b/test/data/test-data/GeoIP2-Precision-Enterprise-Test.mmdb index 25c74ba..2ae162c 100644 Binary files a/test/data/test-data/GeoIP2-Precision-Enterprise-Test.mmdb and b/test/data/test-data/GeoIP2-Precision-Enterprise-Test.mmdb differ diff --git a/test/data/test-data/GeoIP2-Static-IP-Score-Test.mmdb b/test/data/test-data/GeoIP2-Static-IP-Score-Test.mmdb new file mode 100644 index 0000000..ab295e6 Binary files /dev/null and b/test/data/test-data/GeoIP2-Static-IP-Score-Test.mmdb differ diff --git a/test/data/test-data/GeoIP2-User-Count-Test.mmdb b/test/data/test-data/GeoIP2-User-Count-Test.mmdb index a8a9d45..1245930 100644 Binary files a/test/data/test-data/GeoIP2-User-Count-Test.mmdb and b/test/data/test-data/GeoIP2-User-Count-Test.mmdb differ diff --git a/test/data/test-data/GeoLite2-ASN-Test.mmdb b/test/data/test-data/GeoLite2-ASN-Test.mmdb index bba876c..e8e6ef1 100644 Binary files a/test/data/test-data/GeoLite2-ASN-Test.mmdb and b/test/data/test-data/GeoLite2-ASN-Test.mmdb differ diff --git a/test/data/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb b/test/data/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb index 8699ad1..6422161 100644 Binary files a/test/data/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb and b/test/data/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb differ diff --git a/test/data/test-data/MaxMind-DB-string-value-entries.mmdb b/test/data/test-data/MaxMind-DB-string-value-entries.mmdb index 6c638b9..deb340f 100644 Binary files a/test/data/test-data/MaxMind-DB-string-value-entries.mmdb and b/test/data/test-data/MaxMind-DB-string-value-entries.mmdb differ diff --git a/test/data/test-data/MaxMind-DB-test-broken-pointers-24.mmdb b/test/data/test-data/MaxMind-DB-test-broken-pointers-24.mmdb index 7487573..b4f9a4f 100644 Binary files a/test/data/test-data/MaxMind-DB-test-broken-pointers-24.mmdb and b/test/data/test-data/MaxMind-DB-test-broken-pointers-24.mmdb differ diff --git a/test/data/test-data/MaxMind-DB-test-broken-search-tree-24.mmdb b/test/data/test-data/MaxMind-DB-test-broken-search-tree-24.mmdb index 2f2c352..d5960b7 100644 Binary files a/test/data/test-data/MaxMind-DB-test-broken-search-tree-24.mmdb and b/test/data/test-data/MaxMind-DB-test-broken-search-tree-24.mmdb differ diff --git a/test/data/test-data/MaxMind-DB-test-decoder.mmdb b/test/data/test-data/MaxMind-DB-test-decoder.mmdb index 2bd789f..917adf4 100644 Binary files a/test/data/test-data/MaxMind-DB-test-decoder.mmdb and b/test/data/test-data/MaxMind-DB-test-decoder.mmdb differ diff --git a/test/data/test-data/MaxMind-DB-test-ipv4-24.mmdb b/test/data/test-data/MaxMind-DB-test-ipv4-24.mmdb index 115215c..289cb67 100644 Binary files a/test/data/test-data/MaxMind-DB-test-ipv4-24.mmdb and b/test/data/test-data/MaxMind-DB-test-ipv4-24.mmdb differ diff --git a/test/data/test-data/MaxMind-DB-test-ipv4-28.mmdb b/test/data/test-data/MaxMind-DB-test-ipv4-28.mmdb index 00740bf..4955abe 100644 Binary files a/test/data/test-data/MaxMind-DB-test-ipv4-28.mmdb and b/test/data/test-data/MaxMind-DB-test-ipv4-28.mmdb differ diff --git a/test/data/test-data/MaxMind-DB-test-ipv4-32.mmdb b/test/data/test-data/MaxMind-DB-test-ipv4-32.mmdb index 031cc49..f305042 100644 Binary files a/test/data/test-data/MaxMind-DB-test-ipv4-32.mmdb and b/test/data/test-data/MaxMind-DB-test-ipv4-32.mmdb differ diff --git a/test/data/test-data/MaxMind-DB-test-ipv6-24.mmdb b/test/data/test-data/MaxMind-DB-test-ipv6-24.mmdb index 416bf8a..0832163 100644 Binary files a/test/data/test-data/MaxMind-DB-test-ipv6-24.mmdb and b/test/data/test-data/MaxMind-DB-test-ipv6-24.mmdb differ diff --git a/test/data/test-data/MaxMind-DB-test-ipv6-28.mmdb b/test/data/test-data/MaxMind-DB-test-ipv6-28.mmdb index ad5b734..2a83d52 100644 Binary files a/test/data/test-data/MaxMind-DB-test-ipv6-28.mmdb and b/test/data/test-data/MaxMind-DB-test-ipv6-28.mmdb differ diff --git a/test/data/test-data/MaxMind-DB-test-ipv6-32.mmdb b/test/data/test-data/MaxMind-DB-test-ipv6-32.mmdb index 02a828d..d40e8fa 100644 Binary files a/test/data/test-data/MaxMind-DB-test-ipv6-32.mmdb and b/test/data/test-data/MaxMind-DB-test-ipv6-32.mmdb differ diff --git a/test/data/test-data/MaxMind-DB-test-metadata-pointers.mmdb b/test/data/test-data/MaxMind-DB-test-metadata-pointers.mmdb index 1a48095..82c8159 100644 Binary files a/test/data/test-data/MaxMind-DB-test-metadata-pointers.mmdb and b/test/data/test-data/MaxMind-DB-test-metadata-pointers.mmdb differ diff --git a/test/data/test-data/MaxMind-DB-test-mixed-24.mmdb b/test/data/test-data/MaxMind-DB-test-mixed-24.mmdb index 9d53fd4..48c0e47 100644 Binary files a/test/data/test-data/MaxMind-DB-test-mixed-24.mmdb and b/test/data/test-data/MaxMind-DB-test-mixed-24.mmdb differ diff --git a/test/data/test-data/MaxMind-DB-test-mixed-28.mmdb b/test/data/test-data/MaxMind-DB-test-mixed-28.mmdb index 384ebc3..e1d5f0f 100644 Binary files a/test/data/test-data/MaxMind-DB-test-mixed-28.mmdb and b/test/data/test-data/MaxMind-DB-test-mixed-28.mmdb differ diff --git a/test/data/test-data/MaxMind-DB-test-mixed-32.mmdb b/test/data/test-data/MaxMind-DB-test-mixed-32.mmdb index b28624b..df18dc0 100644 Binary files a/test/data/test-data/MaxMind-DB-test-mixed-32.mmdb and b/test/data/test-data/MaxMind-DB-test-mixed-32.mmdb differ diff --git a/test/data/test-data/MaxMind-DB-test-nested.mmdb b/test/data/test-data/MaxMind-DB-test-nested.mmdb index 4b670eb..bb9bb9d 100644 Binary files a/test/data/test-data/MaxMind-DB-test-nested.mmdb and b/test/data/test-data/MaxMind-DB-test-nested.mmdb differ diff --git a/test/data/test-data/write-test-data.pl b/test/data/test-data/write-test-data.pl index 3022dc9..b48ba7c 100755 --- a/test/data/test-data/write-test-data.pl +++ b/test/data/test-data/write-test-data.pl @@ -5,22 +5,21 @@ use autodie; use utf8; -use Carp qw( croak ); use Cwd qw( abs_path ); use File::Basename qw( dirname ); use File::Slurper qw( read_binary write_binary ); -use Cpanel::JSON::XS qw( decode_json ); -use Math::Int128 qw( uint128 ); +use Cpanel::JSON::XS 4.16 qw( decode_json ); +use Math::Int128 qw( MAX_UINT128 string_to_uint128 uint128 ); use MaxMind::DB::Writer::Serializer 0.100004; use MaxMind::DB::Writer::Tree 0.100004; use MaxMind::DB::Writer::Util qw( key_for_data ); -use Net::Works::Network; +use Net::Works::Network (); use Test::MaxMind::DB::Common::Util qw( standard_test_metadata ); my $Dir = dirname( abs_path($0) ); sub main { - my @sizes = ( 24, 28, 32 ); + my @sizes = ( 24, 28, 32 ); my @ipv4_range = ( '1.1.1.1', '1.1.1.32' ); my @ipv4_subnets = Net::Works::Network->range_as_subnets(@ipv4_range); @@ -151,9 +150,9 @@ my $ip_version_name = shift; my $writer = MaxMind::DB::Writer::Tree->new( - ip_version => $subnets->[0]->version(), - record_size => $record_size, - alias_ipv6_to_ipv4 => ( $subnets->[0]->version() == 6 ? 1 : 0 ), + ip_version => $subnets->[0]->version(), + record_size => $record_size, + alias_ipv6_to_ipv4 => ( $subnets->[0]->version() == 6 ? 1 : 0 ), map_key_type_callback => sub { 'utf8_string' }, standard_test_metadata(), %{$metadata}, @@ -219,6 +218,18 @@ float => 0, ); + # We limit this to numeric types as the other types would generate + # very large databases + my %numeric_types_max = ( + double => 'Inf', + float => 'Inf', + int32 => 0x7fffffff, + uint16 => 0xffff, + uint32 => string_to_uint128('0xffff_ffff'), + uint64 => string_to_uint128('0xffff_ffff_ffff_ffff'), + uint128 => MAX_UINT128, + ); + sub write_decoder_test_db { my $writer = MaxMind::DB::Writer::Tree->new( ip_version => 6, @@ -261,6 +272,13 @@ \%all_types_0, ); + $writer->insert_network( + Net::Works::Network->new_from_string( + string => '::255.255.255.255/128' + ), + \%numeric_types_max, + ); + open my $fh, '>', "$Dir/MaxMind-DB-test-decoder.mmdb"; $writer->write_tree($fh); close $fh; @@ -297,7 +315,7 @@ map_key_type_callback => sub { my $key = shift; return - $key =~ /^map/ ? 'map' + $key =~ /^map/ ? 'map' : $key eq 'array' ? [ 'array', 'map' ] : 'uint32'; } @@ -341,6 +359,7 @@ ['GeoIP2-Enterprise'], ['GeoIP2-ISP'], ['GeoIP2-Precision-Enterprise'], + ['GeoIP2-Static-IP-Score'], ['GeoIP2-User-Count'], ['GeoLite2-ASN'], ); @@ -422,6 +441,7 @@ postal => 'map', registered_country => 'map', represented_country => 'map', + score => 'double', subdivisions => [ 'array', 'map' ], time_zone => 'utf8_string', traits => 'map', diff --git a/test/mmdb_util.rb b/test/mmdb_util.rb index 67aa4c7..624b9c7 100644 --- a/test/mmdb_util.rb +++ b/test/mmdb_util.rb @@ -1,4 +1,6 @@ -class MMDBUtil # :nodoc: +# frozen_string_literal: true + +class MMDBUtil def self.make_metadata_map(record_size) # Map "\xe9".b + diff --git a/test/test_decoder.rb b/test/test_decoder.rb index a72d8f9..3f8d8de 100644 --- a/test/test_decoder.rb +++ b/test/test_decoder.rb @@ -1,8 +1,10 @@ +# frozen_string_literal: true + require 'maxmind/db' require 'minitest/autorun' require 'mmdb_util' -class DecoderTest < Minitest::Test # :nodoc: +class DecoderTest < Minitest::Test def test_arrays arrays = { "\x00\x04".b => [], diff --git a/test/test_reader.rb b/test/test_reader.rb index 36c4ac5..85504cd 100644 --- a/test/test_reader.rb +++ b/test/test_reader.rb @@ -1,8 +1,10 @@ +# frozen_string_literal: true + require 'maxmind/db' require 'minitest/autorun' require 'mmdb_util' -class ReaderTest < Minitest::Test # :nodoc: +class ReaderTest < Minitest::Test def test_reader modes = [ MaxMind::DB::MODE_FILE, @@ -27,6 +29,128 @@ end end + def test_reader_inspect + modes = [ + MaxMind::DB::MODE_FILE, + MaxMind::DB::MODE_MEMORY, + ] + + modes.each do |mode| + filename = 'test/data/test-data/MaxMind-DB-test-ipv4-24.mmdb' + reader = MaxMind::DB.new(filename, mode: mode) + assert_instance_of(String, reader.inspect) + end + end + + def test_get_with_prefix_len + decoder_record = { + 'array' => [1, 2, 3], + 'boolean' => true, + 'bytes' => "\x00\x00\x00*", + 'double' => 42.123456, + 'float' => 1.100000023841858, + 'int32' => -268_435_456, + 'map' => { + 'mapX' => { + 'arrayX' => [7, 8, 9], + 'utf8_stringX' => 'hello', + }, + }, + 'uint128' => 1_329_227_995_784_915_872_903_807_060_280_344_576, + 'uint16' => 0x64, + 'uint32' => 0x10000000, + 'uint64' => 0x1000000000000000, + 'utf8_string' => 'unicode! ☯ - ♫', + } + + tests = [{ + 'ip' => '1.1.1.1', + 'file_name' => 'MaxMind-DB-test-ipv6-32.mmdb', + 'expected_prefix_length' => 8, + 'expected_record' => nil, + }, { + 'ip' => '::1:ffff:ffff', + 'file_name' => 'MaxMind-DB-test-ipv6-24.mmdb', + 'expected_prefix_length' => 128, + 'expected_record' => { + 'ip' => '::1:ffff:ffff' + }, + }, { + 'ip' => '::2:0:1', + 'file_name' => 'MaxMind-DB-test-ipv6-24.mmdb', + 'expected_prefix_length' => 122, + 'expected_record' => { + 'ip' => '::2:0:0' + }, + }, { + 'ip' => '1.1.1.1', + 'file_name' => 'MaxMind-DB-test-ipv4-24.mmdb', + 'expected_prefix_length' => 32, + 'expected_record' => { + 'ip' => '1.1.1.1' + }, + }, { + 'ip' => '1.1.1.3', + 'file_name' => 'MaxMind-DB-test-ipv4-24.mmdb', + 'expected_prefix_length' => 31, + 'expected_record' => { + 'ip' => '1.1.1.2' + }, + }, { + 'ip' => '1.1.1.3', + 'file_name' => 'MaxMind-DB-test-decoder.mmdb', + 'expected_prefix_length' => 24, + 'expected_record' => decoder_record, + }, { + 'ip' => '::ffff:1.1.1.128', + 'file_name' => 'MaxMind-DB-test-decoder.mmdb', + 'expected_prefix_length' => 120, + 'expected_record' => decoder_record, + }, { + 'ip' => '::1.1.1.128', + 'file_name' => 'MaxMind-DB-test-decoder.mmdb', + 'expected_prefix_length' => 120, + 'expected_record' => decoder_record, + }, { + 'ip' => '200.0.2.1', + 'file_name' => 'MaxMind-DB-no-ipv4-search-tree.mmdb', + 'expected_prefix_length' => 0, + 'expected_record' => '::0/64', + }, { + 'ip' => '::200.0.2.1', + 'file_name' => 'MaxMind-DB-no-ipv4-search-tree.mmdb', + 'expected_prefix_length' => 64, + 'expected_record' => '::0/64', + }, { + 'ip' => '0:0:0:0:ffff:ffff:ffff:ffff', + 'file_name' => 'MaxMind-DB-no-ipv4-search-tree.mmdb', + 'expected_prefix_length' => 64, + 'expected_record' => '::0/64', + }, { + 'ip' => 'ef00::', + 'file_name' => 'MaxMind-DB-no-ipv4-search-tree.mmdb', + 'expected_prefix_length' => 1, + 'expected_record' => nil, + }] + + tests.each do |test| + reader = MaxMind::DB.new('test/data/test-data/' + test['file_name']) + record, prefix_length = reader.get_with_prefix_length(test['ip']) + + assert_equal(test['expected_prefix_length'], prefix_length, + format('expected prefix_length of %d for %s in %s but got %p', + test['expected_prefix_length'], test['ip'], + test['file_name'], prefix_length)) + + msg = format('expected_record for %s in %s', test['ip'], test['file_name']) + if test['expected_record'].nil? + assert_nil(record, msg) + else + assert_equal(test['expected_record'], record, msg) + end + end + end + def test_decoder reader = MaxMind::DB.new( 'test/data/test-data/MaxMind-DB-test-decoder.mmdb' @@ -273,8 +397,8 @@ node_bytes: "\xab\xcd\xef".b + "\xbc\xfe\xfa".b, left: 11_259_375, right: 12_386_042, - check_left: "\x00\xab\xcd\xef".b.unpack('N')[0], - check_right: "\x00\xbc\xfe\xfa".b.unpack('N')[0], + check_left: "\x00\xab\xcd\xef".b.unpack1('N'), + check_right: "\x00\xbc\xfe\xfa".b.unpack1('N'), }, { record_size: 28, @@ -282,8 +406,8 @@ node_bytes: "\xab\xcd\xef".b + "\x12".b + "\xfd\xdc\xfa".b, left: 28_036_591, right: 50_191_610, - check_left: "\x01\xab\xcd\xef".b.unpack('N')[0], - check_right: "\x02\xfd\xdc\xfa".b.unpack('N')[0], + check_left: "\x01\xab\xcd\xef".b.unpack1('N'), + check_right: "\x02\xfd\xdc\xfa".b.unpack1('N'), }, { record_size: 32, @@ -291,8 +415,8 @@ node_bytes: "\xab\xcd\xef\x12".b + "\xfd\xdc\xfa\x15".b, left: 2_882_400_018, right: 4_259_117_589, - check_left: "\xab\xcd\xef\x12".b.unpack('N')[0], - check_right: "\xfd\xdc\xfa\x15".b.unpack('N')[0], + check_left: "\xab\xcd\xef\x12".b.unpack1('N'), + check_right: "\xfd\xdc\xfa\x15".b.unpack1('N'), }, ]