whois 2.6.1 → 2.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/CHANGELOG.md +11 -0
  2. data/lib/whois/definitions/tlds.rb +1 -0
  3. data/lib/whois/record/parser/whois.ati.tn.rb +1 -1
  4. data/lib/whois/record/parser/whois.godaddy.com.rb +0 -4
  5. data/lib/whois/record/parser/whois.markmonitor.com.rb +0 -4
  6. data/lib/whois/record/parser/whois.networksolutions.com.rb +146 -0
  7. data/lib/whois/record/parser/whois.registry.om.rb +1 -1
  8. data/lib/whois/record/parser/whois.sx.rb +124 -0
  9. data/lib/whois/record/parser/whois.ua.rb +70 -10
  10. data/lib/whois/record/scanners/base.rb +19 -6
  11. data/lib/whois/record/scanners/whois.ati.tn.rb +1 -1
  12. data/lib/whois/record/scanners/whois.registry.om.rb +1 -1
  13. data/lib/whois/record/scanners/whois.rnids.rs.rb +11 -11
  14. data/lib/whois/record/scanners/whois.sx.rb +81 -0
  15. data/lib/whois/version.rb +1 -1
  16. data/spec/fixtures/responses/whois.networksolutions.com/property_contacts_short.expected +47 -0
  17. data/spec/fixtures/responses/whois.networksolutions.com/property_contacts_short.txt +61 -0
  18. data/spec/fixtures/responses/whois.networksolutions.com/status_registered.expected +89 -0
  19. data/spec/fixtures/responses/whois.networksolutions.com/status_registered.txt +65 -0
  20. data/spec/fixtures/responses/whois.sx/status_available.expected +55 -0
  21. data/spec/fixtures/responses/whois.sx/status_available.txt +9 -0
  22. data/spec/fixtures/responses/whois.sx/status_registered.expected +85 -0
  23. data/spec/fixtures/responses/whois.sx/status_registered.txt +21 -0
  24. data/spec/fixtures/responses/whois.ua/property_contacts_multiple.expected +107 -0
  25. data/spec/fixtures/responses/whois.ua/property_contacts_multiple.txt +84 -0
  26. data/spec/fixtures/responses/whois.ua/status_available.expected +30 -1
  27. data/spec/fixtures/responses/whois.ua/status_registered.expected +65 -3
  28. data/spec/fixtures/responses/whois.ua/status_registered.txt +10 -9
  29. data/spec/tlds +1 -0
  30. data/spec/whois/record/parser/responses/whois.net.ua/property_contacts_multiple_spec.rb +157 -0
  31. data/spec/whois/record/parser/responses/whois.net.ua/property_nameservers_uppercase_spec.rb +4 -4
  32. data/spec/whois/record/parser/responses/whois.net.ua/status_available_spec.rb +47 -5
  33. data/spec/whois/record/parser/responses/whois.net.ua/status_registered_spec.rb +82 -7
  34. data/spec/whois/record/parser/responses/whois.networksolutions.com/property_contacts_short_spec.rb +77 -0
  35. data/spec/whois/record/parser/responses/whois.networksolutions.com/status_registered_spec.rb +133 -0
  36. data/spec/whois/record/parser/responses/whois.sx/status_available_spec.rb +106 -0
  37. data/spec/whois/record/parser/responses/whois.sx/status_registered_spec.rb +136 -0
  38. data/spec/whois/record/parser/responses/whois.ua/property_contacts_multiple_spec.rb +157 -0
  39. data/spec/whois/record/parser/responses/whois.ua/status_available_spec.rb +43 -1
  40. data/spec/whois/record/parser/responses/whois.ua/status_registered_spec.rb +78 -3
  41. data/whois.gemspec +4 -4
  42. metadata +22 -3
@@ -1,5 +1,6 @@
1
- % This is the Ukrainian Whois query server #F.
2
- % Rights restricted by copyright.
1
+ % This is the Ukrainian Whois query server #B.
2
+ % The Whois is subject to Terms of use
3
+ % See https://hostmaster.ua/services/
3
4
  %
4
5
 
5
6
 
@@ -9,7 +10,7 @@
9
10
  domain: google.com.ua
10
11
  admin-c: GI8-UANIC
11
12
  tech-c: GI8-UANIC
