pear_warranty 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 086f27db47c2ed6f529fea9454293d5a18bca2e6
4
+ data.tar.gz: 87648ce44ae4fb431961434263cf478c00cec9b2
5
+ SHA512:
6
+ metadata.gz: 7a40fcf34bc2255cba241999f107b0d1ece0a97be9928393bbe93dfc83e63da35dbb0361a51131edb9d5bf3a82624bb7db17b445ec61dd2e626a3264e7c355d1
7
+ data.tar.gz: b472ff190e744f59065edd747dae1460bf5eb3518c133a2b06ffc63909cd73b65e8926a0fbacd2a2dd4a7b30129e5fdee7556d8cf43c67ef7915b080d15f723d
data/.gitignore ADDED
@@ -0,0 +1,16 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ *.gem
15
+ mkmf.log
16
+ /.idea/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pear_warranty.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Roman Kalnytsky
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,67 @@
1
+ # PearWarranty
2
+
3
+ An easy to use simple gem that allow you to check your IPhone warranty information from _https://selfsolve.apple.com_ using your IMEI. One more thing - no GSX account needed.
4
+
5
+ This gem use _https://www.proxfree.com_ to not be banned by IP. That`s why we get a little bit slowly request but there is no another free and simple way to get access to your warranty information.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'pear_warranty'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install pear_warranty
22
+
23
+ ## Usage
24
+
25
+ To get warranty information about your IPhone just call:
26
+ ```
27
+ PearWarranty.check('your IMEI here')
28
+ ```
29
+ That call return hash with warranty information. If your device is out of Repairs and Service Coverage it will return hash:
30
+ ```
31
+ {
32
+ warranty: false,
33
+ date: nil
34
+ }
35
+ ```
36
+ In another situation it returns hash with `true` for `:warranty` key and `Date` object of estimated expiration date for `:date`. If there is error with proxy server or your IMEI hash with `:error` key and description message will be returned.
37
+
38
+ Also your can specify proxy index domain by passing `proxy_index` parameter:
39
+ ```
40
+ PearWarranty.check('your IMEI here', 0)
41
+ ```
42
+ Proxy index must be in range of 0 and `PearWarranty::PROXIES.size`. If it goes out randomly chosen will be used.
43
+
44
+ ## Dependencies
45
+
46
+ - mechanize
47
+ - http-cookie
48
+ - ruby 1.9.2 or newer
49
+
50
+ ## Developers
51
+
52
+ Run all tests with:
53
+ ```
54
+ rspec spec
55
+ ```
56
+
57
+ ## Contributing
58
+
59
+ 1. Fork it ( https://github.com/imdrasil/pear_warranty/fork )
60
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
61
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
62
+ 4. Push to the branch (`git push origin my-new-feature`)
63
+ 5. Create a new Pull Request
64
+
65
+ ## License
66
+
67
+ This gem is distributed under the MIT license. Please see the LICENSE file.
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
7
+ task :test => :spec
8
+
@@ -0,0 +1,81 @@
1
+ require "pear_warranty/version"
2
+ require 'mechanize'
3
+
4
+ module PearWarranty
5
+
6
+ TRIES = 10
7
+ PROXIES = ['qc', 'de', 'al', 'nl', 'fr', 'no', 'tx', 'nj', 'il', 'ga' ]
8
+ COOKIES = {'_ga' => 'GA1.2.343285711.1435218476', '_gat' => '1', 's' => '3fd5f4953c541474c867c23b28853ad2', 'token' => 'acc1de9efdac455d'}
9
+
10
+ def self.check(serial, proxy_index = nil)
11
+ agent = Mechanize.new
12
+ proxy_index ||= rand(COOKIES.size)
13
+ page = nil
14
+ error = true
15
+ TRIES.times do
16
+ form = get_form(proxy_index, "https://selfsolve.apple.com/wcResults.do?sn=#{serial}&Continue=Continue&num=0", agent)
17
+ set_cookie(agent)
18
+ begin
19
+ page = agent.submit(form)
20
+ rescue Net::HTTP::Persistent::Error
21
+ next
22
+ end
23
+ page = page.body
24
+ unless page =~ /pferror/
25
+ error = false
26
+ break
27
+ end
28
+ proxy_index = rand(COOKIES.size)
29
+ end
30
+ if error
31
+ {error: 'Problem with proxy'}
32
+ else
33
+ if page =~ /but this serial number is not valid/
34
+ { error: 'There is no such imei or service is not available at this moment' }
35
+ else
36
+ text = page.split('warrantyPage.warrantycheck.displayPHSupportInfo')[1].scan(/\(.*\)/)[0].delete('()')
37
+ params = text.split(', ')
38
+ warranty = to_boolean(params.first.delete ' ')
39
+ {
40
+ warranty: warranty,
41
+ date: (Date.parse(params[2][/Estimated Expiration Date: (.*)/, 1] + ' ' + params[3][0..3]) if warranty)
42
+ }
43
+ end
44
+ end
45
+ end
46
+
47
+ private
48
+
49
+ def self.get_url(proxy)
50
+ "https://#{PROXIES[proxy] || PROXIES[0]}.proxfree.com/request.php?do=go"
51
+ end
52
+
53
+ def self.to_boolean(str)
54
+ str == 'true'
55
+ end
56
+
57
+ def self.get_form(proxy, value, agent)
58
+ url = get_url(proxy)
59
+ builder = Nokogiri::HTML::Builder.new do |doc|
60
+ doc.form_ :method=>'POST', :action=>url, name: 'main_submission' do
61
+ doc.input :type=>'hidden', :name=>'pfserverDropdown', :value => url
62
+ doc.input :type=>'hidden', :name=>'allowCookies', :value => 'on'
63
+ doc.input :type=>'hidden', :name=>'pfipDropdown', :value => 'default'
64
+ doc.input type: 'text', name: 'get', value: value
65
+ end
66
+ end
67
+ node = Nokogiri::HTML(builder.to_html)
68
+ form = Mechanize::Form.new(node.at('form'), agent)
69
+ form
70
+ end
71
+
72
+ def self.set_cookie(agent)
73
+ COOKIES.each_pair do |k,v|
74
+ cookie = Mechanize::Cookie.new(k, v)
75
+ cookie.domain = '.proxfree.com'
76
+ cookie.path = '/'
77
+ agent.cookie_jar.add(cookie)
78
+ end
79
+ end
80
+
81
+ end
@@ -0,0 +1,3 @@
1
+ module PearWarranty
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'pear_warranty/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "pear_warranty"
8
+ spec.version = PearWarranty::VERSION
9
+ spec.authors = ["Roman Kalnytsky"]
10
+ spec.email = ["moranibaca@gmail.com"]
11
+ spec.summary = %q{Get IPhone warranty information}
12
+ spec.description = %q{Get IPhone warranty information form https://selfsolve.apple.com by device imei}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency 'rspec'
24
+ spec.add_development_dependency 'webmock'
25
+
26
+ spec.add_dependency 'http-cookie'
27
+ spec.add_dependency 'mechanize'
28
+ end
@@ -0,0 +1,141 @@
1
+ require 'rspec'
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe PearWarranty do
5
+ subject(:class1) { PearWarranty }
6
+
7
+ context :to_boolean do
8
+ it 'should return true if argument is "true"'do
9
+ expect(class1.send(:to_boolean, 'true')).to be true
10
+ end
11
+
12
+ it 'should return false with "false" argument' do
13
+ expect(class1.send(:to_boolean, 'false')).to be false
14
+ end
15
+
16
+ it 'should return false with "asd" argument' do
17
+ expect(class1.send(:to_boolean, 'asd')).to be false
18
+ end
19
+ end
20
+
21
+ context :get_url do
22
+ it 'should return correct url for last proxy' do
23
+ expect(class1.send(:get_url, class1::PROXIES.size - 1)).to eq("https://#{class1::PROXIES.last}.proxfree.com/request.php?do=go")
24
+ end
25
+
26
+ it 'should return first url for incorrect proxy index' do
27
+ expect(class1.send(:get_url, class1::PROXIES.size)).to eq("https://#{class1::PROXIES[0]}.proxfree.com/request.php?do=go")
28
+ end
29
+ end
30
+
31
+ context :get_form do
32
+ let(:proxy) { 0 }
33
+ let(:value) { 'value' }
34
+ subject(:form) { class1.send(:get_form, proxy, value, Mechanize.new) }
35
+
36
+ it 'should return Mechanize::Form object' do
37
+ expect(form).to be_instance_of(Mechanize::Form)
38
+ end
39
+
40
+ it 'should return form with correct form attributes' do
41
+ expect([form.action, form.name, form.send(:method)]).to eq([PearWarranty.send(:get_url, proxy), 'main_submission', 'POST'])
42
+ end
43
+
44
+ it 'should return form with important fields' do
45
+ h = 'hidden'
46
+ url = class1.send(:get_url, proxy)
47
+ array = [
48
+ [h, 'pfserverDropdown', url],
49
+ [h, 'allowCookies', 'on'],
50
+ [h, 'pfipDropdown', 'default'],
51
+ ['text', 'get', value]
52
+ ]
53
+ expect(form.fields.map{ |f| [f.type, f.name, f.value] }).to eq(array)
54
+ end
55
+ end
56
+
57
+ context :set_cookie do
58
+ subject(:cookies) {
59
+ agent = Mechanize.new
60
+ class1.send(:set_cookie, agent)
61
+ agent.cookies
62
+ }
63
+ let(:domain) { 'proxfree.com' }
64
+
65
+ it 'should add to agent needed number of cookies' do
66
+ expect(cookies.size).to eq(class1::COOKIES.size)
67
+ end
68
+
69
+ it 'should add cookies with correct domain' do
70
+ expect(cookies.map{ |c| c.domain }).to eq(Array.new(class1::COOKIES.size){ domain })
71
+ end
72
+
73
+ it 'should add cookies with correct path' do
74
+ expect(cookies.map{ |c| c.path }).to eq(Array.new(class1::COOKIES.size){ '/' })
75
+ end
76
+
77
+ it 'should add cookies with correct names and values' do
78
+ values = []
79
+ class1::COOKIES.each_pair{ |k, v| values << [k, v] }
80
+ expect(cookies.map{ |c| [c.name, c.value] }).to eq(values)
81
+ end
82
+ end
83
+
84
+ context :check, type: :request do
85
+ let(:date) { Date.new(2015, 9, 9)}
86
+ before :all do
87
+ @without_imei = '013896000639712'
88
+ @with_imei = '013977000323877'
89
+ @uncorrect_imei = '1a312312312312'
90
+ @fake_imei = 'fake_date_to_reproduse_behaviour'
91
+ @without_params = [@without_imei,'without_warranty']
92
+ @with_params = [@with_imei, 'with_warranty']
93
+ @uncorrect_params = [@uncorrect_imei, 'uncorrect_warranty']
94
+ @fake_params = [@fake_imei, 'proxy_error']
95
+ @default_proxy = 0
96
+ end
97
+
98
+ it 'should use given proxy' do
99
+ mock_request(@default_proxy, *@uncorrect_params)
100
+ class1.check(@uncorrect_imei, @default_proxy)
101
+ expect(WebMock).to have_requested(:post, "https://#{class1::PROXIES[0]}.proxfree.com/request.php?do=go")
102
+ end
103
+
104
+ it 'should use random proxy if no one is given'do
105
+ mock_all_request(@fake_imei,@fake_params[1])
106
+ class1.check(@fake_imei)
107
+ expect(a_request(:post, /https\:\/\/(#{class1::PROXIES.join('|')})\.proxfree\.com\/request\.php\?do=go/)).to have_been_made.times(10)
108
+ end
109
+
110
+ it 'return hash with keys :date and :warranty' do
111
+ mock_request(@default_proxy, *@without_params)
112
+ expect(class1.check(@without_imei, @default_proxy).keys).to include(:warranty, :date)
113
+ end
114
+
115
+ it 'return hash with true for :warranty and correct date for :date for imei with warranty' do
116
+ mock_request(@default_proxy, *@with_params)
117
+ expect(class1.check(@with_imei, @default_proxy)).to include(warranty: true, date: date)
118
+ end
119
+
120
+ it 'return hash with false for :warranty and nil for :date for imei without warranty' do
121
+ mock_request(@default_proxy, *@without_params)
122
+ expect(class1.check(@without_imei, @default_proxy)).to include(warranty: false, date: nil)
123
+ end
124
+
125
+ it 'return hash with :error key and message if there is no such key in service' do
126
+ mock_request(@default_proxy, *@uncorrect_params)
127
+ expect(class1.check(@uncorrect_imei, @default_proxy).keys).to include(:error)
128
+ end
129
+
130
+ it 'should make maximum number of tries if an error is occurred'do
131
+ mock_all_request(@fake_imei,@fake_params[1])
132
+ class1.check(@fake_imei)
133
+ expect(a_request(:post, /https\:\/\/(#{class1::PROXIES.join('|')})\.proxfree\.com\/request\.php\?do=go/)).to have_been_made.times(class1::TRIES)
134
+ end
135
+
136
+ it 'should return hash with :error key if there is problem with proxy'do
137
+ mock_all_request(@fake_imei,@fake_params[1])
138
+ expect(class1.check(@fake_imei).keys).to include(:error)
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,31 @@
1
+ require 'pear_warranty'
2
+ require 'bundler/setup'
3
+ require 'webmock/rspec'
4
+ Bundler.setup
5
+ WebMock.disable_net_connect!
6
+
7
+ def spec_folder
8
+ File.expand_path '..', __FILE__
9
+ end
10
+
11
+ def mock_request(proxy, imei, name)
12
+ proxy_url = "https://#{PearWarranty::PROXIES[proxy]}.proxfree.com/request.php?do=go"
13
+ args = {allowCookies: 'on', pfipDropdown: "default", pfserverDropdown: proxy_url}
14
+ stub_request(:post, proxy_url).
15
+ with(body: args.merge(get: "https://selfsolve.apple.com/wcResults.do?sn=#{imei}&Continue=Continue&num=0")).
16
+ to_return(
17
+ :status => 200,
18
+ :body => File.open(spec_folder + "/support/#{name}.html")
19
+ )
20
+ end
21
+
22
+ def mock_all_request(imei, name, without_body = true)
23
+ if without_body
24
+ stub_request(:post, /https\:\/\/(#{class1::PROXIES.join('|')})\.proxfree\.com\/request\.php\?do=go/).
25
+ to_return(:status => 200, :body => File.open(spec_folder + "/support/#{name}.html"))
26
+ else
27
+ PearWarranty::PROXIES.size.times do |p|
28
+ mock_request(p,imei, name)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,94 @@
1
+ <html lang="en"><!--<![endif]--><head>
2
+ <meta charset="utf-8">
3
+ <meta name="description" content="ProxFree error page.">
4
+ <meta name="keywords" content="proxy,error">
5
+ <title>ProxFree: Error!</title>
6
+
7
+ <link href="//proxfree-nitrad.netdna-ssl.com/assets/style.css?new" rel="stylesheet" type="text/css">
8
+ <link rel="apple-touch-icon" sizes="57x57" href="//proxfree-nitrad.netdna-ssl.com/apple-touch-icon-57x57.png">
9
+ <link rel="apple-touch-icon" sizes="60x60" href="//proxfree-nitrad.netdna-ssl.com/apple-touch-icon-60x60.png">
10
+ <link rel="apple-touch-icon" sizes="72x72" href="//proxfree-nitrad.netdna-ssl.com/apple-touch-icon-72x72.png">
11
+ <link rel="apple-touch-icon" sizes="76x76" href="//proxfree-nitrad.netdna-ssl.com/apple-touch-icon-76x76.png">
12
+ <link rel="apple-touch-icon" sizes="114x114" href="//proxfree-nitrad.netdna-ssl.com/apple-touch-icon-114x114.png">
13
+ <link rel="apple-touch-icon" sizes="120x120" href="//proxfree-nitrad.netdna-ssl.com/apple-touch-icon-120x120.png">
14
+ <link rel="apple-touch-icon" sizes="144x144" href="//proxfree-nitrad.netdna-ssl.com/apple-touch-icon-144x144.png">
15
+ <link rel="apple-touch-icon" sizes="152x152" href="//proxfree-nitrad.netdna-ssl.com/apple-touch-icon-152x152.png">
16
+ <link rel="apple-touch-icon" sizes="180x180" href="//proxfree-nitrad.netdna-ssl.com/apple-touch-icon-180x180.png">
17
+ <link rel="icon" type="image/png" href="//proxfree-nitrad.netdna-ssl.com/favicon-32x32.png" sizes="32x32">
18
+ <link rel="icon" type="image/png" href="//proxfree-nitrad.netdna-ssl.com/android-chrome-192x192.png" sizes="192x192">
19
+ <link rel="icon" type="image/png" href="//proxfree-nitrad.netdna-ssl.com/favicon-96x96.png" sizes="96x96">
20
+ <link rel="icon" type="image/png" href="//proxfree-nitrad.netdna-ssl.com/favicon-16x16.png" sizes="16x16">
21
+ <link rel="manifest" href="//proxfree-nitrad.netdna-ssl.com/manifest.json">
22
+ <link rel="shortcut icon" href="//proxfree-nitrad.netdna-ssl.com/favicon.ico">
23
+ <meta name="msapplication-TileColor" content="#2d89ef">
24
+ <meta name="msapplication-TileImage" content="//proxfree-nitrad.netdna-ssl.com/mstile-144x144.png">
25
+ <meta name="msapplication-config" content="//proxfree-nitrad.netdna-ssl.com/browserconfig.xml">
26
+ <meta name="theme-color" content="#ffffff">
27
+
28
+ <link rel="canonical" href="https://www.proxfree.com/">
29
+ <script async="" src="//www.google-analytics.com/analytics.js"></script><script src="//proxfree-nitrad.netdna-ssl.com/assets/minified.js"></script>
30
+
31
+ <script>
32
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
33
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
34
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
35
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
36
+
37
+ ga('create', 'UA-7540624-50', 'auto');
38
+ ga('send', 'pageview');
39
+ </script>
40
+ </head>
41
+ <body onload="fillpfserverDropdown();">
42
+ <div id="pftop2">
43
+ <div class="pfcenterAlign">
44
+ <a href="/" class="pflogo"></a>
45
+ <ul id="pfmenu">
46
+ <li class="pflft"><span><a href="https://www.proxfree.com/">HOME</a></span></li>
47
+ <li><span><a href="https://www.proxfree.com/facebook-proxy.php">FACEBOOK PROXY</a></span></li>
48
+ <li><span><a href="https://www.proxfree.com/youtube-proxy.php">YOUTUBE PROXY</a></span></li>
49
+ <li><span><a href="https://www.proxfree.com/adult-proxy.php">ADULT PROXY</a></span></li>
50
+ <li class="pfrt"><span><a href="https://www.proxfree.com/faq.php">FAQ</a></span></li>
51
+ </ul>
52
+ <div class="pftopad">
53
+
54
+ </div>
55
+ <h1><span>ProxFree</span> Error!</h1>
56
+ </div>
57
+ </div>
58
+ <div id="pfcontent">
59
+ <div class="pfcenterAlign">
60
+ <div class="pfad2">
61
+ </div>
62
+ <div class="pfleftads">
63
+ <div class="pfad3">
64
+ </div>
65
+ <div class="pfad3">
66
+ </div>
67
+ </div>
68
+ <p class="pferror">The requested resource could not be loaded because the server belonging to the target website returned an error:<br> &nbsp; <b>403 Forbidden</b> (<span class="tooltip" onmouseout="exit()" onmouseover="tooltip('');">?</span>). If you want to contact us about this problem, please copy + paste the full error message and tell us which server location you are using (look in the address bar at the top for fr.proxfree.com, tx.proxfree.com etc). Email: <a href="mailto:contact@proxfree.com">contact@proxfree.com</a></p><p class="pfctx2">[<a href="https://de.proxfree.com/page.php?get=B1iQMHx5y8483ljwgphLtB0czIAOO2rbvPqGO04sopjlFdUDcAUN0kF%2B8EHQXCN5raHR4BG0tiTsYsIINNB%2FC0CtApBcQCnQcL5w7Gps2MKrhtdddfb9BkAzDuSuUkiYmaFA8%2Bj0hqjnCi1mZeR4X5w86KobaVlC1n%2BjgB%2FkZQM5qZ2WPvHERnB1KDtQ6lOwMPb8QdiKoBNPekzhFRAp9g%3D%3D&amp;key=437fd4e09b8b824d&amp;bit=1&amp;fl=norefer">Reload https://selfsolve.apple.com/wcResults.do?sn=[013977000323877,013896000639712]&amp;Continue=Continue&amp;num=0</a>]</p> <p></p>
69
+ <p class="pfctx2"><strong>YOUR server location is de.proxfree.com.</strong>
70
+ </p><p class="pfctx2">If you have any problems or aren't sure about an error, please <a href="/contact.php">contact us</a> and don't forget to say what your server location is.
71
+ </p></div>
72
+ </div>
73
+ <div id="pffooter">
74
+ <div class="pfcenterAlign">
75
+ <p>Copyright © 2011-2015 ProxFree.com all rights reserved</p>
76
+ <ul><li><a href="https://m.proxfree.com/">Mobile</a></li>
77
+ <li class="pfsep">|</li>
78
+ <li><a href="https://www.proxfree.com/proxy/">Proxy</a></li>
79
+ <li class="pfsep">|</li>
80
+ <li><a href="https://www.proxfree.com/privacy-policy.php">Privacy Policy</a></li>
81
+ <li class="pfsep">|</li>
82
+ <li><a href="https://www.proxfree.com/terms.php">Terms of Use</a></li>
83
+ <li class="pfsep">|</li>
84
+ <li><a href="https://www.proxfree.com/faq.php">FAQ </a></li>
85
+ <li class="pfsep">|</li>
86
+ <li><a href="https://www.proxfree.com/contact.php">Contact </a></li>
87
+ <li class="pfsep">|</li>
88
+ <li><a href="https://www.proxfree.com/sitemap.php">Site Map</a></li>
89
+ </ul>
90
+ </div>
91
+ </div>
92
+
93
+
94
+ </body></html>