LitleOnline 8.13.2 → 8.16.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -41,5 +41,18 @@ module LitleOnline
41
41
  assert_match /Entered an Invalid Amount of Choices for a Field, please only fill out one Choice!!!!/, exception.message
42
42
  end
43
43
 
44
+ def test_logged_in_user
45
+ hash = {
46
+ 'loggedInUser' => 'gdake',
47
+ 'merchantSdk' => 'Ruby;8.14.0',
48
+ 'merchantId' => '101',
49
+ 'version'=>'8.8',
50
+ 'reportGroup'=>'Planets',
51
+ 'litleTxnId'=>'123456',
52
+ 'echeck' => {'accType'=>'Checking','accNum'=>'12345657890','routingNum'=>'123456789','checkNum'=>'123455'}
53
+ }
54
+ LitleXmlMapper.expects(:request).with(regexp_matches(/.*loggedInUser="gdake".*merchantSdk="Ruby;8.14.0".*/m), is_a(Hash))
55
+ LitleOnlineRequest.new.echeck_sale(hash)
56
+ end
44
57
  end
45
58
  end
@@ -39,5 +39,33 @@ module LitleOnline
39
39
  exception = assert_raise(RuntimeError){LitleOnlineRequest.new.echeck_verification(hash)}
40
40
  assert_match /Entered an Invalid Amount of Choices for a Field, please only fill out one Choice!!!!/, exception.message
41
41
  end
42
+
43
+ def test_logged_in_user
44
+ hash = {
45
+ 'loggedInUser' => 'gdake',
46
+ 'merchantSdk' => 'Ruby;8.14.0',
47
+ 'merchantId' => '101',
48
+ 'version'=>'8.8',
49
+ 'reportGroup'=>'Planets',
50
+ 'litleTxnId'=>'123456',
51
+ 'echeck' => {'accType'=>'Checking','accNum'=>'12345657890','routingNum'=>'123456789','checkNum'=>'123455'}
52
+ }
53
+ LitleXmlMapper.expects(:request).with(regexp_matches(/.*loggedInUser="gdake".*merchantSdk="Ruby;8.14.0".*/m), is_a(Hash))
54
+ LitleOnlineRequest.new.echeck_verification(hash)
55
+ end
56
+
57
+ def test_merchant_data
58
+ hash = {
59
+ 'merchantData' => {'campaign'=>'camping'},
60
+ 'merchantId' => '101',
61
+ 'version'=>'8.8',
62
+ 'reportGroup'=>'Planets',
63
+ 'litleTxnId'=>'123456',
64
+ 'echeck' => {'accType'=>'Checking','accNum'=>'12345657890','routingNum'=>'123456789','checkNum'=>'123455'}
65
+ }
66
+ LitleXmlMapper.expects(:request).with(regexp_matches(/.*<\/echeck>.*<merchantData>.*<campaign>camping<\/campaign>.*<\/merchantData>/m), is_a(Hash))
67
+ LitleOnlineRequest.new.echeck_verification(hash)
68
+ end
69
+
42
70
  end
43
71
  end
@@ -37,5 +37,18 @@ module LitleOnline
37
37
  LitleXmlMapper.expects(:request).with(regexp_matches(/.*<echeckVoid.*<litleTxnId>123456<\/litleTxnId>.*/m), is_a(Hash))
38
38
  LitleOnlineRequest.new.echeck_void(hash)
39
39
  end
40
+ def test_logged_in_user
41
+ hash = {
42
+ 'loggedInUser' => 'gdake',
43
+ 'merchantSdk' => 'Ruby;8.14.0',
44
+ 'merchantId' => '101',
45
+ 'version'=>'8.8',
46
+ 'reportGroup'=>'Planets',
47
+ 'litleTxnId'=>'123456',
48
+ }
49
+ LitleXmlMapper.expects(:request).with(regexp_matches(/.*loggedInUser="gdake".*merchantSdk="Ruby;8.14.0".*/m), is_a(Hash))
50
+ LitleOnlineRequest.new.echeck_void(hash)
51
+ end
52
+
40
53
  end
41
54
  end
@@ -84,7 +84,28 @@ module LitleOnline
84
84
  exception = assert_raise(RuntimeError){LitleOnlineRequest.new.force_capture(hash)}
85
85
  assert_match /Entered an Invalid Amount of Choices for a Field, please only fill out one Choice!!!!/, exception.message