12
- status: OK-UNTIL 20111204000000
13
+ status: OK-UNTIL 20121204000000
13
14
  dom-public: NO
14
15
  nserver: ns2.google.com
15
16
  nserver: ns4.google.com
@@ -18,8 +19,8 @@ nserver: ns1.google.com
18
19
  mnt-by: IMENA-UANIC (ua.imena)
19
20
  remark: Доменное имя зарегистрировано в интересах клиента
20
21
  remark: The domain name has been registered on behalf of a client
21
- created: 0-UANIC 00000000000000
22
- changed: IMENA-UANIC 20101101173534
22
+ created: 0-UANIC 20021204000000
23
+ changed: IMENA-UANIC 20111104185842
23
24
  source: UANIC
24
25
 
25
26
 
@@ -35,7 +36,7 @@ phone: +1 6503300100
35
36
  e-mail: dns-admin@google.com
36
37
  org-id: N/A
37
38
  mnt-by: NONE
38
- changed: HOST-UANIC 20061205023307
39
+ changed: GI8-UANIC 20120201210942
39
40
  source: UANIC
40
41
 
41
42
  % Technical Contact:
@@ -50,13 +51,13 @@ phone: +1 6503300100
50
51
  e-mail: dns-admin@google.com
51
52
  org-id: N/A
52
53
  mnt-by: NONE
53
- changed: HOST-UANIC 20061205023307
54
+ changed: GI8-UANIC 20120201210942
54
55
  source: UANIC
55
56
 
56
57
 
57
58
  % % .UA whois
58
59
 
59
- % Last update of whois database: 18 Feb 2011 23:39:17 +0200 (EET)
60
+ % Last update of whois database: 29 May 2012 17:18:16 +0300 (EEST)
60
61
 
61
- % Query time: 9 msec
62
+ % Query time: 11 msec
62
63
 
data/spec/tlds CHANGED
@@ -266,6 +266,7 @@ sr;;;
266
266
  st;whois.nic.st;google.st;u34jedzcq.st
267
267
  su;whois.ripn.net;google.su;u34jedzcq.su
268
268
  sv;;;
269
+ sx;whois.sx;whois.sx;u34jedzcq.sx
269
270
  sy;;;
270
271
  sz;;;
271
272
  tc;whois.adamsnames.tc;google.tc;u34jedzcq.tc
