aboutsummaryrefslogtreecommitdiffstats
path: root/components/net
diff options
context:
space:
mode:
Diffstat (limited to 'components/net')
-rw-r--r--components/net/about_loader.rs12
-rw-r--r--components/net/cookie.rs314
-rw-r--r--components/net/cookie_storage.rs46
-rw-r--r--components/net/data_loader.rs14
-rw-r--r--components/net/file_loader.rs5
-rw-r--r--components/net/http_loader.rs45
-rw-r--r--components/net/image_cache_task.rs31
-rw-r--r--components/net/lib.rs3
-rw-r--r--components/net/pub_domains.rs5959
-rw-r--r--components/net/resource_task.rs55
10 files changed, 6437 insertions, 47 deletions
diff --git a/components/net/about_loader.rs b/components/net/about_loader.rs
index 4db3dc21292..e297374f646 100644
--- a/components/net/about_loader.rs
+++ b/components/net/about_loader.rs
@@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use resource_task::{TargetedLoadResponse, Metadata, LoadData, start_sending, ResponseSenders};
+use resource_task::ControlMsg;
use resource_task::ProgressMsg::Done;
use file_loader;
@@ -14,7 +15,7 @@ use std::borrow::ToOwned;
use std::io::fs::PathExtensions;
use std::sync::mpsc::Sender;
-pub fn factory(mut load_data: LoadData, start_chan: Sender<TargetedLoadResponse>) {
+pub fn factory(mut load_data: LoadData, start_chan: Sender<TargetedLoadResponse>, cookies_chan: Sender<ControlMsg>) {
let senders = ResponseSenders {
immediate_consumer: start_chan.clone(),
eventual_consumer: load_data.consumer.clone(),
@@ -26,8 +27,9 @@ pub fn factory(mut load_data: LoadData, start_chan: Sender<TargetedLoadResponse>
content_type: Some(("text".to_string(), "html".to_string())),
charset: Some("utf-8".to_string()),
headers: None,
- status: Some(RawStatus(200, "OK".to_owned()))
- });
+ status: Some(RawStatus(200, "OK".to_owned())),
+ cookies: Vec::new(),
+ }, cookies_chan);
chan.send(Done(Ok(()))).unwrap();
return
}
@@ -39,10 +41,10 @@ pub fn factory(mut load_data: LoadData, start_chan: Sender<TargetedLoadResponse>
load_data.url = Url::from_file_path(&path).unwrap();
}
_ => {
- start_sending(senders, Metadata::default(load_data.url))
+ start_sending(senders, Metadata::default(load_data.url), cookies_chan)
.send(Done(Err("Unknown about: URL.".to_string()))).unwrap();
return
}
};
- file_loader::factory(load_data, start_chan)
+ file_loader::factory(load_data, start_chan, cookies_chan)
}
diff --git a/components/net/cookie.rs b/components/net/cookie.rs
new file mode 100644
index 00000000000..1c6fa5d0f7a
--- /dev/null
+++ b/components/net/cookie.rs
@@ -0,0 +1,314 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//use resource_task::{Metadata, Payload, Done, LoadResponse, LoaderTask, start_sending};
+//use time::Tm;
+use url::Url;
+use std::ascii::AsciiExt;
+use time::{strptime, Tm, at, get_time, Timespec, now};
+use std::i64;
+use pub_domains::PUB_DOMAINS;
+use std::io::net::ip::IpAddr;
+
+#[derive(Clone, Show)]
+pub struct Cookie {
+ pub name: String,
+ pub value: String,
+ pub domain: String,
+ pub expires: Option<Tm>,
+ pub path: String,
+ pub secure: bool,
+ pub http_only: bool,
+ pub host_only: bool,
+ pub persistent: bool,
+ pub created_at: Tm,
+ pub last_access: Tm,
+ pub scheme: String
+}
+
+impl Cookie {
+ pub fn new(header_value: String, url: &Url) -> Option<Cookie> {
+ let mut secure = false;
+ let mut http_only = false;
+ let mut name = None;
+ let mut value = None;
+ let mut domain = "".to_string();
+ let mut path = "".to_string();
+ let mut expires = None;
+ let mut max_age = None;
+
+ let mut set_cookie_iter = header_value.as_slice().split(';');
+ match set_cookie_iter.next() {
+ Some(name_value_pair) => {
+ if !name_value_pair.contains_char('=') {
+ return None;
+ }
+ let mut data = name_value_pair.split('=').map(|x| x.trim());
+ name = data.next();
+ value = data.next();
+ }
+ None => { return None }
+ }
+
+ if name.is_some() && name.unwrap() == "" {
+ return None
+ }
+
+ for spl in set_cookie_iter {
+ let cookie_av = spl.trim();
+ if cookie_av.contains_char('=') {
+ match cookie_av.split('=').map(|x| x.trim()).collect::<Vec<&str>>().as_slice() {
+ [attr, val] if attr.eq_ignore_ascii_case("domain") => {
+ if val == "" {
+ continue;
+ }
+ let cookie_domain;
+ if val.char_at(0) == '.' {
+ cookie_domain = val.slice_from(1);
+ } else {
+ cookie_domain = val;
+ }
+ domain = cookie_domain.to_ascii_lowercase();
+ }
+ [attr, val] if attr.eq_ignore_ascii_case("path") => {
+ if val == "" || val.char_at(0) != '/' {
+ match url.path() {
+ Some(x) => {
+ let mut url_path = "".to_string();
+ for v in x.iter() {
+ url_path.push_str(v.as_slice())
+ }
+ path = Cookie::default_path(url_path.as_slice())
+ }
+ _ => {
+ return None
+ }
+ }
+ } else {
+ path = val.to_string();
+ }
+
+ }
+ [attr, val] if attr.eq_ignore_ascii_case("expires") => {
+ // we try strptime with three date formats according to
+ // http://tools.ietf.org/html/rfc2616#section-3.3.1
+ match strptime(val, "%a, %d %b %Y %H:%M:%S %Z") {
+ Ok(x) => expires = Some(x),
+ Err(_) => {
+ match strptime(val, "%A, %d-%b-%y %H:%M:%S %Z") {
+ Ok(x) => expires = Some(x),
+ Err(_) => {
+ match strptime(val, "%a %b %d %H:%M:%S %Y") {
+ Ok(x) => expires = Some(x),
+ Err(_) => continue
+ }
+ }
+ }
+ }
+ }
+ }
+ [attr, val] if attr.eq_ignore_ascii_case("max-age") => {
+ match val.parse() {
+ Some(x) if x > 0 => {
+ let mut expires = get_time();
+ expires.sec += x;
+ max_age = Some(at(expires));
+ }
+ Some(_) => {
+ max_age = Some(at(Timespec::new(0, 0)))
+ }
+ None => continue
+ }
+ }
+ x => { println!("Undefined cookie attr value: {:?}", x); }
+ }
+ } else if cookie_av.eq_ignore_ascii_case("secure") {
+ secure = true;
+ } else if cookie_av.eq_ignore_ascii_case("httponly") {
+ http_only = true;
+ } else {
+ println!("Undefined cookie attr value: {}", cookie_av)
+ }
+ }
+
+ let url_host = match url.host() {
+ Some(x) => x.serialize(),
+ None => "".to_string()
+ };
+ let mut cookie = Cookie {
+ name: name.unwrap().to_string(),
+ value: value.unwrap().to_string(),
+ created_at: now(),
+ last_access: now(),
+ domain: url_host.clone(),
+ expires: None,
+ path: path,
+ secure: secure,
+ http_only: http_only,
+ host_only: true,
+ persistent: false,
+ scheme: url.scheme.clone()
+ };
+
+ if max_age.is_some() {
+ cookie.persistent = true;
+ cookie.expires = max_age;
+ } else if expires.is_some() {
+ cookie.persistent = true;
+ cookie.expires = expires;
+ } else {
+ cookie.expires = Some(at(Timespec::new(i64::MAX, 0)))
+ }
+
+ match PUB_DOMAINS.iter().find(|&x| domain == *x) {
+ Some(val) if *val == url_host => domain = "".to_string(),
+ Some(_) => return None,
+ None => {}
+ }
+ if !domain.is_empty() {
+ if !Cookie::domain_match(url_host.as_slice(), domain.as_slice()) {
+ return None;
+ } else {
+ cookie.host_only = false;
+ cookie.domain = domain;
+ }
+ }
+ if cookie.http_only && !url.scheme.as_slice().starts_with("http") {
+ return None;
+ }
+
+ Some(cookie)
+ }
+
+ pub fn touch(&mut self) {
+ self.last_access = now();
+ }
+
+ fn default_path(request_path: &str) -> String {
+ if request_path == "" || request_path.char_at(0) != '/' || request_path == "/" {
+ return "/".to_string();
+ }
+ if request_path.ends_with("/") {
+ return request_path.slice_to(request_path.len()-1).to_string();
+ }
+ return request_path.clone().to_string();
+ }
+
+ pub fn path_match(request_path: &str, cookie_path: &str) -> bool {
+ request_path == cookie_path ||
+ ( request_path.starts_with(cookie_path) &&
+ ( request_path.ends_with("/") || request_path.char_at(cookie_path.len()) == '/' )
+ )
+ }
+
+ pub fn domain_match(string: &str, domain_string: &str) -> bool {
+ if string == domain_string {
+ return true;
+ }
+ if string.ends_with(domain_string)
+ && string.char_at(string.len()-domain_string.len()-1) == '.'
+ && string.parse::<IpAddr>().is_none() {
+ return true;
+ }
+ false
+ }
+
+ pub fn appropriate_for_url(&self, url: Url) -> bool {
+ let domain = url.host().unwrap().serialize();
+ let mut result = if self.host_only {
+ self.domain == domain
+ } else {
+ Cookie::domain_match(domain.as_slice(), self.domain.as_slice())
+ };
+ result = result && Cookie::path_match(url.serialize_path().unwrap().as_slice(), self.path.as_slice());
+
+ if self.secure {
+ result = result && url.scheme == "https".to_string()
+ }
+ if self.http_only {
+ result = result && url.scheme.as_slice().starts_with("http")
+ }
+ result
+ }
+}
+
+#[test]
+fn test_domain_match() {
+ assert!(Cookie::domain_match("foo.com", "foo.com"));
+ assert!(Cookie::domain_match("bar.foo.com", "foo.com"));
+ assert!(Cookie::domain_match("baz.bar.foo.com", "foo.com"));
+
+ assert!(!Cookie::domain_match("bar.foo.com", "bar.com"));
+ assert!(!Cookie::domain_match("bar.com", "baz.bar.com"));
+ assert!(!Cookie::domain_match("foo.com", "bar.com"));
+}
+
+#[test]
+fn test_default_path() {
+ assert!(Cookie::default_path("/foo/bar/baz/").as_slice() == "/foo/bar/baz");
+ assert!(Cookie::default_path("/foo").as_slice() == "/foo");
+ assert!(Cookie::default_path("/").as_slice() == "/");
+ assert!(Cookie::default_path("").as_slice() == "/");
+}
+
+#[test]
+fn fn_cookie_constructor() {
+ let url = &Url::parse("http://example.com/foo").unwrap();
+
+ let gov_url = &Url::parse("http://gov.ac/foo").unwrap();
+ // cookie name/value test
+ assert!(Cookie::new(" baz ".to_string(), url).is_none());
+ assert!(Cookie::new(" = bar ".to_string(), url).is_none());
+ assert!(Cookie::new(" baz = ".to_string(), url).is_some());
+
+ // cookie domains test
+ assert!(Cookie::new(" baz = bar; Domain = ".to_string(), url).is_some());
+ assert!(Cookie::new(" baz = bar; Domain = ".to_string(), url).unwrap().domain.as_slice() == "example.com");
+
+ // cookie public domains test
+ assert!(Cookie::new(" baz = bar; Domain = gov.ac".to_string(), url).is_none());
+ assert!(Cookie::new(" baz = bar; Domain = gov.ac".to_string(), gov_url).is_some());
+
+ // cookie domain matching test
+ assert!(Cookie::new(" baz = bar ; Secure; Domain = bazample.com".to_string(), url).is_none());
+
+ assert!(Cookie::new(" baz = bar ; Secure; Path = /foo/bar/".to_string(), url).is_some());
+
+ let cookie = Cookie::new(" baz = bar ; Secure; Path = /foo/bar/".to_string(), url).unwrap();
+ assert!(cookie.value.as_slice() == "bar");
+ assert!(cookie.name.as_slice() == "baz");
+ assert!(cookie.secure);
+ assert!(cookie.path.as_slice() == "/foo/bar/");
+ assert!(cookie.domain.as_slice() == "example.com");
+ assert!(cookie.host_only);
+
+ let u = &Url::parse("http://example.com/foobar").unwrap();
+ assert!(Cookie::new("foobar=value;path=/".to_string(), u).is_some());
+}
+
+#[deriving(Clone)]
+pub struct CookieManager {
+ cookies: Vec<Cookie>,
+}
+
+impl CookieManager {
+ pub fn new() -> CookieManager {
+ CookieManager {
+ cookies: Vec::new()
+ }
+ }
+
+ pub fn add(&mut self, cookie: &Cookie) -> bool {
+ match self.cookies.iter().find(|x| x.domain == cookie.domain && x.name == cookie.name && x.path == cookie.path) {
+ Some(c) => {
+ if c.http_only && !cookie.scheme.as_slice().starts_with("http") {
+ return false
+ }
+ }
+ None => {}
+ }
+ self.cookies.push(cookie.clone());
+ true
+ }
+}
diff --git a/components/net/cookie_storage.rs b/components/net/cookie_storage.rs
new file mode 100644
index 00000000000..8bbe70ba063
--- /dev/null
+++ b/components/net/cookie_storage.rs
@@ -0,0 +1,46 @@
+use url::Url;
+use cookie::Cookie;
+
+pub struct CookieStorage {
+ cookies: Vec<Cookie>
+}
+
+impl CookieStorage {
+ pub fn new() -> CookieStorage {
+ CookieStorage {
+ cookies: Vec::new()
+ }
+ }
+
+ pub fn push(&mut self, cookie: Cookie) {
+ match self.cookies.iter().position(|c| c.domain == cookie.domain && c.path == cookie.path && c.name == cookie.name) {
+ Some(ind) => { self.cookies.remove(ind); }
+ None => {}
+ };
+
+ self.cookies.push(cookie);
+ }
+
+ pub fn cookies_for_url(&mut self, url: Url) -> Option<String> {
+ let filterer = |&:c: &&mut Cookie| -> bool {
+ error!(" === SENT COOKIE : {} {} {} {}", c.name, c.value, c.domain, c.path);
+ error!(" === SENT COOKIE RESULT {}", c.appropriate_for_url(url.clone()));
+ c.appropriate_for_url(url.clone())
+ };
+ let mut url_cookies = self.cookies.iter_mut().filter(filterer);
+ let reducer = |&:acc: String, c: &mut Cookie| -> String {
+ c.touch();
+ (match acc.len() {
+ 0 => acc,
+ _ => acc + ";"
+ }) + c.name.as_slice() + "=" + c.value.as_slice()
+ };
+ let result = url_cookies.fold("".to_string(), reducer);
+
+ error!(" === COOKIES SENT: {}", result);
+ match result.len() {
+ 0 => None,
+ _ => Some(result)
+ }
+ }
+}
diff --git a/components/net/data_loader.rs b/components/net/data_loader.rs
index 0fce067d0de..7f884f3d61d 100644
--- a/components/net/data_loader.rs
+++ b/components/net/data_loader.rs
@@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use resource_task::{Metadata, LoadData, TargetedLoadResponse, start_sending, ResponseSenders};
+use resource_task::ControlMsg;
use resource_task::ProgressMsg::{Payload, Done};
use serialize::base64::FromBase64;
@@ -12,15 +13,15 @@ use url::{percent_decode, SchemeData};
use std::sync::mpsc::Sender;
-pub fn factory(load_data: LoadData, start_chan: Sender<TargetedLoadResponse>) {
+pub fn factory(load_data: LoadData, start_chan: Sender<TargetedLoadResponse>, cookies_chan: Sender<ControlMsg>) {
// NB: we don't spawn a new task.
// Hypothesis: data URLs are too small for parallel base64 etc. to be worth it.
// Should be tested at some point.
// Left in separate function to allow easy moving to a task, if desired.
- load(load_data, start_chan)
+ load(load_data, start_chan, cookies_chan)
}
-fn load(load_data: LoadData, start_chan: Sender<TargetedLoadResponse>) {
+fn load(load_data: LoadData, start_chan: Sender<TargetedLoadResponse>, cookies_chan: Sender<ControlMsg>) {
let url = load_data.url;
assert!("data" == url.scheme.as_slice());
@@ -45,7 +46,7 @@ fn load(load_data: LoadData, start_chan: Sender<TargetedLoadResponse>) {
}
let parts: Vec<&str> = scheme_data.as_slice().splitn(1, ',').collect();
if parts.len() != 2 {
- start_sending(senders, metadata).send(Done(Err("invalid data uri".to_string()))).unwrap();
+ start_sending(senders, metadata, cookies_chan).send(Done(Err("invalid data uri".to_string()))).unwrap();
return;
}
@@ -63,7 +64,7 @@ fn load(load_data: LoadData, start_chan: Sender<TargetedLoadResponse>) {
let content_type: Option<Mime> = ct_str.parse();
metadata.set_content_type(content_type.as_ref());
- let progress_chan = start_sending(senders, metadata);
+ let progress_chan = start_sending(senders, metadata, cookies_chan);
let bytes = percent_decode(parts[1].as_bytes());
if is_base64 {
@@ -95,8 +96,9 @@ fn assert_parse(url: &'static str,
use sniffer_task;
let (start_chan, start_port) = channel();
+ let (cookies_chan, _) = channel();
let sniffer_task = sniffer_task::new_sniffer_task();
- load(LoadData::new(Url::parse(url).unwrap(), start_chan), sniffer_task);
+ load(LoadData::new(Url::parse(url).unwrap(), start_chan), sniffer_task, cookies_chan);
let response = start_port.recv().unwrap();
assert_eq!(&response.metadata.content_type, &content_type);
diff --git a/components/net/file_loader.rs b/components/net/file_loader.rs
index b2b701cb939..9ce053e02f0 100644
--- a/components/net/file_loader.rs
+++ b/components/net/file_loader.rs
@@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use resource_task::{ProgressMsg, Metadata, LoadData, start_sending, TargetedLoadResponse, ResponseSenders};
+use resource_task::ControlMsg;
use resource_task::ProgressMsg::{Payload, Done};
use std::borrow::ToOwned;
@@ -32,14 +33,14 @@ fn read_all(reader: &mut io::Stream, progress_chan: &Sender<ProgressMsg>)
}
}
-pub fn factory(load_data: LoadData, start_chan: Sender<TargetedLoadResponse>) {
+pub fn factory(load_data: LoadData, start_chan: Sender<TargetedLoadResponse>, cookies_chan: Sender<ControlMsg>) {
let url = load_data.url;
assert!("file" == url.scheme.as_slice());
let senders = ResponseSenders {
immediate_consumer: start_chan,
eventual_consumer: load_data.consumer,
};
- let progress_chan = start_sending(senders, Metadata::default(url.clone()));
+ let progress_chan = start_sending(senders, Metadata::default(url.clone()), cookies_chan);
spawn_named("file_loader".to_owned(), move || {
let file_path: Result<Path, ()> = url.to_file_path();
match file_path {
diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs
index 7a137a94995..5621e56034f 100644
--- a/components/net/http_loader.rs
+++ b/components/net/http_loader.rs
@@ -2,7 +2,9 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+use cookie::Cookie;
use resource_task::{Metadata, TargetedLoadResponse, LoadData, start_sending_opt, ResponseSenders};
+use resource_task::ControlMsg;
use resource_task::ProgressMsg::{Payload, Done};
use log;
@@ -24,21 +26,21 @@ use url::{Url, UrlParser};
use std::borrow::ToOwned;
-pub fn factory(load_data: LoadData, start_chan: Sender<TargetedLoadResponse>) {
- spawn_named("http_loader".to_owned(), move || load(load_data, start_chan))
+pub fn factory(load_data: LoadData, start_chan: Sender<TargetedLoadResponse>, cookies_chan: Sender<ControlMsg>) {
+ spawn_named("http_loader".to_owned(), move || load(load_data, start_chan, cookies_chan))
}
-fn send_error(url: Url, err: String, senders: ResponseSenders) {
+fn send_error(url: Url, err: String, senders: ResponseSenders, cookies_chan: Sender<ControlMsg>) {
let mut metadata = Metadata::default(url);
metadata.status = None;
- match start_sending_opt(senders, metadata) {
+ match start_sending_opt(senders, metadata, cookies_chan) {
Ok(p) => p.send(Done(Err(err))).unwrap(),
_ => {}
};
}
-fn load(load_data: LoadData, start_chan: Sender<TargetedLoadResponse>) {
+fn load(load_data: LoadData, start_chan: Sender<TargetedLoadResponse>, cookies_chan: Sender<ControlMsg>) {
// FIXME: At the time of writing this FIXME, servo didn't have any central
// location for configuration. If you're reading this and such a
// repository DOES exist, please update this constant to use it.
@@ -57,12 +59,12 @@ fn load(load_data: LoadData, start_chan: Sender<TargetedLoadResponse>) {
iters = iters + 1;
if iters > max_redirects {
- send_error(url, "too many redirects".to_string(), senders);
+ send_error(url, "too many redirects".to_string(), senders, cookies_chan);
return;
}
if redirected_to.contains(&url) {
- send_error(url, "redirect loop".to_string(), senders);
+ send_error(url, "redirect loop".to_string(), senders, cookies_chan);
return;
}
@@ -72,7 +74,7 @@ fn load(load_data: LoadData, start_chan: Sender<TargetedLoadResponse>) {
"http" | "https" => {}
_ => {
let s = format!("{} request, but we don't support that scheme", url.scheme);
- send_error(url, s, senders);
+ send_error(url, s, senders, cookies_chan);
return;
}
}
@@ -104,7 +106,7 @@ reason: \"certificate verify failed\" }]";
},
Err(e) => {
println!("{:?}", e);
- send_error(url, e.description().to_string(), senders);
+ send_error(url, e.description().to_string(), senders, cookies_chan);
return;
}
};
@@ -124,13 +126,13 @@ reason: \"certificate verify failed\" }]";
let mut writer = match req.start() {
Ok(w) => w,
Err(e) => {
- send_error(url, e.description().to_string(), senders);
+ send_error(url, e.description().to_string(), senders, cookies_chan);
return;
}
};
match writer.write(data.as_slice()) {
Err(e) => {
- send_error(url, e.desc.to_string(), senders);
+ send_error(url, e.desc.to_string(), senders, cookies_chan);
return;
}
_ => {}
@@ -145,7 +147,7 @@ reason: \"certificate verify failed\" }]";
match req.start() {
Ok(w) => w,
Err(e) => {
- send_error(url, e.description().to_string(), senders);
+ send_error(url, e.description().to_string(), senders, cookies_chan);
return;
}
}
@@ -154,7 +156,7 @@ reason: \"certificate verify failed\" }]";
let mut response = match writer.send() {
Ok(r) => r,
Err(e) => {
- send_error(url, e.description().to_string(), senders);
+ send_error(url, e.description().to_string(), senders, cookies_chan);
return;
}
};
@@ -167,6 +169,16 @@ reason: \"certificate verify failed\" }]";
}
}
+ let mut cookies = Vec::new();
+ for header in response.headers.iter() {
+ if header.name().as_slice() == "Set-Cookie" {
+ match Cookie::new(header.value_string(), &url) {
+ Some(cookie) => cookies.push(cookie),
+ None => continue
+ }
+ }
+ }
+
if response.status.class() == StatusClass::Redirection {
match response.headers.get::<Location>() {
Some(&Location(ref new_url)) => {
@@ -175,7 +187,7 @@ reason: \"certificate verify failed\" }]";
Some(ref c) => {
if c.preflight {
// The preflight lied
- send_error(url, "Preflight fetch inconsistent with main fetch".to_string(), senders);
+ send_error(url, "Preflight fetch inconsistent with main fetch".to_string(), senders, cookies_chan);
return;
} else {
// XXXManishearth There are some CORS-related steps here,
@@ -187,7 +199,7 @@ reason: \"certificate verify failed\" }]";
let new_url = match UrlParser::new().base_url(&url).parse(new_url.as_slice()) {
Ok(u) => u,
Err(e) => {
- send_error(url, e.to_string(), senders);
+ send_error(url, e.to_string(), senders, cookies_chan);
return;
}
};
@@ -206,8 +218,9 @@ reason: \"certificate verify failed\" }]";
});
metadata.headers = Some(response.headers.clone());
metadata.status = Some(response.status_raw().clone());
+ metadata.cookies = cookies;
- let progress_chan = match start_sending_opt(senders, metadata) {
+ let progress_chan = match start_sending_opt(senders, metadata, cookies_chan) {
Ok(p) => p,
_ => return
};
diff --git a/components/net/image_cache_task.rs b/components/net/image_cache_task.rs
index f94da999a9f..fa8d189c943 100644
--- a/components/net/image_cache_task.rs
+++ b/components/net/image_cache_task.rs
@@ -555,6 +555,13 @@ mod tests {
}
fn mock_resource_task<T: Closure+Send>(on_load: Box<T>) -> ResourceTask {
+ let cookie_chan = spawn_listener(move |port: Receiver<resource_task::ControlMsg>| {
+ loop {
+ match port.recv() {
+ _ => { continue }
+ }
+ }
+ });
spawn_listener(move |port: Receiver<resource_task::ControlMsg>| {
loop {
match port.recv().unwrap() {
@@ -565,9 +572,10 @@ mod tests {
eventual_consumer: response.consumer.clone(),
};
let chan = start_sending(senders, Metadata::default(
- Url::parse("file:///fake").unwrap()));
+ Url::parse("file:///fake", cookie_chan.clone()).unwrap()));
on_load.invoke(chan);
}
+ resource_task::ControlMsg::Cookies(_) => {}
resource_task::ControlMsg::Exit => break
}
}
@@ -710,6 +718,13 @@ mod tests {
let (image_bin_sent_chan, image_bin_sent) = channel();
let (resource_task_exited_chan, resource_task_exited) = channel();
+ let cookie_chan = spawn_listener(move |port: Receiver<resource_task::ControlMsg>| {
+ loop {
+ match port.recv() {
+ _ => { continue }
+ }
+ }
+ });
let mock_resource_task = spawn_listener(move |port: Receiver<resource_task::ControlMsg>| {
loop {
@@ -721,11 +736,12 @@ mod tests {
eventual_consumer: response.consumer.clone(),
};
let chan = start_sending(senders, Metadata::default(
- Url::parse("file:///fake").unwrap()));
+ Url::parse("file:///fake").unwrap()), cookie_chan.clone());
chan.send(Payload(test_image_bin()));
chan.send(Done(Ok(())));
image_bin_sent_chan.send(());
}
+ resource_task::ControlMsg::Cookies(_) => {}
resource_task::ControlMsg::Exit => {
resource_task_exited_chan.send(());
break
@@ -762,7 +778,13 @@ mod tests {
let (image_bin_sent_chan, image_bin_sent) = channel();
let (resource_task_exited_chan, resource_task_exited) = channel();
-
+ let cookie_chan = spawn_listener(move |port: Receiver<resource_task::ControlMsg>| {
+ loop {
+ match port.recv() {
+ _ => { continue }
+ }
+ }
+ });
let mock_resource_task = spawn_listener(move |port: Receiver<resource_task::ControlMsg>| {
loop {
match port.recv().unwrap() {
@@ -773,11 +795,12 @@ mod tests {
eventual_consumer: response.consumer.clone(),
};
let chan = start_sending(senders, Metadata::default(
- Url::parse("file:///fake").unwrap()));
+ Url::parse("file:///fake").unwrap()), cookie_chan.clone());
chan.send(Payload(test_image_bin()));
chan.send(Done(Err("".to_string())));
image_bin_sent_chan.send(());
}
+ resource_task::ControlMsg::Cookies(_) => {}
resource_task::ControlMsg::Exit => {
resource_task_exited_chan.send(());
break
diff --git a/components/net/lib.rs b/components/net/lib.rs
index 130df50aa4d..be626d288b6 100644
--- a/components/net/lib.rs
+++ b/components/net/lib.rs
@@ -38,8 +38,11 @@ pub mod about_loader;
pub mod file_loader;
pub mod http_loader;
pub mod data_loader;
+pub mod cookie;
+pub mod cookie_storage;
pub mod image_cache_task;
pub mod local_image_cache;
+pub mod pub_domains;
pub mod resource_task;
pub mod storage_task;
mod sniffer_task;
diff --git a/components/net/pub_domains.rs b/components/net/pub_domains.rs
new file mode 100644
index 00000000000..906b942f1be
--- /dev/null
+++ b/components/net/pub_domains.rs
@@ -0,0 +1,5959 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+pub static PUB_DOMAINS : [&'static str; 5953] = [
+"com.ac",
+"edu.ac",
+"gov.ac",
+"net.ac",
+"mil.ac",
+"org.ac",
+"nom.ad",
+"co.ae",
+"net.ae",
+"org.ae",
+"sch.ae",
+"ac.ae",
+"gov.ae",
+"mil.ae",
+"accident-investigation.aero",
+"accident-prevention.aero",
+"aerobatic.aero",
+"aeroclub.aero",
+"aerodrome.aero",
+"agents.aero",
+"aircraft.aero",
+"airline.aero",
+"airport.aero",
+"air-surveillance.aero",
+"airtraffic.aero",
+"air-traffic-control.aero",
+"ambulance.aero",
+"amusement.aero",
+"association.aero",
+"author.aero",
+"ballooning.aero",
+"broker.aero",
+"caa.aero",
+"cargo.aero",
+"catering.aero",
+"certification.aero",
+"championship.aero",
+"charter.aero",
+"civilaviation.aero",
+"club.aero",
+"conference.aero",
+"consultant.aero",
+"consulting.aero",
+"control.aero",
+"council.aero",
+"crew.aero",
+"design.aero",
+"dgca.aero",
+"educator.aero",
+"emergency.aero",
+"engine.aero",
+"engineer.aero",
+"entertainment.aero",
+"equipment.aero",
+"exchange.aero",
+"express.aero",
+"federation.aero",
+"flight.aero",
+"freight.aero",
+"fuel.aero",
+"gliding.aero",
+"government.aero",
+"groundhandling.aero",
+"group.aero",
+"hanggliding.aero",
+"homebuilt.aero",
+"insurance.aero",
+"journal.aero",
+"journalist.aero",
+"leasing.aero",
+"logistics.aero",
+"magazine.aero",
+"maintenance.aero",
+"marketplace.aero",
+"media.aero",
+"microlight.aero",
+"modelling.aero",
+"navigation.aero",
+"parachuting.aero",
+"paragliding.aero",
+"passenger-association.aero",
+"pilot.aero",
+"press.aero",
+"production.aero",
+"recreation.aero",
+"repbody.aero",
+"res.aero",
+"research.aero",
+"rotorcraft.aero",
+"safety.aero",
+"scientist.aero",
+"services.aero",
+"show.aero",
+"skydiving.aero",
+"software.aero",
+"student.aero",
+"taxi.aero",
+"trader.aero",
+"trading.aero",
+"trainer.aero",
+"union.aero",
+"workinggroup.aero",
+"works.aero",
+"gov.af",
+"com.af",
+"org.af",
+"net.af",
+"edu.af",
+"com.ag",
+"org.ag",
+"net.ag",
+"co.ag",
+"nom.ag",
+"off.ai",
+"com.ai",
+"net.ai",
+"org.ai",
+"com.al",
+"edu.al",
+"gov.al",
+"mil.al",
+"net.al",
+"org.al",
+"com.an",
+"net.an",
+"org.an",
+"edu.an",
+"ed.ao",
+"gv.ao",
+"og.ao",
+"co.ao",
+"pb.ao",
+"it.ao",
+"com.ar",
+"edu.ar",
+"gob.ar",
+"int.ar",
+"mil.ar",
+"net.ar",
+"org.ar",
+"tur.ar",
+"e164.arpa",
+"in-addr.arpa",
+"ip6.arpa",
+"iris.arpa",
+"uri.arpa",
+"urn.arpa",
+"gov.as",
+"ac.at",
+"co.at",
+"gv.at",
+"or.at",
+"com.au",
+"net.au",
+"org.au",
+"edu.au",
+"gov.au",
+"asn.au",
+"id.au",
+"csiro.au",
+"info.au",
+"conf.au",
+"oz.au",
+"act.au",
+"nsw.au",
+"nt.au",
+"qld.au",
+"sa.au",
+"tas.au",
+"vic.au",
+"wa.au",
+"act.edu.au",
+"nsw.edu.au",
+"nt.edu.au",
+"qld.edu.au",
+"sa.edu.au",
+"tas.edu.au",
+"vic.edu.au",
+"wa.edu.au",
+"act.gov.au",
+"qld.gov.au",
+"sa.gov.au",
+"tas.gov.au",
+"vic.gov.au",
+"wa.gov.au",
+"com.aw",
+"com.az",
+"net.az",
+"int.az",
+"gov.az",
+"org.az",
+"edu.az",
+"info.az",
+"pp.az",
+"mil.az",
+"name.az",
+"pro.az",
+"biz.az",
+"org.ba",
+"net.ba",
+"edu.ba",
+"gov.ba",
+"mil.ba",
+"unsa.ba",
+"unbi.ba",
+"co.ba",
+"com.ba",
+"rs.ba",
+"biz.bb",
+"com.bb",
+"edu.bb",
+"gov.bb",
+"info.bb",
+"net.bb",
+"org.bb",
+"store.bb",
+"bd",
+"ac.be",
+"gov.bf",
+"a.bg",
+"b.bg",
+"c.bg",
+"d.bg",
+"e.bg",
+"f.bg",
+"g.bg",
+"h.bg",
+"i.bg",
+"j.bg",
+"k.bg",
+"l.bg",
+"m.bg",
+"n.bg",
+"o.bg",
+"p.bg",
+"q.bg",
+"r.bg",
+"s.bg",
+"t.bg",
+"u.bg",
+"v.bg",
+"w.bg",
+"x.bg",
+"y.bg",
+"z.bg",
+"0.bg",
+"1.bg",
+"2.bg",
+"3.bg",
+"4.bg",
+"5.bg",
+"6.bg",
+"7.bg",
+"8.bg",
+"9.bg",
+"com.bh",
+"edu.bh",
+"net.bh",
+"org.bh",
+"gov.bh",
+"co.bi",
+"com.bi",
+"edu.bi",
+"or.bi",
+"org.bi",
+"asso.bj",
+"barreau.bj",
+"gouv.bj",
+"com.bm",
+"edu.bm",
+"gov.bm",
+"net.bm",
+"org.bm",
+"bn",
+"com.bo",
+"edu.bo",
+"gov.bo",
+"gob.bo",
+"int.bo",
+"org.bo",
+"net.bo",
+"mil.bo",
+"tv.bo",
+"adm.br",
+"adv.br",
+"agr.br",
+"am.br",
+"arq.br",
+"art.br",
+"ato.br",
+"b.br",
+"bio.br",
+"blog.br",
+"bmd.br",
+"cim.br",
+"cng.br",
+"cnt.br",
+"com.br",
+"coop.br",
+"ecn.br",
+"eco.br",
+"edu.br",
+"emp.br",
+"eng.br",
+"esp.br",
+"etc.br",
+"eti.br",
+"far.br",
+"flog.br",
+"fm.br",
+"fnd.br",
+"fot.br",
+"fst.br",
+"g12.br",
+"ggf.br",
+"gov.br",
+"imb.br",
+"ind.br",
+"inf.br",
+"jor.br",
+"jus.br",
+"leg.br",
+"lel.br",
+"mat.br",
+"med.br",
+"mil.br",
+"mp.br",
+"mus.br",
+"net.br",
+"nom.br",
+"not.br",
+"ntr.br",
+"odo.br",
+"org.br",
+"ppg.br",
+"pro.br",
+"psc.br",
+"psi.br",
+"qsl.br",
+"radio.br",
+"rec.br",
+"slg.br",
+"srv.br",
+"taxi.br",
+"teo.br",
+"tmp.br",
+"trd.br",
+"tur.br",
+"tv.br",
+"vet.br",
+"vlog.br",
+"wiki.br",
+"zlg.br",
+"com.bs",
+"net.bs",
+"org.bs",
+"edu.bs",
+"gov.bs",
+"com.bt",
+"edu.bt",
+"gov.bt",
+"net.bt",
+"org.bt",
+"co.bw",
+"org.bw",
+"gov.by",
+"mil.by",
+"com.by",
+"of.by",
+"com.bz",
+"net.bz",
+"org.bz",
+"edu.bz",
+"gov.bz",
+"ab.ca",
+"bc.ca",
+"mb.ca",
+"nb.ca",
+"nf.ca",
+"nl.ca",
+"ns.ca",
+"nt.ca",
+"nu.ca",
+"on.ca",
+"pe.ca",
+"qc.ca",
+"sk.ca",
+"yk.ca",
+"gc.ca",
+"gov.cd",
+"org.ci",
+"or.ci",
+"com.ci",
+"co.ci",
+"edu.ci",
+"ed.ci",
+"ac.ci",
+"net.ci",
+"go.ci",
+"asso.ci",
+"xn--aroport-bya.ci",
+"int.ci",
+"presse.ci",
+"md.ci",
+"gouv.ci",
+"ck",
+"www.ck",
+"gov.cl",
+"gob.cl",
+"co.cl",
+"mil.cl",
+"gov.cm",
+"ac.cn",
+"com.cn",
+"edu.cn",
+"gov.cn",
+"net.cn",
+"org.cn",
+"mil.cn",
+"xn--55qx5d.cn",
+"xn--io0a7i.cn",
+"xn--od0alg.cn",
+"ah.cn",
+"bj.cn",
+"cq.cn",
+"fj.cn",
+"gd.cn",
+"gs.cn",
+"gz.cn",
+"gx.cn",
+"ha.cn",
+"hb.cn",
+"he.cn",
+"hi.cn",
+"hl.cn",
+"hn.cn",
+"jl.cn",
+"js.cn",
+"jx.cn",
+"ln.cn",
+"nm.cn",
+"nx.cn",
+"qh.cn",
+"sc.cn",
+"sd.cn",
+"sh.cn",
+"sn.cn",
+"sx.cn",
+"tj.cn",
+"xj.cn",
+"xz.cn",
+"yn.cn",
+"zj.cn",
+"hk.cn",
+"mo.cn",
+"tw.cn",
+"arts.co",
+"com.co",
+"edu.co",
+"firm.co",
+"gov.co",
+"info.co",
+"int.co",
+"mil.co",
+"net.co",
+"nom.co",
+"org.co",
+"rec.co",
+"web.co",
+"ac.cr",
+"co.cr",
+"ed.cr",
+"fi.cr",
+"go.cr",
+"or.cr",
+"sa.cr",
+"com.cu",
+"edu.cu",
+"org.cu",
+"net.cu",
+"gov.cu",
+"inf.cu",
+"com.cw",
+"edu.cw",
+"net.cw",
+"org.cw",
+"gov.cx",
+"cy",
+"com.dm",
+"net.dm",
+"org.dm",
+"edu.dm",
+"gov.dm",
+"art.do",
+"com.do",
+"edu.do",
+"gob.do",
+"gov.do",
+"mil.do",
+"net.do",
+"org.do",
+"sld.do",
+"web.do",
+"com.dz",
+"org.dz",
+"net.dz",
+"gov.dz",
+"edu.dz",
+"asso.dz",
+"pol.dz",
+"art.dz",
+"com.ec",
+"info.ec",
+"net.ec",
+"fin.ec",
+"k12.ec",
+"med.ec",
+"pro.ec",
+"org.ec",
+"edu.ec",
+"gov.ec",
+"gob.ec",
+"mil.ec",
+"edu.ee",
+"gov.ee",
+"riik.ee",
+"lib.ee",
+"med.ee",
+"com.ee",
+"pri.ee",
+"aip.ee",
+"org.ee",
+"fie.ee",
+"com.eg",
+"edu.eg",
+"eun.eg",
+"gov.eg",
+"mil.eg",
+"name.eg",
+"net.eg",
+"org.eg",
+"sci.eg",
+"er",
+"com.es",
+"nom.es",
+"org.es",
+"gob.es",
+"edu.es",
+"et",
+"aland.fi",
+"fj",
+"fk",
+"com.fr",
+"asso.fr",
+"nom.fr",
+"prd.fr",
+"presse.fr",
+"tm.fr",
+"aeroport.fr",
+"assedic.fr",
+"avocat.fr",
+"avoues.fr",
+"cci.fr",
+"chambagri.fr",
+"chirurgiens-dentistes.fr",
+"experts-comptables.fr",
+"geometre-expert.fr",
+"gouv.fr",
+"greta.fr",
+"huissier-justice.fr",
+"medecin.fr",
+"notaires.fr",
+"pharmacien.fr",
+"port.fr",
+"veterinaire.fr",
+"com.ge",
+"edu.ge",
+"gov.ge",
+"org.ge",
+"mil.ge",
+"net.ge",
+"pvt.ge",
+"co.gg",
+"net.gg",
+"org.gg",
+"com.gh",
+"edu.gh",
+"gov.gh",
+"org.gh",
+"mil.gh",
+"com.gi",
+"ltd.gi",
+"gov.gi",
+"mod.gi",
+"edu.gi",
+"org.gi",
+"ac.gn",
+"com.gn",
+"edu.gn",
+"gov.gn",
+"org.gn",
+"net.gn",
+"com.gp",
+"net.gp",
+"mobi.gp",
+"edu.gp",
+"org.gp",
+"asso.gp",
+"com.gr",
+"edu.gr",
+"net.gr",
+"org.gr",
+"gov.gr",
+"com.gt",
+"edu.gt",
+"gob.gt",
+"ind.gt",
+"mil.gt",
+"net.gt",
+"org.gt",
+"gu",
+"co.gy",
+"com.gy",
+"net.gy",
+"com.hk",
+"edu.hk",
+"gov.hk",
+"idv.hk",
+"net.hk",
+"org.hk",
+"xn--55qx5d.hk",
+"xn--wcvs22d.hk",
+"xn--lcvr32d.hk",
+"xn--mxtq1m.hk",
+"xn--gmqw5a.hk",
+"xn--ciqpn.hk",
+"xn--gmq050i.hk",
+"xn--zf0avx.hk",
+"xn--io0a7i.hk",
+"xn--mk0axi.hk",
+"xn--od0alg.hk",
+"xn--od0aq3b.hk",
+"xn--tn0ag.hk",
+"xn--uc0atv.hk",
+"xn--uc0ay4a.hk",
+"com.hn",
+"edu.hn",
+"org.hn",
+"net.hn",
+"mil.hn",
+"gob.hn",
+"iz.hr",
+"from.hr",
+"name.hr",
+"com.hr",
+"com.ht",
+"shop.ht",
+"firm.ht",
+"info.ht",
+"adult.ht",
+"net.ht",
+"pro.ht",
+"org.ht",
+"med.ht",
+"art.ht",
+"coop.ht",
+"pol.ht",
+"asso.ht",
+"edu.ht",
+"rel.ht",
+"gouv.ht",
+"perso.ht",
+"co.hu",
+"info.hu",
+"org.hu",
+"priv.hu",
+"sport.hu",
+"tm.hu",
+"2000.hu",
+"agrar.hu",
+"bolt.hu",
+"casino.hu",
+"city.hu",
+"erotica.hu",
+"erotika.hu",
+"film.hu",
+"forum.hu",
+"games.hu",
+"hotel.hu",
+"ingatlan.hu",
+"jogasz.hu",
+"konyvelo.hu",
+"lakas.hu",
+"media.hu",
+"news.hu",
+"reklam.hu",
+"sex.hu",
+"shop.hu",
+"suli.hu",
+"szex.hu",
+"tozsde.hu",
+"utazas.hu",
+"video.hu",
+"ac.id",
+"biz.id",
+"co.id",
+"desa.id",
+"go.id",
+"mil.id",
+"my.id",
+"net.id",
+"or.id",
+"sch.id",
+"web.id",
+"gov.ie",
+"il",
+"ac.im",
+"co.im",
+"com.im",
+"ltd.co.im",
+"net.im",
+"org.im",
+"plc.co.im",
+"tt.im",
+"tv.im",
+"co.in",
+"firm.in",
+"net.in",
+"org.in",
+"gen.in",
+"ind.in",
+"nic.in",
+"ac.in",
+"edu.in",
+"res.in",
+"gov.in",
+"mil.in",
+"eu.int",
+"com.io",
+"gov.iq",
+"edu.iq",
+"mil.iq",
+"com.iq",
+"org.iq",
+"net.iq",
+"ac.ir",
+"co.ir",
+"gov.ir",
+"id.ir",
+"net.ir",
+"org.ir",
+"sch.ir",
+"xn--mgba3a4f16a.ir",
+"xn--mgba3a4fra.ir",
+"net.is",
+"com.is",
+"edu.is",
+"gov.is",
+"org.is",
+"int.is",
+"gov.it",
+"edu.it",
+"abr.it",
+"abruzzo.it",
+"aosta-valley.it",
+"aostavalley.it",
+"bas.it",
+"basilicata.it",
+"cal.it",
+"calabria.it",
+"cam.it",
+"campania.it",
+"emilia-romagna.it",
+"emiliaromagna.it",
+"emr.it",
+"friuli-v-giulia.it",
+"friuli-ve-giulia.it",
+"friuli-vegiulia.it",
+"friuli-venezia-giulia.it",
+"friuli-veneziagiulia.it",
+"friuli-vgiulia.it",
+"friuliv-giulia.it",
+"friulive-giulia.it",
+"friulivegiulia.it",
+"friulivenezia-giulia.it",
+"friuliveneziagiulia.it",
+"friulivgiulia.it",
+"fvg.it",
+"laz.it",
+"lazio.it",
+"lig.it",
+"liguria.it",
+"lom.it",
+"lombardia.it",
+"lombardy.it",
+"lucania.it",
+"mar.it",
+"marche.it",
+"mol.it",
+"molise.it",
+"piedmont.it",
+"piemonte.it",
+"pmn.it",
+"pug.it",
+"puglia.it",
+"sar.it",
+"sardegna.it",
+"sardinia.it",
+"sic.it",
+"sicilia.it",
+"sicily.it",
+"taa.it",
+"tos.it",
+"toscana.it",
+"trentino-a-adige.it",
+"trentino-aadige.it",
+"trentino-alto-adige.it",
+"trentino-altoadige.it",
+"trentino-s-tirol.it",
+"trentino-stirol.it",
+"trentino-sud-tirol.it",
+"trentino-sudtirol.it",
+"trentino-sued-tirol.it",
+"trentino-suedtirol.it",
+"trentinoa-adige.it",
+"trentinoaadige.it",
+"trentinoalto-adige.it",
+"trentinoaltoadige.it",
+"trentinos-tirol.it",
+"trentinostirol.it",
+"trentinosud-tirol.it",
+"trentinosudtirol.it",
+"trentinosued-tirol.it",
+"trentinosuedtirol.it",
+"tuscany.it",
+"umb.it",
+"umbria.it",
+"val-d-aosta.it",
+"val-daosta.it",
+"vald-aosta.it",
+"valdaosta.it",
+"valle-aosta.it",
+"valle-d-aosta.it",
+"valle-daosta.it",
+"valleaosta.it",
+"valled-aosta.it",
+"valledaosta.it",
+"vallee-aoste.it",
+"valleeaoste.it",
+"vao.it",
+"vda.it",
+"ven.it",
+"veneto.it",
+"ag.it",
+"agrigento.it",
+"al.it",
+"alessandria.it",
+"alto-adige.it",
+"altoadige.it",
+"an.it",
+"ancona.it",
+"andria-barletta-trani.it",
+"andria-trani-barletta.it",
+"andriabarlettatrani.it",
+"andriatranibarletta.it",
+"ao.it",
+"aosta.it",
+"aoste.it",
+"ap.it",
+"aq.it",
+"aquila.it",
+"ar.it",
+"arezzo.it",
+"ascoli-piceno.it",
+"ascolipiceno.it",
+"asti.it",
+"at.it",
+"av.it",
+"avellino.it",
+"ba.it",
+"balsan.it",
+"bari.it",
+"barletta-trani-andria.it",
+"barlettatraniandria.it",
+"belluno.it",
+"benevento.it",
+"bergamo.it",
+"bg.it",
+"bi.it",
+"biella.it",
+"bl.it",
+"bn.it",
+"bo.it",
+"bologna.it",
+"bolzano.it",
+"bozen.it",
+"br.it",
+"brescia.it",
+"brindisi.it",
+"bs.it",
+"bt.it",
+"bz.it",
+"ca.it",
+"cagliari.it",
+"caltanissetta.it",
+"campidano-medio.it",
+"campidanomedio.it",
+"campobasso.it",
+"carbonia-iglesias.it",
+"carboniaiglesias.it",
+"carrara-massa.it",
+"carraramassa.it",
+"caserta.it",
+"catania.it",
+"catanzaro.it",
+"cb.it",
+"ce.it",
+"cesena-forli.it",
+"cesenaforli.it",
+"ch.it",
+"chieti.it",
+"ci.it",
+"cl.it",
+"cn.it",
+"co.it",
+"como.it",
+"cosenza.it",
+"cr.it",
+"cremona.it",
+"crotone.it",
+"cs.it",
+"ct.it",
+"cuneo.it",
+"cz.it",
+"dell-ogliastra.it",
+"dellogliastra.it",
+"en.it",
+"enna.it",
+"fc.it",
+"fe.it",
+"fermo.it",
+"ferrara.it",
+"fg.it",
+"fi.it",
+"firenze.it",
+"florence.it",
+"fm.it",
+"foggia.it",
+"forli-cesena.it",
+"forlicesena.it",
+"fr.it",
+"frosinone.it",
+"ge.it",
+"genoa.it",
+"genova.it",
+"go.it",
+"gorizia.it",
+"gr.it",
+"grosseto.it",
+"iglesias-carbonia.it",
+"iglesiascarbonia.it",
+"im.it",
+"imperia.it",
+"is.it",
+"isernia.it",
+"kr.it",
+"la-spezia.it",
+"laquila.it",
+"laspezia.it",
+"latina.it",
+"lc.it",
+"le.it",
+"lecce.it",
+"lecco.it",
+"li.it",
+"livorno.it",
+"lo.it",
+"lodi.it",
+"lt.it",
+"lu.it",
+"lucca.it",
+"macerata.it",
+"mantova.it",
+"massa-carrara.it",
+"massacarrara.it",
+"matera.it",
+"mb.it",
+"mc.it",
+"me.it",
+"medio-campidano.it",
+"mediocampidano.it",
+"messina.it",
+"mi.it",
+"milan.it",
+"milano.it",
+"mn.it",
+"mo.it",
+"modena.it",
+"monza-brianza.it",
+"monza-e-della-brianza.it",
+"monza.it",
+"monzabrianza.it",
+"monzaebrianza.it",
+"monzaedellabrianza.it",
+"ms.it",
+"mt.it",
+"na.it",
+"naples.it",
+"napoli.it",
+"no.it",
+"novara.it",
+"nu.it",
+"nuoro.it",
+"og.it",
+"ogliastra.it",
+"olbia-tempio.it",
+"olbiatempio.it",
+"or.it",
+"oristano.it",
+"ot.it",
+"pa.it",
+"padova.it",
+"padua.it",
+"palermo.it",
+"parma.it",
+"pavia.it",
+"pc.it",
+"pd.it",
+"pe.it",
+"perugia.it",
+"pesaro-urbino.it",
+"pesarourbino.it",
+"pescara.it",
+"pg.it",
+"pi.it",
+"piacenza.it",
+"pisa.it",
+"pistoia.it",
+"pn.it",
+"po.it",
+"pordenone.it",
+"potenza.it",
+"pr.it",
+"prato.it",
+"pt.it",
+"pu.it",
+"pv.it",
+"pz.it",
+"ra.it",
+"ragusa.it",
+"ravenna.it",
+"rc.it",
+"re.it",
+"reggio-calabria.it",
+"reggio-emilia.it",
+"reggiocalabria.it",
+"reggioemilia.it",
+"rg.it",
+"ri.it",
+"rieti.it",
+"rimini.it",
+"rm.it",
+"rn.it",
+"ro.it",
+"roma.it",
+"rome.it",
+"rovigo.it",
+"sa.it",
+"salerno.it",
+"sassari.it",
+"savona.it",
+"si.it",
+"siena.it",
+"siracusa.it",
+"so.it",
+"sondrio.it",
+"sp.it",
+"sr.it",
+"ss.it",
+"suedtirol.it",
+"sv.it",
+"ta.it",
+"taranto.it",
+"te.it",
+"tempio-olbia.it",
+"tempioolbia.it",
+"teramo.it",
+"terni.it",
+"tn.it",
+"to.it",
+"torino.it",
+"tp.it",
+"tr.it",
+"trani-andria-barletta.it",
+"trani-barletta-andria.it",
+"traniandriabarletta.it",
+"tranibarlettaandria.it",
+"trapani.it",
+"trentino.it",
+"trento.it",
+"treviso.it",
+"trieste.it",
+"ts.it",
+"turin.it",
+"tv.it",
+"ud.it",
+"udine.it",
+"urbino-pesaro.it",
+"urbinopesaro.it",
+"va.it",
+"varese.it",
+"vb.it",
+"vc.it",
+"ve.it",
+"venezia.it",
+"venice.it",
+"verbania.it",
+"vercelli.it",
+"verona.it",
+"vi.it",
+"vibo-valentia.it",
+"vibovalentia.it",
+"vicenza.it",
+"viterbo.it",
+"vr.it",
+"vs.it",
+"vt.it",
+"vv.it",
+"co.je",
+"net.je",
+"org.je",
+"jm",
+"com.jo",
+"org.jo",
+"net.jo",
+"edu.jo",
+"sch.jo",
+"gov.jo",
+"mil.jo",
+"name.jo",
+"ac.jp",
+"ad.jp",
+"co.jp",
+"ed.jp",
+"go.jp",
+"gr.jp",
+"lg.jp",
+"ne.jp",
+"or.jp",
+"aichi.jp",
+"akita.jp",
+"aomori.jp",
+"chiba.jp",
+"ehime.jp",
+"fukui.jp",
+"fukuoka.jp",
+"fukushima.jp",
+"gifu.jp",
+"gunma.jp",
+"hiroshima.jp",
+"hokkaido.jp",
+"hyogo.jp",
+"ibaraki.jp",
+"ishikawa.jp",
+"iwate.jp",
+"kagawa.jp",
+"kagoshima.jp",
+"kanagawa.jp",
+"kochi.jp",
+"kumamoto.jp",
+"kyoto.jp",
+"mie.jp",
+"miyagi.jp",
+"miyazaki.jp",
+"nagano.jp",
+"nagasaki.jp",
+"nara.jp",
+"niigata.jp",
+"oita.jp",
+"okayama.jp",
+"okinawa.jp",
+"osaka.jp",
+"saga.jp",
+"saitama.jp",
+"shiga.jp",
+"shimane.jp",
+"shizuoka.jp",
+"tochigi.jp",
+"tokushima.jp",
+"tokyo.jp",
+"tottori.jp",
+"toyama.jp",
+"wakayama.jp",
+"yamagata.jp",
+"yamaguchi.jp",
+"yamanashi.jp",
+"kawasaki.jp",
+"kitakyushu.jp",
+"kobe.jp",
+"nagoya.jp",
+"sapporo.jp",
+"sendai.jp",
+"yokohama.jp",
+"city.kawasaki.jp",
+"city.kitakyushu.jp",
+"city.kobe.jp",
+"city.nagoya.jp",
+"city.sapporo.jp",
+"city.sendai.jp",
+"city.yokohama.jp",
+"aisai.aichi.jp",
+"ama.aichi.jp",
+"anjo.aichi.jp",
+"asuke.aichi.jp",
+"chiryu.aichi.jp",
+"chita.aichi.jp",
+"fuso.aichi.jp",
+"gamagori.aichi.jp",
+"handa.aichi.jp",
+"hazu.aichi.jp",
+"hekinan.aichi.jp",
+"higashiura.aichi.jp",
+"ichinomiya.aichi.jp",
+"inazawa.aichi.jp",
+"inuyama.aichi.jp",
+"isshiki.aichi.jp",
+"iwakura.aichi.jp",
+"kanie.aichi.jp",
+"kariya.aichi.jp",
+"kasugai.aichi.jp",
+"kira.aichi.jp",
+"kiyosu.aichi.jp",
+"komaki.aichi.jp",
+"konan.aichi.jp",
+"kota.aichi.jp",
+"mihama.aichi.jp",
+"miyoshi.aichi.jp",
+"nishio.aichi.jp",
+"nisshin.aichi.jp",
+"obu.aichi.jp",
+"oguchi.aichi.jp",
+"oharu.aichi.jp",
+"okazaki.aichi.jp",
+"owariasahi.aichi.jp",
+"seto.aichi.jp",
+"shikatsu.aichi.jp",
+"shinshiro.aichi.jp",
+"shitara.aichi.jp",
+"tahara.aichi.jp",
+"takahama.aichi.jp",
+"tobishima.aichi.jp",
+"toei.aichi.jp",
+"togo.aichi.jp",
+"tokai.aichi.jp",
+"tokoname.aichi.jp",
+"toyoake.aichi.jp",
+"toyohashi.aichi.jp",
+"toyokawa.aichi.jp",
+"toyone.aichi.jp",
+"toyota.aichi.jp",
+"tsushima.aichi.jp",
+"yatomi.aichi.jp",
+"akita.akita.jp",
+"daisen.akita.jp",
+"fujisato.akita.jp",
+"gojome.akita.jp",
+"hachirogata.akita.jp",
+"happou.akita.jp",
+"higashinaruse.akita.jp",
+"honjo.akita.jp",
+"honjyo.akita.jp",
+"ikawa.akita.jp",
+"kamikoani.akita.jp",
+"kamioka.akita.jp",
+"katagami.akita.jp",
+"kazuno.akita.jp",
+"kitaakita.akita.jp",
+"kosaka.akita.jp",
+"kyowa.akita.jp",
+"misato.akita.jp",
+"mitane.akita.jp",
+"moriyoshi.akita.jp",
+"nikaho.akita.jp",
+"noshiro.akita.jp",
+"odate.akita.jp",
+"oga.akita.jp",
+"ogata.akita.jp",
+"semboku.akita.jp",
+"yokote.akita.jp",
+"yurihonjo.akita.jp",
+"aomori.aomori.jp",
+"gonohe.aomori.jp",
+"hachinohe.aomori.jp",
+"hashikami.aomori.jp",
+"hiranai.aomori.jp",
+"hirosaki.aomori.jp",
+"itayanagi.aomori.jp",
+"kuroishi.aomori.jp",
+"misawa.aomori.jp",
+"mutsu.aomori.jp",
+"nakadomari.aomori.jp",
+"noheji.aomori.jp",
+"oirase.aomori.jp",
+"owani.aomori.jp",
+"rokunohe.aomori.jp",
+"sannohe.aomori.jp",
+"shichinohe.aomori.jp",
+"shingo.aomori.jp",
+"takko.aomori.jp",
+"towada.aomori.jp",
+"tsugaru.aomori.jp",
+"tsuruta.aomori.jp",
+"abiko.chiba.jp",
+"asahi.chiba.jp",
+"chonan.chiba.jp",
+"chosei.chiba.jp",
+"choshi.chiba.jp",
+"chuo.chiba.jp",
+"funabashi.chiba.jp",
+"futtsu.chiba.jp",
+"hanamigawa.chiba.jp",
+"ichihara.chiba.jp",
+"ichikawa.chiba.jp",
+"ichinomiya.chiba.jp",
+"inzai.chiba.jp",
+"isumi.chiba.jp",
+"kamagaya.chiba.jp",
+"kamogawa.chiba.jp",
+"kashiwa.chiba.jp",
+"katori.chiba.jp",
+"katsuura.chiba.jp",
+"kimitsu.chiba.jp",
+"kisarazu.chiba.jp",
+"kozaki.chiba.jp",
+"kujukuri.chiba.jp",
+"kyonan.chiba.jp",
+"matsudo.chiba.jp",
+"midori.chiba.jp",
+"mihama.chiba.jp",
+"minamiboso.chiba.jp",
+"mobara.chiba.jp",
+"mutsuzawa.chiba.jp",
+"nagara.chiba.jp",
+"nagareyama.chiba.jp",
+"narashino.chiba.jp",
+"narita.chiba.jp",
+"noda.chiba.jp",
+"oamishirasato.chiba.jp",
+"omigawa.chiba.jp",
+"onjuku.chiba.jp",
+"otaki.chiba.jp",
+"sakae.chiba.jp",
+"sakura.chiba.jp",
+"shimofusa.chiba.jp",
+"shirako.chiba.jp",
+"shiroi.chiba.jp",
+"shisui.chiba.jp",
+"sodegaura.chiba.jp",
+"sosa.chiba.jp",
+"tako.chiba.jp",
+"tateyama.chiba.jp",
+"togane.chiba.jp",
+"tohnosho.chiba.jp",
+"tomisato.chiba.jp",
+"urayasu.chiba.jp",
+"yachimata.chiba.jp",
+"yachiyo.chiba.jp",
+"yokaichiba.chiba.jp",
+"yokoshibahikari.chiba.jp",
+"yotsukaido.chiba.jp",
+"ainan.ehime.jp",
+"honai.ehime.jp",
+"ikata.ehime.jp",
+"imabari.ehime.jp",
+"iyo.ehime.jp",
+"kamijima.ehime.jp",
+"kihoku.ehime.jp",
+"kumakogen.ehime.jp",
+"masaki.ehime.jp",
+"matsuno.ehime.jp",
+"matsuyama.ehime.jp",
+"namikata.ehime.jp",
+"niihama.ehime.jp",
+"ozu.ehime.jp",
+"saijo.ehime.jp",
+"seiyo.ehime.jp",
+"shikokuchuo.ehime.jp",
+"tobe.ehime.jp",
+"toon.ehime.jp",
+"uchiko.ehime.jp",
+"uwajima.ehime.jp",
+"yawatahama.ehime.jp",
+"echizen.fukui.jp",
+"eiheiji.fukui.jp",
+"fukui.fukui.jp",
+"ikeda.fukui.jp",
+"katsuyama.fukui.jp",
+"mihama.fukui.jp",
+"minamiechizen.fukui.jp",
+"obama.fukui.jp",
+"ohi.fukui.jp",
+"ono.fukui.jp",
+"sabae.fukui.jp",
+"sakai.fukui.jp",
+"takahama.fukui.jp",
+"tsuruga.fukui.jp",
+"wakasa.fukui.jp",
+"ashiya.fukuoka.jp",
+"buzen.fukuoka.jp",
+"chikugo.fukuoka.jp",
+"chikuho.fukuoka.jp",
+"chikujo.fukuoka.jp",
+"chikushino.fukuoka.jp",
+"chikuzen.fukuoka.jp",
+"chuo.fukuoka.jp",
+"dazaifu.fukuoka.jp",
+"fukuchi.fukuoka.jp",
+"hakata.fukuoka.jp",
+"higashi.fukuoka.jp",
+"hirokawa.fukuoka.jp",
+"hisayama.fukuoka.jp",
+"iizuka.fukuoka.jp",
+"inatsuki.fukuoka.jp",
+"kaho.fukuoka.jp",
+"kasuga.fukuoka.jp",
+"kasuya.fukuoka.jp",
+"kawara.fukuoka.jp",
+"keisen.fukuoka.jp",
+"koga.fukuoka.jp",
+"kurate.fukuoka.jp",
+"kurogi.fukuoka.jp",
+"kurume.fukuoka.jp",
+"minami.fukuoka.jp",
+"miyako.fukuoka.jp",
+"miyama.fukuoka.jp",
+"miyawaka.fukuoka.jp",
+"mizumaki.fukuoka.jp",
+"munakata.fukuoka.jp",
+"nakagawa.fukuoka.jp",
+"nakama.fukuoka.jp",
+"nishi.fukuoka.jp",
+"nogata.fukuoka.jp",
+"ogori.fukuoka.jp",
+"okagaki.fukuoka.jp",
+"okawa.fukuoka.jp",
+"oki.fukuoka.jp",
+"omuta.fukuoka.jp",
+"onga.fukuoka.jp",
+"onojo.fukuoka.jp",
+"oto.fukuoka.jp",
+"saigawa.fukuoka.jp",
+"sasaguri.fukuoka.jp",
+"shingu.fukuoka.jp",
+"shinyoshitomi.fukuoka.jp",
+"shonai.fukuoka.jp",
+"soeda.fukuoka.jp",
+"sue.fukuoka.jp",
+"tachiarai.fukuoka.jp",
+"tagawa.fukuoka.jp",
+"takata.fukuoka.jp",
+"toho.fukuoka.jp",
+"toyotsu.fukuoka.jp",
+"tsuiki.fukuoka.jp",
+"ukiha.fukuoka.jp",
+"umi.fukuoka.jp",
+"usui.fukuoka.jp",
+"yamada.fukuoka.jp",
+"yame.fukuoka.jp",
+"yanagawa.fukuoka.jp",
+"yukuhashi.fukuoka.jp",
+"aizubange.fukushima.jp",
+"aizumisato.fukushima.jp",
+"aizuwakamatsu.fukushima.jp",
+"asakawa.fukushima.jp",
+"bandai.fukushima.jp",
+"date.fukushima.jp",
+"fukushima.fukushima.jp",
+"furudono.fukushima.jp",
+"futaba.fukushima.jp",
+"hanawa.fukushima.jp",
+"higashi.fukushima.jp",
+"hirata.fukushima.jp",
+"hirono.fukushima.jp",
+"iitate.fukushima.jp",
+"inawashiro.fukushima.jp",
+"ishikawa.fukushima.jp",
+"iwaki.fukushima.jp",
+"izumizaki.fukushima.jp",
+"kagamiishi.fukushima.jp",
+"kaneyama.fukushima.jp",
+"kawamata.fukushima.jp",
+"kitakata.fukushima.jp",
+"kitashiobara.fukushima.jp",
+"koori.fukushima.jp",
+"koriyama.fukushima.jp",
+"kunimi.fukushima.jp",
+"miharu.fukushima.jp",
+"mishima.fukushima.jp",
+"namie.fukushima.jp",
+"nango.fukushima.jp",
+"nishiaizu.fukushima.jp",
+"nishigo.fukushima.jp",
+"okuma.fukushima.jp",
+"omotego.fukushima.jp",
+"ono.fukushima.jp",
+"otama.fukushima.jp",
+"samegawa.fukushima.jp",
+"shimogo.fukushima.jp",
+"shirakawa.fukushima.jp",
+"showa.fukushima.jp",
+"soma.fukushima.jp",
+"sukagawa.fukushima.jp",
+"taishin.fukushima.jp",
+"tamakawa.fukushima.jp",
+"tanagura.fukushima.jp",
+"tenei.fukushima.jp",
+"yabuki.fukushima.jp",
+"yamato.fukushima.jp",
+"yamatsuri.fukushima.jp",
+"yanaizu.fukushima.jp",
+"yugawa.fukushima.jp",
+"anpachi.gifu.jp",
+"ena.gifu.jp",
+"gifu.gifu.jp",
+"ginan.gifu.jp",
+"godo.gifu.jp",
+"gujo.gifu.jp",
+"hashima.gifu.jp",
+"hichiso.gifu.jp",
+"hida.gifu.jp",
+"higashishirakawa.gifu.jp",
+"ibigawa.gifu.jp",
+"ikeda.gifu.jp",
+"kakamigahara.gifu.jp",
+"kani.gifu.jp",
+"kasahara.gifu.jp",
+"kasamatsu.gifu.jp",
+"kawaue.gifu.jp",
+"kitagata.gifu.jp",
+"mino.gifu.jp",
+"minokamo.gifu.jp",
+"mitake.gifu.jp",
+"mizunami.gifu.jp",
+"motosu.gifu.jp",
+"nakatsugawa.gifu.jp",
+"ogaki.gifu.jp",
+"sakahogi.gifu.jp",
+"seki.gifu.jp",
+"sekigahara.gifu.jp",
+"shirakawa.gifu.jp",
+"tajimi.gifu.jp",
+"takayama.gifu.jp",
+"tarui.gifu.jp",
+"toki.gifu.jp",
+"tomika.gifu.jp",
+"wanouchi.gifu.jp",
+"yamagata.gifu.jp",
+"yaotsu.gifu.jp",
+"yoro.gifu.jp",
+"annaka.gunma.jp",
+"chiyoda.gunma.jp",
+"fujioka.gunma.jp",
+"higashiagatsuma.gunma.jp",
+"isesaki.gunma.jp",
+"itakura.gunma.jp",
+"kanna.gunma.jp",
+"kanra.gunma.jp",
+"katashina.gunma.jp",
+"kawaba.gunma.jp",
+"kiryu.gunma.jp",
+"kusatsu.gunma.jp",
+"maebashi.gunma.jp",
+"meiwa.gunma.jp",
+"midori.gunma.jp",
+"minakami.gunma.jp",
+"naganohara.gunma.jp",
+"nakanojo.gunma.jp",
+"nanmoku.gunma.jp",
+"numata.gunma.jp",
+"oizumi.gunma.jp",
+"ora.gunma.jp",
+"ota.gunma.jp",
+"shibukawa.gunma.jp",
+"shimonita.gunma.jp",
+"shinto.gunma.jp",
+"showa.gunma.jp",
+"takasaki.gunma.jp",
+"takayama.gunma.jp",
+"tamamura.gunma.jp",
+"tatebayashi.gunma.jp",
+"tomioka.gunma.jp",
+"tsukiyono.gunma.jp",
+"tsumagoi.gunma.jp",
+"ueno.gunma.jp",
+"yoshioka.gunma.jp",
+"asaminami.hiroshima.jp",
+"daiwa.hiroshima.jp",
+"etajima.hiroshima.jp",
+"fuchu.hiroshima.jp",
+"fukuyama.hiroshima.jp",
+"hatsukaichi.hiroshima.jp",
+"higashihiroshima.hiroshima.jp",
+"hongo.hiroshima.jp",
+"jinsekikogen.hiroshima.jp",
+"kaita.hiroshima.jp",
+"kui.hiroshima.jp",
+"kumano.hiroshima.jp",
+"kure.hiroshima.jp",
+"mihara.hiroshima.jp",
+"miyoshi.hiroshima.jp",
+"naka.hiroshima.jp",
+"onomichi.hiroshima.jp",
+"osakikamijima.hiroshima.jp",
+"otake.hiroshima.jp",
+"saka.hiroshima.jp",
+"sera.hiroshima.jp",
+"seranishi.hiroshima.jp",
+"shinichi.hiroshima.jp",
+"shobara.hiroshima.jp",
+"takehara.hiroshima.jp",
+"abashiri.hokkaido.jp",
+"abira.hokkaido.jp",
+"aibetsu.hokkaido.jp",
+"akabira.hokkaido.jp",
+"akkeshi.hokkaido.jp",
+"asahikawa.hokkaido.jp",
+"ashibetsu.hokkaido.jp",
+"ashoro.hokkaido.jp",
+"assabu.hokkaido.jp",
+"atsuma.hokkaido.jp",
+"bibai.hokkaido.jp",
+"biei.hokkaido.jp",
+"bifuka.hokkaido.jp",
+"bihoro.hokkaido.jp",
+"biratori.hokkaido.jp",
+"chippubetsu.hokkaido.jp",
+"chitose.hokkaido.jp",
+"date.hokkaido.jp",
+"ebetsu.hokkaido.jp",
+"embetsu.hokkaido.jp",
+"eniwa.hokkaido.jp",
+"erimo.hokkaido.jp",
+"esan.hokkaido.jp",
+"esashi.hokkaido.jp",
+"fukagawa.hokkaido.jp",
+"fukushima.hokkaido.jp",
+"furano.hokkaido.jp",
+"furubira.hokkaido.jp",
+"haboro.hokkaido.jp",
+"hakodate.hokkaido.jp",
+"hamatonbetsu.hokkaido.jp",
+"hidaka.hokkaido.jp",
+"higashikagura.hokkaido.jp",
+"higashikawa.hokkaido.jp",
+"hiroo.hokkaido.jp",
+"hokuryu.hokkaido.jp",
+"hokuto.hokkaido.jp",
+"honbetsu.hokkaido.jp",
+"horokanai.hokkaido.jp",
+"horonobe.hokkaido.jp",
+"ikeda.hokkaido.jp",
+"imakane.hokkaido.jp",
+"ishikari.hokkaido.jp",
+"iwamizawa.hokkaido.jp",
+"iwanai.hokkaido.jp",
+"kamifurano.hokkaido.jp",
+"kamikawa.hokkaido.jp",
+"kamishihoro.hokkaido.jp",
+"kamisunagawa.hokkaido.jp",
+"kamoenai.hokkaido.jp",
+"kayabe.hokkaido.jp",
+"kembuchi.hokkaido.jp",
+"kikonai.hokkaido.jp",
+"kimobetsu.hokkaido.jp",
+"kitahiroshima.hokkaido.jp",
+"kitami.hokkaido.jp",
+"kiyosato.hokkaido.jp",
+"koshimizu.hokkaido.jp",
+"kunneppu.hokkaido.jp",
+"kuriyama.hokkaido.jp",
+"kuromatsunai.hokkaido.jp",
+"kushiro.hokkaido.jp",
+"kutchan.hokkaido.jp",
+"kyowa.hokkaido.jp",
+"mashike.hokkaido.jp",
+"matsumae.hokkaido.jp",
+"mikasa.hokkaido.jp",
+"minamifurano.hokkaido.jp",
+"mombetsu.hokkaido.jp",
+"moseushi.hokkaido.jp",
+"mukawa.hokkaido.jp",
+"muroran.hokkaido.jp",
+"naie.hokkaido.jp",
+"nakagawa.hokkaido.jp",
+"nakasatsunai.hokkaido.jp",
+"nakatombetsu.hokkaido.jp",
+"nanae.hokkaido.jp",
+"nanporo.hokkaido.jp",
+"nayoro.hokkaido.jp",
+"nemuro.hokkaido.jp",
+"niikappu.hokkaido.jp",
+"niki.hokkaido.jp",
+"nishiokoppe.hokkaido.jp",
+"noboribetsu.hokkaido.jp",
+"numata.hokkaido.jp",
+"obihiro.hokkaido.jp",
+"obira.hokkaido.jp",
+"oketo.hokkaido.jp",
+"okoppe.hokkaido.jp",
+"otaru.hokkaido.jp",
+"otobe.hokkaido.jp",
+"otofuke.hokkaido.jp",
+"otoineppu.hokkaido.jp",
+"oumu.hokkaido.jp",
+"ozora.hokkaido.jp",
+"pippu.hokkaido.jp",
+"rankoshi.hokkaido.jp",
+"rebun.hokkaido.jp",
+"rikubetsu.hokkaido.jp",
+"rishiri.hokkaido.jp",
+"rishirifuji.hokkaido.jp",
+"saroma.hokkaido.jp",
+"sarufutsu.hokkaido.jp",
+"shakotan.hokkaido.jp",
+"shari.hokkaido.jp",
+"shibecha.hokkaido.jp",
+"shibetsu.hokkaido.jp",
+"shikabe.hokkaido.jp",
+"shikaoi.hokkaido.jp",
+"shimamaki.hokkaido.jp",
+"shimizu.hokkaido.jp",
+"shimokawa.hokkaido.jp",
+"shinshinotsu.hokkaido.jp",
+"shintoku.hokkaido.jp",
+"shiranuka.hokkaido.jp",
+"shiraoi.hokkaido.jp",
+"shiriuchi.hokkaido.jp",
+"sobetsu.hokkaido.jp",
+"sunagawa.hokkaido.jp",
+"taiki.hokkaido.jp",
+"takasu.hokkaido.jp",
+"takikawa.hokkaido.jp",
+"takinoue.hokkaido.jp",
+"teshikaga.hokkaido.jp",
+"tobetsu.hokkaido.jp",
+"tohma.hokkaido.jp",
+"tomakomai.hokkaido.jp",
+"tomari.hokkaido.jp",
+"toya.hokkaido.jp",
+"toyako.hokkaido.jp",
+"toyotomi.hokkaido.jp",
+"toyoura.hokkaido.jp",
+"tsubetsu.hokkaido.jp",
+"tsukigata.hokkaido.jp",
+"urakawa.hokkaido.jp",
+"urausu.hokkaido.jp",
+"uryu.hokkaido.jp",
+"utashinai.hokkaido.jp",
+"wakkanai.hokkaido.jp",
+"wassamu.hokkaido.jp",
+"yakumo.hokkaido.jp",
+"yoichi.hokkaido.jp",
+"aioi.hyogo.jp",
+"akashi.hyogo.jp",
+"ako.hyogo.jp",
+"amagasaki.hyogo.jp",
+"aogaki.hyogo.jp",
+"asago.hyogo.jp",
+"ashiya.hyogo.jp",
+"awaji.hyogo.jp",
+"fukusaki.hyogo.jp",
+"goshiki.hyogo.jp",
+"harima.hyogo.jp",
+"himeji.hyogo.jp",
+"ichikawa.hyogo.jp",
+"inagawa.hyogo.jp",
+"itami.hyogo.jp",
+"kakogawa.hyogo.jp",
+"kamigori.hyogo.jp",
+"kamikawa.hyogo.jp",
+"kasai.hyogo.jp",
+"kasuga.hyogo.jp",
+"kawanishi.hyogo.jp",
+"miki.hyogo.jp",
+"minamiawaji.hyogo.jp",
+"nishinomiya.hyogo.jp",
+"nishiwaki.hyogo.jp",
+"ono.hyogo.jp",
+"sanda.hyogo.jp",
+"sannan.hyogo.jp",
+"sasayama.hyogo.jp",
+"sayo.hyogo.jp",
+"shingu.hyogo.jp",
+"shinonsen.hyogo.jp",
+"shiso.hyogo.jp",
+"sumoto.hyogo.jp",
+"taishi.hyogo.jp",
+"taka.hyogo.jp",
+"takarazuka.hyogo.jp",
+"takasago.hyogo.jp",
+"takino.hyogo.jp",
+"tamba.hyogo.jp",
+"tatsuno.hyogo.jp",
+"toyooka.hyogo.jp",
+"yabu.hyogo.jp",
+"yashiro.hyogo.jp",
+"yoka.hyogo.jp",
+"yokawa.hyogo.jp",
+"ami.ibaraki.jp",
+"asahi.ibaraki.jp",
+"bando.ibaraki.jp",
+"chikusei.ibaraki.jp",
+"daigo.ibaraki.jp",
+"fujishiro.ibaraki.jp",
+"hitachi.ibaraki.jp",
+"hitachinaka.ibaraki.jp",
+"hitachiomiya.ibaraki.jp",
+"hitachiota.ibaraki.jp",
+"ibaraki.ibaraki.jp",
+"ina.ibaraki.jp",
+"inashiki.ibaraki.jp",
+"itako.ibaraki.jp",
+"iwama.ibaraki.jp",
+"joso.ibaraki.jp",
+"kamisu.ibaraki.jp",
+"kasama.ibaraki.jp",
+"kashima.ibaraki.jp",
+"kasumigaura.ibaraki.jp",
+"koga.ibaraki.jp",
+"miho.ibaraki.jp",
+"mito.ibaraki.jp",
+"moriya.ibaraki.jp",
+"naka.ibaraki.jp",
+"namegata.ibaraki.jp",
+"oarai.ibaraki.jp",
+"ogawa.ibaraki.jp",
+"omitama.ibaraki.jp",
+"ryugasaki.ibaraki.jp",
+"sakai.ibaraki.jp",
+"sakuragawa.ibaraki.jp",
+"shimodate.ibaraki.jp",
+"shimotsuma.ibaraki.jp",
+"shirosato.ibaraki.jp",
+"sowa.ibaraki.jp",
+"suifu.ibaraki.jp",
+"takahagi.ibaraki.jp",
+"tamatsukuri.ibaraki.jp",
+"tokai.ibaraki.jp",
+"tomobe.ibaraki.jp",
+"tone.ibaraki.jp",
+"toride.ibaraki.jp",
+"tsuchiura.ibaraki.jp",
+"tsukuba.ibaraki.jp",
+"uchihara.ibaraki.jp",
+"ushiku.ibaraki.jp",
+"yachiyo.ibaraki.jp",
+"yamagata.ibaraki.jp",
+"yawara.ibaraki.jp",
+"yuki.ibaraki.jp",
+"anamizu.ishikawa.jp",
+"hakui.ishikawa.jp",
+"hakusan.ishikawa.jp",
+"kaga.ishikawa.jp",
+"kahoku.ishikawa.jp",
+"kanazawa.ishikawa.jp",
+"kawakita.ishikawa.jp",
+"komatsu.ishikawa.jp",
+"nakanoto.ishikawa.jp",
+"nanao.ishikawa.jp",
+"nomi.ishikawa.jp",
+"nonoichi.ishikawa.jp",
+"noto.ishikawa.jp",
+"shika.ishikawa.jp",
+"suzu.ishikawa.jp",
+"tsubata.ishikawa.jp",
+"tsurugi.ishikawa.jp",
+"uchinada.ishikawa.jp",
+"wajima.ishikawa.jp",
+"fudai.iwate.jp",
+"fujisawa.iwate.jp",
+"hanamaki.iwate.jp",
+"hiraizumi.iwate.jp",
+"hirono.iwate.jp",
+"ichinohe.iwate.jp",
+"ichinoseki.iwate.jp",
+"iwaizumi.iwate.jp",
+"iwate.iwate.jp",
+"joboji.iwate.jp",
+"kamaishi.iwate.jp",
+"kanegasaki.iwate.jp",
+"karumai.iwate.jp",
+"kawai.iwate.jp",
+"kitakami.iwate.jp",
+"kuji.iwate.jp",
+"kunohe.iwate.jp",
+"kuzumaki.iwate.jp",
+"miyako.iwate.jp",
+"mizusawa.iwate.jp",
+"morioka.iwate.jp",
+"ninohe.iwate.jp",
+"noda.iwate.jp",
+"ofunato.iwate.jp",
+"oshu.iwate.jp",
+"otsuchi.iwate.jp",
+"rikuzentakata.iwate.jp",
+"shiwa.iwate.jp",
+"shizukuishi.iwate.jp",
+"sumita.iwate.jp",
+"tanohata.iwate.jp",
+"tono.iwate.jp",
+"yahaba.iwate.jp",
+"yamada.iwate.jp",
+"ayagawa.kagawa.jp",
+"higashikagawa.kagawa.jp",
+"kanonji.kagawa.jp",
+"kotohira.kagawa.jp",
+"manno.kagawa.jp",
+"marugame.kagawa.jp",
+"mitoyo.kagawa.jp",
+"naoshima.kagawa.jp",
+"sanuki.kagawa.jp",
+"tadotsu.kagawa.jp",
+"takamatsu.kagawa.jp",
+"tonosho.kagawa.jp",
+"uchinomi.kagawa.jp",
+"utazu.kagawa.jp",
+"zentsuji.kagawa.jp",
+"akune.kagoshima.jp",
+"amami.kagoshima.jp",
+"hioki.kagoshima.jp",
+"isa.kagoshima.jp",
+"isen.kagoshima.jp",
+"izumi.kagoshima.jp",
+"kagoshima.kagoshima.jp",
+"kanoya.kagoshima.jp",
+"kawanabe.kagoshima.jp",
+"kinko.kagoshima.jp",
+"kouyama.kagoshima.jp",
+"makurazaki.kagoshima.jp",
+"matsumoto.kagoshima.jp",
+"minamitane.kagoshima.jp",
+"nakatane.kagoshima.jp",
+"nishinoomote.kagoshima.jp",
+"satsumasendai.kagoshima.jp",
+"soo.kagoshima.jp",
+"tarumizu.kagoshima.jp",
+"yusui.kagoshima.jp",
+"aikawa.kanagawa.jp",
+"atsugi.kanagawa.jp",
+"ayase.kanagawa.jp",
+"chigasaki.kanagawa.jp",
+"ebina.kanagawa.jp",
+"fujisawa.kanagawa.jp",
+"hadano.kanagawa.jp",
+"hakone.kanagawa.jp",
+"hiratsuka.kanagawa.jp",
+"isehara.kanagawa.jp",
+"kaisei.kanagawa.jp",
+"kamakura.kanagawa.jp",
+"kiyokawa.kanagawa.jp",
+"matsuda.kanagawa.jp",
+"minamiashigara.kanagawa.jp",
+"miura.kanagawa.jp",
+"nakai.kanagawa.jp",
+"ninomiya.kanagawa.jp",
+"odawara.kanagawa.jp",
+"oi.kanagawa.jp",
+"oiso.kanagawa.jp",
+"sagamihara.kanagawa.jp",
+"samukawa.kanagawa.jp",
+"tsukui.kanagawa.jp",
+"yamakita.kanagawa.jp",
+"yamato.kanagawa.jp",
+"yokosuka.kanagawa.jp",
+"yugawara.kanagawa.jp",
+"zama.kanagawa.jp",
+"zushi.kanagawa.jp",
+"aki.kochi.jp",
+"geisei.kochi.jp",
+"hidaka.kochi.jp",
+"higashitsuno.kochi.jp",
+"ino.kochi.jp",
+"kagami.kochi.jp",
+"kami.kochi.jp",
+"kitagawa.kochi.jp",
+"kochi.kochi.jp",
+"mihara.kochi.jp",
+"motoyama.kochi.jp",
+"muroto.kochi.jp",
+"nahari.kochi.jp",
+"nakamura.kochi.jp",
+"nankoku.kochi.jp",
+"nishitosa.kochi.jp",
+"niyodogawa.kochi.jp",
+"ochi.kochi.jp",
+"okawa.kochi.jp",
+"otoyo.kochi.jp",
+"otsuki.kochi.jp",
+"sakawa.kochi.jp",
+"sukumo.kochi.jp",
+"susaki.kochi.jp",
+"tosa.kochi.jp",
+"tosashimizu.kochi.jp",
+"toyo.kochi.jp",
+"tsuno.kochi.jp",
+"umaji.kochi.jp",
+"yasuda.kochi.jp",
+"yusuhara.kochi.jp",
+"amakusa.kumamoto.jp",
+"arao.kumamoto.jp",
+"aso.kumamoto.jp",
+"choyo.kumamoto.jp",
+"gyokuto.kumamoto.jp",
+"hitoyoshi.kumamoto.jp",
+"kamiamakusa.kumamoto.jp",
+"kashima.kumamoto.jp",
+"kikuchi.kumamoto.jp",
+"kosa.kumamoto.jp",
+"kumamoto.kumamoto.jp",
+"mashiki.kumamoto.jp",
+"mifune.kumamoto.jp",
+"minamata.kumamoto.jp",
+"minamioguni.kumamoto.jp",
+"nagasu.kumamoto.jp",
+"nishihara.kumamoto.jp",
+"oguni.kumamoto.jp",
+"ozu.kumamoto.jp",
+"sumoto.kumamoto.jp",
+"takamori.kumamoto.jp",
+"uki.kumamoto.jp",
+"uto.kumamoto.jp",
+"yamaga.kumamoto.jp",
+"yamato.kumamoto.jp",
+"yatsushiro.kumamoto.jp",
+"ayabe.kyoto.jp",
+"fukuchiyama.kyoto.jp",
+"higashiyama.kyoto.jp",
+"ide.kyoto.jp",
+"ine.kyoto.jp",
+"joyo.kyoto.jp",
+"kameoka.kyoto.jp",
+"kamo.kyoto.jp",
+"kita.kyoto.jp",
+"kizu.kyoto.jp",
+"kumiyama.kyoto.jp",
+"kyotamba.kyoto.jp",
+"kyotanabe.kyoto.jp",
+"kyotango.kyoto.jp",
+"maizuru.kyoto.jp",
+"minami.kyoto.jp",
+"minamiyamashiro.kyoto.jp",
+"miyazu.kyoto.jp",
+"muko.kyoto.jp",
+"nagaokakyo.kyoto.jp",
+"nakagyo.kyoto.jp",
+"nantan.kyoto.jp",
+"oyamazaki.kyoto.jp",
+"sakyo.kyoto.jp",
+"seika.kyoto.jp",
+"tanabe.kyoto.jp",
+"uji.kyoto.jp",
+"ujitawara.kyoto.jp",
+"wazuka.kyoto.jp",
+"yamashina.kyoto.jp",
+"yawata.kyoto.jp",
+"asahi.mie.jp",
+"inabe.mie.jp",
+"ise.mie.jp",
+"kameyama.mie.jp",
+"kawagoe.mie.jp",
+"kiho.mie.jp",
+"kisosaki.mie.jp",
+"kiwa.mie.jp",
+"komono.mie.jp",
+"kumano.mie.jp",
+"kuwana.mie.jp",
+"matsusaka.mie.jp",
+"meiwa.mie.jp",
+"mihama.mie.jp",
+"minamiise.mie.jp",
+"misugi.mie.jp",
+"miyama.mie.jp",
+"nabari.mie.jp",
+"shima.mie.jp",
+"suzuka.mie.jp",
+"tado.mie.jp",
+"taiki.mie.jp",
+"taki.mie.jp",
+"tamaki.mie.jp",
+"toba.mie.jp",
+"tsu.mie.jp",
+"udono.mie.jp",
+"ureshino.mie.jp",
+"watarai.mie.jp",
+"yokkaichi.mie.jp",
+"furukawa.miyagi.jp",
+"higashimatsushima.miyagi.jp",
+"ishinomaki.miyagi.jp",
+"iwanuma.miyagi.jp",
+"kakuda.miyagi.jp",
+"kami.miyagi.jp",
+"kawasaki.miyagi.jp",
+"kesennuma.miyagi.jp",
+"marumori.miyagi.jp",
+"matsushima.miyagi.jp",
+"minamisanriku.miyagi.jp",
+"misato.miyagi.jp",
+"murata.miyagi.jp",
+"natori.miyagi.jp",
+"ogawara.miyagi.jp",
+"ohira.miyagi.jp",
+"onagawa.miyagi.jp",
+"osaki.miyagi.jp",
+"rifu.miyagi.jp",
+"semine.miyagi.jp",
+"shibata.miyagi.jp",
+"shichikashuku.miyagi.jp",
+"shikama.miyagi.jp",
+"shiogama.miyagi.jp",
+"shiroishi.miyagi.jp",
+"tagajo.miyagi.jp",
+"taiwa.miyagi.jp",
+"tome.miyagi.jp",
+"tomiya.miyagi.jp",
+"wakuya.miyagi.jp",
+"watari.miyagi.jp",
+"yamamoto.miyagi.jp",
+"zao.miyagi.jp",
+"aya.miyazaki.jp",
+"ebino.miyazaki.jp",
+"gokase.miyazaki.jp",
+"hyuga.miyazaki.jp",
+"kadogawa.miyazaki.jp",
+"kawaminami.miyazaki.jp",
+"kijo.miyazaki.jp",
+"kitagawa.miyazaki.jp",
+"kitakata.miyazaki.jp",
+"kitaura.miyazaki.jp",
+"kobayashi.miyazaki.jp",
+"kunitomi.miyazaki.jp",
+"kushima.miyazaki.jp",
+"mimata.miyazaki.jp",
+"miyakonojo.miyazaki.jp",
+"miyazaki.miyazaki.jp",
+"morotsuka.miyazaki.jp",
+"nichinan.miyazaki.jp",
+"nishimera.miyazaki.jp",
+"nobeoka.miyazaki.jp",
+"saito.miyazaki.jp",
+"shiiba.miyazaki.jp",
+"shintomi.miyazaki.jp",
+"takaharu.miyazaki.jp",
+"takanabe.miyazaki.jp",
+"takazaki.miyazaki.jp",
+"tsuno.miyazaki.jp",
+"achi.nagano.jp",
+"agematsu.nagano.jp",
+"anan.nagano.jp",
+"aoki.nagano.jp",
+"asahi.nagano.jp",
+"azumino.nagano.jp",
+"chikuhoku.nagano.jp",
+"chikuma.nagano.jp",
+"chino.nagano.jp",
+"fujimi.nagano.jp",
+"hakuba.nagano.jp",
+"hara.nagano.jp",
+"hiraya.nagano.jp",
+"iida.nagano.jp",
+"iijima.nagano.jp",
+"iiyama.nagano.jp",
+"iizuna.nagano.jp",
+"ikeda.nagano.jp",
+"ikusaka.nagano.jp",
+"ina.nagano.jp",
+"karuizawa.nagano.jp",
+"kawakami.nagano.jp",
+"kiso.nagano.jp",
+"kisofukushima.nagano.jp",
+"kitaaiki.nagano.jp",
+"komagane.nagano.jp",
+"komoro.nagano.jp",
+"matsukawa.nagano.jp",
+"matsumoto.nagano.jp",
+"miasa.nagano.jp",
+"minamiaiki.nagano.jp",
+"minamimaki.nagano.jp",
+"minamiminowa.nagano.jp",
+"minowa.nagano.jp",
+"miyada.nagano.jp",
+"miyota.nagano.jp",
+"mochizuki.nagano.jp",
+"nagano.nagano.jp",
+"nagawa.nagano.jp",
+"nagiso.nagano.jp",
+"nakagawa.nagano.jp",
+"nakano.nagano.jp",
+"nozawaonsen.nagano.jp",
+"obuse.nagano.jp",
+"ogawa.nagano.jp",
+"okaya.nagano.jp",
+"omachi.nagano.jp",
+"omi.nagano.jp",
+"ookuwa.nagano.jp",
+"ooshika.nagano.jp",
+"otaki.nagano.jp",
+"otari.nagano.jp",
+"sakae.nagano.jp",
+"sakaki.nagano.jp",
+"saku.nagano.jp",
+"sakuho.nagano.jp",
+"shimosuwa.nagano.jp",
+"shinanomachi.nagano.jp",
+"shiojiri.nagano.jp",
+"suwa.nagano.jp",
+"suzaka.nagano.jp",
+"takagi.nagano.jp",
+"takamori.nagano.jp",
+"takayama.nagano.jp",
+"tateshina.nagano.jp",
+"tatsuno.nagano.jp",
+"togakushi.nagano.jp",
+"togura.nagano.jp",
+"tomi.nagano.jp",
+"ueda.nagano.jp",
+"wada.nagano.jp",
+"yamagata.nagano.jp",
+"yamanouchi.nagano.jp",
+"yasaka.nagano.jp",
+"yasuoka.nagano.jp",
+"chijiwa.nagasaki.jp",
+"futsu.nagasaki.jp",
+"goto.nagasaki.jp",
+"hasami.nagasaki.jp",
+"hirado.nagasaki.jp",
+"iki.nagasaki.jp",
+"isahaya.nagasaki.jp",
+"kawatana.nagasaki.jp",
+"kuchinotsu.nagasaki.jp",
+"matsuura.nagasaki.jp",
+"nagasaki.nagasaki.jp",
+"obama.nagasaki.jp",
+"omura.nagasaki.jp",
+"oseto.nagasaki.jp",
+"saikai.nagasaki.jp",
+"sasebo.nagasaki.jp",
+"seihi.nagasaki.jp",
+"shimabara.nagasaki.jp",
+"shinkamigoto.nagasaki.jp",
+"togitsu.nagasaki.jp",
+"tsushima.nagasaki.jp",
+"unzen.nagasaki.jp",
+"ando.nara.jp",
+"gose.nara.jp",
+"heguri.nara.jp",
+"higashiyoshino.nara.jp",
+"ikaruga.nara.jp",
+"ikoma.nara.jp",
+"kamikitayama.nara.jp",
+"kanmaki.nara.jp",
+"kashiba.nara.jp",
+"kashihara.nara.jp",
+"katsuragi.nara.jp",
+"kawai.nara.jp",
+"kawakami.nara.jp",
+"kawanishi.nara.jp",
+"koryo.nara.jp",
+"kurotaki.nara.jp",
+"mitsue.nara.jp",
+"miyake.nara.jp",
+"nara.nara.jp",
+"nosegawa.nara.jp",
+"oji.nara.jp",
+"ouda.nara.jp",
+"oyodo.nara.jp",
+"sakurai.nara.jp",
+"sango.nara.jp",
+"shimoichi.nara.jp",
+"shimokitayama.nara.jp",
+"shinjo.nara.jp",
+"soni.nara.jp",
+"takatori.nara.jp",
+"tawaramoto.nara.jp",
+"tenkawa.nara.jp",
+"tenri.nara.jp",
+"uda.nara.jp",
+"yamatokoriyama.nara.jp",
+"yamatotakada.nara.jp",
+"yamazoe.nara.jp",
+"yoshino.nara.jp",
+"aga.niigata.jp",
+"agano.niigata.jp",
+"gosen.niigata.jp",
+"itoigawa.niigata.jp",
+"izumozaki.niigata.jp",
+"joetsu.niigata.jp",
+"kamo.niigata.jp",
+"kariwa.niigata.jp",
+"kashiwazaki.niigata.jp",
+"minamiuonuma.niigata.jp",
+"mitsuke.niigata.jp",
+"muika.niigata.jp",
+"murakami.niigata.jp",
+"myoko.niigata.jp",
+"nagaoka.niigata.jp",
+"niigata.niigata.jp",
+"ojiya.niigata.jp",
+"omi.niigata.jp",
+"sado.niigata.jp",
+"sanjo.niigata.jp",
+"seiro.niigata.jp",
+"seirou.niigata.jp",
+"sekikawa.niigata.jp",
+"shibata.niigata.jp",
+"tagami.niigata.jp",
+"tainai.niigata.jp",
+"tochio.niigata.jp",
+"tokamachi.niigata.jp",
+"tsubame.niigata.jp",
+"tsunan.niigata.jp",
+"uonuma.niigata.jp",
+"yahiko.niigata.jp",
+"yoita.niigata.jp",
+"yuzawa.niigata.jp",
+"beppu.oita.jp",
+"bungoono.oita.jp",
+"bungotakada.oita.jp",
+"hasama.oita.jp",
+"hiji.oita.jp",
+"himeshima.oita.jp",
+"hita.oita.jp",
+"kamitsue.oita.jp",
+"kokonoe.oita.jp",
+"kuju.oita.jp",
+"kunisaki.oita.jp",
+"kusu.oita.jp",
+"oita.oita.jp",
+"saiki.oita.jp",
+"taketa.oita.jp",
+"tsukumi.oita.jp",
+"usa.oita.jp",
+"usuki.oita.jp",
+"yufu.oita.jp",
+"akaiwa.okayama.jp",
+"asakuchi.okayama.jp",
+"bizen.okayama.jp",
+"hayashima.okayama.jp",
+"ibara.okayama.jp",
+"kagamino.okayama.jp",
+"kasaoka.okayama.jp",
+"kibichuo.okayama.jp",
+"kumenan.okayama.jp",
+"kurashiki.okayama.jp",
+"maniwa.okayama.jp",
+"misaki.okayama.jp",
+"nagi.okayama.jp",
+"niimi.okayama.jp",
+"nishiawakura.okayama.jp",
+"okayama.okayama.jp",
+"satosho.okayama.jp",
+"setouchi.okayama.jp",
+"shinjo.okayama.jp",
+"shoo.okayama.jp",
+"soja.okayama.jp",
+"takahashi.okayama.jp",
+"tamano.okayama.jp",
+"tsuyama.okayama.jp",
+"wake.okayama.jp",
+"yakage.okayama.jp",
+"aguni.okinawa.jp",
+"ginowan.okinawa.jp",
+"ginoza.okinawa.jp",
+"gushikami.okinawa.jp",
+"haebaru.okinawa.jp",
+"higashi.okinawa.jp",
+"hirara.okinawa.jp",
+"iheya.okinawa.jp",
+"ishigaki.okinawa.jp",
+"ishikawa.okinawa.jp",
+"itoman.okinawa.jp",
+"izena.okinawa.jp",
+"kadena.okinawa.jp",
+"kin.okinawa.jp",
+"kitadaito.okinawa.jp",
+"kitanakagusuku.okinawa.jp",
+"kumejima.okinawa.jp",
+"kunigami.okinawa.jp",
+"minamidaito.okinawa.jp",
+"motobu.okinawa.jp",
+"nago.okinawa.jp",
+"naha.okinawa.jp",
+"nakagusuku.okinawa.jp",
+"nakijin.okinawa.jp",
+"nanjo.okinawa.jp",
+"nishihara.okinawa.jp",
+"ogimi.okinawa.jp",
+"okinawa.okinawa.jp",
+"onna.okinawa.jp",
+"shimoji.okinawa.jp",
+"taketomi.okinawa.jp",
+"tarama.okinawa.jp",
+"tokashiki.okinawa.jp",
+"tomigusuku.okinawa.jp",
+"tonaki.okinawa.jp",
+"urasoe.okinawa.jp",
+"uruma.okinawa.jp",
+"yaese.okinawa.jp",
+"yomitan.okinawa.jp",
+"yonabaru.okinawa.jp",
+"yonaguni.okinawa.jp",
+"zamami.okinawa.jp",
+"abeno.osaka.jp",
+"chihayaakasaka.osaka.jp",
+"chuo.osaka.jp",
+"daito.osaka.jp",
+"fujiidera.osaka.jp",
+"habikino.osaka.jp",
+"hannan.osaka.jp",
+"higashiosaka.osaka.jp",
+"higashisumiyoshi.osaka.jp",
+"higashiyodogawa.osaka.jp",
+"hirakata.osaka.jp",
+"ibaraki.osaka.jp",
+"ikeda.osaka.jp",
+"izumi.osaka.jp",
+"izumiotsu.osaka.jp",
+"izumisano.osaka.jp",
+"kadoma.osaka.jp",
+"kaizuka.osaka.jp",
+"kanan.osaka.jp",
+"kashiwara.osaka.jp",
+"katano.osaka.jp",
+"kawachinagano.osaka.jp",
+"kishiwada.osaka.jp",
+"kita.osaka.jp",
+"kumatori.osaka.jp",
+"matsubara.osaka.jp",
+"minato.osaka.jp",
+"minoh.osaka.jp",
+"misaki.osaka.jp",
+"moriguchi.osaka.jp",
+"neyagawa.osaka.jp",
+"nishi.osaka.jp",
+"nose.osaka.jp",
+"osakasayama.osaka.jp",
+"sakai.osaka.jp",
+"sayama.osaka.jp",
+"sennan.osaka.jp",
+"settsu.osaka.jp",
+"shijonawate.osaka.jp",
+"shimamoto.osaka.jp",
+"suita.osaka.jp",
+"tadaoka.osaka.jp",
+"taishi.osaka.jp",
+"tajiri.osaka.jp",
+"takaishi.osaka.jp",
+"takatsuki.osaka.jp",
+"tondabayashi.osaka.jp",
+"toyonaka.osaka.jp",
+"toyono.osaka.jp",
+"yao.osaka.jp",
+"ariake.saga.jp",
+"arita.saga.jp",
+"fukudomi.saga.jp",
+"genkai.saga.jp",
+"hamatama.saga.jp",
+"hizen.saga.jp",
+"imari.saga.jp",
+"kamimine.saga.jp",
+"kanzaki.saga.jp",
+"karatsu.saga.jp",
+"kashima.saga.jp",
+"kitagata.saga.jp",
+"kitahata.saga.jp",
+"kiyama.saga.jp",
+"kouhoku.saga.jp",
+"kyuragi.saga.jp",
+"nishiarita.saga.jp",
+"ogi.saga.jp",
+"omachi.saga.jp",
+"ouchi.saga.jp",
+"saga.saga.jp",
+"shiroishi.saga.jp",
+"taku.saga.jp",
+"tara.saga.jp",
+"tosu.saga.jp",
+"yoshinogari.saga.jp",
+"arakawa.saitama.jp",
+"asaka.saitama.jp",
+"chichibu.saitama.jp",
+"fujimi.saitama.jp",
+"fujimino.saitama.jp",
+"fukaya.saitama.jp",
+"hanno.saitama.jp",
+"hanyu.saitama.jp",
+"hasuda.saitama.jp",
+"hatogaya.saitama.jp",
+"hatoyama.saitama.jp",
+"hidaka.saitama.jp",
+"higashichichibu.saitama.jp",
+"higashimatsuyama.saitama.jp",
+"honjo.saitama.jp",
+"ina.saitama.jp",
+"iruma.saitama.jp",
+"iwatsuki.saitama.jp",
+"kamiizumi.saitama.jp",
+"kamikawa.saitama.jp",
+"kamisato.saitama.jp",
+"kasukabe.saitama.jp",
+"kawagoe.saitama.jp",
+"kawaguchi.saitama.jp",
+"kawajima.saitama.jp",
+"kazo.saitama.jp",
+"kitamoto.saitama.jp",
+"koshigaya.saitama.jp",
+"kounosu.saitama.jp",
+"kuki.saitama.jp",
+"kumagaya.saitama.jp",
+"matsubushi.saitama.jp",
+"minano.saitama.jp",
+"misato.saitama.jp",
+"miyashiro.saitama.jp",
+"miyoshi.saitama.jp",
+"moroyama.saitama.jp",
+"nagatoro.saitama.jp",
+"namegawa.saitama.jp",
+"niiza.saitama.jp",
+"ogano.saitama.jp",
+"ogawa.saitama.jp",
+"ogose.saitama.jp",
+"okegawa.saitama.jp",
+"omiya.saitama.jp",
+"otaki.saitama.jp",
+"ranzan.saitama.jp",
+"ryokami.saitama.jp",
+"saitama.saitama.jp",
+"sakado.saitama.jp",
+"satte.saitama.jp",
+"sayama.saitama.jp",
+"shiki.saitama.jp",
+"shiraoka.saitama.jp",
+"soka.saitama.jp",
+"sugito.saitama.jp",
+"toda.saitama.jp",
+"tokigawa.saitama.jp",
+"tokorozawa.saitama.jp",
+"tsurugashima.saitama.jp",
+"urawa.saitama.jp",
+"warabi.saitama.jp",
+"yashio.saitama.jp",
+"yokoze.saitama.jp",
+"yono.saitama.jp",
+"yorii.saitama.jp",
+"yoshida.saitama.jp",
+"yoshikawa.saitama.jp",
+"yoshimi.saitama.jp",
+"aisho.shiga.jp",
+"gamo.shiga.jp",
+"higashiomi.shiga.jp",
+"hikone.shiga.jp",
+"koka.shiga.jp",
+"konan.shiga.jp",
+"kosei.shiga.jp",
+"koto.shiga.jp",
+"kusatsu.shiga.jp",
+"maibara.shiga.jp",
+"moriyama.shiga.jp",
+"nagahama.shiga.jp",
+"nishiazai.shiga.jp",
+"notogawa.shiga.jp",
+"omihachiman.shiga.jp",
+"otsu.shiga.jp",
+"ritto.shiga.jp",
+"ryuoh.shiga.jp",
+"takashima.shiga.jp",
+"takatsuki.shiga.jp",
+"torahime.shiga.jp",
+"toyosato.shiga.jp",
+"yasu.shiga.jp",
+"akagi.shimane.jp",
+"ama.shimane.jp",
+"gotsu.shimane.jp",
+"hamada.shimane.jp",
+"higashiizumo.shimane.jp",
+"hikawa.shimane.jp",
+"hikimi.shimane.jp",
+"izumo.shimane.jp",
+"kakinoki.shimane.jp",
+"masuda.shimane.jp",
+"matsue.shimane.jp",
+"misato.shimane.jp",
+"nishinoshima.shimane.jp",
+"ohda.shimane.jp",
+"okinoshima.shimane.jp",
+"okuizumo.shimane.jp",
+"shimane.shimane.jp",
+"tamayu.shimane.jp",
+"tsuwano.shimane.jp",
+"unnan.shimane.jp",
+"yakumo.shimane.jp",
+"yasugi.shimane.jp",
+"yatsuka.shimane.jp",
+"arai.shizuoka.jp",
+"atami.shizuoka.jp",
+"fuji.shizuoka.jp",
+"fujieda.shizuoka.jp",
+"fujikawa.shizuoka.jp",
+"fujinomiya.shizuoka.jp",
+"fukuroi.shizuoka.jp",
+"gotemba.shizuoka.jp",
+"haibara.shizuoka.jp",
+"hamamatsu.shizuoka.jp",
+"higashiizu.shizuoka.jp",
+"ito.shizuoka.jp",
+"iwata.shizuoka.jp",
+"izu.shizuoka.jp",
+"izunokuni.shizuoka.jp",
+"kakegawa.shizuoka.jp",
+"kannami.shizuoka.jp",
+"kawanehon.shizuoka.jp",
+"kawazu.shizuoka.jp",
+"kikugawa.shizuoka.jp",
+"kosai.shizuoka.jp",
+"makinohara.shizuoka.jp",
+"matsuzaki.shizuoka.jp",
+"minamiizu.shizuoka.jp",
+"mishima.shizuoka.jp",
+"morimachi.shizuoka.jp",
+"nishiizu.shizuoka.jp",
+"numazu.shizuoka.jp",
+"omaezaki.shizuoka.jp",
+"shimada.shizuoka.jp",
+"shimizu.shizuoka.jp",
+"shimoda.shizuoka.jp",
+"shizuoka.shizuoka.jp",
+"susono.shizuoka.jp",
+"yaizu.shizuoka.jp",
+"yoshida.shizuoka.jp",
+"ashikaga.tochigi.jp",
+"bato.tochigi.jp",
+"haga.tochigi.jp",
+"ichikai.tochigi.jp",
+"iwafune.tochigi.jp",
+"kaminokawa.tochigi.jp",
+"kanuma.tochigi.jp",
+"karasuyama.tochigi.jp",
+"kuroiso.tochigi.jp",
+"mashiko.tochigi.jp",
+"mibu.tochigi.jp",
+"moka.tochigi.jp",
+"motegi.tochigi.jp",
+"nasu.tochigi.jp",
+"nasushiobara.tochigi.jp",
+"nikko.tochigi.jp",
+"nishikata.tochigi.jp",
+"nogi.tochigi.jp",
+"ohira.tochigi.jp",
+"ohtawara.tochigi.jp",
+"oyama.tochigi.jp",
+"sakura.tochigi.jp",
+"sano.tochigi.jp",
+"shimotsuke.tochigi.jp",
+"shioya.tochigi.jp",
+"takanezawa.tochigi.jp",
+"tochigi.tochigi.jp",
+"tsuga.tochigi.jp",
+"ujiie.tochigi.jp",
+"utsunomiya.tochigi.jp",
+"yaita.tochigi.jp",
+"aizumi.tokushima.jp",
+"anan.tokushima.jp",
+"ichiba.tokushima.jp",
+"itano.tokushima.jp",
+"kainan.tokushima.jp",
+"komatsushima.tokushima.jp",
+"matsushige.tokushima.jp",
+"mima.tokushima.jp",
+"minami.tokushima.jp",
+"miyoshi.tokushima.jp",
+"mugi.tokushima.jp",
+"nakagawa.tokushima.jp",
+"naruto.tokushima.jp",
+"sanagochi.tokushima.jp",
+"shishikui.tokushima.jp",
+"tokushima.tokushima.jp",
+"wajiki.tokushima.jp",
+"adachi.tokyo.jp",
+"akiruno.tokyo.jp",
+"akishima.tokyo.jp",
+"aogashima.tokyo.jp",
+"arakawa.tokyo.jp",
+"bunkyo.tokyo.jp",
+"chiyoda.tokyo.jp",
+"chofu.tokyo.jp",
+"chuo.tokyo.jp",
+"edogawa.tokyo.jp",
+"fuchu.tokyo.jp",
+"fussa.tokyo.jp",
+"hachijo.tokyo.jp",
+"hachioji.tokyo.jp",
+"hamura.tokyo.jp",
+"higashikurume.tokyo.jp",
+"higashimurayama.tokyo.jp",
+"higashiyamato.tokyo.jp",
+"hino.tokyo.jp",
+"hinode.tokyo.jp",
+"hinohara.tokyo.jp",
+"inagi.tokyo.jp",
+"itabashi.tokyo.jp",
+"katsushika.tokyo.jp",
+"kita.tokyo.jp",
+"kiyose.tokyo.jp",
+"kodaira.tokyo.jp",
+"koganei.tokyo.jp",
+"kokubunji.tokyo.jp",
+"komae.tokyo.jp",
+"koto.tokyo.jp",
+"kouzushima.tokyo.jp",
+"kunitachi.tokyo.jp",
+"machida.tokyo.jp",
+"meguro.tokyo.jp",
+"minato.tokyo.jp",
+"mitaka.tokyo.jp",
+"mizuho.tokyo.jp",
+"musashimurayama.tokyo.jp",
+"musashino.tokyo.jp",
+"nakano.tokyo.jp",
+"nerima.tokyo.jp",
+"ogasawara.tokyo.jp",
+"okutama.tokyo.jp",
+"ome.tokyo.jp",
+"oshima.tokyo.jp",
+"ota.tokyo.jp",
+"setagaya.tokyo.jp",
+"shibuya.tokyo.jp",
+"shinagawa.tokyo.jp",
+"shinjuku.tokyo.jp",
+"suginami.tokyo.jp",
+"sumida.tokyo.jp",
+"tachikawa.tokyo.jp",
+"taito.tokyo.jp",
+"tama.tokyo.jp",
+"toshima.tokyo.jp",
+"chizu.tottori.jp",
+"hino.tottori.jp",
+"kawahara.tottori.jp",
+"koge.tottori.jp",
+"kotoura.tottori.jp",
+"misasa.tottori.jp",
+"nanbu.tottori.jp",
+"nichinan.tottori.jp",
+"sakaiminato.tottori.jp",
+"tottori.tottori.jp",
+"wakasa.tottori.jp",
+"yazu.tottori.jp",
+"yonago.tottori.jp",
+"asahi.toyama.jp",
+"fuchu.toyama.jp",
+"fukumitsu.toyama.jp",
+"funahashi.toyama.jp",
+"himi.toyama.jp",
+"imizu.toyama.jp",
+"inami.toyama.jp",
+"johana.toyama.jp",
+"kamiichi.toyama.jp",
+"kurobe.toyama.jp",
+"nakaniikawa.toyama.jp",
+"namerikawa.toyama.jp",
+"nanto.toyama.jp",
+"nyuzen.toyama.jp",
+"oyabe.toyama.jp",
+"taira.toyama.jp",
+"takaoka.toyama.jp",
+"tateyama.toyama.jp",
+"toga.toyama.jp",
+"tonami.toyama.jp",
+"toyama.toyama.jp",
+"unazuki.toyama.jp",
+"uozu.toyama.jp",
+"yamada.toyama.jp",
+"arida.wakayama.jp",
+"aridagawa.wakayama.jp",
+"gobo.wakayama.jp",
+"hashimoto.wakayama.jp",
+"hidaka.wakayama.jp",
+"hirogawa.wakayama.jp",
+"inami.wakayama.jp",
+"iwade.wakayama.jp",
+"kainan.wakayama.jp",
+"kamitonda.wakayama.jp",
+"katsuragi.wakayama.jp",
+"kimino.wakayama.jp",
+"kinokawa.wakayama.jp",
+"kitayama.wakayama.jp",
+"koya.wakayama.jp",
+"koza.wakayama.jp",
+"kozagawa.wakayama.jp",
+"kudoyama.wakayama.jp",
+"kushimoto.wakayama.jp",
+"mihama.wakayama.jp",
+"misato.wakayama.jp",
+"nachikatsuura.wakayama.jp",
+"shingu.wakayama.jp",
+"shirahama.wakayama.jp",
+"taiji.wakayama.jp",
+"tanabe.wakayama.jp",
+"wakayama.wakayama.jp",
+"yuasa.wakayama.jp",
+"yura.wakayama.jp",
+"asahi.yamagata.jp",
+"funagata.yamagata.jp",
+"higashine.yamagata.jp",
+"iide.yamagata.jp",
+"kahoku.yamagata.jp",
+"kaminoyama.yamagata.jp",
+"kaneyama.yamagata.jp",
+"kawanishi.yamagata.jp",
+"mamurogawa.yamagata.jp",
+"mikawa.yamagata.jp",
+"murayama.yamagata.jp",
+"nagai.yamagata.jp",
+"nakayama.yamagata.jp",
+"nanyo.yamagata.jp",
+"nishikawa.yamagata.jp",
+"obanazawa.yamagata.jp",
+"oe.yamagata.jp",
+"oguni.yamagata.jp",
+"ohkura.yamagata.jp",
+"oishida.yamagata.jp",
+"sagae.yamagata.jp",
+"sakata.yamagata.jp",
+"sakegawa.yamagata.jp",
+"shinjo.yamagata.jp",
+"shirataka.yamagata.jp",
+"shonai.yamagata.jp",
+"takahata.yamagata.jp",
+"tendo.yamagata.jp",
+"tozawa.yamagata.jp",
+"tsuruoka.yamagata.jp",
+"yamagata.yamagata.jp",
+"yamanobe.yamagata.jp",
+"yonezawa.yamagata.jp",
+"yuza.yamagata.jp",
+"abu.yamaguchi.jp",
+"hagi.yamaguchi.jp",
+"hikari.yamaguchi.jp",
+"hofu.yamaguchi.jp",
+"iwakuni.yamaguchi.jp",
+"kudamatsu.yamaguchi.jp",
+"mitou.yamaguchi.jp",
+"nagato.yamaguchi.jp",
+"oshima.yamaguchi.jp",
+"shimonoseki.yamaguchi.jp",
+"shunan.yamaguchi.jp",
+"tabuse.yamaguchi.jp",
+"tokuyama.yamaguchi.jp",
+"toyota.yamaguchi.jp",
+"ube.yamaguchi.jp",
+"yuu.yamaguchi.jp",
+"chuo.yamanashi.jp",
+"doshi.yamanashi.jp",
+"fuefuki.yamanashi.jp",
+"fujikawa.yamanashi.jp",
+"fujikawaguchiko.yamanashi.jp",
+"fujiyoshida.yamanashi.jp",
+"hayakawa.yamanashi.jp",
+"hokuto.yamanashi.jp",
+"ichikawamisato.yamanashi.jp",
+"kai.yamanashi.jp",
+"kofu.yamanashi.jp",
+"koshu.yamanashi.jp",
+"kosuge.yamanashi.jp",
+"minami-alps.yamanashi.jp",
+"minobu.yamanashi.jp",
+"nakamichi.yamanashi.jp",
+"nanbu.yamanashi.jp",
+"narusawa.yamanashi.jp",
+"nirasaki.yamanashi.jp",
+"nishikatsura.yamanashi.jp",
+"oshino.yamanashi.jp",
+"otsuki.yamanashi.jp",
+"showa.yamanashi.jp",
+"tabayama.yamanashi.jp",
+"tsuru.yamanashi.jp",
+"uenohara.yamanashi.jp",
+"yamanakako.yamanashi.jp",
+"yamanashi.yamanashi.jp",
+"ke",
+"org.kg",
+"net.kg",
+"com.kg",
+"edu.kg",
+"gov.kg",
+"mil.kg",
+"kh",
+"edu.ki",
+"biz.ki",
+"net.ki",
+"org.ki",
+"gov.ki",
+"info.ki",
+"com.ki",
+"org.km",
+"nom.km",
+"gov.km",
+"prd.km",
+"tm.km",
+"edu.km",
+"mil.km",
+"ass.km",
+"com.km",
+"coop.km",
+"asso.km",
+"presse.km",
+"medecin.km",
+"notaires.km",
+"pharmaciens.km",
+"veterinaire.km",
+"gouv.km",
+"net.kn",
+"org.kn",
+"edu.kn",
+"gov.kn",
+"com.kp",
+"edu.kp",
+"gov.kp",
+"org.kp",
+"rep.kp",
+"tra.kp",
+"ac.kr",
+"co.kr",
+"es.kr",
+"go.kr",
+"hs.kr",
+"kg.kr",
+"mil.kr",
+"ms.kr",
+"ne.kr",
+"or.kr",
+"pe.kr",
+"re.kr",
+"sc.kr",
+"busan.kr",
+"chungbuk.kr",
+"chungnam.kr",
+"daegu.kr",
+"daejeon.kr",
+"gangwon.kr",
+"gwangju.kr",
+"gyeongbuk.kr",
+"gyeonggi.kr",
+"gyeongnam.kr",
+"incheon.kr",
+"jeju.kr",
+"jeonbuk.kr",
+"jeonnam.kr",
+"seoul.kr",
+"ulsan.kr",
+"kw",
+"edu.ky",
+"gov.ky",
+"com.ky",
+"org.ky",
+"net.ky",
+"org.kz",
+"edu.kz",
+"net.kz",
+"gov.kz",
+"mil.kz",
+"com.kz",
+"int.la",
+"net.la",
+"info.la",
+"edu.la",
+"gov.la",
+"per.la",
+"com.la",
+"org.la",
+"com.lb",
+"edu.lb",
+"gov.lb",
+"net.lb",
+"org.lb",
+"com.lc",
+"net.lc",
+"co.lc",
+"org.lc",
+"edu.lc",
+"gov.lc",
+"gov.lk",
+"sch.lk",
+"net.lk",
+"int.lk",
+"com.lk",
+"org.lk",
+"edu.lk",
+"ngo.lk",
+"soc.lk",
+"web.lk",
+"ltd.lk",
+"assn.lk",
+"grp.lk",
+"hotel.lk",
+"com.lr",
+"edu.lr",
+"gov.lr",
+"org.lr",
+"net.lr",
+"co.ls",
+"org.ls",
+"gov.lt",
+"com.lv",
+"edu.lv",
+"gov.lv",
+"org.lv",
+"mil.lv",
+"id.lv",
+"net.lv",
+"asn.lv",
+"conf.lv",
+"com.ly",
+"net.ly",
+"gov.ly",
+"plc.ly",
+"edu.ly",
+"sch.ly",
+"med.ly",
+"org.ly",
+"id.ly",
+"co.ma",
+"net.ma",
+"gov.ma",
+"org.ma",
+"ac.ma",
+"press.ma",
+"tm.mc",
+"asso.mc",
+"co.me",
+"net.me",
+"org.me",
+"edu.me",
+"ac.me",
+"gov.me",
+"its.me",
+"priv.me",
+"org.mg",
+"nom.mg",
+"gov.mg",
+"prd.mg",
+"tm.mg",
+"edu.mg",
+"mil.mg",
+"com.mg",
+"com.mk",
+"org.mk",
+"net.mk",
+"edu.mk",
+"gov.mk",
+"inf.mk",
+"name.mk",
+"com.ml",
+"edu.ml",
+"gouv.ml",
+"gov.ml",
+"net.ml",
+"org.ml",
+"presse.ml",
+"mm",
+"gov.mn",
+"edu.mn",
+"org.mn",
+"com.mo",
+"net.mo",
+"org.mo",
+"edu.mo",
+"gov.mo",
+"gov.mr",
+"com.ms",
+"edu.ms",
+"gov.ms",
+"net.ms",
+"org.ms",
+"com.mt",
+"edu.mt",
+"net.mt",
+"org.mt",
+"com.mu",
+"net.mu",
+"org.mu",
+"gov.mu",
+"ac.mu",
+"co.mu",
+"or.mu",
+"academy.museum",
+"agriculture.museum",
+"air.museum",
+"airguard.museum",
+"alabama.museum",
+"alaska.museum",
+"amber.museum",
+"ambulance.museum",
+"american.museum",
+"americana.museum",
+"americanantiques.museum",
+"americanart.museum",
+"amsterdam.museum",
+"and.museum",
+"annefrank.museum",
+"anthro.museum",
+"anthropology.museum",
+"antiques.museum",
+"aquarium.museum",
+"arboretum.museum",
+"archaeological.museum",
+"archaeology.museum",
+"architecture.museum",
+"art.museum",
+"artanddesign.museum",
+"artcenter.museum",
+"artdeco.museum",
+"arteducation.museum",
+"artgallery.museum",
+"arts.museum",
+"artsandcrafts.museum",
+"asmatart.museum",
+"assassination.museum",
+"assisi.museum",
+"association.museum",
+"astronomy.museum",
+"atlanta.museum",
+"austin.museum",
+"australia.museum",
+"automotive.museum",
+"aviation.museum",
+"axis.museum",
+"badajoz.museum",
+"baghdad.museum",
+"bahn.museum",
+"bale.museum",
+"baltimore.museum",
+"barcelona.museum",
+"baseball.museum",
+"basel.museum",
+"baths.museum",
+"bauern.museum",
+"beauxarts.museum",
+"beeldengeluid.museum",
+"bellevue.museum",
+"bergbau.museum",
+"berkeley.museum",
+"berlin.museum",
+"bern.museum",
+"bible.museum",
+"bilbao.museum",
+"bill.museum",
+"birdart.museum",
+"birthplace.museum",
+"bonn.museum",
+"boston.museum",
+"botanical.museum",
+"botanicalgarden.museum",
+"botanicgarden.museum",
+"botany.museum",
+"brandywinevalley.museum",
+"brasil.museum",
+"bristol.museum",
+"british.museum",
+"britishcolumbia.museum",
+"broadcast.museum",
+"brunel.museum",
+"brussel.museum",
+"brussels.museum",
+"bruxelles.museum",
+"building.museum",
+"burghof.museum",
+"bus.museum",
+"bushey.museum",
+"cadaques.museum",
+"california.museum",
+"cambridge.museum",
+"can.museum",
+"canada.museum",
+"capebreton.museum",
+"carrier.museum",
+"cartoonart.museum",
+"casadelamoneda.museum",
+"castle.museum",
+"castres.museum",
+"celtic.museum",
+"center.museum",
+"chattanooga.museum",
+"cheltenham.museum",
+"chesapeakebay.museum",
+"chicago.museum",
+"children.museum",
+"childrens.museum",
+"childrensgarden.museum",
+"chiropractic.museum",
+"chocolate.museum",
+"christiansburg.museum",
+"cincinnati.museum",
+"cinema.museum",
+"circus.museum",
+"civilisation.museum",
+"civilization.museum",
+"civilwar.museum",
+"clinton.museum",
+"clock.museum",
+"coal.museum",
+"coastaldefence.museum",
+"cody.museum",
+"coldwar.museum",
+"collection.museum",
+"colonialwilliamsburg.museum",
+"coloradoplateau.museum",
+"columbia.museum",
+"columbus.museum",
+"communication.museum",
+"communications.museum",
+"community.museum",
+"computer.museum",
+"computerhistory.museum",
+"xn--comunicaes-v6a2o.museum",
+"contemporary.museum",
+"contemporaryart.museum",
+"convent.museum",
+"copenhagen.museum",
+"corporation.museum",
+"xn--correios-e-telecomunicaes-ghc29a.museum",
+"corvette.museum",
+"costume.museum",
+"countryestate.museum",
+"county.museum",
+"crafts.museum",
+"cranbrook.museum",
+"creation.museum",
+"cultural.museum",
+"culturalcenter.museum",
+"culture.museum",
+"cyber.museum",
+"cymru.museum",
+"dali.museum",
+"dallas.museum",
+"database.museum",
+"ddr.museum",
+"decorativearts.museum",
+"delaware.museum",
+"delmenhorst.museum",
+"denmark.museum",
+"depot.museum",
+"design.museum",
+"detroit.museum",
+"dinosaur.museum",
+"discovery.museum",
+"dolls.museum",
+"donostia.museum",
+"durham.museum",
+"eastafrica.museum",
+"eastcoast.museum",
+"education.museum",
+"educational.museum",
+"egyptian.museum",
+"eisenbahn.museum",
+"elburg.museum",
+"elvendrell.museum",
+"embroidery.museum",
+"encyclopedic.museum",
+"england.museum",
+"entomology.museum",
+"environment.museum",
+"environmentalconservation.museum",
+"epilepsy.museum",
+"essex.museum",
+"estate.museum",
+"ethnology.museum",
+"exeter.museum",
+"exhibition.museum",
+"family.museum",
+"farm.museum",
+"farmequipment.museum",
+"farmers.museum",
+"farmstead.museum",
+"field.museum",
+"figueres.museum",
+"filatelia.museum",
+"film.museum",
+"fineart.museum",
+"finearts.museum",
+"finland.museum",
+"flanders.museum",
+"florida.museum",
+"force.museum",
+"fortmissoula.museum",
+"fortworth.museum",
+"foundation.museum",
+"francaise.museum",
+"frankfurt.museum",
+"franziskaner.museum",
+"freemasonry.museum",
+"freiburg.museum",
+"fribourg.museum",
+"frog.museum",
+"fundacio.museum",
+"furniture.museum",
+"gallery.museum",
+"garden.museum",
+"gateway.museum",
+"geelvinck.museum",
+"gemological.museum",
+"geology.museum",
+"georgia.museum",
+"giessen.museum",
+"glas.museum",
+"glass.museum",
+"gorge.museum",
+"grandrapids.museum",
+"graz.museum",
+"guernsey.museum",
+"halloffame.museum",
+"hamburg.museum",
+"handson.museum",
+"harvestcelebration.museum",
+"hawaii.museum",
+"health.museum",
+"heimatunduhren.museum",
+"hellas.museum",
+"helsinki.museum",
+"hembygdsforbund.museum",
+"heritage.museum",
+"histoire.museum",
+"historical.museum",
+"historicalsociety.museum",
+"historichouses.museum",
+"historisch.museum",
+"historisches.museum",
+"history.museum",
+"historyofscience.museum",
+"horology.museum",
+"house.museum",
+"humanities.museum",
+"illustration.museum",
+"imageandsound.museum",
+"indian.museum",
+"indiana.museum",
+"indianapolis.museum",
+"indianmarket.museum",
+"intelligence.museum",
+"interactive.museum",
+"iraq.museum",
+"iron.museum",
+"isleofman.museum",
+"jamison.museum",
+"jefferson.museum",
+"jerusalem.museum",
+"jewelry.museum",
+"jewish.museum",
+"jewishart.museum",
+"jfk.museum",
+"journalism.museum",
+"judaica.museum",
+"judygarland.museum",
+"juedisches.museum",
+"juif.museum",
+"karate.museum",
+"karikatur.museum",
+"kids.museum",
+"koebenhavn.museum",
+"koeln.museum",
+"kunst.museum",
+"kunstsammlung.museum",
+"kunstunddesign.museum",
+"labor.museum",
+"labour.museum",
+"lajolla.museum",
+"lancashire.museum",
+"landes.museum",
+"lans.museum",
+"xn--lns-qla.museum",
+"larsson.museum",
+"lewismiller.museum",
+"lincoln.museum",
+"linz.museum",
+"living.museum",
+"livinghistory.museum",
+"localhistory.museum",
+"london.museum",
+"losangeles.museum",
+"louvre.museum",
+"loyalist.museum",
+"lucerne.museum",
+"luxembourg.museum",
+"luzern.museum",
+"mad.museum",
+"madrid.museum",
+"mallorca.museum",
+"manchester.museum",
+"mansion.museum",
+"mansions.museum",
+"manx.museum",
+"marburg.museum",
+"maritime.museum",
+"maritimo.museum",
+"maryland.museum",
+"marylhurst.museum",
+"media.museum",
+"medical.museum",
+"medizinhistorisches.museum",
+"meeres.museum",
+"memorial.museum",
+"mesaverde.museum",
+"michigan.museum",
+"midatlantic.museum",
+"military.museum",
+"mill.museum",
+"miners.museum",
+"mining.museum",
+"minnesota.museum",
+"missile.museum",
+"missoula.museum",
+"modern.museum",
+"moma.museum",
+"money.museum",
+"monmouth.museum",
+"monticello.museum",
+"montreal.museum",
+"moscow.museum",
+"motorcycle.museum",
+"muenchen.museum",
+"muenster.museum",
+"mulhouse.museum",
+"muncie.museum",
+"museet.museum",
+"museumcenter.museum",
+"museumvereniging.museum",
+"music.museum",
+"national.museum",
+"nationalfirearms.museum",
+"nationalheritage.museum",
+"nativeamerican.museum",
+"naturalhistory.museum",
+"naturalhistorymuseum.museum",
+"naturalsciences.museum",
+"nature.museum",
+"naturhistorisches.museum",
+"natuurwetenschappen.museum",
+"naumburg.museum",
+"naval.museum",
+"nebraska.museum",
+"neues.museum",
+"newhampshire.museum",
+"newjersey.museum",
+"newmexico.museum",
+"newport.museum",
+"newspaper.museum",
+"newyork.museum",
+"niepce.museum",
+"norfolk.museum",
+"north.museum",
+"nrw.museum",
+"nuernberg.museum",
+"nuremberg.museum",
+"nyc.museum",
+"nyny.museum",
+"oceanographic.museum",
+"oceanographique.museum",
+"omaha.museum",
+"online.museum",
+"ontario.museum",
+"openair.museum",
+"oregon.museum",
+"oregontrail.museum",
+"otago.museum",
+"oxford.museum",
+"pacific.museum",
+"paderborn.museum",
+"palace.museum",
+"paleo.museum",
+"palmsprings.museum",
+"panama.museum",
+"paris.museum",
+"pasadena.museum",
+"pharmacy.museum",
+"philadelphia.museum",
+"philadelphiaarea.museum",
+"philately.museum",
+"phoenix.museum",
+"photography.museum",
+"pilots.museum",
+"pittsburgh.museum",
+"planetarium.museum",
+"plantation.museum",
+"plants.museum",
+"plaza.museum",
+"portal.museum",
+"portland.museum",
+"portlligat.museum",
+"posts-and-telecommunications.museum",
+"preservation.museum",
+"presidio.museum",
+"press.museum",
+"project.museum",
+"public.museum",
+"pubol.museum",
+"quebec.museum",
+"railroad.museum",
+"railway.museum",
+"research.museum",
+"resistance.museum",
+"riodejaneiro.museum",
+"rochester.museum",
+"rockart.museum",
+"roma.museum",
+"russia.museum",
+"saintlouis.museum",
+"salem.museum",
+"salvadordali.museum",
+"salzburg.museum",
+"sandiego.museum",
+"sanfrancisco.museum",
+"santabarbara.museum",
+"santacruz.museum",
+"santafe.museum",
+"saskatchewan.museum",
+"satx.museum",
+"savannahga.museum",
+"schlesisches.museum",
+"schoenbrunn.museum",
+"schokoladen.museum",
+"school.museum",
+"schweiz.museum",
+"science.museum",
+"scienceandhistory.museum",
+"scienceandindustry.museum",
+"sciencecenter.museum",
+"sciencecenters.museum",
+"science-fiction.museum",
+"sciencehistory.museum",
+"sciences.museum",
+"sciencesnaturelles.museum",
+"scotland.museum",
+"seaport.museum",
+"settlement.museum",
+"settlers.museum",
+"shell.museum",
+"sherbrooke.museum",
+"sibenik.museum",
+"silk.museum",
+"ski.museum",
+"skole.museum",
+"society.museum",
+"sologne.museum",
+"soundandvision.museum",
+"southcarolina.museum",
+"southwest.museum",
+"space.museum",
+"spy.museum",
+"square.museum",
+"stadt.museum",
+"stalbans.museum",
+"starnberg.museum",
+"state.museum",
+"stateofdelaware.museum",
+"station.museum",
+"steam.museum",
+"steiermark.museum",
+"stjohn.museum",
+"stockholm.museum",
+"stpetersburg.museum",
+"stuttgart.museum",
+"suisse.museum",
+"surgeonshall.museum",
+"surrey.museum",
+"svizzera.museum",
+"sweden.museum",
+"sydney.museum",
+"tank.museum",
+"tcm.museum",
+"technology.museum",
+"telekommunikation.museum",
+"television.museum",
+"texas.museum",
+"textile.museum",
+"theater.museum",
+"time.museum",
+"timekeeping.museum",
+"topology.museum",
+"torino.museum",
+"touch.museum",
+"town.museum",
+"transport.museum",
+"tree.museum",
+"trolley.museum",
+"trust.museum",
+"trustee.museum",
+"uhren.museum",
+"ulm.museum",
+"undersea.museum",
+"university.museum",
+"usa.museum",
+"usantiques.museum",
+"usarts.museum",
+"uscountryestate.museum",
+"usculture.museum",
+"usdecorativearts.museum",
+"usgarden.museum",
+"ushistory.museum",
+"ushuaia.museum",
+"uslivinghistory.museum",
+"utah.museum",
+"uvic.museum",
+"valley.museum",
+"vantaa.museum",
+"versailles.museum",
+"viking.museum",
+"village.museum",
+"virginia.museum",
+"virtual.museum",
+"virtuel.museum",
+"vlaanderen.museum",
+"volkenkunde.museum",
+"wales.museum",
+"wallonie.museum",
+"war.museum",
+"washingtondc.museum",
+"watchandclock.museum",
+"watch-and-clock.museum",
+"western.museum",
+"westfalen.museum",
+"whaling.museum",
+"wildlife.museum",
+"williamsburg.museum",
+"windmill.museum",
+"workshop.museum",
+"york.museum",
+"yorkshire.museum",
+"yosemite.museum",
+"youth.museum",
+"zoological.museum",
+"zoology.museum",
+"xn--9dbhblg6di.museum",
+"xn--h1aegh.museum",
+"aero.mv",
+"biz.mv",
+"com.mv",
+"coop.mv",
+"edu.mv",
+"gov.mv",
+"info.mv",
+"int.mv",
+"mil.mv",
+"museum.mv",
+"name.mv",
+"net.mv",
+"org.mv",
+"pro.mv",
+"ac.mw",
+"biz.mw",
+"co.mw",
+"com.mw",
+"coop.mw",
+"edu.mw",
+"gov.mw",
+"int.mw",
+"museum.mw",
+"net.mw",
+"org.mw",
+"com.mx",
+"org.mx",
+"gob.mx",
+"edu.mx",
+"net.mx",
+"com.my",
+"net.my",
+"org.my",
+"gov.my",
+"edu.my",
+"mil.my",
+"name.my",
+"mz",
+"teledata.mz",
+"info.na",
+"pro.na",
+"name.na",
+"school.na",
+"or.na",
+"dr.na",
+"us.na",
+"mx.na",
+"ca.na",
+"in.na",
+"cc.na",
+"tv.na",
+"ws.na",
+"mobi.na",
+"co.na",
+"com.na",
+"org.na",
+"asso.nc",
+"com.nf",
+"net.nf",
+"per.nf",
+"rec.nf",
+"web.nf",
+"arts.nf",
+"firm.nf",
+"info.nf",
+"other.nf",
+"store.nf",
+"com.ng",
+"edu.ng",
+"name.ng",
+"net.ng",
+"org.ng",
+"sch.ng",
+"gov.ng",
+"mil.ng",
+"mobi.ng",
+"ni",
+"bv.nl",
+"fhs.no",
+"vgs.no",
+"fylkesbibl.no",
+"folkebibl.no",
+"museum.no",
+"idrett.no",
+"priv.no",
+"mil.no",
+"stat.no",
+"dep.no",
+"kommune.no",
+"herad.no",
+"aa.no",
+"ah.no",
+"bu.no",
+"fm.no",
+"hl.no",
+"hm.no",
+"jan-mayen.no",
+"mr.no",
+"nl.no",
+"nt.no",
+"of.no",
+"ol.no",
+"oslo.no",
+"rl.no",
+"sf.no",
+"st.no",
+"svalbard.no",
+"tm.no",
+"tr.no",
+"va.no",
+"vf.no",
+"gs.aa.no",
+"gs.ah.no",
+"gs.bu.no",
+"gs.fm.no",
+"gs.hl.no",
+"gs.hm.no",
+"gs.jan-mayen.no",
+"gs.mr.no",
+"gs.nl.no",
+"gs.nt.no",
+"gs.of.no",
+"gs.ol.no",
+"gs.oslo.no",
+"gs.rl.no",
+"gs.sf.no",
+"gs.st.no",
+"gs.svalbard.no",
+"gs.tm.no",
+"gs.tr.no",
+"gs.va.no",
+"gs.vf.no",
+"akrehamn.no",
+"xn--krehamn-dxa.no",
+"algard.no",
+"xn--lgrd-poac.no",
+"arna.no",
+"brumunddal.no",
+"bryne.no",
+"bronnoysund.no",
+"xn--brnnysund-m8ac.no",
+"drobak.no",
+"xn--drbak-wua.no",
+"egersund.no",
+"fetsund.no",
+"floro.no",
+"xn--flor-jra.no",
+"fredrikstad.no",
+"hokksund.no",
+"honefoss.no",
+"xn--hnefoss-q1a.no",
+"jessheim.no",
+"jorpeland.no",
+"xn--jrpeland-54a.no",
+"kirkenes.no",
+"kopervik.no",
+"krokstadelva.no",
+"langevag.no",
+"xn--langevg-jxa.no",
+"leirvik.no",
+"mjondalen.no",
+"xn--mjndalen-64a.no",
+"mo-i-rana.no",
+"mosjoen.no",
+"xn--mosjen-eya.no",
+"nesoddtangen.no",
+"orkanger.no",
+"osoyro.no",
+"xn--osyro-wua.no",
+"raholt.no",
+"xn--rholt-mra.no",
+"sandnessjoen.no",
+"xn--sandnessjen-ogb.no",
+"skedsmokorset.no",
+"slattum.no",
+"spjelkavik.no",
+"stathelle.no",
+"stavern.no",
+"stjordalshalsen.no",
+"xn--stjrdalshalsen-sqb.no",
+"tananger.no",
+"tranby.no",
+"vossevangen.no",
+"afjord.no",
+"xn--fjord-lra.no",
+"agdenes.no",
+"al.no",
+"xn--l-1fa.no",
+"alesund.no",
+"xn--lesund-hua.no",
+"alstahaug.no",
+"alta.no",
+"xn--lt-liac.no",
+"alaheadju.no",
+"xn--laheadju-7ya.no",
+"alvdal.no",
+"amli.no",
+"xn--mli-tla.no",
+"amot.no",
+"xn--mot-tla.no",
+"andebu.no",
+"andoy.no",
+"xn--andy-ira.no",
+"andasuolo.no",
+"ardal.no",
+"xn--rdal-poa.no",
+"aremark.no",
+"arendal.no",
+"xn--s-1fa.no",
+"aseral.no",
+"xn--seral-lra.no",
+"asker.no",
+"askim.no",
+"askvoll.no",
+"askoy.no",
+"xn--asky-ira.no",
+"asnes.no",
+"xn--snes-poa.no",
+"audnedaln.no",
+"aukra.no",
+"aure.no",
+"aurland.no",
+"aurskog-holand.no",
+"xn--aurskog-hland-jnb.no",
+"austevoll.no",
+"austrheim.no",
+"averoy.no",
+"xn--avery-yua.no",
+"balestrand.no",
+"ballangen.no",
+"balat.no",
+"xn--blt-elab.no",
+"balsfjord.no",
+"bahccavuotna.no",
+"xn--bhccavuotna-k7a.no",
+"bamble.no",
+"bardu.no",
+"beardu.no",
+"beiarn.no",
+"bajddar.no",
+"xn--bjddar-pta.no",
+"baidar.no",
+"xn--bidr-5nac.no",
+"berg.no",
+"bergen.no",
+"berlevag.no",
+"xn--berlevg-jxa.no",
+"bearalvahki.no",
+"xn--bearalvhki-y4a.no",
+"bindal.no",
+"birkenes.no",
+"bjarkoy.no",
+"xn--bjarky-fya.no",
+"bjerkreim.no",
+"bjugn.no",
+"bodo.no",
+"xn--bod-2na.no",
+"badaddja.no",
+"xn--bdddj-mrabd.no",
+"budejju.no",
+"bokn.no",
+"bremanger.no",
+"bronnoy.no",
+"xn--brnny-wuac.no",
+"bygland.no",
+"bykle.no",
+"barum.no",
+"xn--brum-voa.no",
+"bo.telemark.no",
+"xn--b-5ga.telemark.no",
+"bo.nordland.no",
+"xn--b-5ga.nordland.no",
+"bievat.no",
+"xn--bievt-0qa.no",
+"bomlo.no",
+"xn--bmlo-gra.no",
+"batsfjord.no",
+"xn--btsfjord-9za.no",
+"bahcavuotna.no",
+"xn--bhcavuotna-s4a.no",
+"dovre.no",
+"drammen.no",
+"drangedal.no",
+"dyroy.no",
+"xn--dyry-ira.no",
+"donna.no",
+"xn--dnna-gra.no",
+"eid.no",
+"eidfjord.no",
+"eidsberg.no",
+"eidskog.no",
+"eidsvoll.no",
+"eigersund.no",
+"elverum.no",
+"enebakk.no",
+"engerdal.no",
+"etne.no",
+"etnedal.no",
+"evenes.no",
+"evenassi.no",
+"xn--eveni-0qa01ga.no",
+"evje-og-hornnes.no",
+"farsund.no",
+"fauske.no",
+"fuossko.no",
+"fuoisku.no",
+"fedje.no",
+"fet.no",
+"finnoy.no",
+"xn--finny-yua.no",
+"fitjar.no",
+"fjaler.no",
+"fjell.no",
+"flakstad.no",
+"flatanger.no",
+"flekkefjord.no",
+"flesberg.no",
+"flora.no",
+"fla.no",
+"xn--fl-zia.no",
+"folldal.no",
+"forsand.no",
+"fosnes.no",
+"frei.no",
+"frogn.no",
+"froland.no",
+"frosta.no",
+"frana.no",
+"xn--frna-woa.no",
+"froya.no",
+"xn--frya-hra.no",
+"fusa.no",
+"fyresdal.no",
+"forde.no",
+"xn--frde-gra.no",
+"gamvik.no",
+"gangaviika.no",
+"xn--ggaviika-8ya47h.no",
+"gaular.no",
+"gausdal.no",
+"gildeskal.no",
+"xn--gildeskl-g0a.no",
+"giske.no",
+"gjemnes.no",
+"gjerdrum.no",
+"gjerstad.no",
+"gjesdal.no",
+"gjovik.no",
+"xn--gjvik-wua.no",
+"gloppen.no",
+"gol.no",
+"gran.no",
+"grane.no",
+"granvin.no",
+"gratangen.no",
+"grimstad.no",
+"grong.no",
+"kraanghke.no",
+"xn--kranghke-b0a.no",
+"grue.no",
+"gulen.no",
+"hadsel.no",
+"halden.no",
+"halsa.no",
+"hamar.no",
+"hamaroy.no",
+"habmer.no",
+"xn--hbmer-xqa.no",
+"hapmir.no",
+"xn--hpmir-xqa.no",
+"hammerfest.no",
+"hammarfeasta.no",
+"xn--hmmrfeasta-s4ac.no",
+"haram.no",
+"hareid.no",
+"harstad.no",
+"hasvik.no",
+"aknoluokta.no",
+"xn--koluokta-7ya57h.no",
+"hattfjelldal.no",
+"aarborte.no",
+"haugesund.no",
+"hemne.no",
+"hemnes.no",
+"hemsedal.no",
+"heroy.more-og-romsdal.no",
+"xn--hery-ira.xn--mre-og-romsdal-qqb.no",
+"heroy.nordland.no",
+"xn--hery-ira.nordland.no",
+"hitra.no",
+"hjartdal.no",
+"hjelmeland.no",
+"hobol.no",
+"xn--hobl-ira.no",
+"hof.no",
+"hol.no",
+"hole.no",
+"holmestrand.no",
+"holtalen.no",
+"xn--holtlen-hxa.no",
+"hornindal.no",
+"horten.no",
+"hurdal.no",
+"hurum.no",
+"hvaler.no",
+"hyllestad.no",
+"hagebostad.no",
+"xn--hgebostad-g3a.no",
+"hoyanger.no",
+"xn--hyanger-q1a.no",
+"hoylandet.no",
+"xn--hylandet-54a.no",
+"ha.no",
+"xn--h-2fa.no",
+"ibestad.no",
+"inderoy.no",
+"xn--indery-fya.no",
+"iveland.no",
+"jevnaker.no",
+"jondal.no",
+"jolster.no",
+"xn--jlster-bya.no",
+"karasjok.no",
+"karasjohka.no",
+"xn--krjohka-hwab49j.no",
+"karlsoy.no",
+"galsa.no",
+"xn--gls-elac.no",
+"karmoy.no",
+"xn--karmy-yua.no",
+"kautokeino.no",
+"guovdageaidnu.no",
+"klepp.no",
+"klabu.no",
+"xn--klbu-woa.no",
+"kongsberg.no",
+"kongsvinger.no",
+"kragero.no",
+"xn--krager-gya.no",
+"kristiansand.no",
+"kristiansund.no",
+"krodsherad.no",
+"xn--krdsherad-m8a.no",
+"kvalsund.no",
+"rahkkeravju.no",
+"xn--rhkkervju-01af.no",
+"kvam.no",
+"kvinesdal.no",
+"kvinnherad.no",
+"kviteseid.no",
+"kvitsoy.no",
+"xn--kvitsy-fya.no",
+"kvafjord.no",
+"xn--kvfjord-nxa.no",
+"giehtavuoatna.no",
+"kvanangen.no",
+"xn--kvnangen-k0a.no",
+"navuotna.no",
+"xn--nvuotna-hwa.no",
+"kafjord.no",
+"xn--kfjord-iua.no",
+"gaivuotna.no",
+"xn--givuotna-8ya.no",
+"larvik.no",
+"lavangen.no",
+"lavagis.no",
+"loabat.no",
+"xn--loabt-0qa.no",
+"lebesby.no",
+"davvesiida.no",
+"leikanger.no",
+"leirfjord.no",
+"leka.no",
+"leksvik.no",
+"lenvik.no",
+"leangaviika.no",
+"xn--leagaviika-52b.no",
+"lesja.no",
+"levanger.no",
+"lier.no",
+"lierne.no",
+"lillehammer.no",
+"lillesand.no",
+"lindesnes.no",
+"lindas.no",
+"xn--linds-pra.no",
+"lom.no",
+"loppa.no",
+"lahppi.no",
+"xn--lhppi-xqa.no",
+"lund.no",
+"lunner.no",
+"luroy.no",
+"xn--lury-ira.no",
+"luster.no",
+"lyngdal.no",
+"lyngen.no",
+"ivgu.no",
+"lardal.no",
+"lerdal.no",
+"xn--lrdal-sra.no",
+"lodingen.no",
+"xn--ldingen-q1a.no",
+"lorenskog.no",
+"xn--lrenskog-54a.no",
+"loten.no",
+"xn--lten-gra.no",
+"malvik.no",
+"masoy.no",
+"xn--msy-ula0h.no",
+"muosat.no",
+"xn--muost-0qa.no",
+"mandal.no",
+"marker.no",
+"marnardal.no",
+"masfjorden.no",
+"meland.no",
+"meldal.no",
+"melhus.no",
+"meloy.no",
+"xn--mely-ira.no",
+"meraker.no",
+"xn--merker-kua.no",
+"moareke.no",
+"xn--moreke-jua.no",
+"midsund.no",
+"midtre-gauldal.no",
+"modalen.no",
+"modum.no",
+"molde.no",
+"moskenes.no",
+"moss.no",
+"mosvik.no",
+"malselv.no",
+"xn--mlselv-iua.no",
+"malatvuopmi.no",
+"xn--mlatvuopmi-s4a.no",
+"namdalseid.no",
+"aejrie.no",
+"namsos.no",
+"namsskogan.no",
+"naamesjevuemie.no",
+"xn--nmesjevuemie-tcba.no",
+"laakesvuemie.no",
+"nannestad.no",
+"narvik.no",
+"narviika.no",
+"naustdal.no",
+"nedre-eiker.no",
+"nes.akershus.no",
+"nes.buskerud.no",
+"nesna.no",
+"nesodden.no",
+"nesseby.no",
+"unjarga.no",
+"xn--unjrga-rta.no",
+"nesset.no",
+"nissedal.no",
+"nittedal.no",
+"nord-aurdal.no",
+"nord-fron.no",
+"nord-odal.no",
+"norddal.no",
+"nordkapp.no",
+"davvenjarga.no",
+"xn--davvenjrga-y4a.no",
+"nordre-land.no",
+"nordreisa.no",
+"raisa.no",
+"xn--risa-5na.no",
+"nore-og-uvdal.no",
+"notodden.no",
+"naroy.no",
+"xn--nry-yla5g.no",
+"notteroy.no",
+"xn--nttery-byae.no",
+"odda.no",
+"oksnes.no",
+"xn--ksnes-uua.no",
+"oppdal.no",
+"oppegard.no",
+"xn--oppegrd-ixa.no",
+"orkdal.no",
+"orland.no",
+"xn--rland-uua.no",
+"orskog.no",
+"xn--rskog-uua.no",
+"orsta.no",
+"xn--rsta-fra.no",
+"os.hedmark.no",
+"os.hordaland.no",
+"osen.no",
+"osteroy.no",
+"xn--ostery-fya.no",
+"ostre-toten.no",
+"xn--stre-toten-zcb.no",
+"overhalla.no",
+"ovre-eiker.no",
+"xn--vre-eiker-k8a.no",
+"oyer.no",
+"xn--yer-zna.no",
+"oygarden.no",
+"xn--ygarden-p1a.no",
+"oystre-slidre.no",
+"xn--ystre-slidre-ujb.no",
+"porsanger.no",
+"porsangu.no",
+"xn--porsgu-sta26f.no",
+"porsgrunn.no",
+"radoy.no",
+"xn--rady-ira.no",
+"rakkestad.no",
+"rana.no",
+"ruovat.no",
+"randaberg.no",
+"rauma.no",
+"rendalen.no",
+"rennebu.no",
+"rennesoy.no",
+"xn--rennesy-v1a.no",
+"rindal.no",
+"ringebu.no",
+"ringerike.no",
+"ringsaker.no",
+"rissa.no",
+"risor.no",
+"xn--risr-ira.no",
+"roan.no",
+"rollag.no",
+"rygge.no",
+"ralingen.no",
+"xn--rlingen-mxa.no",
+"rodoy.no",
+"xn--rdy-0nab.no",
+"romskog.no",
+"xn--rmskog-bya.no",
+"roros.no",
+"xn--rros-gra.no",
+"rost.no",
+"xn--rst-0na.no",
+"royken.no",
+"xn--ryken-vua.no",
+"royrvik.no",
+"xn--ryrvik-bya.no",
+"rade.no",
+"xn--rde-ula.no",
+"salangen.no",
+"siellak.no",
+"saltdal.no",
+"salat.no",
+"xn--slt-elab.no",
+"xn--slat-5na.no",
+"samnanger.no",
+"sande.more-og-romsdal.no",
+"sande.xn--mre-og-romsdal-qqb.no",
+"sande.vestfold.no",
+"sandefjord.no",
+"sandnes.no",
+"sandoy.no",
+"xn--sandy-yua.no",
+"sarpsborg.no",
+"sauda.no",
+"sauherad.no",
+"sel.no",
+"selbu.no",
+"selje.no",
+"seljord.no",
+"sigdal.no",
+"siljan.no",
+"sirdal.no",
+"skaun.no",
+"skedsmo.no",
+"ski.no",
+"skien.no",
+"skiptvet.no",
+"skjervoy.no",
+"xn--skjervy-v1a.no",
+"skierva.no",
+"xn--skierv-uta.no",
+"skjak.no",
+"xn--skjk-soa.no",
+"skodje.no",
+"skanland.no",
+"xn--sknland-fxa.no",
+"skanit.no",
+"xn--sknit-yqa.no",
+"smola.no",
+"xn--smla-hra.no",
+"snillfjord.no",
+"snasa.no",
+"xn--snsa-roa.no",
+"snoasa.no",
+"snaase.no",
+"xn--snase-nra.no",
+"sogndal.no",
+"sokndal.no",
+"sola.no",
+"solund.no",
+"songdalen.no",
+"sortland.no",
+"spydeberg.no",
+"stange.no",
+"stavanger.no",
+"steigen.no",
+"steinkjer.no",
+"stjordal.no",
+"xn--stjrdal-s1a.no",
+"stokke.no",
+"stor-elvdal.no",
+"stord.no",
+"stordal.no",
+"storfjord.no",
+"omasvuotna.no",
+"strand.no",
+"stranda.no",
+"stryn.no",
+"sula.no",
+"suldal.no",
+"sund.no",
+"sunndal.no",
+"surnadal.no",
+"sveio.no",
+"svelvik.no",
+"sykkylven.no",
+"sogne.no",
+"xn--sgne-gra.no",
+"somna.no",
+"xn--smna-gra.no",
+"sondre-land.no",
+"xn--sndre-land-0cb.no",
+"sor-aurdal.no",
+"xn--sr-aurdal-l8a.no",
+"sor-fron.no",
+"xn--sr-fron-q1a.no",
+"sor-odal.no",
+"xn--sr-odal-q1a.no",
+"sor-varanger.no",
+"xn--sr-varanger-ggb.no",
+"matta-varjjat.no",
+"xn--mtta-vrjjat-k7af.no",
+"sorfold.no",
+"xn--srfold-bya.no",
+"sorreisa.no",
+"xn--srreisa-q1a.no",
+"sorum.no",
+"xn--srum-gra.no",
+"tana.no",
+"deatnu.no",
+"time.no",
+"tingvoll.no",
+"tinn.no",
+"tjeldsund.no",
+"dielddanuorri.no",
+"tjome.no",
+"xn--tjme-hra.no",
+"tokke.no",
+"tolga.no",
+"torsken.no",
+"tranoy.no",
+"xn--trany-yua.no",
+"tromso.no",
+"xn--troms-zua.no",
+"tromsa.no",
+"romsa.no",
+"trondheim.no",
+"troandin.no",
+"trysil.no",
+"trana.no",
+"xn--trna-woa.no",
+"trogstad.no",
+"xn--trgstad-r1a.no",
+"tvedestrand.no",
+"tydal.no",
+"tynset.no",
+"tysfjord.no",
+"divtasvuodna.no",
+"divttasvuotna.no",
+"tysnes.no",
+"tysvar.no",
+"xn--tysvr-vra.no",
+"tonsberg.no",
+"xn--tnsberg-q1a.no",
+"ullensaker.no",
+"ullensvang.no",
+"ulvik.no",
+"utsira.no",
+"vadso.no",
+"xn--vads-jra.no",
+"cahcesuolo.no",
+"xn--hcesuolo-7ya35b.no",
+"vaksdal.no",
+"valle.no",
+"vang.no",
+"vanylven.no",
+"vardo.no",
+"xn--vard-jra.no",
+"varggat.no",
+"xn--vrggt-xqad.no",
+"vefsn.no",
+"vaapste.no",
+"vega.no",
+"vegarshei.no",
+"xn--vegrshei-c0a.no",
+"vennesla.no",
+"verdal.no",
+"verran.no",
+"vestby.no",
+"vestnes.no",
+"vestre-slidre.no",
+"vestre-toten.no",
+"vestvagoy.no",
+"xn--vestvgy-ixa6o.no",
+"vevelstad.no",
+"vik.no",
+"vikna.no",
+"vindafjord.no",
+"volda.no",
+"voss.no",
+"varoy.no",
+"xn--vry-yla5g.no",
+"vagan.no",
+"xn--vgan-qoa.no",
+"voagat.no",
+"vagsoy.no",
+"xn--vgsy-qoa0j.no",
+"vaga.no",
+"xn--vg-yiab.no",
+"valer.ostfold.no",
+"xn--vler-qoa.xn--stfold-9xa.no",
+"valer.hedmark.no",
+"xn--vler-qoa.hedmark.no",
+"np",
+"biz.nr",
+"info.nr",
+"gov.nr",
+"edu.nr",
+"org.nr",
+"net.nr",
+"com.nr",
+"nz",
+"co.om",
+"com.om",
+"edu.om",
+"gov.om",
+"med.om",
+"museum.om",
+"net.om",
+"org.om",
+"pro.om",
+"ac.pa",
+"gob.pa",
+"com.pa",
+"org.pa",
+"sld.pa",
+"edu.pa",
+"net.pa",
+"ing.pa",
+"abo.pa",
+"med.pa",
+"nom.pa",
+"edu.pe",
+"gob.pe",
+"nom.pe",
+"mil.pe",
+"org.pe",
+"com.pe",
+"net.pe",
+"com.pf",
+"org.pf",
+"edu.pf",
+"pg",
+"com.ph",
+"net.ph",
+"org.ph",
+"gov.ph",
+"edu.ph",
+"ngo.ph",
+"mil.ph",
+"i.ph",
+"com.pk",
+"net.pk",
+"edu.pk",
+"org.pk",
+"fam.pk",
+"biz.pk",
+"web.pk",
+"gov.pk",
+"gob.pk",
+"gok.pk",
+"gon.pk",
+"gop.pk",
+"gos.pk",
+"info.pk",
+"aid.pl",
+"agro.pl",
+"atm.pl",
+"auto.pl",
+"biz.pl",
+"com.pl",
+"edu.pl",
+"gmina.pl",
+"gsm.pl",
+"info.pl",
+"mail.pl",
+"miasta.pl",
+"media.pl",
+"mil.pl",
+"net.pl",
+"nieruchomosci.pl",
+"nom.pl",
+"org.pl",
+"pc.pl",
+"powiat.pl",
+"priv.pl",
+"realestate.pl",
+"rel.pl",
+"sex.pl",
+"shop.pl",
+"sklep.pl",
+"sos.pl",
+"szkola.pl",
+"targi.pl",
+"tm.pl",
+"tourism.pl",
+"travel.pl",
+"turystyka.pl",
+"6bone.pl",
+"art.pl",
+"mbone.pl",
+"gov.pl",
+"uw.gov.pl",
+"um.gov.pl",
+"ug.gov.pl",
+"upow.gov.pl",
+"starostwo.gov.pl",
+"so.gov.pl",
+"sr.gov.pl",
+"po.gov.pl",
+"pa.gov.pl",
+"ngo.pl",
+"irc.pl",
+"usenet.pl",
+"augustow.pl",
+"babia-gora.pl",
+"bedzin.pl",
+"beskidy.pl",
+"bialowieza.pl",
+"bialystok.pl",
+"bielawa.pl",
+"bieszczady.pl",
+"boleslawiec.pl",
+"bydgoszcz.pl",
+"bytom.pl",
+"cieszyn.pl",
+"czeladz.pl",
+"czest.pl",
+"dlugoleka.pl",
+"elblag.pl",
+"elk.pl",
+"glogow.pl",
+"gniezno.pl",
+"gorlice.pl",
+"grajewo.pl",
+"ilawa.pl",
+"jaworzno.pl",
+"jelenia-gora.pl",
+"jgora.pl",
+"kalisz.pl",
+"kazimierz-dolny.pl",
+"karpacz.pl",
+"kartuzy.pl",
+"kaszuby.pl",
+"katowice.pl",
+"kepno.pl",
+"ketrzyn.pl",
+"klodzko.pl",
+"kobierzyce.pl",
+"kolobrzeg.pl",
+"konin.pl",
+"konskowola.pl",
+"kutno.pl",
+"lapy.pl",
+"lebork.pl",
+"legnica.pl",
+"lezajsk.pl",
+"limanowa.pl",
+"lomza.pl",
+"lowicz.pl",
+"lubin.pl",
+"lukow.pl",
+"malbork.pl",
+"malopolska.pl",
+"mazowsze.pl",
+"mazury.pl",
+"mielec.pl",
+"mielno.pl",
+"mragowo.pl",
+"naklo.pl",
+"nowaruda.pl",
+"nysa.pl",
+"olawa.pl",
+"olecko.pl",
+"olkusz.pl",
+"olsztyn.pl",
+"opoczno.pl",
+"opole.pl",
+"ostroda.pl",
+"ostroleka.pl",
+"ostrowiec.pl",
+"ostrowwlkp.pl",
+"pila.pl",
+"pisz.pl",
+"podhale.pl",
+"podlasie.pl",
+"polkowice.pl",
+"pomorze.pl",
+"pomorskie.pl",
+"prochowice.pl",
+"pruszkow.pl",
+"przeworsk.pl",
+"pulawy.pl",
+"radom.pl",
+"rawa-maz.pl",
+"rybnik.pl",
+"rzeszow.pl",
+"sanok.pl",
+"sejny.pl",
+"siedlce.pl",
+"slask.pl",
+"slupsk.pl",
+"sosnowiec.pl",
+"stalowa-wola.pl",
+"skoczow.pl",
+"starachowice.pl",
+"stargard.pl",
+"suwalki.pl",
+"swidnica.pl",
+"swiebodzin.pl",
+"swinoujscie.pl",
+"szczecin.pl",
+"szczytno.pl",
+"tarnobrzeg.pl",
+"tgory.pl",
+"turek.pl",
+"tychy.pl",
+"ustka.pl",
+"walbrzych.pl",
+"warmia.pl",
+"warszawa.pl",
+"waw.pl",
+"wegrow.pl",
+"wielun.pl",
+"wlocl.pl",
+"wloclawek.pl",
+"wodzislaw.pl",
+"wolomin.pl",
+"wroclaw.pl",
+"zachpomor.pl",
+"zagan.pl",
+"zarow.pl",
+"zgora.pl",
+"zgorzelec.pl",
+"gda.pl",
+"gdansk.pl",
+"gdynia.pl",
+"med.pl",
+"sopot.pl",
+"gliwice.pl",
+"krakow.pl",
+"poznan.pl",
+"wroc.pl",
+"zakopane.pl",
+"gov.pn",
+"co.pn",
+"org.pn",
+"edu.pn",
+"net.pn",
+"com.pr",
+"net.pr",
+"org.pr",
+"gov.pr",
+"edu.pr",
+"isla.pr",
+"pro.pr",
+"biz.pr",
+"info.pr",
+"name.pr",
+"est.pr",
+"prof.pr",
+"ac.pr",
+"aca.pro",
+"bar.pro",
+"cpa.pro",
+"jur.pro",
+"law.pro",
+"med.pro",
+"eng.pro",
+"edu.ps",
+"gov.ps",
+"sec.ps",
+"plo.ps",
+"com.ps",
+"org.ps",
+"net.ps",
+"net.pt",
+"gov.pt",
+"org.pt",
+"edu.pt",
+"int.pt",
+"publ.pt",
+"com.pt",
+"nome.pt",
+"co.pw",
+"ne.pw",
+"or.pw",
+"ed.pw",
+"go.pw",
+"belau.pw",
+"com.py",
+"coop.py",
+"edu.py",
+"gov.py",
+"mil.py",
+"net.py",
+"org.py",
+"com.qa",
+"edu.qa",
+"gov.qa",
+"mil.qa",
+"name.qa",
+"net.qa",
+"org.qa",
+"sch.qa",
+"com.re",
+"asso.re",
+"nom.re",
+"com.ro",
+"org.ro",
+"tm.ro",
+"nt.ro",
+"nom.ro",
+"info.ro",
+"rec.ro",
+"arts.ro",
+"firm.ro",
+"store.ro",
+"www.ro",
+"co.rs",
+"org.rs",
+"edu.rs",
+"ac.rs",
+"gov.rs",
+"in.rs",
+"ac.ru",
+"com.ru",
+"edu.ru",
+"int.ru",
+"net.ru",
+"org.ru",
+"pp.ru",
+"adygeya.ru",
+"altai.ru",
+"amur.ru",
+"arkhangelsk.ru",
+"astrakhan.ru",
+"bashkiria.ru",
+"belgorod.ru",
+"bir.ru",
+"bryansk.ru",
+"buryatia.ru",
+"cbg.ru",
+"chel.ru",
+"chelyabinsk.ru",
+"chita.ru",
+"chukotka.ru",
+"chuvashia.ru",
+"dagestan.ru",
+"dudinka.ru",
+"e-burg.ru",
+"grozny.ru",
+"irkutsk.ru",
+"ivanovo.ru",
+"izhevsk.ru",
+"jar.ru",
+"joshkar-ola.ru",
+"kalmykia.ru",
+"kaluga.ru",
+"kamchatka.ru",
+"karelia.ru",
+"kazan.ru",
+"kchr.ru",
+"kemerovo.ru",
+"khabarovsk.ru",
+"khakassia.ru",
+"khv.ru",
+"kirov.ru",
+"koenig.ru",
+"komi.ru",
+"kostroma.ru",
+"krasnoyarsk.ru",
+"kuban.ru",
+"kurgan.ru",
+"kursk.ru",
+"lipetsk.ru",
+"magadan.ru",
+"mari.ru",
+"mari-el.ru",
+"marine.ru",
+"mordovia.ru",
+"mosreg.ru",
+"msk.ru",
+"murmansk.ru",
+"nalchik.ru",
+"nnov.ru",
+"nov.ru",
+"novosibirsk.ru",
+"nsk.ru",
+"omsk.ru",
+"orenburg.ru",
+"oryol.ru",
+"palana.ru",
+"penza.ru",
+"perm.ru",
+"pskov.ru",
+"ptz.ru",
+"rnd.ru",
+"ryazan.ru",
+"sakhalin.ru",
+"samara.ru",
+"saratov.ru",
+"simbirsk.ru",
+"smolensk.ru",
+"spb.ru",
+"stavropol.ru",
+"stv.ru",
+"surgut.ru",
+"tambov.ru",
+"tatarstan.ru",
+"tom.ru",
+"tomsk.ru",
+"tsaritsyn.ru",
+"tsk.ru",
+"tula.ru",
+"tuva.ru",
+"tver.ru",
+"tyumen.ru",
+"udm.ru",
+"udmurtia.ru",
+"ulan-ude.ru",
+"vladikavkaz.ru",
+"vladimir.ru",
+"vladivostok.ru",
+"volgograd.ru",
+"vologda.ru",
+"voronezh.ru",
+"vrn.ru",
+"vyatka.ru",
+"yakutia.ru",
+"yamal.ru",
+"yaroslavl.ru",
+"yekaterinburg.ru",
+"yuzhno-sakhalinsk.ru",
+"amursk.ru",
+"baikal.ru",
+"cmw.ru",
+"fareast.ru",
+"jamal.ru",
+"kms.ru",
+"k-uralsk.ru",
+"kustanai.ru",
+"kuzbass.ru",
+"magnitka.ru",
+"mytis.ru",
+"nakhodka.ru",
+"nkz.ru",
+"norilsk.ru",
+"oskol.ru",
+"pyatigorsk.ru",
+"rubtsovsk.ru",
+"snz.ru",
+"syzran.ru",
+"vdonsk.ru",
+"zgrad.ru",
+"gov.ru",
+"mil.ru",
+"test.ru",
+"gov.rw",
+"net.rw",
+"edu.rw",
+"ac.rw",
+"com.rw",
+"co.rw",
+"int.rw",
+"mil.rw",
+"gouv.rw",
+"com.sa",
+"net.sa",
+"org.sa",
+"gov.sa",
+"med.sa",
+"pub.sa",
+"edu.sa",
+"sch.sa",
+"com.sb",
+"edu.sb",
+"gov.sb",
+"net.sb",
+"org.sb",
+"com.sc",
+"gov.sc",
+"net.sc",
+"org.sc",
+"edu.sc",
+"com.sd",
+"net.sd",
+"org.sd",
+"edu.sd",
+"med.sd",
+"tv.sd",
+"gov.sd",
+"info.sd",
+"a.se",
+"ac.se",
+"b.se",
+"bd.se",
+"brand.se",
+"c.se",
+"d.se",
+"e.se",
+"f.se",
+"fh.se",
+"fhsk.se",
+"fhv.se",
+"g.se",
+"h.se",
+"i.se",
+"k.se",
+"komforb.se",
+"kommunalforbund.se",
+"komvux.se",
+"l.se",
+"lanbib.se",
+"m.se",
+"n.se",
+"naturbruksgymn.se",
+"o.se",
+"org.se",
+"p.se",
+"parti.se",
+"pp.se",
+"press.se",
+"r.se",
+"s.se",
+"t.se",
+"tm.se",
+"u.se",
+"w.se",
+"x.se",
+"y.se",
+"z.se",
+"com.sg",
+"net.sg",
+"org.sg",
+"gov.sg",
+"edu.sg",
+"per.sg",
+"com.sh",
+"net.sh",
+"gov.sh",
+"org.sh",
+"mil.sh",
+"com.sl",
+"net.sl",
+"edu.sl",
+"gov.sl",
+"org.sl",
+"art.sn",
+"com.sn",
+"edu.sn",
+"gouv.sn",
+"org.sn",
+"perso.sn",
+"univ.sn",
+"com.so",
+"net.so",
+"org.so",
+"co.st",
+"com.st",
+"consulado.st",
+"edu.st",
+"embaixada.st",
+"gov.st",
+"mil.st",
+"net.st",
+"org.st",
+"principe.st",
+"saotome.st",
+"store.st",
+"com.sv",
+"edu.sv",
+"gob.sv",
+"org.sv",
+"red.sv",
+"gov.sx",
+"edu.sy",
+"gov.sy",
+"net.sy",
+"mil.sy",
+"com.sy",
+"org.sy",
+"co.sz",
+"ac.sz",
+"org.sz",
+"ac.th",
+"co.th",
+"go.th",
+"in.th",
+"mi.th",
+"net.th",
+"or.th",
+"ac.tj",
+"biz.tj",
+"co.tj",
+"com.tj",
+"edu.tj",
+"go.tj",
+"gov.tj",
+"int.tj",
+"mil.tj",
+"name.tj",
+"net.tj",
+"nic.tj",
+"org.tj",
+"test.tj",
+"web.tj",
+"gov.tl",
+"com.tm",
+"co.tm",
+"org.tm",
+"net.tm",
+"nom.tm",
+"gov.tm",
+"mil.tm",
+"edu.tm",
+"com.tn",
+"ens.tn",
+"fin.tn",
+"gov.tn",
+"ind.tn",
+"intl.tn",
+"nat.tn",
+"net.tn",
+"org.tn",
+"info.tn",
+"perso.tn",
+"tourism.tn",
+"edunet.tn",
+"rnrt.tn",
+"rns.tn",
+"rnu.tn",
+"mincom.tn",
+"agrinet.tn",
+"defense.tn",
+"turen.tn",
+"com.to",
+"gov.to",
+"net.to",
+"org.to",
+"edu.to",
+"mil.to",
+"tr",
+"nic.tr",
+"gov.nc.tr",
+"co.tt",
+"com.tt",
+"org.tt",
+"net.tt",
+"biz.tt",
+"info.tt",
+"pro.tt",
+"int.tt",
+"coop.tt",
+"jobs.tt",
+"mobi.tt",
+"travel.tt",
+"museum.tt",
+"aero.tt",
+"name.tt",
+"gov.tt",
+"edu.tt",
+"edu.tw",
+"gov.tw",
+"mil.tw",
+"com.tw",
+"net.tw",
+"org.tw",
+"idv.tw",
+"game.tw",
+"ebiz.tw",
+"club.tw",
+"xn--zf0ao64a.tw",
+"xn--uc0atv.tw",
+"xn--czrw28b.tw",
+"ac.tz",
+"co.tz",
+"go.tz",
+"hotel.tz",
+"info.tz",
+"me.tz",
+"mil.tz",
+"mobi.tz",
+"ne.tz",
+"or.tz",
+"sc.tz",
+"tv.tz",
+"com.ua",
+"edu.ua",
+"gov.ua",
+"in.ua",
+"net.ua",
+"org.ua",
+"cherkassy.ua",
+"cherkasy.ua",
+"chernigov.ua",
+"chernihiv.ua",
+"chernivtsi.ua",
+"chernovtsy.ua",
+"ck.ua",
+"cn.ua",
+"cr.ua",
+"crimea.ua",
+"cv.ua",
+"dn.ua",
+"dnepropetrovsk.ua",
+"dnipropetrovsk.ua",
+"dominic.ua",
+"donetsk.ua",
+"dp.ua",
+"if.ua",
+"ivano-frankivsk.ua",
+"kh.ua",
+"kharkiv.ua",
+"kharkov.ua",
+"kherson.ua",
+"khmelnitskiy.ua",
+"khmelnytskyi.ua",
+"kiev.ua",
+"kirovograd.ua",
+"km.ua",
+"kr.ua",
+"krym.ua",
+"ks.ua",
+"kv.ua",
+"kyiv.ua",
+"lg.ua",
+"lt.ua",
+"lugansk.ua",
+"lutsk.ua",
+"lv.ua",
+"lviv.ua",
+"mk.ua",
+"mykolaiv.ua",
+"nikolaev.ua",
+"od.ua",
+"odesa.ua",
+"odessa.ua",
+"pl.ua",
+"poltava.ua",
+"rivne.ua",
+"rovno.ua",
+"rv.ua",
+"sb.ua",
+"sebastopol.ua",
+"sevastopol.ua",
+"sm.ua",
+"sumy.ua",
+"te.ua",
+"ternopil.ua",
+"uz.ua",
+"uzhgorod.ua",
+"vinnica.ua",
+"vinnytsia.ua",
+"vn.ua",
+"volyn.ua",
+"yalta.ua",
+"zaporizhzhe.ua",
+"zaporizhzhia.ua",
+"zhitomir.ua",
+"zhytomyr.ua",
+"zp.ua",
+"zt.ua",
+"co.ua",
+"pp.ua",
+"co.ug",
+"or.ug",
+"ac.ug",
+"sc.ug",
+"go.ug",
+"ne.ug",
+"com.ug",
+"org.ug",
+"uk",
+"sch.uk",
+"bl.uk",
+"british-library.uk",
+"jet.uk",
+"mod.uk",
+"national-library-scotland.uk",
+"nel.uk",
+"nic.uk",
+"nls.uk",
+"parliament.uk",
+"dni.us",
+"fed.us",
+"isa.us",
+"kids.us",
+"nsn.us",
+"ak.us",
+"al.us",
+"ar.us",
+"as.us",
+"az.us",
+"ca.us",
+"co.us",
+"ct.us",
+"dc.us",
+"de.us",
+"fl.us",
+"ga.us",
+"gu.us",
+"hi.us",
+"ia.us",
+"id.us",
+"il.us",
+"in.us",
+"ks.us",
+"ky.us",
+"la.us",
+"ma.us",
+"md.us",
+"me.us",
+"mi.us",
+"mn.us",
+"mo.us",
+"ms.us",
+"mt.us",
+"nc.us",
+"nd.us",
+"ne.us",
+"nh.us",
+"nj.us",
+"nm.us",
+"nv.us",
+"ny.us",
+"oh.us",
+"ok.us",
+"or.us",
+"pa.us",
+"pr.us",
+"ri.us",
+"sc.us",
+"sd.us",
+"tn.us",
+"tx.us",
+"ut.us",
+"vi.us",
+"vt.us",
+"va.us",
+"wa.us",
+"wi.us",
+"wv.us",
+"wy.us",
+"k12.ak.us",
+"k12.al.us",
+"k12.ar.us",
+"k12.as.us",
+"k12.az.us",
+"k12.ca.us",
+"k12.co.us",
+"k12.ct.us",
+"k12.dc.us",
+"k12.de.us",
+"k12.fl.us",
+"k12.ga.us",
+"k12.gu.us",
+"k12.ia.us",
+"k12.id.us",
+"k12.il.us",
+"k12.in.us",
+"k12.ks.us",
+"k12.ky.us",
+"k12.la.us",
+"k12.ma.us",
+"k12.md.us",
+"k12.me.us",
+"k12.mi.us",
+"k12.mn.us",
+"k12.mo.us",
+"k12.ms.us",
+"k12.mt.us",
+"k12.nc.us",
+"k12.nd.us",
+"k12.ne.us",
+"k12.nh.us",
+"k12.nj.us",
+"k12.nm.us",
+"k12.nv.us",
+"k12.ny.us",
+"k12.oh.us",
+"k12.ok.us",
+"k12.or.us",
+"k12.pa.us",
+"k12.pr.us",
+"k12.ri.us",
+"k12.sc.us",
+"k12.tn.us",
+"k12.tx.us",
+"k12.ut.us",
+"k12.vi.us",
+"k12.vt.us",
+"k12.va.us",
+"k12.wa.us",
+"k12.wi.us",
+"k12.wy.us",
+"cc.ak.us",
+"cc.al.us",
+"cc.ar.us",
+"cc.as.us",
+"cc.az.us",
+"cc.ca.us",
+"cc.co.us",
+"cc.ct.us",
+"cc.dc.us",
+"cc.de.us",
+"cc.fl.us",
+"cc.ga.us",
+"cc.gu.us",
+"cc.hi.us",
+"cc.ia.us",
+"cc.id.us",
+"cc.il.us",
+"cc.in.us",
+"cc.ks.us",
+"cc.ky.us",
+"cc.la.us",
+"cc.ma.us",
+"cc.md.us",
+"cc.me.us",
+"cc.mi.us",
+"cc.mn.us",
+"cc.mo.us",
+"cc.ms.us",
+"cc.mt.us",
+"cc.nc.us",
+"cc.nd.us",
+"cc.ne.us",
+"cc.nh.us",
+"cc.nj.us",
+"cc.nm.us",
+"cc.nv.us",
+"cc.ny.us",
+"cc.oh.us",
+"cc.ok.us",
+"cc.or.us",
+"cc.pa.us",
+"cc.pr.us",
+"cc.ri.us",
+"cc.sc.us",
+"cc.sd.us",
+"cc.tn.us",
+"cc.tx.us",
+"cc.ut.us",
+"cc.vi.us",
+"cc.vt.us",
+"cc.va.us",
+"cc.wa.us",
+"cc.wi.us",
+"cc.wv.us",
+"cc.wy.us",
+"lib.ak.us",
+"lib.al.us",
+"lib.ar.us",
+"lib.as.us",
+"lib.az.us",
+"lib.ca.us",
+"lib.co.us",
+"lib.ct.us",
+"lib.dc.us",
+"lib.de.us",
+"lib.fl.us",
+"lib.ga.us",
+"lib.gu.us",
+"lib.hi.us",
+"lib.ia.us",
+"lib.id.us",
+"lib.il.us",
+"lib.in.us",
+"lib.ks.us",
+"lib.ky.us",
+"lib.la.us",
+"lib.ma.us",
+"lib.md.us",
+"lib.me.us",
+"lib.mi.us",
+"lib.mn.us",
+"lib.mo.us",
+"lib.ms.us",
+"lib.mt.us",
+"lib.nc.us",
+"lib.nd.us",
+"lib.ne.us",
+"lib.nh.us",
+"lib.nj.us",
+"lib.nm.us",
+"lib.nv.us",
+"lib.ny.us",
+"lib.oh.us",
+"lib.ok.us",
+"lib.or.us",
+"lib.pa.us",
+"lib.pr.us",
+"lib.ri.us",
+"lib.sc.us",
+"lib.sd.us",
+"lib.tn.us",
+"lib.tx.us",
+"lib.ut.us",
+"lib.vi.us",
+"lib.vt.us",
+"lib.va.us",
+"lib.wa.us",
+"lib.wi.us",
+"lib.wy.us",
+"pvt.k12.ma.us",
+"chtr.k12.ma.us",
+"paroch.k12.ma.us",
+"com.uy",
+"edu.uy",
+"gub.uy",
+"mil.uy",
+"net.uy",
+"org.uy",
+"co.uz",
+"com.uz",
+"net.uz",
+"org.uz",
+"com.vc",
+"net.vc",
+"org.vc",
+"gov.vc",
+"mil.vc",
+"edu.vc",
+"co.ve",
+"com.ve",
+"e12.ve",
+"edu.ve",
+"gov.ve",
+"info.ve",
+"mil.ve",
+"net.ve",
+"org.ve",
+"web.ve",
+"co.vi",
+"com.vi",
+"k12.vi",
+"net.vi",
+"org.vi",
+"com.vn",
+"net.vn",
+"org.vn",
+"edu.vn",
+"gov.vn",
+"int.vn",
+"ac.vn",
+"biz.vn",
+"info.vn",
+"name.vn",
+"pro.vn",
+"health.vn",
+"com.ws",
+"net.ws",
+"org.ws",
+"gov.ws",
+"edu.ws",
+"ye",
+"za",
+"zm",
+"zw",
+"cloudfront.net",
+"compute.amazonaws.com",
+"us-east-1.amazonaws.com",
+"compute-1.amazonaws.com",
+"z-1.compute-1.amazonaws.com",
+"z-2.compute-1.amazonaws.com",
+"ap-northeast-1.compute.amazonaws.com",
+"ap-southeast-1.compute.amazonaws.com",
+"ap-southeast-2.compute.amazonaws.com",
+"eu-west-1.compute.amazonaws.com",
+"sa-east-1.compute.amazonaws.com",
+"us-gov-west-1.compute.amazonaws.com",
+"us-west-1.compute.amazonaws.com",
+"us-west-2.compute.amazonaws.com",
+"elasticbeanstalk.com",
+"elb.amazonaws.com",
+"s3.amazonaws.com",
+"s3-us-west-2.amazonaws.com",
+"s3-us-west-1.amazonaws.com",
+"s3-eu-west-1.amazonaws.com",
+"s3-ap-southeast-1.amazonaws.com",
+"s3-ap-southeast-2.amazonaws.com",
+"s3-ap-northeast-1.amazonaws.com",
+"s3-sa-east-1.amazonaws.com",
+"s3-us-gov-west-1.amazonaws.com",
+"s3-fips-us-gov-west-1.amazonaws.com",
+"s3-website-us-east-1.amazonaws.com",
+"s3-website-us-west-2.amazonaws.com",
+"s3-website-us-west-1.amazonaws.com",
+"s3-website-eu-west-1.amazonaws.com",
+"s3-website-ap-southeast-1.amazonaws.com",
+"s3-website-ap-southeast-2.amazonaws.com",
+"s3-website-ap-northeast-1.amazonaws.com",
+"s3-website-sa-east-1.amazonaws.com",
+"s3-website-us-gov-west-1.amazonaws.com",
+"betainabox.com",
+"ae.org",
+"ar.com",
+"br.com",
+"cn.com",
+"com.de",
+"de.com",
+"eu.com",
+"gb.com",
+"gb.net",
+"hu.com",
+"hu.net",
+"jp.net",
+"jpn.com",
+"kr.com",
+"mex.com",
+"no.com",
+"qc.com",
+"ru.com",
+"sa.com",
+"se.com",
+"se.net",
+"uk.com",
+"uk.net",
+"us.com",
+"uy.com",
+"za.bz",
+"za.com",
+"africa.com",
+"gr.com",
+"in.net",
+"us.org",
+"co.com",
+"c.la",
+"cloudcontrolled.com",
+"cloudcontrolapp.com",
+"co.ca",
+"co.nl",
+"co.no",
+"cupcake.is",
+"dreamhosters.com",
+"dyndns-at-home.com",
+"dyndns-at-work.com",
+"dyndns-blog.com",
+"dyndns-free.com",
+"dyndns-home.com",
+"dyndns-ip.com",
+"dyndns-mail.com",
+"dyndns-office.com",
+"dyndns-pics.com",
+"dyndns-remote.com",
+"dyndns-server.com",
+"dyndns-web.com",
+"dyndns-wiki.com",
+"dyndns-work.com",
+"dyndns.biz",
+"dyndns.info",
+"dyndns.org",
+"dyndns.tv",
+"at-band-camp.net",
+"ath.cx",
+"barrel-of-knowledge.info",
+"barrell-of-knowledge.info",
+"better-than.tv",
+"blogdns.com",
+"blogdns.net",
+"blogdns.org",
+"blogsite.org",
+"boldlygoingnowhere.org",
+"broke-it.net",
+"buyshouses.net",
+"cechire.com",
+"dnsalias.com",
+"dnsalias.net",
+"dnsalias.org",
+"dnsdojo.com",
+"dnsdojo.net",
+"dnsdojo.org",
+"does-it.net",
+"doesntexist.com",
+"doesntexist.org",
+"dontexist.com",
+"dontexist.net",
+"dontexist.org",
+"doomdns.com",
+"doomdns.org",
+"dvrdns.org",
+"dyn-o-saur.com",
+"dynalias.com",
+"dynalias.net",
+"dynalias.org",
+"dynathome.net",
+"dyndns.ws",
+"endofinternet.net",
+"endofinternet.org",
+"endoftheinternet.org",
+"est-a-la-maison.com",
+"est-a-la-masion.com",
+"est-le-patron.com",
+"est-mon-blogueur.com",
+"for-better.biz",
+"for-more.biz",
+"for-our.info",
+"for-some.biz",
+"for-the.biz",
+"forgot.her.name",
+"forgot.his.name",
+"from-ak.com",
+"from-al.com",
+"from-ar.com",
+"from-az.net",
+"from-ca.com",
+"from-co.net",
+"from-ct.com",
+"from-dc.com",
+"from-de.com",
+"from-fl.com",
+"from-ga.com",
+"from-hi.com",
+"from-ia.com",
+"from-id.com",
+"from-il.com",
+"from-in.com",
+"from-ks.com",
+"from-ky.com",
+"from-la.net",
+"from-ma.com",
+"from-md.com",
+"from-me.org",
+"from-mi.com",
+"from-mn.com",
+"from-mo.com",
+"from-ms.com",
+"from-mt.com",
+"from-nc.com",
+"from-nd.com",
+"from-ne.com",
+"from-nh.com",
+"from-nj.com",
+"from-nm.com",
+"from-nv.com",
+"from-ny.net",
+"from-oh.com",
+"from-ok.com",
+"from-or.com",
+"from-pa.com",
+"from-pr.com",
+"from-ri.com",
+"from-sc.com",
+"from-sd.com",
+"from-tn.com",
+"from-tx.com",
+"from-ut.com",
+"from-va.com",
+"from-vt.com",
+"from-wa.com",
+"from-wi.com",
+"from-wv.com",
+"from-wy.com",
+"ftpaccess.cc",
+"fuettertdasnetz.de",
+"game-host.org",
+"game-server.cc",
+"getmyip.com",
+"gets-it.net",
+"go.dyndns.org",
+"gotdns.com",
+"gotdns.org",
+"groks-the.info",
+"groks-this.info",
+"ham-radio-op.net",
+"here-for-more.info",
+"hobby-site.com",
+"hobby-site.org",
+"home.dyndns.org",
+"homedns.org",
+"homeftp.net",
+"homeftp.org",
+"homeip.net",
+"homelinux.com",
+"homelinux.net",
+"homelinux.org",
+"homeunix.com",
+"homeunix.net",
+"homeunix.org",
+"iamallama.com",
+"in-the-band.net",
+"is-a-anarchist.com",
+"is-a-blogger.com",
+"is-a-bookkeeper.com",
+"is-a-bruinsfan.org",
+"is-a-bulls-fan.com",
+"is-a-candidate.org",
+"is-a-caterer.com",
+"is-a-celticsfan.org",
+"is-a-chef.com",
+"is-a-chef.net",
+"is-a-chef.org",
+"is-a-conservative.com",
+"is-a-cpa.com",
+"is-a-cubicle-slave.com",
+"is-a-democrat.com",
+"is-a-designer.com",
+"is-a-doctor.com",
+"is-a-financialadvisor.com",
+"is-a-geek.com",
+"is-a-geek.net",
+"is-a-geek.org",
+"is-a-green.com",
+"is-a-guru.com",
+"is-a-hard-worker.com",
+"is-a-hunter.com",
+"is-a-knight.org",
+"is-a-landscaper.com",
+"is-a-lawyer.com",
+"is-a-liberal.com",
+"is-a-libertarian.com",
+"is-a-linux-user.org",
+"is-a-llama.com",
+"is-a-musician.com",
+"is-a-nascarfan.com",
+"is-a-nurse.com",
+"is-a-painter.com",
+"is-a-patsfan.org",
+"is-a-personaltrainer.com",
+"is-a-photographer.com",
+"is-a-player.com",
+"is-a-republican.com",
+"is-a-rockstar.com",
+"is-a-socialist.com",
+"is-a-soxfan.org",
+"is-a-student.com",
+"is-a-teacher.com",
+"is-a-techie.com",
+"is-a-therapist.com",
+"is-an-accountant.com",
+"is-an-actor.com",
+"is-an-actress.com",
+"is-an-anarchist.com",
+"is-an-artist.com",
+"is-an-engineer.com",
+"is-an-entertainer.com",
+"is-by.us",
+"is-certified.com",
+"is-found.org",
+"is-gone.com",
+"is-into-anime.com",
+"is-into-cars.com",
+"is-into-cartoons.com",
+"is-into-games.com",
+"is-leet.com",
+"is-lost.org",
+"is-not-certified.com",
+"is-saved.org",
+"is-slick.com",
+"is-uberleet.com",
+"is-very-bad.org",
+"is-very-evil.org",
+"is-very-good.org",
+"is-very-nice.org",
+"is-very-sweet.org",
+"is-with-theband.com",
+"isa-geek.com",
+"isa-geek.net",
+"isa-geek.org",
+"isa-hockeynut.com",
+"issmarterthanyou.com",
+"isteingeek.de",
+"istmein.de",
+"kicks-ass.net",
+"kicks-ass.org",
+"knowsitall.info",
+"land-4-sale.us",
+"lebtimnetz.de",
+"leitungsen.de",
+"likes-pie.com",
+"likescandy.com",
+"merseine.nu",
+"mine.nu",
+"misconfused.org",
+"mypets.ws",
+"myphotos.cc",
+"neat-url.com",
+"office-on-the.net",
+"on-the-web.tv",
+"podzone.net",
+"podzone.org",
+"readmyblog.org",
+"saves-the-whales.com",
+"scrapper-site.net",
+"scrapping.cc",
+"selfip.biz",
+"selfip.com",
+"selfip.info",
+"selfip.net",
+"selfip.org",
+"sells-for-less.com",
+"sells-for-u.com",
+"sells-it.net",
+"sellsyourhome.org",
+"servebbs.com",
+"servebbs.net",
+"servebbs.org",
+"serveftp.net",
+"serveftp.org",
+"servegame.org",
+"shacknet.nu",
+"simple-url.com",
+"space-to-rent.com",
+"stuff-4-sale.org",
+"stuff-4-sale.us",
+"teaches-yoga.com",
+"thruhere.net",
+"traeumtgerade.de",
+"webhop.biz",
+"webhop.info",
+"webhop.net",
+"webhop.org",
+"worse-than.tv",
+"writesthisblog.com",
+"a.ssl.fastly.net",
+"b.ssl.fastly.net",
+"global.ssl.fastly.net",
+"a.prod.fastly.net",
+"global.prod.fastly.net",
+"github.io",
+"githubusercontent.com",
+"ro.com",
+"appspot.com",
+"blogspot.be",
+"blogspot.bj",
+"blogspot.ca",
+"blogspot.cf",
+"blogspot.ch",
+"blogspot.co.at",
+"blogspot.co.il",
+"blogspot.co.nz",
+"blogspot.co.uk",
+"blogspot.com",
+"blogspot.com.ar",
+"blogspot.com.au",
+"blogspot.com.br",
+"blogspot.com.es",
+"blogspot.cv",
+"blogspot.cz",
+"blogspot.de",
+"blogspot.dk",
+"blogspot.fi",
+"blogspot.fr",
+"blogspot.gr",
+"blogspot.hk",
+"blogspot.hu",
+"blogspot.ie",
+"blogspot.in",
+"blogspot.it",
+"blogspot.jp",
+"blogspot.kr",
+"blogspot.mr",
+"blogspot.mx",
+"blogspot.nl",
+"blogspot.no",
+"blogspot.pt",
+"blogspot.re",
+"blogspot.ro",
+"blogspot.se",
+"blogspot.sg",
+"blogspot.sk",
+"blogspot.td",
+"blogspot.tw",
+"codespot.com",
+"googleapis.com",
+"googlecode.com",
+"withgoogle.com",
+"herokuapp.com",
+"herokussl.com",
+"iki.fi",
+"biz.at",
+"info.at",
+"co.pl",
+"azurewebsites.net",
+"azure-mobile.net",
+"cloudapp.net",
+"nyc.mn",
+"operaunite.com",
+"outsystemscloud.com",
+"rhcloud.com",
+"priv.at",
+"za.net",
+"za.org",
+];
diff --git a/components/net/resource_task.rs b/components/net/resource_task.rs
index 893dd63a197..2f67dcf225f 100644
--- a/components/net/resource_task.rs
+++ b/components/net/resource_task.rs
@@ -10,6 +10,8 @@ use file_loader;
use http_loader;
use sniffer_task;
use sniffer_task::SnifferTask;
+use cookie::Cookie;
+use cookie_storage::CookieStorage;
use util::task::spawn_named;
@@ -26,6 +28,7 @@ use std::sync::mpsc::{channel, Receiver, Sender};
pub enum ControlMsg {
/// Request the data associated with a particular URL
Load(LoadData),
+ Cookies(Vec<Cookie>),
Exit
}
@@ -61,6 +64,7 @@ pub struct ResourceCORSData {
}
/// Metadata about a loaded resource, such as is obtained from HTTP headers.
+#[deriving(Clone)]
pub struct Metadata {
/// Final URL after redirects.
pub final_url: Url,
@@ -75,7 +79,9 @@ pub struct Metadata {
pub headers: Option<Headers>,
/// HTTP Status
- pub status: Option<RawStatus>
+ pub status: Option<RawStatus>,
+
+ pub cookies: Vec<Cookie>
}
impl Metadata {
@@ -87,7 +93,8 @@ impl Metadata {
charset: None,
headers: None,
// http://fetch.spec.whatwg.org/#concept-response-status-message
- status: Some(RawStatus(200, "OK".to_owned()))
+ status: Some(RawStatus(200, "OK".to_owned())),
+ cookies: Vec::new(),
}
}
@@ -140,13 +147,14 @@ pub enum ProgressMsg {
}
/// For use by loaders in responding to a Load message.
-pub fn start_sending(senders: ResponseSenders, metadata: Metadata) -> Sender<ProgressMsg> {
- start_sending_opt(senders, metadata).ok().unwrap()
+pub fn start_sending(senders: ResponseSenders, metadata: Metadata, cookies_chan: Sender<ControlMsg>) -> Sender<ProgressMsg> {
+ start_sending_opt(senders, metadata, cookies_chan).ok().unwrap()
}
/// For use by loaders in responding to a Load message.
-pub fn start_sending_opt(senders: ResponseSenders, metadata: Metadata) -> Result<Sender<ProgressMsg>, ()> {
+pub fn start_sending_opt(senders: ResponseSenders, metadata: Metadata, cookies_chan: Sender<ControlMsg>) -> Result<Sender<ProgressMsg>, ()> {
let (progress_chan, progress_port) = channel();
+ let cookies = metadata.cookies.clone();
let result = senders.immediate_consumer.send(TargetedLoadResponse {
load_response: LoadResponse {
metadata: metadata,
@@ -154,6 +162,10 @@ pub fn start_sending_opt(senders: ResponseSenders, metadata: Metadata) -> Result
},
consumer: senders.eventual_consumer
});
+ match cookies_chan.send(ControlMsg::Cookies(cookies)) {
+ Ok(_) => {}
+ Err(_) => { return Err(()) }
+ }
match result {
Ok(_) => Ok(progress_chan),
Err(_) => Err(())
@@ -184,8 +196,9 @@ pub type ResourceTask = Sender<ControlMsg>;
pub fn new_resource_task(user_agent: Option<String>) -> ResourceTask {
let (setup_chan, setup_port) = channel();
let sniffer_task = sniffer_task::new_sniffer_task();
+ let setup_chan_clone = setup_chan.clone();
spawn_named("ResourceManager".to_owned(), move || {
- ResourceManager::new(setup_port, user_agent, sniffer_task).start();
+ ResourceManager::new(setup_port, user_agent, sniffer_task, setup_chan_clone).start();
});
setup_chan
}
@@ -194,26 +207,35 @@ struct ResourceManager {
from_client: Receiver<ControlMsg>,
user_agent: Option<String>,
sniffer_task: SnifferTask,
+ cookie_storage: CookieStorage,
+ cookies_chan: Sender<ControlMsg>,
}
impl ResourceManager {
- fn new(from_client: Receiver<ControlMsg>, user_agent: Option<String>, sniffer_task: SnifferTask) -> ResourceManager {
+ fn new(from_client: Receiver<ControlMsg>, user_agent: Option<String>, sniffer_task: SnifferTask, cookies_chan: Sender<ControlMsg>) -> ResourceManager {
ResourceManager {
from_client: from_client,
user_agent: user_agent,
sniffer_task: sniffer_task,
+ cookie_storage: CookieStorage::new(),
+ cookies_chan: cookies_chan,
}
}
}
impl ResourceManager {
- fn start(&self) {
+ fn start(&mut self) {
loop {
match self.from_client.recv().unwrap() {
ControlMsg::Load(load_data) => {
self.load(load_data)
}
+ ControlMsg::Cookies(vector) => {
+ for cookie in vector.iter() {
+ self.cookie_storage.push(cookie.clone());
+ }
+ }
ControlMsg::Exit => {
break
}
@@ -221,9 +243,14 @@ impl ResourceManager {
}
}
- fn load(&self, load_data: LoadData) {
+ fn load(&mut self, load_data: LoadData) {
let mut load_data = load_data;
self.user_agent.as_ref().map(|ua| load_data.headers.set(UserAgent(ua.clone())));
+ if let Some(cookies) = self.cookie_storage.cookies_for_url(load_data.url.clone()) {
+ let mut v = Vec::new();
+ v.push(cookies.into_bytes());
+ load_data.headers.set_raw("cookie".to_owned(), v);
+ }
let senders = ResponseSenders {
immediate_consumer: self.sniffer_task.clone(),
eventual_consumer: load_data.consumer.clone(),
@@ -231,13 +258,13 @@ impl ResourceManager {
debug!("resource_task: loading url: {}", load_data.url.serialize());
match load_data.url.scheme.as_slice() {
- "file" => file_loader::factory(load_data, self.sniffer_task.clone()),
- "http" | "https" => http_loader::factory(load_data, self.sniffer_task.clone()),
- "data" => data_loader::factory(load_data, self.sniffer_task.clone()),
- "about" => about_loader::factory(load_data, self.sniffer_task.clone()),
+ "file" => file_loader::factory(load_data, self.sniffer_task.clone(), self.cookies_chan.clone()),
+ "http" | "https" => http_loader::factory(load_data, self.sniffer_task.clone(), self.cookies_chan.clone()),
+ "data" => data_loader::factory(load_data, self.sniffer_task.clone(), self.cookies_chan.clone()),
+ "about" => about_loader::factory(load_data, self.sniffer_task.clone(), self.cookies_chan.clone()),
_ => {
debug!("resource_task: no loader for scheme {}", load_data.url.scheme);
- start_sending(senders, Metadata::default(load_data.url))
+ start_sending(senders, Metadata::default(load_data.url), self.cookie_chan.clone())
.send(ProgressMsg::Done(Err("no loader for scheme".to_string()))).unwrap();
return
}