86
86
  end
87
-
87
+
88
+ def test_logged_in_user
89
+ hash = {
90
+ 'loggedInUser' => 'gdake',
91
+ 'merchantSdk' => 'Ruby;8.14.0',
92
+ 'merchantId' => '101',
93
+ 'version'=>'8.8',
94
+ 'reportGroup'=>'Planets',
95
+ 'litleTxnId'=>'123456',
96
+ 'orderId'=>'12344',
97
+ 'amount'=>'106',
98
+ 'orderSource'=>'ecommerce',
99
+ 'fraudCheck'=>{'authenticationTransactionId'=>'123'},
100
+ 'cardholderAuthentication'=>{'authenticationTransactionId'=>'123'},
101
+ 'card'=>{
102
+ 'type'=>'VI',
103
+ 'number' =>'4100000000000001',
104
+ 'expDate' =>'1210'
105
+ }}
106
+ LitleXmlMapper.expects(:request).with(regexp_matches(/.*loggedInUser="gdake".*merchantSdk="Ruby;8.14.0".*/m), is_a(Hash))
107
+ LitleOnlineRequest.new.force_capture(hash)
108
+ end
88
109
  end
89
110
 
90
111
  end
@@ -267,6 +267,27 @@ module LitleOnline
267
267
  exception = assert_raise(RuntimeError){LitleOnlineRequest.new.sale(hash)}
268
268
  assert_match /If card type is specified, it must be in /, exception.message
269
269
  end
270
+
271
+ def test_logged_in_user
272
+ hash = {
273
+ 'loggedInUser' => 'gdake',
274
+ 'merchantSdk' => 'Ruby;8.14.0',
275
+ 'merchantId' => '101',
276
+ 'version'=>'8.8',
277
+ 'reportGroup'=>'Planets',
278
+ 'litleTxnId'=>'123456',
279
+ 'orderId'=>'12344',
280
+ 'amount'=>'106',
281
+ 'orderSource'=>'ecommerce',
282
+ 'card'=>{
283
+ 'type'=>'VI',
284
+ 'number' =>'4100000000000002',
285
+ 'expDate' =>'1210'
286
+ }}
287
+
288
+ LitleXmlMapper.expects(:request).with(regexp_matches(/.*loggedInUser="gdake".*merchantSdk="Ruby;8.14.0".*/m), is_a(Hash))
289
+ LitleOnlineRequest.new.sale(hash)
290
+ end
270
291
 
271
292
  end
272
293
  end
@@ -79,6 +79,20 @@ module LitleOnline
79
79
  assert_match /If echeckForToken is specified, it must have a accNum/, exception.message
80
80
  end
81
81
 
82
+ def test_logged_in_user
83
+ hash = {
84
+ 'loggedInUser'=>'gdake',
85
+ 'merchantSdk' => 'Ruby;8.14.0',
86
+ 'merchantId' => '101',
87
+ 'version'=>'8.8',
88
+ 'reportGroup'=>'Planets',
89
+ 'orderId'=>'12344',
90
+ 'echeckForToken'=>{'accNum'=>'12344565','routingNum'=>'123476545'}
91
+ }
92
+ LitleXmlMapper.expects(:request).with(regexp_matches(/.*loggedInUser="gdake".*merchantSdk="Ruby;8.14.0".*/m), is_a(Hash))
93
+ LitleOnlineRequest.new.register_token_request(hash)
94
+ end
95
+
82
96
  end
83
97
 
84
98
  end