@@ -0,0 +1,157 @@
1
+ # encoding: utf-8
2
+
3
+ # This file is autogenerated. Do not edit it manually.
4
+ # If you want change the content of this file, edit
5
+ #
6
+ # /spec/fixtures/responses/whois.ua/property_contacts_multiple.expected
7
+ #
8
+ # and regenerate the tests with the following rake task
9
+ #
10
+ # $ rake spec:generate
11
+ #
12
+
13
+ require 'spec_helper'
14
+ require 'whois/record/parser/whois.ua.rb'
15
+
16
+ describe Whois::Record::Parser::WhoisUa, "property_contacts_multiple.expected" do
17
+
18
+ before(:each) do
19
+ file = fixture("responses", "whois.ua/property_contacts_multiple.txt")
20
+ part = Whois::Record::Part.new(:body => File.read(file))
21
+ @parser = klass.new(part)
22
+ end
23
+
24
+ describe "#domain" do
25
+ it do
26
+ @parser.domain.should == "kyivstar.ua"
27
+ end
28
+ end
29
+ describe "#domain_id" do
30
+ it do
31
+ lambda { @parser.domain_id }.should raise_error(Whois::PropertyNotSupported)
32
+ end
33
+ end
34
+ describe "#referral_whois" do
35
+ it do
36
+ lambda { @parser.referral_whois }.should raise_error(Whois::PropertyNotSupported)
37
+ end
38
+ end
39
+ describe "#referral_url" do
40
+ it do
41
+ lambda { @parser.referral_url }.should raise_error(Whois::PropertyNotSupported)
42
+ end
43
+ end
44
+ describe "#status" do
45
+ it do
46
+ @parser.status.should == :registered
47
+ end
48
+ end
49
+ describe "#available?" do
50
+ it do
51
+ @parser.available?.should == false
52
+ end
53
+ end
54
+ describe "#registered?" do
55
+ it do
56
+ @parser.registered?.should == true
57
+ end
58
+ end
59
+ describe "#created_on" do
60
+ it do
61
+ @parser.created_on.should be_a(Time)
62
+ @parser.created_on.should == Time.parse("2002-09-03 00:00:00")
63
+ end
64
+ end
65
+ describe "#updated_on" do
66
+ it do
67
+ @parser.updated_on.should be_a(Time)
68
+ @parser.updated_on.should == Time.parse("2010-08-11 15:34:01")
69
+ end
70
+ end
71
+ describe "#expires_on" do
72
+ it do
73
+ @parser.expires_on.should be_a(Time)
74
+ @parser.expires_on.should == Time.parse("2012-09-03 12:18:52")
75
+ end
76
+ end
77
+ describe "#registrar" do
78
+ it do
79
+ lambda { @parser.registrar }.should raise_error(Whois::PropertyNotSupported)
80
+ end
81
+ end
82
+ describe "#registrant_contacts" do
83
+ it do
84
+ lambda { @parser.registrant_contacts }.should raise_error(Whois::PropertyNotSupported)
85
+ end
86
+ end
87
+ describe "#admin_contacts" do
88
+ it do
89
+ @parser.admin_contacts.should be_a(Array)
90
+ @parser.admin_contacts.should have(1).items
91
+ @parser.admin_contacts[0].should be_a(Whois::Record::Contact)
92
+ @parser.admin_contacts[0].type.should == Whois::Record::Contact::TYPE_ADMIN
93
+ @parser.admin_contacts[0].id.should == "N/A"
94
+ @parser.admin_contacts[0].name.should == nil
95
+ @parser.admin_contacts[0].organization.should == "Kyivstar GSM"
96
+ @parser.admin_contacts[0].address.should == "Chervonozoryanyi Av., 51"
97
+ @parser.admin_contacts[0].city.should == "KYIV"
98
+ @parser.admin_contacts[0].zip.should == "03110"
99
+ @parser.admin_contacts[0].state.should == nil
100
+ @parser.admin_contacts[0].country.should == "UA"
101
+ @parser.admin_contacts[0].country_code.should == nil
102
+ @parser.admin_contacts[0].phone.should == "+380 (44) 2473939"
103
+ @parser.admin_contacts[0].fax.should == "+380 (44) 2473954"
104
+ @parser.admin_contacts[0].email.should == "dnsmaster@kyivstar.net"
105
+ @parser.admin_contacts[0].created_on.should == nil
106
+ @parser.admin_contacts[0].updated_on.should == Time.parse("2008-09-02 12:52:47")
107
+ end
108
+ end
109
+ describe "#technical_contacts" do
110
+ it do
111
+ @parser.technical_contacts.should be_a(Array)
112
+ @parser.technical_contacts.should have(2).items
113
+ @parser.technical_contacts[0].should be_a(Whois::Record::Contact)
114
+ @parser.technical_contacts[0].type.should == Whois::Record::Contact::TYPE_TECHNICAL
115
+ @parser.technical_contacts[0].id.should == "N/A"
116
+ @parser.technical_contacts[0].name.should == nil
117
+ @parser.technical_contacts[0].organization.should == "Kyivstar GSM"
118
+ @parser.technical_contacts[0].address.should == "Chervonozoryanyi Av., 51"
119
+ @parser.technical_contacts[0].city.should == "KYIV"
120
+ @parser.technical_contacts[0].zip.should == "03110"
121
+ @parser.technical_contacts[0].state.should == nil
122
+ @parser.technical_contacts[0].country.should == "UA"
123
+ @parser.technical_contacts[0].country_code.should == nil
124
+ @parser.technical_contacts[0].phone.should == "+380 (44) 2473939"
125
+ @parser.technical_contacts[0].fax.should == "+380 (44) 2473954"
126
+ @parser.technical_contacts[0].email.should == "dnsmaster@kyivstar.net"
127
+ @parser.technical_contacts[0].created_on.should == nil
128
+ @parser.technical_contacts[0].updated_on.should == Time.parse("2008-09-02 12:52:47")
129
+ @parser.technical_contacts[1].should be_a(Whois::Record::Contact)
130
+ @parser.technical_contacts[1].type.should == Whois::Record::Contact::TYPE_TECHNICAL
131
+ @parser.technical_contacts[1].id.should == "24361346"
132
+ @parser.technical_contacts[1].name.should == nil
133
+ @parser.technical_contacts[1].organization.should == "\"ElVisti Information Center\", LLC\nООО \"Информационный центр \"Электронные вести\"\nТОВ \"ІЦ ЕЛВІСТІ\""
134
+ @parser.technical_contacts[1].address.should == "а/с, 151"
135
+ @parser.technical_contacts[1].city.should == "КИЇВ"
136
+ @parser.technical_contacts[1].zip.should == "03037"
137
+ @parser.technical_contacts[1].state.should == nil
138
+ @parser.technical_contacts[1].country.should == "UA"
139
+ @parser.technical_contacts[1].country_code.should == nil
140
+ @parser.technical_contacts[1].phone.should == "+38044 239-90-91"
141
+ @parser.technical_contacts[1].fax.should == nil
142
+ @parser.technical_contacts[1].email.should == "hostmaster@visti.net"
143
+ @parser.technical_contacts[1].created_on.should == nil
144
+ @parser.technical_contacts[1].updated_on.should == Time.parse("2011-12-15 11:33:14")
145
+ end
146
+ end
147
+ describe "#nameservers" do
148
+ it do
149
+ @parser.nameservers.should be_a(Array)
150
+ @parser.nameservers.should have(2).items
151
+ @parser.nameservers[0].should be_a(Whois::Record::Nameserver)
152
+ @parser.nameservers[0].name.should == "ns2.elvisti.kiev.ua"
153
+ @parser.nameservers[1].should be_a(Whois::Record::Nameserver)
154
+ @parser.nameservers[1].name.should == "ns.kyivstar.net"
155
+ end
156
+ end
157
+ end
@@ -3,7 +3,7 @@
3
3
  # This file is autogenerated. Do not edit it manually.