@@ -0,0 +1,80 @@
1
+ =begin
2
+ Copyright (c) 2012 Litle & Co.
3
+
4
+ Permission is hereby granted, free of charge, to any person
5
+ obtaining a copy of this software and associated documentation
6
+ files (the "Software"), to deal in the Software without
7
+ restriction, including without limitation the rights to use,
8
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the
10
+ Software is furnished to do so, subject to the following
11
+ 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
18
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23
+ OTHER DEALINGS IN THE SOFTWARE.
24
+ =end
25
+ require 'lib/LitleOnline'
26
+ require 'test/unit'
27
+
28
+ module LitleOnline
29
+ class TestUpdateCardValidationNumOnToken < Test::Unit::TestCase
30
+ def test_simple
31
+ hash = {
32
+ 'orderId'=>'12344',
33
+ 'litleToken'=>'1233456789101112',
34
+ 'cardValidationNum'=>'123'
35
+ }
36
+ LitleXmlMapper.expects(:request).with(regexp_matches(/.*<orderId>1.*<litleToken>1233456789101112.*<cardValidationNum>123.*/m), is_a(Hash))
37
+ LitleOnlineRequest.new.update_card_validation_num_on_token(hash)
38
+ end
39
+
40
+ def test_order_id_is_optional
41
+ hash = {
42
+ 'litleToken'=>'1233456789101112',
43
+ 'cardValidationNum'=>'123'
44
+ }
45
+ LitleXmlMapper.expects(:request).with(regexp_matches(/.*<litleToken>1233456789101112.*<cardValidationNum>123.*/m), is_a(Hash))
46
+ LitleOnlineRequest.new.update_card_validation_num_on_token(hash)
47
+ end
48
+
49
+ def test_litle_token_is_required
50
+ hash = {
51
+ 'orderId'=>'12344',
52
+ 'cardValidationNum'=>'123'
53
+ }
54
+ exception = assert_raise(RuntimeError){LitleOnlineRequest.new.update_card_validation_num_on_token(hash)}
55
+ assert_match /If updateCardValidationNumOnToken is specified, it must have a litleToken/, exception.message
56
+ end
57
+
58
+ def test_card_validation_num_is_required
59
+ hash = {
60
+ 'orderId'=>'12344',
61
+ 'litleToken'=>'1233456789101112'
62
+ }
63
+ exception = assert_raise(RuntimeError){LitleOnlineRequest.new.update_card_validation_num_on_token(hash)}
64
+ assert_match /If updateCardValidationNumOnToken is specified, it must have a cardValidationNum/, exception.message
65
+ end
66
+
67
+ def test_logged_in_user
68
+ hash = {
69
+ 'loggedInUser' => 'gdake',
70
+ 'merchantSdk' => 'Ruby;8.14.0',
71
+ 'orderId'=>'12344',
72
+ 'litleToken'=>'1233456789101112',
73
+ 'cardValidationNum'=>'123'
74
+ }
75
+ LitleXmlMapper.expects(:request).with(regexp_matches(/.*loggedInUser="gdake".*merchantSdk="Ruby;8.14.0".*/m), is_a(Hash))
76
+ LitleOnlineRequest.new.update_card_validation_num_on_token(hash)
77
+ end
78
+ end
79
+
80
+ end
@@ -39,4 +39,5 @@ require_relative 'test_echeckRedeposit'
39
39
  require_relative 'test_echeckSale'
40
40
  require_relative 'test_echeckCredit'
41
41
  require_relative 'test_echeckVerification'
42
- require_relative 'test_echeckVoid'
42
+ require_relative 'test_echeckVoid'
43
+ require_relative 'test_updateCardValidationNumOnToken'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: LitleOnline
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.13.2
4
+ version: 8.16.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-28 00:00:00.000000000 Z
12
+ date: 2013-03-29 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: xml-object
16
- requirement: &78821820 !ruby/object:Gem::Requirement
16
+ requirement: &54838500 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *78821820
24
+ version_requirements: *54838500
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: xml-mapping
27
- requirement: &78821400 !ruby/object:Gem::Requirement
27
+ requirement: &54836740 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *78821400
35
+ version_requirements: *54836740
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: mocha
38
- requirement: &78820980 !ruby/object:Gem::Requirement
38
+ requirement: &54404280 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,8 +43,8 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *78820980
47
- description: ! 'Litle Online Ruby SDK created for version 8.13 of Litle XML online
46
+ version_requirements: *54404280
47
+ description: ! 'Litle Online Ruby SDK created for version 8.16 of Litle XML online
48
48
  format, see the XSD schema for specific fields that are supported by this format.
49
49
 
50
50
 
@@ -62,6 +62,7 @@ extensions: []
62
62
  extra_rdoc_files: []
63
63
  files:
64
64
  - README.md
65
+ - CONTRIBUTORS
65
66
  - Rakefile
66
67
  - lib/LitleOnlineRequest.rb
67
68
  - lib/LitleXmlMapper.rb
@@ -70,7 +71,6 @@ files:
70
71
  - lib/cacert.pem
71
72
  - lib/Communications.rb
72
73
  - lib/Configuration.rb
73
- - index.html?grep=
74
74
  - bin/Setup.rb
75
75
  - bin/sample_driver.rb
76
76
  - SETUP.md