4
4
  # If you want change the content of this file, edit
5
5
  #
6
- # /spec/fixtures/responses/whois.net.ua/property_nameservers_uppercase.expected
6
+ # /spec/fixtures/responses/whois.ua/property_nameservers_uppercase.expected
7
7
  #
8
8
  # and regenerate the tests with the following rake task
9
9
  #
@@ -11,12 +11,12 @@
11
11
  #
12
12
 
13
13
  require 'spec_helper'
14
- require 'whois/record/parser/whois.net.ua.rb'
14
+ require 'whois/record/parser/whois.ua.rb'
15
15
 
16
- describe Whois::Record::Parser::WhoisNetUa, "property_nameservers_uppercase.expected" do
16
+ describe Whois::Record::Parser::WhoisUa, "property_nameservers_uppercase.expected" do
17
17
 
18
18
  before(:each) do
19
- file = fixture("responses", "whois.net.ua/property_nameservers_uppercase.txt")
19
+ file = fixture("responses", "whois.ua/property_nameservers_uppercase.txt")
20
20
  part = Whois::Record::Part.new(:body => File.read(file))
21
21
  @parser = klass.new(part)
22
22
  end
@@ -3,7 +3,7 @@
3
3
  # This file is autogenerated. Do not edit it manually.
4
4
  # If you want change the content of this file, edit
5
5
  #
6
- # /spec/fixtures/responses/whois.net.ua/status_available.expected
6
+ # /spec/fixtures/responses/whois.ua/status_available.expected
7
7
  #
8
8
  # and regenerate the tests with the following rake task
9
9
  #
@@ -11,16 +11,36 @@
11
11
  #
12
12
 
13
13
  require 'spec_helper'
14
- require 'whois/record/parser/whois.net.ua.rb'
14
+ require 'whois/record/parser/whois.ua.rb'
15
15
 
16
- describe Whois::Record::Parser::WhoisNetUa, "status_available.expected" do
16
+ describe Whois::Record::Parser::WhoisUa, "status_available.expected" do
17
17
 
18
18
  before(:each) do
19
- file = fixture("responses", "whois.net.ua/status_available.txt")
19
+ file = fixture("responses", "whois.ua/status_available.txt")
20
20
  part = Whois::Record::Part.new(:body => File.read(file))
21
21
  @parser = klass.new(part)
22
22
  end
23
23
 
24
+ describe "#domain" do
25
+ it do
26
+ @parser.domain.should == nil
27
+ end
28
+ end
29
+ describe "#domain_id" do
30
+ it do
31
+ lambda { @parser.domain_id }.should raise_error(Whois::PropertyNotSupported)
32
+ end
33
+ end
34
+ describe "#referral_whois" do
35
+ it do
36
+ lambda { @parser.referral_whois }.should raise_error(Whois::PropertyNotSupported)
37
+ end
38
+ end
39
+ describe "#referral_url" do
40
+ it do
41
+ lambda { @parser.referral_url }.should raise_error(Whois::PropertyNotSupported)
42
+ end
43
+ end
24
44
  describe "#status" do
25
45
  it do
26
46
  @parser.status.should == :available
@@ -38,7 +58,7 @@ describe Whois::Record::Parser::WhoisNetUa, "status_available.expected" do
38
58
  end
39
59
  describe "#created_on" do
40
60
  it do
41
- lambda { @parser.created_on }.should raise_error(Whois::PropertyNotSupported)
61
+ @parser.created_on.should == nil
42
62
  end
43
63
  end
44
64
  describe "#updated_on" do
@@ -51,6 +71,28 @@ describe Whois::Record::Parser::WhoisNetUa, "status_available.expected" do
51
71
  @parser.expires_on.should == nil
52
72
  end
53
73
  end
74
+ describe "#registrar" do
75
+ it do
76
+ lambda { @parser.registrar }.should raise_error(Whois::PropertyNotSupported)
77
+ end
78
+ end
79
+ describe "#registrant_contacts" do
80
+ it do
81
+ lambda { @parser.registrant_contacts }.should raise_error(Whois::PropertyNotSupported)
82
+ end
83
+ end
84
+ describe "#admin_contacts" do
85
+ it do
86
+ @parser.admin_contacts.should be_a(Array)
87
+ @parser.admin_contacts.should == []
88
+ end
89
+ end
90
+ describe "#technical_contacts" do
91
+ it do
92
+ @parser.technical_contacts.should be_a(Array)
93
+ @parser.technical_contacts.should == []
94
+ end
95
+ end
54
96
  describe "#nameservers" do
55
97
  it do
56
98
  @parser.nameservers.should be_a(Array)
@@ -3,7 +3,7 @@
3
3
  # This file is autogenerated. Do not edit it manually.
4
4
  # If you want change the content of this file, edit
5
5
  #
6
- # /spec/fixtures/responses/whois.net.ua/status_registered.expected
6
+ # /spec/fixtures/responses/whois.ua/status_registered.expected
7
7
  #
8
8
  # and regenerate the tests with the following rake task
9
9
  #
@@ -11,16 +11,36 @@
11
11
  #
12
12
 
13
13
  require 'spec_helper'
14
- require 'whois/record/parser/whois.net.ua.rb'
14
+ require 'whois/record/parser/whois.ua.rb'
15
15
 
16
- describe Whois::Record::Parser::WhoisNetUa, "status_registered.expected" do
16
+ describe Whois::Record::Parser::WhoisUa, "status_registered.expected" do
17
17
 
18
18
  before(:each) do
19
- file = fixture("responses", "whois.net.ua/status_registered.txt")
19
+ file = fixture("responses", "whois.ua/status_registered.txt")
20
20
  part = Whois::Record::Part.new(:body => File.read(file))
21
21
  @parser = klass.new(part)
22
22
  end
23
23
 
24
+ describe "#domain" do
25
+ it do
26
+ @parser.domain.should == "google.com.ua"
27
+ end
28
+ end
29
+ describe "#domain_id" do
30
+ it do
31
+ lambda { @parser.domain_id }.should raise_error(Whois::PropertyNotSupported)
32
+ end
33
+ end
34
+ describe "#referral_whois" do
35
+ it do
36
+ lambda { @parser.referral_whois }.should raise_error(Whois::PropertyNotSupported)
37
+ end
38
+ end
39
+ describe "#referral_url" do
40
+ it do
41
+ lambda { @parser.referral_url }.should raise_error(Whois::PropertyNotSupported)
42
+ end
43
+ end
24
44
  describe "#status" do
25
45
  it do
26
46
  @parser.status.should == :registered
@@ -38,19 +58,74 @@ describe Whois::Record::Parser::WhoisNetUa, "status_registered.expected" do
38
58
  end
39
59
  describe "#created_on" do