@@ -82,6 +82,7 @@ files:
82
82
  - test/unit/test_capture.rb
83
83
  - test/unit/test_xmlfields.rb
84
84
  - test/unit/test_auth.rb
85
+ - test/unit/test_updateCardValidationNumOnToken.rb
85
86
  - test/unit/ts_unit.rb
86
87
  - test/unit/test_echeckRedeposit.rb
87
88
  - test/unit/test_echeckSale.rb
@@ -99,6 +100,7 @@ files:
99
100
  - test/functional/ts_all.rb
100
101
  - test/functional/test_xmlfields.rb
101
102
  - test/functional/test_auth.rb
103
+ - test/functional/test_updateCardValidationNumOnToken.rb
102
104
  - test/functional/test_echeckRedeposit.rb
103
105
  - test/functional/test_echeckSale.rb
104
106
  - test/functional/test_captureGivenAuth.rb
@@ -135,10 +137,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
137
  requirements:
136
138
  - Contact sdksupport@litle.com for more information
137
139
  rubyforge_project:
138
- rubygems_version: 1.8.15
140
+ rubygems_version: 1.8.17
139
141
  signing_key:
140
142
  specification_version: 3
141
143
  summary: Ruby SDK produced by Litle & Co. for online transaction processing using
142
- Litle XML format v8.13
144
+ Litle XML format v8.16
143
145
  test_files:
144
146
  - test/unit/ts_unit.rb