40
60
  it do
41
- lambda { @parser.created_on }.should raise_error(Whois::PropertyNotSupported)
61
+ @parser.created_on.should be_a(Time)
62
+ @parser.created_on.should == Time.parse("2002-12-04 00:00:00")
42
63
  end
43
64
  end
44
65
  describe "#updated_on" do
45
66
  it do
46
67
  @parser.updated_on.should be_a(Time)
47
- @parser.updated_on.should == Time.parse("2010-11-01 17:35:34")
68
+ @parser.updated_on.should == Time.parse("2011-11-04 18:58:42")
48
69
  end
49
70
  end
50
71
  describe "#expires_on" do
51
72
  it do
52
73
  @parser.expires_on.should be_a(Time)
53
- @parser.expires_on.should == Time.parse("2011-12-04 00:00:00")
74
+ @parser.expires_on.should == Time.parse("2012-12-04 00:00:00")
75
+ end
76
+ end
77
+ describe "#registrar" do
78
+ it do
79
+ lambda { @parser.registrar }.should raise_error(Whois::PropertyNotSupported)
80
+ end
81
+ end
82
+ describe "#registrant_contacts" do
83
+ it do
84
+ lambda { @parser.registrant_contacts }.should raise_error(Whois::PropertyNotSupported)
85
+ end
86
+ end
87
+ describe "#admin_contacts" do
88
+ it do
89
+ @parser.admin_contacts.should be_a(Array)
90
+ @parser.admin_contacts.should have(1).items
91
+ @parser.admin_contacts[0].should be_a(Whois::Record::Contact)
92
+ @parser.admin_contacts[0].type.should == Whois::Record::Contact::TYPE_ADMIN
93
+ @parser.admin_contacts[0].id.should == "N/A"
94
+ @parser.admin_contacts[0].name.should == nil
95
+ @parser.admin_contacts[0].organization.should == "Google Inc."
96
+ @parser.admin_contacts[0].address.should == "1600 Amphitheatre Parkway"
97
+ @parser.admin_contacts[0].city.should == "Mountain View"
98
+ @parser.admin_contacts[0].zip.should == "94043"
99
+ @parser.admin_contacts[0].state.should == "CA"
100
+ @parser.admin_contacts[0].country.should == "US"
101
+ @parser.admin_contacts[0].country_code.should == nil
102
+ @parser.admin_contacts[0].phone.should == "+1 6503300100"
103
+ @parser.admin_contacts[0].fax.should == "+1 6506188571"
104
+ @parser.admin_contacts[0].email.should == "dns-admin@google.com"
105
+ @parser.admin_contacts[0].created_on.should == nil
106
+ @parser.admin_contacts[0].updated_on.should == Time.parse("2012-02-01 21:09:42")
107
+ end
108
+ end
109
+ describe "#technical_contacts" do
110
+ it do
111
+ @parser.technical_contacts.should be_a(Array)
112
+ @parser.technical_contacts.should have(1).items
113
+ @parser.technical_contacts[0].should be_a(Whois::Record::Contact)
114
+ @parser.technical_contacts[0].type.should == Whois::Record::Contact::TYPE_TECHNICAL
115
+ @parser.technical_contacts[0].id.should == "N/A"
116
+ @parser.technical_contacts[0].name.should == nil
117
+ @parser.technical_contacts[0].organization.should == "Google Inc."
118
+ @parser.technical_contacts[0].address.should == "1600 Amphitheatre Parkway"
119
+ @parser.technical_contacts[0].city.should == "Mountain View"
120
+ @parser.technical_contacts[0].zip.should == "94043"
121
+ @parser.technical_contacts[0].state.should == "CA"
122
+ @parser.technical_contacts[0].country.should == "US"
123
+ @parser.technical_contacts[0].country_code.should == nil
124
+ @parser.technical_contacts[0].phone.should == "+1 6503300100"
125
+ @parser.technical_contacts[0].fax.should == "+1 6506188571"
126
+ @parser.technical_contacts[0].email.should == "dns-admin@google.com"
127
+ @parser.technical_contacts[0].created_on.should == nil
128
+ @parser.technical_contacts[0].updated_on.should == Time.parse("2012-02-01 21:09:42")
54
129
  end
55
130
  end
56
131
  describe "#nameservers" do