@@ -1,18 +0,0 @@
1
- <!doctype html><html itemscope itemtype="http://schema.org/WebPage"><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><meta name="description" content="Search the world&#39;s information, including webpages, images, videos and more. Google has many special features to help you find exactly what you&#39;re looking for."><meta name="robots" content="noodp"><meta itemprop="image" content="/images/google_favicon_128.png"><title>Google</title><script>window.google={kEI:"caDoT43yLcrj0QHFrPmgCg",getEI:function(a){var b;while(a&&!(a.getAttribute&&(b=a.getAttribute("eid"))))a=a.parentNode;return b||google.kEI},https:function(){return window.location.protocol=="https:"},kEXPI:"17259,24472,35702,37607,37864,38252,38816,39366,39370,39410,39423,39537,39730,39737",kCSI:{e:"17259,24472,35702,37607,37864,38252,38816,39366,39370,39410,39423,39537,39730,39737",ei:"caDoT43yLcrj0QHFrPmgCg"},authuser:0,ml:function(){},kHL:"en",time:function(){return(new Date).getTime()},log:function(a,
2
- b,c,e){var d=new Image,h=google,i=h.lc,f=h.li,j="";d.onerror=(d.onload=(d.onabort=function(){delete i[f]}));i[f]=d;if(!c&&b.search("&ei=")==-1)j="&ei="+google.getEI(e);var g=c||"/gen_204?atyp=i&ct="+a+"&cad="+b+j+"&zx="+google.time();var k=/^http:/i;if(k.test(g)&&google.https()){google.ml(new Error("GLMM"),false,{src:g});delete i[f];return}d.src=g;h.li=f+1},lc:[],li:0,Toolbelt:{},y:{},x:function(a,b){google.y[a.id]=[a,b];return false}};
3
- window.google.sn="webhp";window.google.timers={};window.google.startTick=function(a,b){window.google.timers[a]={t:{start:(new Date).getTime()},bfr:!(!b)}};window.google.tick=function(a,b,c){if(!window.google.timers[a])google.startTick(a);window.google.timers[a].t[b]=c||(new Date).getTime()};google.startTick("load",true);try{}catch(u){}
4
- var _gjwl=location;function _gjuc(){var e=_gjwl.href.indexOf("#");if(e>=0){var a=_gjwl.href.substring(e);if(a.indexOf("&q=")>0||a.indexOf("#q=")>=0){a=a.substring(1);if(a.indexOf("#")==-1){for(var c=0;c<a.length;){var d=c;if(a.charAt(d)=="&")++d;var b=a.indexOf("&",d);if(b==-1)b=a.length;var f=a.substring(d,b);if(f.indexOf("fp=")==0){a=a.substring(0,c)+a.substring(b,a.length);b=c}else if(f=="cad=h")return 0;c=b}_gjwl.href="/search?"+a+"&cad=h";return 1}}}return 0}function _gjp(){!(window._gjwl.hash&&
5
- window._gjuc())&&setTimeout(_gjp,500)};
6
- window._gjp && _gjp()</script><style>#gbar,#guser{font-size:13px;padding-top:1px !important;}#gbar{height:22px}#guser{padding-bottom:7px !important;text-align:right}.gbh,.gbd{border-top:1px solid #c9d7f1;font-size:1px}.gbh{height:0;position:absolute;top:24px;width:100%}@media all{.gb1{height:22px;margin-right:.5em;vertical-align:top}#gbar{float:left}}a.gb1,a.gb4{text-decoration:underline !important}a.gb1,a.gb4{color:#00c !important}</style><style id=gstyle>body{margin:0;overflow-y:scroll}#gog{padding:3px 8px 0}td{line-height:.8em}.gac_m td{line-height:17px}form{margin-bottom:20px}body,td,a,p,.h{font-family:arial,sans-serif}.h{color:#36c;font-size:20px}.q{color:#00c}.ts td{padding:0}.ts{border-collapse:collapse}em{font-weight:bold;font-style:normal}.lst{height:25px;width:496px}.gsfi,.lst{font:18px arial,sans-serif}.gsfs{font:17px arial,sans-serif}.ds{display:-moz-inline-box;display:inline-block;margin:3px 0 4px;margin-left:4px}input{font-family:inherit}a.gb1,a.gb2,a.gb3,a.gb4{color:#11c !important}body{background:#fff;color:black}a{color:#11c;text-decoration:none}a:hover,a:active{text-decoration:underline}.fl a{color:#36c}a:visited{color:#551a8b}a.gb1,a.gb4{text-decoration:underline}a.gb3:hover{text-decoration:none}#ghead a.gb2:hover{color:#fff!important}.sblc{padding-top:5px}.sblc a{display:block;margin:2px 0;margin-left:13px;font-size:11px;}.lsbb{background:#eee;border:solid 1px;border-color:#ccc #999 #999 #ccc;height:30px;display:block}.ftl,#fll a{display:inline-block;margin:0 12px}.lsb{background:url(/images/srpr/nav_logo80.png) 0 -258px repeat-x;border:none;color:#000;cursor:pointer;height:30px;margin:0;outline:0;font:15px arial,sans-serif;vertical-align:top}.lsb:active{background:#ccc}.lst:focus{outline:none}#addlang a{padding:0 3px}.gac_v div{display:none}.gac_v .gac_v2,.gac_bt{display:block!important}table.gssb_c{z-index:986 }.nbcl{background:url(/images/srpr/nav_logo80.png) no-repeat ;height:px;width:px}</style><script>window.rwt=function(a,f,g,l,m,h,c,n,i){try{if(a===window){a=window.event.srcElement;while(a){if(a.href)break;a=a.parentNode}}var b=encodeURIComponent||escape,d;d=a.getAttribute("href");if(c&&c.substring(0,6)!="&sig2=")c="&sig2="+c;var o=["/url?sa=t","","&cd=",b(m),i?"&authuser="+b(i):"",google.j&&google.j.pf?"&sqi=2":"","&ved=",b(n),"&url=",b(d).replace(/\+/g,"%2B"),"&ei=","caDoT43yLcrj0QHFrPmgCg",h?"&usg="+h:"",c].join("");a.href=o;a.onmousedown=""}catch(p){}return true};
7
- </script></head><body bgcolor=#ffffff text=#000000 link=#0000cc vlink=#551a8b alink=#ff0000 onload="document.f&&document.f.q.focus();document.gbqf&&document.gbqf.q.focus();if(document.images)new Image().src='/images/srpr/nav_logo80.png'" ><textarea id=csi style=display:none></textarea><div id=mngb><div id=gbar><nobr><b class=gb1>Search</b> <a class=gb1 href="http://www.google.com/imghp?hl=en&tab=wi">Images</a> <a class=gb1 href="http://video.google.com/?hl=en&tab=wv">Videos</a> <a class=gb1 href="http://maps.google.com/maps?hl=en&tab=wl">Maps</a> <a class=gb1 href="http://news.google.com/nwshp?hl=en&tab=wn">News</a> <a class=gb1 href="http://www.google.com/shopping?hl=en&tab=wf">Shopping</a> <a class=gb1 href="https://mail.google.com/mail/?tab=wm">Gmail</a> <a class=gb1 style="text-decoration:none" href="http://www.google.com/intl/en/options/"><u>More</u> &raquo;</a></nobr></div><div id=guser width=100%><nobr><span id=gbn class=gbi></span><span id=gbf class=gbf></span><span id=gbe><a href="/url?sa=p&pref=ig&pval=3&q=http://www.google.com/ig%3Fgrep%3D%26hl%3Den%26source%3Diglk&usg=AFQjCNH79yl80yOtNV3l-pB6DxUyFBANTA" class=gb4>iGoogle</a> | </span><a href="http://www.google.com/history/optout?hl=en" class=gb4>Web History</a> | <a href="/preferences?hl=en" class=gb4>Settings</a> | <a target=_top id=gb_70 href="https://accounts.google.com/ServiceLogin?hl=en&continue=http://www.google.com/%3Fgrep%3D" class=gb4>Sign in</a></nobr></div><div class=gbh style=left:0></div><div class=gbh style=right:0></div></div><iframe name=wgjf style=display:none></iframe><center><br clear=all id=lgpd><div id=lga><img alt="Google" height=95 id=hplogo src="/intl/en_ALL/images/srpr/logo1w.png" width=275 style="padding:28px 0 14px" onload="window.lol&&lol()"><br><br></div><form action="/search" name=f><table cellpadding=0 cellspacing=0><tr valign=top><td width=25%>&nbsp;</td><td align=center nowrap><input type=hidden name=ie value="ISO-8859-1"><input name=hl type=hidden value=en><input name=source type=hidden value=hp><div class=ds style="height:32px;margin:4px 0"><input autocomplete=off maxlength=2048 name=q class="lst" title="Google Search" value="" size=57 style="color:#000;margin:0;padding:5px 8px 0 6px;vertical-align:top"></div><br style="line-height:0"><span class=ds ><span class=lsbb><input name=btnG type=submit value="Google Search" class=lsb></span></span><span class=ds><span class=lsbb><input name=btnI type=submit class=lsb value="I&#39;m Feeling Lucky" onclick="if(this.form.q.value)this.checked=1;else top.location='/doodles/'"></span></span></td><td nowrap width=25% align=left class="fl sblc"><a href="/advanced_search?hl=en">Advanced search</a><a href="/language_tools?hl=en">Language tools</a></td></tr></table><input type=hidden id=gbv name=gbv value="1"></form><div style="font-size:83%;min-height:3.5em"><br></div><span id=footer><center id=fctr><div style="font-size:10pt"><div id=fll style="margin:19px auto;text-align:center"><a href="/intl/en/ads/">Advertising&nbsp;Programs</a><a href="/services/">Business Solutions</a><a href="https://plus.google.com/116899029375914044550" rel="publisher">+Google</a><a href="/intl/en/about.html">About Google</a></div></div><p style="color:#767676;font-size:8pt">&copy; 2012 - <a href="/intl/en/policies/">Privacy & Terms</a></p></center></span> </center><div id=xjsd></div><div id=xjsi><script>if(google.y)google.y.first=[];google.dlj=function(b){window.setTimeout(function(){var a=document.createElement("script");a.src=b;document.getElementById("xjsd").appendChild(a)},0)};
8
- (function(){
9
- var c,d,e=false;function f(a){var b={_sn:a?"FAILURE":"FALLBACK",_pu:c,_fu:d},h=google.ml(new Error("pml"),false,b,true);google.log(0,"",h)}function g(){if(!google.pml)f(true)}function i(a){var b=document.createElement("script");b.src=a;document.getElementById("xjsd").appendChild(b)}function j(){if(!e&&!google.pml){e=true;f();i(d,g)}}google.dljp=
10
- function(a,b){c=a;google.xjsu=a;d=b;if(!google.xjsi)window.setTimeout(function(){i(c,j)},0)};
11
- })();
12
- (function(){google.xjsol=function(a){if(google.sc&&(a=google.sc[a])){for(var b=0;b<a.cb.length;b++)a.cb[b]();a.cb=[];a.lc=!0}};google.xjsl=function(a,b){var c=google.sc[a];c&&(b&&(c.lc?b():c.cb.push(b)),!c.ls&&!c.lc&&(google.dlj(c.u),c.ls=!0))};google.register=google.register||function(a,b){google.y.first.push(function(){google.register(a,b)})};})();
13
- google.y.first=[];if(!google.xjs){google.dstr=[];google.rein=[];window._=window._||{};window._._DumpException=function(e){throw e};if(google.timers&&google.timers.load.t){google.timers.load.t.xjsls=new Date().getTime();}google.xjsuo='/xjs/_/js/s/s,st,anim,bbd,sb_he,hv,pj,tbpr,tbui,spp,rsn,ob,mb,lc,du,ada,lu,pcc,csitl/rt\x3dj/ver\x3dcQPWT20rjmA.en_US./d\x3d1/rs\x3dAItRSTMrrebjXekqCRh-6t6eA1DHRj0V7g';if(google.xjsuop)google.xjsuo=google.xjsuo.replace(/xjs\/_\/js/,google.xjsuop);google.dljp(google.xjsuo,'/xjs/_/js/s/s,st,anim,bbd,sb_he,hv,pj,tbpr,tbui,spp,rsn,ob,mb,lc,du,ada,lu,pcc,csitl/rt\x3dj/ver\x3dVhqBgPa68yo.en_US./d\x3d1/rs\x3dAItRSTNVtd_7RGA-1diChwBGjIknyJlDUQ');google.xjs=1}google.pmc={14:{},263:{},60:{},81:{},10:{"client":"hp","dh":true,"ds":"","fl":true,"host":"google.com","jsonp":true,"msgs":{"lcky":"I\u0026#39;m Feeling Lucky","lml":"Learn more","psrc":"This search was removed from your \u003Ca href=\"/history\"\u003EWeb History\u003C/a\u003E","psrl":"Remove","srch":"Google Search"},"ovr":{"l":1,"ms":1,"p":1},"pq":"","rgen":true,"scd":10,"sce":5,"stok":"GeMuz8exdG27fwjKX7r7Pm-tkTc"},152:{},213:{"pberr":"\u003Cfont color=red\u003EError:\u003C/font\u003E The server could not complete your request. Try again in 30 seconds."},114:{"rvu_report_msg":"Report","rvu_reported_msg":"Reported"},78:{},25:{"g":8,"k":false,"m":{"app":true,"bks":true,"blg":true,"dsc":true,"evn":true,"fin":true,"flm":true,"frm":true,"isch":true,"klg":true,"mbl":true,"nws":true,"plcs":true,"ppl":true,"prc":true,"pts":true,"rcp":true,"shop":true,"vid":true},"t":null},216:{},105:{},22:{"db":false,"m_errors":{"32":"Sorry, no more results to show.","default":"\u003Cfont color=red\u003EError:\u003C/font\u003E The server could not complete your request. Try again in 30 seconds."},"m_tip":"Click for more information","nlpm":"-153px -84px","nlpp":"-153px -70px","utp":false},77:{},254:{},146:{},144:{},121:{},63:{"cnfrm":"Reported","prmpt":"Report"},84:{"tt_kft":true},97:{},24:{},38:{}};google.y.first.push(function(){if(google.med){google.med('init');google.initHistory();google.med('history');}google.History&&google.History.initialize('/?grep\x3d')});if(google.j&&google.j.en&&google.j.xi){window.setTimeout(google.j.xi,0);}</script></div><script>(function(){
14
- var b,d,e,f;function g(a,c){if(a.removeEventListener){a.removeEventListener("load",c,false);a.removeEventListener("error",c,false)}else{a.detachEvent("onload",c);a.detachEvent("onerror",c)}}function h(a){f=(new Date).getTime();++d;a=a||window.event;var c=a.target||a.srcElement;g(c,h)}var i=document.getElementsByTagName("img");b=i.length;d=0;for(var j=0,k;j<b;++j){k=i[j];if(k.complete||typeof k.src!="string"||!k.src)++d;else if(k.addEventListener){k.addEventListener("load",h,false);k.addEventListener("error",
15
- h,false)}else{k.attachEvent("onload",h);k.attachEvent("onerror",h)}}e=b-d;function l(){if(!google.timers.load.t)return;google.timers.load.t.ol=(new Date).getTime();google.timers.load.t.iml=f;google.kCSI.imc=d;google.kCSI.imn=b;google.kCSI.imp=e;if(google.stt!==undefined)google.kCSI.stt=google.stt;google.timers.load.t.xjs&&google.report&&google.report(google.timers.load,google.kCSI)}if(window.addEventListener)window.addEventListener("load",
16
- l,false);else if(window.attachEvent)window.attachEvent("onload",l);google.timers.load.t.prt=(f=(new Date).getTime());
17
- })();
18
- </script>