wombat 0.4.0 → 0.5.0

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.
data/README.md CHANGED
@@ -11,11 +11,11 @@ Generic Web crawler with an elegant DSL that parses structured data from web pag
11
11
 
12
12
  ``gem install wombat``
13
13
 
14
- OBS: Requires ruby 1.9
14
+ Obs: Requires ruby 1.9
15
15
 
16
- Creating a crawler:
16
+ ## Crawling a page:
17
17
 
18
- ###### Create a class that includes ``Wombat::Crawler``:
18
+ The simplest way to use Wombat is by calling ``Wombat.crawl`` and passing it a block:
19
19
 
20
20
  ```ruby
21
21
 
@@ -24,9 +24,7 @@ Creating a crawler:
24
24
  #coding: utf-8
25
25
  require 'wombat'
26
26
 
27
- class GithubCrawler
28
- include Wombat::Crawler
29
-
27
+ Wombat.crawl do
30
28
  base_url "http://www.github.com"
31
29
  list_page "/"
32
30
 
@@ -47,14 +45,9 @@ class GithubCrawler
47
45
  end
48
46
  ```
49
47
 
50
- ###### Run it by calling the instance method ``crawl``:
48
+ ###### The code above is gonna return the following hash:
51
49
 
52
50
  ```ruby
53
- my_crawler = GithubCrawler.new
54
- my_crawler.crawl
55
-
56
- #=> the line above outputs:
57
-
58
51
  {
59
52
  "headline" => "1,316,633 people hosting over 3,951,378 git repositories",
60
53
  "what_is" => "GitHub is the best way to collaborate with others. Fork, send pull requests and manage all your <strong>public</strong> and <strong>private</strong> git repositories.",
@@ -68,7 +61,8 @@ my_crawler.crawl
68
61
  }
69
62
  ```
70
63
 
71
- ### For the documentation, please check the project [Wiki](http://github.com/felipecsl/wombat/wiki).
64
+ ### This is just a sneak peek of what Wombat can do. For the complete documentation, please check the [project Wiki](http://github.com/felipecsl/wombat/wiki).
65
+ ### [API Documentation](http://rubydoc.info/gems/wombat/0.4.0/frames).
72
66
 
73
67
 
74
68
  ## Contributing to Wombat
@@ -84,11 +78,20 @@ my_crawler.crawl
84
78
  ## Contributors
85
79
 
86
80
  * Felipe Lima ([@felipecsl](https://github.com/felipecsl))
87
- * [@sigi](https://github.com/sigi)
88
81
  * Daniel Naves de Carvalho ([@danielnc](https://github.com/danielnc))
82
+ * [@sigi](https://github.com/sigi)
89
83
 
90
84
  ## Changelog
91
85
 
86
+ ### version 1.0.0
87
+
88
+ * [Fixed a bug on malformed selectors](https://github.com/felipecsl/wombat/commit/e0f4eec20e1e2bb07a1813a1edd019933edeceaa)
89
+ * [Fixed a bug where multiple calls to #crawl would not clean up previously iterated array results and yield repeated results](https://github.com/felipecsl/wombat/commit/40b09a5bf8b9ba08aa51b6f41f706b7c3c4e4252)
90
+
91
+ ### version 0.4.0
92
+
93
+ * Added utility method ``Wombat.crawl`` that eliminates the need to have a ruby class instance to use Wombat. Now you can use just ``Wombat.crawl`` and start working. The class based format still works as before though.
94
+
92
95
  ### version 0.3.1
93
96
 
94
97
  * Added the ability to provide a block to Crawler#crawl and override the default crawler properties for a one off run (thanks to @danielnc)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.5.0
@@ -0,0 +1,290 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://www.github.com/
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ accept:
11
+ - ! '*/*'
12
+ user-agent:
13
+ - Mechanize/2.5.1 Ruby/1.9.3p0 (http://github.com/tenderlove/mechanize/)
14
+ accept-encoding:
15
+ - gzip,deflate,identity
16
+ accept-charset:
17
+ - ISO-8859-1,utf-8;q=0.7,*;q=0.7
18
+ accept-language:
19
+ - en-us,en;q=0.5
20
+ host:
21
+ - www.github.com
22
+ connection:
23
+ - keep-alive
24
+ keep-alive:
25
+ - 300
26
+ response:
27
+ status:
28
+ code: 301
29
+ message: Moved Permanently
30
+ headers:
31
+ server:
32
+ - nginx/1.0.13
33
+ date:
34
+ - Mon, 25 Jun 2012 03:00:17 GMT
35
+ content-type:
36
+ - text/html
37
+ content-length:
38
+ - '185'
39
+ connection:
40
+ - keep-alive
41
+ location:
42
+ - http://github.com/
43
+ body:
44
+ encoding: US-ASCII
45
+ string: ! "<html>\r\n<head><title>301 Moved Permanently</title></head>\r\n<body
46
+ bgcolor=\"white\">\r\n<center><h1>301 Moved Permanently</h1></center>\r\n<hr><center>nginx/1.0.13</center>\r\n</body>\r\n</html>\r\n"
47
+ http_version: '1.1'
48
+ recorded_at: Mon, 25 Jun 2012 03:00:17 GMT
49
+ - request:
50
+ method: get
51
+ uri: http://github.com/
52
+ body:
53
+ encoding: US-ASCII
54
+ string: ''
55
+ headers:
56
+ accept:
57
+ - ! '*/*'
58
+ user-agent:
59
+ - Mechanize/2.5.1 Ruby/1.9.3p0 (http://github.com/tenderlove/mechanize/)
60
+ accept-encoding:
61
+ - gzip,deflate,identity
62
+ accept-charset:
63
+ - ISO-8859-1,utf-8;q=0.7,*;q=0.7
64
+ accept-language:
65
+ - en-us,en;q=0.5
66
+ host:
67
+ - github.com
68
+ connection:
69
+ - keep-alive
70
+ keep-alive:
71
+ - 300
72
+ response:
73
+ status:
74
+ code: 301
75
+ message: Moved Permanently
76
+ headers:
77
+ server:
78
+ - nginx/1.0.13
79
+ date:
80
+ - Mon, 25 Jun 2012 03:00:17 GMT
81
+ content-type:
82
+ - text/html
83
+ content-length:
84
+ - '185'
85
+ connection:
86
+ - close
87
+ location:
88
+ - https://github.com/
89
+ body:
90
+ encoding: US-ASCII
91
+ string: ! "<html>\r\n<head><title>301 Moved Permanently</title></head>\r\n<body
92
+ bgcolor=\"white\">\r\n<center><h1>301 Moved Permanently</h1></center>\r\n<hr><center>nginx/1.0.13</center>\r\n</body>\r\n</html>\r\n"
93
+ http_version: '1.1'
94
+ recorded_at: Mon, 25 Jun 2012 03:00:17 GMT
95
+ - request:
96
+ method: get
97
+ uri: https://github.com/
98
+ body:
99
+ encoding: US-ASCII
100
+ string: ''
101
+ headers:
102
+ accept:
103
+ - ! '*/*'
104
+ user-agent:
105
+ - Mechanize/2.5.1 Ruby/1.9.3p0 (http://github.com/tenderlove/mechanize/)
106
+ accept-encoding:
107
+ - gzip,deflate,identity
108
+ accept-charset:
109
+ - ISO-8859-1,utf-8;q=0.7,*;q=0.7
110
+ accept-language:
111
+ - en-us,en;q=0.5
112
+ host:
113
+ - github.com
114
+ connection:
115
+ - keep-alive
116
+ keep-alive:
117
+ - 300
118
+ response:
119
+ status:
120
+ code: 200
121
+ message: OK
122
+ headers:
123
+ server:
124
+ - nginx/1.0.13
125
+ date:
126
+ - Mon, 25 Jun 2012 03:00:18 GMT
127
+ content-type:
128
+ - text/html; charset=utf-8
129
+ transfer-encoding:
130
+ - chunked
131
+ connection:
132
+ - keep-alive
133
+ status:
134
+ - 200 OK
135
+ x-frame-options:
136
+ - deny
137
+ set-cookie:
138
+ - _gh_sess=BAh7BzoPc2Vzc2lvbl9pZCIlZGQzNWQ4Y2UxNDlkZjU5MzUwNTA1MGZlOWIwZjFlOGY6EF9jc3JmX3Rva2VuIjFhK1dZYTVzcWsvQk9NMGswRzVUUy9TRmxCeUFPNEdLMTdxdDlOcmtyVzVRPQ%3D%3D--d259cb2a693e44292d72df7a3eb5d3ca6b6d4f9d;
139
+ path=/; expires=Sat, 01-Jan-2022 00:00:00 GMT; secure; HttpOnly
140
+ strict-transport-security:
141
+ - max-age=2592000
142
+ cache-control:
143
+ - private, max-age=0, must-revalidate
144
+ x-runtime:
145
+ - '9'
146
+ etag:
147
+ - ! '"cc8a653aa913eb5c43762432d5842b50"'
148
+ content-encoding:
149
+ - gzip
150
+ body:
151
+ encoding: ASCII-8BIT
152
+ string: !binary |-
153
+ H4sIAAAAAAAAA+1cS3fbRpbe61eU6TmRo4gEXxIlh2KP33bHjtWRMp6cnByl
154
+ ABRIWHgZACXRfXJOr3qVRc9jMdvZzGL+QO971zP/Ir9kvltVeJEgRVpMn1m0
155
+ FxYIFG7dunXf9xaG956+fXL+3ekzNkl9b7QzVH8YG04Et1kUC8e9OWmE44cY
156
+ kEYPDSMcRy1fGEFynznm4l3DMe+zsZtOpmbdS3hsZE/vN0Y7DP+Gvkg5syY8
157
+ TkR6sjtNnebRbvkRzdwUH6bu1Unjn5vfPmo+Cf2Ip67piQazwiAVQXrSePXs
158
+ RNhjoYFKwKmbemL0wk1fTk32lz+zs9ByuceehLYbjIeGeqxw8NzgksXCO2kk
159
+ gsfWpMHSWSROGjyKPNfCZGFghJEI1FNbJFbsRnT3ixvfa7AJCHXSKI1oydty
160
+ hpOGwqDBDL2qYjLHm7p208UiMhi02AR0VlRqWaFvyEE0phUF4zWAJpMwTq1p
161
+ yspwDYdfSRj4L1uc6/OxMG70/MBO0kL9V96ajMR8mk5Aa9dy09lFGl4KYB1w
162
+ Hyu0kthpRjzmvlyl3tL8vS/efccPkg+XxuO3b9qX7RcH52fG2XPv8ezR2/6L
163
+ rzqDD+nx1/Fl/O7gdycViHqODLOhJJyidUYn3u0ftUSLX3Kfu61ApAZPwEdJ
164
+ q0TAJJ15IpkI3DbMaWDjh6Zv83jQcY4Oum3L6R6bbc4Hg+PDdv/I5oODXs/h
165
+ bdG1jw/aTrdlJUmD+cJ2OVjEigWtXfFLDjwjaypuUkOOr2z4NvHuNnudw47p
166
+ mEeHlmN3hegeHzpWr9MWdr/d6Tk27xz1+keD3vGdENesoHhBsTxLYuuksQn1
167
+ 3/Mrrt4tqO+AU8R1GF8mTd4/aFsD57g9MG2rI8Sh2TvscrMjLIsfdTrW4LCD
168
+ FR4ct96DoEooJYELsI3R0FATKPmqoGsLR8QnDfmnsR3kFWc1ncHhQbfLsQdH
169
+ 9tFhnx/ZB8JyDq2D/qB7ODgwOwN+bHUcsSHiuRAODdLBEEqsZ2iG9oxZHnj7
170
+ pOGF47GwL0JI+LVrixgyK4KrZhSH9tQincQazOYpb5peaDZJQcaumTRFwKEx
171
+ 7ZPGTCSZ6rXdK+bi1nUMRQcCVVSAVAaSmEAgG0k4ESU1Lmk8FbiGzoShKOte
172
+ Gq/HEAbcDYBozUCAhvJXC0vcVDSxOiioqrCUZLk0h8TrXrP5veuwV89+UJuv
173
+ 0MUD1x8z7sEwZNpXT6J3T02zMTNLlZkYPkhNWkRRwyBgVwNSz7/p9Lq9o6Pu
174
+ YHCUi/8mKDUn4dUnMeoqxBTQDL1+r3vQ7/YX0bv3vQhs1/mh2dyclM3+DTZN
175
+ uOMJKN5rf4KkrVrAP/ZvNPa9Qadz1B5gAq1bNyJu/yaj76+JaoXcSxAeGlxJ
176
+ doZ/vg4wtJY5n18KlkxjwdKQTRPBnKnnzdiHKfdcxxU2+/ab1wmIjgGJG1gY
177
+ NnETGOQr/T5+4C2bQSGIOA5jFhHv0s8QdjxmdgiTGSRydLbnw6mXi3YYNQGM
178
+ FeqmLN+em42LYjgEcExGEOSlYht5PIDWOXPHwTRiPLDZqXqNCDE0PLdgOVj5
179
+ DLS4ibwwhk+3CnQ+6JkazZTAzwMugXUET0FW4LMKbjHquR4/DxJapsAVyvYW
180
+ GqgRjzFuHlAJDJ66wWrE9JDXNLIKaWhM4cRLi5H9yy+HBlRyRmX9Qz8sxks1
181
+ X9LGbBL6RP46bS65ofyE2EuGDfQSXZStjAYKvgtzNhpOOmVNM0zSOAzGo87+
182
+ oHe4f3Tcg1lXd/JFRCKMPIEJkhQsx0hXFgvUg3v77cP2/kG/5vVYRCGMTBi7
183
+ QrE9FmAUSJQXQz5GOIZZnLgWEB46YewzblkiSptZrNL49vx5E3qeS6sL/z+L
184
+ HcikpmF0oX5f0LvkPKaTEA/GIm2Mig0aRnPaNjeHhG0eWrz/MBXxzFB/GqP3
185
+ v6OftPv7pc0uG9PK27GwbTc11J/GSP1d+22I68yHyCRY+KVxBj//EqHXSF+s
186
+ DcbkY7gOhjWNvcaI/l/7zZi7XmLI/xujb6bmjJTYN/RzfRAzIwhtYE3/wyVb
187
+ /0VEPB+xcsNCIHiZhg58lUlj9IR+nYfP6dfasEQMNTg2wjRqjJ6p67fnp2u/
188
+ bsEgRJPI0H+BBG6cvlwfAEfwFouPxAcuUZL+LM5O2jmTxVxB4p1Cdhojnwcz
189
+ 5kM30+uFnFZ50Q0i+KiFz557jZmcqODxQ4PBPFhiEnrgj5PGcxcIEPx8ylmN
190
+ uS/Bnri2XcSiNF+DXXFvisD0GTTEDHaRAucFj2EpCCU7GsQmL9L2vsWUMfzy
191
+ HIdNACQpj9MLOXP+fmcOwNCAyhgapFW0Hinp9vyyUPFltUaeKnn/cqOKzXVA
192
+ fjMML6Hqc785v1f4dQdb8OtgG6S/nCAjoSbNHdOD7uHxAfQpopp0ctI4xnQG
193
+ mAueUhXb9NpNU4pWCmTP9a0c14Nt+KAFrnpKjWq/3Wv3jg+li1+D3zswcHid
194
+ PPoIJ6OM5BvXisMkdNKSq3y4VZL62QzLaArveQnSV/41r6L7T2/e0Z2cpN3t
195
+ 4qom3BzR92aYJJyct5xVocgmvEzV7TIq1CXAL8dUxlKSDygclaa9EC1h8pnM
196
+ HIbT2KqwwzM8KXHCdnGmaZdhPMBGKoQLvz/z3eGKB5ewC+SD5vR9Le+9+nrL
197
+ IV4hXtmkyzDudLpL2NYPP7qexytipm/9Woyrp8xwPe53BkcDKOlMbeXUJf9Y
198
+ ed1znjKyUW7gktNYycRoH9kNZK4k9KZ+kDAkvjmus4FVl1sNYhTHlYOzSXeE
199
+ NAcbCn9k7P71P//636kxNPADzm63FGhFlBtnCBM5IsSbNBa+QHzp8CTdZ8Jx
200
+ ENbB99lncBIogzRNEUvCtiWUYZJZpdBjySxJhY8ckkBiHRYJMSjyQSF2xAxj
201
+ pM2vBLPFlfDCyAcsFjqM9B9pmpY0Y8oPVlSSwmMg5U0Lb3nCSSV7ZmMqMQgN
202
+ YYkAGjaPZ4tr/8ufUYEoE+B/f578z8/mcjJQiQCUIPRNkSCzxmcUdhdLEdjf
203
+ dKJC56TF2HNkL/eBAnyVCHE5nBV46ElKxLSxIQGCIeSfPDaD3OfuVDQ14Tfm
204
+ /pIcm7laiKOveAqHSscxVEYpXCBELLdRLKbsSyHRkvMqNE1airVUsF8heokj
205
+ M6JXY0GK25FCRPI/K7EUKk4F90XcKMeCX1KUNUbZ8k4pA7Cfhf1y5SobUCz4
206
+ 28BzfeQAiaJEp8rqGXhGbqiD5Ps9zc6ZaxCNnuNu3Wv7pS0Ee6qNIV7cx3Yn
207
+ SF6mMbcu4R/uY38vXWAI0x14IbdxaSFWABJXrrjeZzIY1Ns7tSbS+/3lD/+l
208
+ 2bhe0GNkCUGCWiWQCbhDhgECznTCoUlRLU1ZEz5reSfZ8BEDlyLp3uhccL+0
209
+ Psh6L5evKN+GXluLDRz/jNHA52OSVB1dU5SbQBSI+xErsa9Ddnb2kl0K8shR
210
+ hoM5bLFHiHmvUAcC1sJO8FBExOpsGiH1rJJOSEiPkWWp8m2BScn71PkVA2+8
211
+ FxaqNCUNQjz0BqRm0CiIJipPKsFHrk8qjJ2RqpCLRT0ix7hZugIaFpRDkTDb
212
+ +jlKovqodBm04AT+vgCjSCZSDCXZBvVJYGzGPLAm9HyZmhAxtATU5uWnEQnh
213
+ kmTOOQqVMC8FZyvo49qryCP1yjx9vhGeS/UEJSM6ITNHqXdITMLzQTAHPWhD
214
+ oZLQs0CqKSQ3KYMj05tSRZbjSyXrmj2h5TEo59b9XGGaoDk4bRrV61PuQYdD
215
+ Xq+QJyBM81EVPbqSH/WyFsmbr/dW+mbEu53A8/L8FqSDtSSvcZ7rK5J9iogR
216
+ phoVccHcQFow0g3M9SPUgRHyM3I/C0i+P4XvMcvGogrn2RB27M8vf/j3ECo4
217
+ EAyakuM9unIY7Y6P4uk02oBLIQNqngrxCFT+ZA3pVdSj1ZRtFoJfadtytSo9
218
+ bpJrSrw5YYjgsBlNKU1T0gUTElFyUZA7tC6huOS4OntJLIt166IYa7IVr2be
219
+ CfkucxAXcGqwwvma8winVH5DopBQyrR6bda1XEPTc1eKYMNJX1LBREYF2Sq0
220
+ Lly4MEEqJ87IkYfin/ThGCxWe3APpbR7VEtbBLMKRu6ksVL9QC3mAiWEknsG
221
+ 3drXyEg0siWAVqgBrErHS/XfGD2iP4pzykWDW19fnnwn3rll7nVKAbcCkWVQ
222
+ C0t4oi7YZ9yPvmRn2HrI6ScsCUYHUQRVXs711TpA0FsC70fEcDcTUe6SyDf4
223
+ Wf54TXhIWiE5XIV1Bj+OnckHC1B0mUL5/uuxzHkID+k2jqG2GZG2xnw6bqE4
224
+ iwXhSiQP2aOAe7OP8OCFSaaaQpsFpGq4APBgv5BjjW1hXVIvDiW95Q32FHce
225
+ wpsVMO1YJYVy64BUrT0JkJQ9UgrmCwRYD6ktCfYycKEJ0rVgAT2fW7VbSGru
226
+ DV93kdcqX7UUks5nrbM+wik0XW+Os16Rqw0PF2i5pxPYlTVhvQ/NOb76bWiy
227
+ xyGP7QUIn8BVzxD08nXYCi1VUS15zvBgAZN6VgotGFlxUwVzDmv9Vj1YAPMJ
228
+ C3oaWlNyTiVDriEuE+HVr+slHiwgVL8uHd+LuLqypyrsh6g8On21JigtFIVs
229
+ ZG1aKLpcIQawmz5qTxSgkXCrvj5UYOQj8Lt6tOZcshheu6en9GQBSnk3KhEG
230
+ da1U3BMdc5dNuoqpq4n466rBv9XaSycHbkbW7pI7PJ4Yc09a+QWjXrbomX8k
231
+ h5fG5kEi1Y61Tl7DJtKyDdgRH5mpc/pDLtMZRa5WnXTfah4lPJkDsZDPQXcA
232
+ XSzswjqIUbwABxe6Wl/NQ6kIFuqvn1lhNPuSddudLoKLCNkw3bjZbrWp3QSK
233
+ Kw59RLqHrbjMMhkPIrLASyP2KrAQGFMuiEKcBCFNAnogWq4Nve7LjSBX21CX
234
+ 2MIl+a4kgnkJc8eQiFDutYDSvb6+blEMCkQsIa1Klo6hWkvZASt1Rj1FnhcO
235
+ ImSH9o3ajvK2mC2k+pX/h6qtxiq5IFTyrOlBt9PuF1nTXrVfirYsZ8bTELIC
236
+ LFH3pejm1rWzxihfWg5ELVHKNcWhQzM2RqtBWV44tZWFfkKXOShkAFDYlD3E
237
+ AAa2/yZbI3upOhMkF40+i8X4S80cWZyQdWHUq5Bq6oKWrWOCLCknlUAps3e/
238
+ FHPIKXZ2cr2AhI1JlvIiawhOLoAV9Uyrdjv0/qQ84hR4oC2HUiwxmjY4rDek
239
+ p0kJYY7iFLW3on/STZDlmz0MYLslNw2RSf5KT8BgBWXHcQLx8RHsF478/Xy2
240
+ 90kzEaKJp80MsWaOWGP0AA8pT/C5ElYNRuarabaFpA2lapHyo8TZ8jyZ48Zz
241
+ STLpllLXJMvnriQt7Lz9KUfSR2sk9rpIwBM66QichP9znhja9ug5rG+CXixM
242
+ oSrcGIIGTqVTcZ3r1+H60/xmcZrHMWVO0EYl+73IhCNFz2VbUd10FZ7SyXVJ
243
+ mIKnFsnLkO9Bn3S2/7vl/dfN+cQDlCfzkbJlHlzYTyTk+8UVvkEKFCT0kAuk
244
+ YgMZ/Pq10VasvWOXt05EqaQ6Em40jSWz1GEsU9QsrPySkdciGjLVQ3kRF0S8
245
+ MwKwmvOcidY4yr2hYZDSui4E1eIQZWh/WbXx62fF3fkSQut2zoFyQSlW6Y3l
246
+ fHNaqpn8nXu0isC2rc8vsnxRv3Eb8avyeLRNgJJPiSHgaKPt7Zef/0Obr/pB
247
+ so8UvVwp9XIpH4h4/wvF+kuY/WxqksYgdseI+gXUcF7SIsbKdFbtgKxUmg8i
248
+ q7GcEctab75Qo5SbCluVXpNqfFFRLtqhulGsaonW3h8amI7mNCTdtFETWakj
249
+ MahkcDaccE5T1k5Y1ZV3mu6mqrDUdOc45YDyQm4Fyoxyp9lulTA1v9TJCzJ2
250
+ p5nrhejXkTS1iOWyVl1IjTiVNH2mncpHOmQBXqr6sg+0li0m1NIRklNlK6Xw
251
+ fQIPlMoY86rtTmSHblo6EypDgp7nbtqdZnLrZnpMdQeyuoEZEqdvZ6rpyqlk
252
+ um1rc6FrYpGAytmVOwWfVx6aXD4hnmTN5/mlvsi8+7vrafYUvbgy4vm7xq4z
253
+ EVvU2FvUoYoNqr0/hZMpjW41Zs7jwbtwzNcipeOH7AU1dRSBS519X6cB607m
254
+ vWIWTG77YYCMzS9//FPZp8riCRKyUtip1Tz6SpF2oj6G5TJIQzfQz8uw+tc6
255
+ rGpV7JnCSibDfnW0/qUOrVo/RqO1RWlYRqp/q8Op1pnTOM0HuncyRkTzBU7R
256
+ XtWVm7gqz0PpK3loR1rCFTbjdjklBtuqi5BMXPQALqNurXioV1YJCfWiUBaR
257
+ Gvy2KjCrsa0VG/XKKuEpY7tdQVqNbq04qVdWCVUZ3S0K2Gpca8VMvbJK2Mq4
258
+ rha8OtbPg9EtW6gtRJkrQl4JHVm7M9VWJEvOj2OcVZDJ7KKtaENbUatqZIcg
259
+ vHnVVOugJowoOEDL2tZsQa3g/HbqIzMaIqdEVeYtedvXdbr0DA3B6ANVXX5G
260
+ yiv51zup7rkMnjLym+TwqrMr/lUJjO35Ulvg1FLoCN7LGBGdEJQJpbp83sG6
261
+ IUP+/420N1wIPjSDAk0d96EkRUfC55K3d2I7yn4veAxoL0SariY7faepwrqp
262
+ 3spj6dQ6u8aEK5haPyoydtQQl3UONKlgslENLCt3ZQ0G7AkcphRFL/REgkdr
263
+ KlT0XH5vRn59A6tBkmSuioUvSNTXrfJ8CulpHDLAwVt2jmJcpboSjV7K73BA
264
+ RopDFPha02jnPjunqpA61PGZl3456Xw2Tr9kUE879xcfdksP7+PfwtuH2QDM
265
+ RPBlLgg1c0JJGZoSDkM5ZE9iQAeoUWmDt2UioZPimwXW3s6FfCTvci8Ji0cX
266
+ O3s1r5k4EbqHt2peo0cXFzs7e9+h6XxvD+WMvT1iUpPaV8FH/h66RHOMy8xS
267
+ 9VEr5H6NKlZF7WCh36IySn3WSCrMkXqPvaKzL50dfdEFcbJLXro250j3dh6e
268
+ IlunlcHr6qvuTk9f9YjuGnaPYOc/ysDXXOUbN7EETugEIqTmvEoz8Sv5fZOF
269
+ pd77PmsgRQn/hweG/lhHVtD/fEcx6kN27/tHnuLXHx7ghPfn5U0gttENqBkl
270
+ 1cr1p8WKth+03OJbU/g8BTp17+3ouX94sDAOxWK5xQCMzypYlx+m6J9d4MdH
271
+ CfsKx4kFe0cHexLu2g93dkb4tYuSt4dTDKimUkTgTOmrEGiUxkP6DdDU3Eey
272
+ RH3LEZKdrVqmyum+qqKQHyp4doO+T3w8hhqwi54ltQtzAVTBnNHobIa2rhs2
273
+ QTTtUURNWMsTSfPtEJs0UVW/UMYWeqnwxSWOIwr4pssFGooDnA9+8fyNqtDP
274
+ CcOPP/5YfJFpx5kGqnTr4ATE7JEn4vQBAH3Ofg/edZ3imrF/aKlzwDcPfg/J
275
+ fLhLHQ27P32OcT/t/LQDsBuKcTR6G+NsDxxNbJ08WSBP8fRxFAGtMYus/ZK+
276
+ n0Lqkp3ioLg82obhQm3SDlGYjp0ki9QHE5EuxMkpavx+qDQjFseCMGUmj7M7
277
+ DG0VYCw0FeFbSRsv5pVqyJdIUfukLpstruMVtQPg82h0CAe9DVM09dM3Y3iw
278
+ 8yOZAW7bManyHxnK6vL8ivxwDPWAwJJQh1Km3Qtuzvvr9a3MrsqlSlYlw8rf
279
+ 85um/MBM08dpH+iPgm1lM5UuLfpoVpafmkNvgb5CkwkekpjLk2KqhKgJeYbT
280
+ ofLgPrp2ge01fRpEMXyKw7jyJBLEucVO8fEprDONcbxkjIboln4/F4uiBaWE
281
+ KfoZfOSu0SikLvJ+o1rfgfRcMwqjKb7bkIGH3X+NE/OEIO0LKQytI2k02jaK
282
+ o5Zoii95upW29VI/PHuN9/BauSl+iXCD0Oj4aOYn1VpJrwUyfgwDfp3IbwYq
283
+ VC4IZNL66ALvygex0Hosu7HufvhctuWjrwgfElSKp9zl1T48OurjC0iVs7vE
284
+ PGCfuQY29fInLKzMXurMITPTIKdNfpyPTiKWuFF+GzFjuaf6yF+l62zhq0TF
285
+ HgJ9bNO57t1FC922to1agQFuYcv0/a1uF/UjYy7dkPcrbFVlMX+TbVKNnZK9
286
+ SmeDpMRm/+kvX0hWgPbalR2a8QVMPfVYiovU9cWu+nweXZ7sUg9o77Cv79HB
287
+ r5NddILultTV0KDP89E3OdTnU/8PJkLyeFZVAAA=
288
+ http_version: '1.1'
289
+ recorded_at: Mon, 25 Jun 2012 03:00:18 GMT
290
+ recorded_with: VCR 2.1.1
@@ -0,0 +1,609 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://www.terra.com.br/portal
6
+ body: ''
7
+ headers:
8
+ accept:
9
+ - ! '*/*'
10
+ user-agent:
11
+ - Mechanize/2.1 Ruby/1.9.3p0 (http://github.com/tenderlove/mechanize/)
12
+ accept-encoding:
13
+ - gzip,deflate,identity
14
+ accept-charset:
15
+ - ISO-8859-1,utf-8;q=0.7,*;q=0.7
16
+ accept-language:
17
+ - en-us,en;q=0.5
18
+ host:
19
+ - www.terra.com.br
20
+ connection:
21
+ - keep-alive
22
+ keep-alive:
23
+ - 300
24
+ response:
25
+ status:
26
+ code: 301
27
+ message: Moved Permanently
28
+ headers:
29
+ location:
30
+ - http://www.terra.com.br/portal/
31
+ cache-control:
32
+ - max-age=15
33
+ expires:
34
+ - Wed, 08 Feb 2012 08:29:13 GMT
35
+ vary:
36
+ - Accept-Encoding
37
+ content-encoding:
38
+ - gzip
39
+ content-type:
40
+ - text/html; charset=iso-8859-1
41
+ content-length:
42
+ - '196'
43
+ date:
44
+ - Wed, 08 Feb 2012 08:28:56 GMT
45
+ age:
46
+ - '0'
47
+ connection:
48
+ - keep-alive
49
+ body: !binary |-
50
+ H4sIAAAAAAAAA22OMQ+CMBCFd37FyW4PdTNnBwWjCShDHRwLnKkJtaRWif9e
51
+ wNXxvffde0ez9LxT1zKDgypyKC/b/LiDeI54zNQeMVXpL1mKBDE7xTIiE2wr
52
+ ybBuBhHuoWW5ShZQuDc3ULK3+sGP0H4If2FEOMFUueYz3i/kH3ZwI+qkMgyN
53
+ q192sMHoJ9gJJQ3G820TmxC6NWLf9yKw91rUzorKY+d80C3G0rBnQi0FYTdO
54
+ T6ND/fh09AWY7NsA7wAAAA==
55
+ http_version: '1.1'
56
+ recorded_at: Wed, 08 Feb 2012 08:28:58 GMT
57
+ - request:
58
+ method: get
59
+ uri: http://www.terra.com.br/portal/
60
+ body: ''
61
+ headers:
62
+ accept:
63
+ - ! '*/*'
64
+ user-agent:
65
+ - Mechanize/2.1 Ruby/1.9.3p0 (http://github.com/tenderlove/mechanize/)
66
+ accept-encoding:
67
+ - gzip,deflate,identity
68
+ accept-charset:
69
+ - ISO-8859-1,utf-8;q=0.7,*;q=0.7
70
+ accept-language:
71
+ - en-us,en;q=0.5
72
+ host:
73
+ - www.terra.com.br
74
+ connection:
75
+ - keep-alive
76
+ keep-alive:
77
+ - 300
78
+ response:
79
+ status:
80
+ code: 404
81
+ message: Not found
82
+ headers:
83
+ vary:
84
+ - Accept-Encoding
85
+ content-encoding:
86
+ - gzip
87
+ content-type:
88
+ - text/html
89
+ content-length:
90
+ - '22869'
91
+ date:
92
+ - Wed, 08 Feb 2012 08:28:59 GMT
93
+ age:
94
+ - '12'
95
+ connection:
96
+ - keep-alive
97
+ body: !binary |-
98
+ H4sIAAAAAAAAA+2923IbSZIo+Lz6imj0tKQyMIn7TRJRBl6koka8NEmxTm9b
99
+ GyyQCAIpZWZk5QUkNTsftPsJu7a2X3Ce9m2eVqceytRmZWtrNeeln9bdIzKR
100
+ CSRAgDep+/RMtZjIi4eHh4eHh4dfXv1u92jn7E/He2wcOjY7fr/9bn+HFYxS
101
+ 6cfaTqm0e7bL/ssPZwfvWGWzzM587gZWaEmX26XS3mGBFcZh6L0olS4vLzcv
102
+ a5vSH5XOTkpXCKuCH+tLI0x9uTkMh4Xuk1fU4JVju8FWDphKp9NRXxeYzd3R
103
+ VsELjYFfwC9epG8gJMGH8McRIWcIyRA/RdZkq7Aj3VC4oXF27YkCM9WvrUIo
104
+ rsISQn7JzDH3AxFuWYE02u1Gx6gUWAlAhVZoi+6Z8H3ODHYow19NiwcbbPLr
105
+ UEj4KwJP+qHAKwArHYtvsKE1EX7ws9xgzt8Cy4Q7jhzCvxcylLYcbbAB/QtN
106
+ hq9KqgGNs8sdsVUYisD0LQ+JlEIW+jAWv3Am2eHR+RE7hma5zYaSKeRM6bC/
107
+ 2aHl8IC5Gk18uu3zwLKZwOuDyIV/8U1EJYCbqhubqY7tJR3aTbpxbg05vLwX
108
+ hJYNP1WDZ+cb7BS67POZodg+SQ0U/ihlu/dRXF9Kfxik+gYIW6r5KT0VFbnE
109
+ e9guGwK6gMiarYkrz/JFpjEBgFPvJQ/297ZahQzf/Bfjfc/YkY7HQ2tgi9RH
110
+ ni894YfXW4WLwQs+dCw33USlWS+Xa9V2u64+sS33I/OFvVXgdih8l4cAKwRm
111
+ hBueZwOP4GCX/CAoXiGfE1NsFWK2Ozk9Bbx8cZHMD3hzM8SnmzCamwO/VN7Y
112
+ 2NuvbJTLmwQg22gwBpqaUcgsE1lKNQycMhKlK0Pdy0APKpuh7wcXMfALPsG3
113
+ NuGfuf4A+sIIZWSOjVtCR0LyzQ/eaA7t8NoWwViIsMAcMbQ43DJ9IZJGaP6a
114
+ QXBDAzx0SrWSKX1R6sPbdLVJn93YnudbbngPzRkE6KZGlzdTXdgMDEJQInYI
115
+ J6rN4KPlGuE4cgbBuo3OUHotHAKSB4bPh5YMUpiMpXMjxe/UeRT8wr+QEqig
116
+ 2yXQd2s0d2CxL/HAuvjltA2CPAuz+2TTDF0DpIZvmQGzLfZvINsCz+bXL0BS
117
+ u+Il+/cnrxS+CINEfxrIBz7h6m4hWaYK789eG+0CC3xzIbq01JIMtRBXxwHR
118
+ FJQm1c1Kqf8hKHEXpC7Knf6AB2LzA2AKWFA7N6HRfTLhPgtHzr8KEIADfxNp
119
+ 4sGEp4vCS3rsRYNdkHNbhTZK7tcodIXlkxivlitV/RZxbd9yL2Q/ED6IGfjg
120
+ OBqcN+efQ99dFwcQGsRFgg95/Hf+ZYW4yb35R9YQSDbFUz0JgBQBPNrxwwtz
121
+ q1YG8V2ef+6L0c67f92qzD+JJn1z6xm0x/vuM/UYbp3unZzvnWw9iyYZaa1f
122
+ EC6HRWUHxP/HrdCPxMsnqw7AlA/S+soyZtDsV4KBh1+I51ojPm0wCi9uZDw+
123
+ criLTamrvsnN8ZocBsy1eTqWlz1f8OegEV3wyA4L371cGeFlCKYlNM6EISAJ
124
+ 3OuvOQnOfL83PNCfcs/aBAId+5aEu8+fhdJ7ttEAPvpujWFdC+lAj+ks1q7U
125
+ l/N6MEg30IXGaU2lXUbZ9aqUfAXYajV6IIfXzLR5AHr5u8M3fcBb/QE9i528
126
+ OeyDutV98uTV7wyD9XZ29k5P97f33+2f/YmVSoYBACI7/twOQoObpggCa2DZ
127
+ VnhdIJHcfcW1yP09SKeo0N33GZcMr1+VOGAFr8y8BzQxUJ7qHsSf0M+/DeWi
128
+ zwLBfXNMb3sclCrOBlFg8kWvg8JuqNUkbsAHFd77knq/FNld1fdSKb/7+Oz9
129
+ OTvrvYnvgE7LUPxEE1wXXqVobjmjzOjPSIzS+/PvzS0lXgrs0hqGYxg7WK+E
130
+ NRqHdDkAnVr4WwUYT1AyQZtFDcxhEejO1ieQkcwToEQHVhAKh6MUdr4g+3C9
131
+ dmUYAPCc9k13IenS6c7Zyfuds/cne7PdisdmJFxQ6UAN1aOP90nipt7F92CS
132
+ g+roAfcun2lzEw10E1ha9CR7lgL1LCUh0t3YrlTb5RjdG6a1dcGeD6UZ4Xq5
133
+ iXNg07QtuP4Rqc66rFJpNL5j//Zk9h3o6iFsOVhxiz3DxdHANkHUJ+9d+hYi
134
+ PSUXvDPgfqWPLybE0r1hca8G9FT3Bvp3I7zqmvAWUjfBDWicwfWmr6ozX1WT
135
+ r/49LQs1f2XGBu/9sNfb3TuZZS6ckkrNS7qmfuqJatgSfg2hZ/hFqvN8CKqH
136
+ FVjuCHGB5+N6wpihbdA00+yZCICUGSIzDUnfsEsFZRFQ0mBc72aGADl6rv2Q
137
+ EGAzv+NmsdfQWTUmGWCoVcGW2A2kP/fe9O1Uaw4HfVv1c+bJEHedeW2l3gks
138
+ lA5e9mNQnQ34aRDaJszrWSA3Uc1yh6DYgbbN/RHqEH0iESnjlXJ1ut2VQxkw
139
+ +M8EtrJAQs7cUOTORVtL9zWxVhaC5OPkMTRzIX1H2xVg4ZV+MIs9rK1jCYPk
140
+ yQAWbm7iBj6hAK0tQ+lnyaC1mE0eeFffBzLyQdk9jRu/sIQ9BAWi+8oWID+H
141
+ 3W21Pulf+T02TI7C0+Nu/MwfSsMXsLkwBcNrULzMjzgrTnBPBpMP3u2+slwv
142
+ igUgbdZQwaMXAbr+Imlt/NHIQFV/4YUJtyOkX4G4Fd+5FIN4LDRxAUHQLmw+
143
+ EDYDms691nU5+1EMoJ/4ysK+rID/itjaU2zVzF8B38yLXVeb3BKcFTulvrmw
144
+ hygFki/ioVSvp5HH1SfBfeYzwnP2nsLyp0j414hoGlYQDRwrTGYTNeorKIPp
145
+ HCFlb8psJWT0BbMKbTeoWmbVuPgubGT1XSt0DJAamhNxYqmpXS+nJs0AJtPH
146
+ mQ02yCo7M0US5PfwUYF16a+a9wo26l4zTY9JNM40XZmdr8slFMAA9Ud6spSg
147
+ 8IP0f6NbgEZyfQMqlyKHCtUbUQH9wgHh7HgyxidlAnQIA/o71zrqoIskIm2m
148
+ AwPtHsH8YhA/pzUvi1481u7H6VuxXlzo9kCFd3kY+Rztx/TCLzItmpesTS6f
149
+ WCMydeavULR2ofLPBj7DzcXcC7RJmL17YfnAl/oZUmQ6KAPTN1wZMhwcm18L
150
+ f0ZcDqZAZxax2CSd5ZN4dGN7eTwaaZiB5xoSTczd/yMZrIVcgwgKU94Cwfi8
151
+ ITuBNH57+uH94Bd4t8FPW/LzCRgfM9wLgqQwrY1gfMCQj2B8+nEvCOK5xS0w
152
+ xM+EOv3IRzJzMHMvmIZ+eBtaauNzPpbxedG9IBhI9xb4KcN0PnrqEOt+kBvL
153
+ 20yVZDmSF6CsgszRGH4Pa7c17MMeAERujO6ReueW+KZWjFwRza3hVErnitOh
154
+ tSIr5y16v59OL25wY/eeJBQead4dpx3pRC7MqOE9iSU84L09Wpo3EEg+3+7Q
155
+ +fF9SCfTvzOa+cslQBYk55OF6XyHnQjvN7x1Xxyc+jexKWRNCGQBOtr9E9s5
156
+ Ojg+Ot0/2z86TD+zXNOOhoK9ed/b7b3rve2d9KbmLoC28Pms4Ss2SiYzygal
157
+ +8K6ig1fqYlmShv2tTPPY8PYJ+kKWDTEJRIvY0zAJ7PQpE2aExuMcCbYRjWn
158
+ ubEMtSY494hUsSevPBiJ0JfuqLsLSw6HLQbOAnXnVckjc+6MmXTpQhpOSoPB
159
+ ADY/29usUl1gaE2WD9NF14gZbaZkcseLAsPjfnhdwlMjYP4duseO8d5yqPl4
160
+ waYIJBzaA3b01XIo+XrMRRSKgbRLSKphhCdsBdBp9PVdANrWAOX7UPoCYb5L
161
+ /byJhgDN4SP+yXLFrMRQS/CBfpoBlOj7PAjXUEGAtBx2S91z4f8s58ziejbq
162
+ PzPMemnBXEqz/tgv6cl2cLTLWLncYAZ7fXR2ZLzbe7N3uJuabentKRq4GZrR
163
+ bIHbHJoXt6d1LMHQleJov9Esl5vVmrG3X6l26u2Nchn9QIojaReHovjaF8Oi
164
+ KIorL7IDKYLiazsqBhE6MhRBAADPwdMBbOmKPT8Q6Oqk/JdoR9goVwo5Fn9v
165
+ 5rxHeVCAvP0e31pwKKTtkfSuG5Q+yJHqTX/gwxru9IFk/Xq5pbwr4sOCWrmR
166
+ nCHAQ31egH1iDvfRXwm64wBB3QDoS71i2KufJeia2Cume4VHCpylWXSTvZah
167
+ fMF2x6BEDNmh9B3uDmWJHYMAkjCdAVYJPYsie8R/+Vkm+9yv1Dqd2qeXuxGu
168
+ VEDYeM3JPg6vcIoIJ/7tIdxC9w23hW/RoQo5Vr146g4C7+WrknASoXpC1it1
169
+ zYCVGLASHYxjx6FjOF4B9X1ppxO0YMZlDmpgmqw8e2xyyQBVToYhWczH1GEF
170
+ bNyMX/tomR9p5b6lRIyUO1p6YsF06lRbNfRTohmRbKRZV6/04ybiUElb6HFx
171
+ W3WD7qCLW0lEvCRsYZkwN9W6MT+72+UOzu5OpdrE2X3K3VD6kQPT2PfQ9QWm
172
+ uShOhGvCX6d4YLmuCGTIizuwUPnAb/D0wArQjGtlZzcsv3vvey/YCZCPxWDZ
173
+ FCy63SFY5vlfJth14Kcao8UjNqSMK0iEWortDLi0nEIXlKdogA5jrgQGmQjG
174
+ YdZYkrhPBmyi/PocluC7wWKEod0YYWihhi1kDkKUJF2P0DlCs4VkbVfqZaTq
175
+ 0QCWJKAU0PWCB6YFnSwC8xRdQWfBqGsXh9an4mtYEuziDscJkqVmDTQI7nMg
176
+ JcFihS8MqBkDYwCMpYAV0G/wEyNwTIFLDmkeqL9N3d8q9vdEWK4svoddhIR1
177
+ 4oK4yOXFo8P3wFfQdRBSMPS86OAhOAc68KB4wO0J7O+CbL/rONYAjBEwpoEx
178
+ lzMABtyELogI7BdgAAUMngUsBpbqdTyvaZGdWYrRO8u9Zmrtv/3cLyT2nJl5
179
+ XM0QPBqQtL/3dbrVTK/TvQGwkulbeOpThMlnAmdMF+viXhSIgSWLIJngHix9
180
+ vDixQpxBmQGowCK9K9nJ2xcMATINkGmAMJk+8VFEHk0a8gZD31sFkgHI33yL
181
+ azE9rq7MffmUsFxyGzWVx3UOCdoVEma1FpHghF9wIMIZzHyraI7FiBd5ET2G
182
+ ZbFni5EviugEUeRky/WL0EhxH1vIUqCqKHAKoozgMYD3m8UIHsgdgscUPO1U
183
+ oeCRhzHBS3HhwuWH4U9Y1EwRn3DCjis5pVuFJ1fZf9ySL5eBzl1Vmq02DUS5
184
+ 3sCBgMaLfwKBW6T1nQj9VoJ2eMDhJowmLi04tQOOauUJju4wKwArIAB73m/A
185
+ WLYFWhGqLRsMQSqVgWj9VoKegCBhKZVplpue3CjrOdpu8AxnENm2CDM6+Jr7
186
+ utzO1yvN2c7rLuH8U/jDNVIBFqsiLVZaD9DvsS8seY+61q78YW5z8YCslC/7
187
+ B+RDD1JOO9PfjpeWwp4nZqvVAmLCAkgL6XavOPIjD1eVorzAV62gCHKNexK4
188
+ CCb3QQAviAkuigEuOb0gEM4AdKAZsQbryjYoJwQM9c9GGRVN4aLsHn5mBA8n
189
+ 90HAEni46kzhsXdiZAU2D60Jvz9mW5M6jVo9RZ03gCmoY8evi3wAws1y8YAU
190
+ hLoWc17kg5TjqA0i/QIxghu4DAOdtnuaA+Frhl8z/PoLfq2FGn3N+C//HSmE
191
+ R1709S/oPsC2e3PceRclYzEzNOukZdQ62N0DAE8CA3oVCFMWLccT8BPPcrnJ
192
+ iUncCJRM4ARZPHlb3DtFbfVNlhMaIFh8FtDpE33P6HsQMNhN9T1zcQlEzfHN
193
+ S9BaP5DWAUzxs3wc0b6KYShrEiLn4lvO0NXNUDmCv15W24laW3Ekn6DCgvYA
194
+ pwjsWAzkhS9Q45NF4Es5kaT47jkWqhPZkWmuu8nUUF6wwihuF2a1w6Bdptrd
195
+ YC6MK7A0NFy4v1l7N4pV0xR7y3G3NbSKO7u4KqImQbYWHTGmyLUtriXuyGAV
196
+ gdHWZFuTWArGFwyIAhifgWgfPjNqmu3s4t6JmsZPQ/+/UdOFRfat5Zw//Wlo
197
+ 41p6nz1vIsu1/hogEYZiFRuwenEGViCB6FNPzPjnjF2DPFMK3VNUKKTya3/B
198
+ ElPD7JhfWiHqijDUpd//Ttkd49ElF44Zl4947qnPCl19kbFgpF3efLRSLXRf
199
+ VE9v7TFKn2vPRHWd4zGatUeWK2VmJEFvcLm7f9g7+NMOm3NP1KegCe7pe7Qy
200
+ 5ImcFQ5O2VOf/xTJl6kjkSfzshc2DqESatqmtmNbKAAS1TwILZ/F3ksAtrAC
201
+ KrtaByztaq9T7mNozw8ATPrXxo6KySjVm+2OUWu3a+1a6bVlOyIwjoU/hJ1r
202
+ YAy5cQprpgt/30TkSYVxiMCGsFsOpB3BgoXWF9A2ADrOaOg+Gke1hbLabqf8
203
+ nJtTd8Gbu5cxr1YXmVfllnnxFOTVy8staIuuxlvQEF2lba9DL0ubs3HkbMur
204
+ EshXcVky3VARoH9ZL5f7/FAicUaiD30hlM7OlRmWrK2agC/UomoK3Ltb7lPB
205
+ TdjzvhxaqHWhlVw6aP2Da86qT6U/vHjJFBGZJuLMeR2GFaG7gQAhGMu8+WO2
206
+ 2LU9JTgtUxpjEFz6bwzj/KmlURIyLUTz8f+Sj/j/NoNzlo/VnJuuQypsbWbl
207
+ iR+io+VkTvrFpwH/gOzf7ky5v1F+SOZvdzTvN8p/N6yf5qA0g3Pfl5eFqRE/
208
+ OTV7bL5R3FBqVJvAIJ1Ou1orHRm7IsDgYQ7qgTDeO9w45tYVsMHZWOClixrD
209
+ OfpG/t1yA/V0JW4gAr1gh1w6FvuRhyG6Fe4NL7lPBzihdNkEiOkwXzocreaw
210
+ 69oZK3+YdUc/e9T52Kxw5sOQwmVpm4/4juUK5Io6cEWrVW3HT5Ejjrk9hs1q
211
+ YMCem0xqKEWksYc7KZAVIJh9/vfMG9jflXgjJtQLwB5I8tQ0YXtiv8RzDgsz
212
+ GeCZBhAluc+4I5Jf3GGc+dOfDBDht2CbtMKfPWpbrhhm9Xv87nx/78fjo5Mz
213
+ tr33Q+98/+iE7fTevTvVm+L7jMCciRX8QP7i6wV8rgGe4ulB1wV9+/7acPlk
214
+ wH0MIv0QSLePgTL9yix4pCq7b7J5oY7xhrbjXVim4YcZrbk2jdDxbk9Py5s0
215
+ YfUMZ0Jz4U7TcOWHTceaGyxtoFnEpnM+GLHf0RIvJ9yqLntOAWJRCFI+gO2y
216
+ jcFdM7tBTz+uLA5ooxeM+u03hUkbemM4/Z2zOcxDrnoTco27I1edQa6ah9y8
217
+ XQL3oNVKY6AUejY3KInXWJ3l2BRctAjaee5rnPLTgKKi3HDIxwzWHhvXH4JJ
218
+ VyOfX2fGnyf7DWek7V21WnmVdRSWP0Fm79JrfSxYr1cqBiwjlVa1tHdluNzB
219
+ c26OS6iJG2ZhoCXCDWEBNYQhXPTOoxcc9JoxhAO9CNIqd2aXGW8/O+XCCn46
220
+ F7BElsyLErxegs/z18FBeh1UiPfHtcw6ePt+9NHMVm03q5VqRa2hKysAtNim
221
+ Wib1m1pmsVrOps0yanbJvjPtuZmMN7rOfEvjvdbON8efZ01ypVwp+axysGDW
222
+ sQVq6tzUWzi9bibyYWyV1ReoZ+6rs+Yo5KVGudxEitfKjdIPsD45xgi4CJ4b
223
+ SO0LUN1lBLS3KB7IgLUFHo6J0jYfSQM3eETueOAryzXW1adZuwO4rTbJAPf+
224
+ uJOeY7fsiZ5g7Wqj3rzNBHsrcRujmyXTvGqWxc2yZ3G7z9AMjQ3PzLJZVsVZ
225
+ NzvfvslBv+tsuw3t8qfcY0wmdUxcqlc6dSRktdksHcihsGUioJBuJh5aRuhd
226
+ H2CmBgOlFsg8ewyv4XEsyjWQHb5yy0jIWf0Kcwh6MDOH7tSfu84k1Tijsy42
227
+ SXEOA77gnxgiYic7v6c8tECzxO2hOuUWTKHxsJPrwZngrnPqnqj49aYZpTMs
228
+ 1YGZSCvoVEskJpCqiNkI6AsNWyiZ+MAKHInErJbLlItLeZ4kBK19hVkFGM/M
229
+ qrXwv+ss6g2lDU2h6wdLmoSxhyZRhKomVbquMlNNPuyMue/xvOsEuQWBcifD
230
+ 3CG79EX2VIMimAtd2E0HOiUnHr/OWC3VZyuRlPoXlICKzYS8Su91k8DlnBCQ
231
+ W7XQKMW+n6oFkUT2LmiB5UeaLGsmsaHWK+166RxvXoqBak/Ri11iEomlUSg3
232
+ ndnPnM8vs2Qkm+ZaQdtNHJSKPrBJgG4DwhxLFkhHsY77U4Re4IyslbinoTQR
233
+ yDijCDYINv+AMxXYvjKNOruwHDRvalD5782F9FMSkoxs/VqozbjcaMzwengN
234
+ 2ybLXNkH+IMcycCQtuV4MHsDPcFbsCuPrbeUOXGrMODmx5EvQYaoNeYFi3z7
235
+ +VKZ/dHmE+sj/97cCsYmWbLDrXcShJBbRNn63ctCV/0kp6KZ0AvynvlGhv6G
236
+ 0L5FgXsYNDTkiu7WZMaFx/NFTHX04CmjXVR9QA495UopGQvQ8Hv05DaBb34E
237
+ gpwb5CREg13yMNAlvDYuMGdk2jOq1amia49zUygcxlMPUsl3SsGY+2KYIJBp
238
+ 0+EemRAcMcRDhmDaLZjcB/CQVB39cI3IOQ5rcUjRL9pfZsaheyiuNr2xl7RW
239
+ x3xHHtOfrS3Lpt78hYUubzNq1/qzr2TDdPBBK13g0lVuKO/neqWsoiECSjEn
240
+ ixeg7bqmsHz0xB8IV0xgaXXhYwyJkGbkcaeIzIV3YMJYQ+lZ7ig99m3ksicK
241
+ IrooTiFihJSC+Ff8niUQGR+pO1OIT2Zc39CQO4d6xpgb523Nd0cIZUjn0H8v
242
+ xPy9zgMbexiVtVDD03a4/ZQrfQidHHJZXX++YAn/O+i26if3V/Doo4w14hKG
243
+ Pju1cvx7GWUxfJg5Va3W0/Q4NWFfMgyP0bRYtOksGN0lt6NPMGbFHzj60YI6
244
+ AyT6JAY+uTi/40FWjrY72f3jGmGMiYKr8SgRIkwhglrx9t8QkZcswYR9YQVC
245
+ BZNXMcJl1oEt8fwDsRwnu7vhQAWNSotl4fzITUOcHnn4yuTGnwxfz4NRkpGP
246
+ ISDXPjpxo1s9xr3iKGZCdDBM4kKaFCPyTjWSHcTanQeRAksQmw1G6OTH9phU
247
+ MMCUOLwakUUjqJUcPYg3HovNj+I/lfS/RyU9VmJqD6WVx1tMVMlnUkf9A+nj
248
+ y6MgVXAIRhyiAj5Vv9HAvp08u0vuiQQiLA/60O024HgUSkdinufAkZRgMLJ5
249
+ JQEO0/F15TZw7QgU4wVR5Y1GrZpElcctgUr9Lgr5nfJxLGqOYk2zzTVgvyB8
250
+ TPyJPovb0r7VfigUrjXdhNSasC34q2uts/PIh4vakrWgO6Bcz/WmVeie/yd8
251
+ csedyGIfuxVwHvDgp0iEouQOeF4ESYfiDdvtFkVFWSCzij8IHqrUGzuY28US
252
+ flBUIV8UiQ3IcYwe2RmDTjmSoDfZdnZZrT1Ydg4R8T50pJ8g1kdk++9AOZJu
253
+ n3tGpdO4qsTG3MQZod6cZvzuNBIr7xHDr2GPg8E+IOA4q3RASFmRe6FSAFQb
254
+ jHQV8piU7oXw1W7oHWjUYoNxjzxvhxEP4mjlALMJCBc+QfuxZPavoNUxTSqm
255
+ SKVTbPSOtRX566ORn8MjHW22MJOHVoMOMYwvPhVBLlJ9orwbyWAxFfpHDqjI
256
+ RbgmZHDKTc1xu436qnPalFhWZmxxNy8uvtZo6aDwqspfgy/Du7IIC2yAiRgo
257
+ GNKn8LTe0KdHGJ8GImjM4Qlop0ML5VkxxFUzO01gjTiWFA/p0zhpABRnRgDg
258
+ CYsBMAKgkjPAbg2PJoYSA8VjlHS43kPHydeqzXScPJ1663hazJJfVE4bYRxE
259
+ 6QiL0y94r/gWFv2iuHptc2DO0Qw1YFHbT7fNpkAZxj+GKpwZARoxRCaujBja
260
+ 2lkq7pQxoaFyn8QZE/aupgNRdNRmpHgubPFJJ0DZxewToNBjhCltVHBTPhNa
261
+ 3Mbldu/KmIKK8/kIdv4FYOmsJzEsVLxox6hh3RMFPG47aCPI63alE0+Izsxy
262
+ 18bF+0TYavSGwKnbgLvEY06P8m5QCRvb8ighj4NWp2Hk2Sr8vhcEkftLJiR2
263
+ vT3pWoelq3CBZqq8CVCvaxJQ1pu3EnNloGf9kBdxGFwM1VfB+JY7xh/ESigD
264
+ KJba8oswNTBM1IxnwJxDX0dtAx4mwZWw+wrPPvSy3+5kF8tmq5A+wtV+N8Km
265
+ PDwcJDdKJ+8/KbwEzUA0ftPuwqAqD5NQDnGToFqCwcdUM0DiX3i88JyAWPPh
266
+ nRPuyKDU04bGd2igSlbox2+4FK8+Wbe7b45lpmySmCTWMmQQZTUOrPK/a3K9
267
+ TBP0C4uxUAfhlqos8wWxuNFlYc7mkBO7nmdHwow8oQFib5SXsWrZriYvPJqW
268
+ Kr2xMXaBiXBJthzM+xOgmCILEX5OYp5SiVik3J69f11UO8IsvTGlDfIiLMwp
269
+ MMSKCRiUyEDRISWUYgBJV5CcifdPDD7aGxl7FtyHuWeJGQfLaBpAD3V8n7e/
270
+ 1jaMwqyyNzVvZA/9UzrbetuY+/Rnie0ZpSTvppHcqtfLNfLFa7RKPZXwicaJ
271
+ TqzOzg1P+HDBsQgFekeAzsGNgPwiBtZPkeVaDxUmdG/emY3WjA/MrbqZ8oWp
272
+ pQKIMrBQkpydM4LFFCz0dMKkTsFTqf124ZEGeQtfl4Uy96uN+80uML/OBPYm
273
+ zi93IN0yZ+evNcUW+JLXau3SOzlRjkWuNALuDJCisV4ONNZ0gKcTaUSuhQYt
274
+ 8c3Pq1p7Zl7dppcLphWCIi8o6AeBAmYAUCyBwhAKi6E8xkx6mOG9/fRZk0Qr
275
+ z5j72kXccomK6ZukOi4d88jGJFGleqejRFarWtrhIIy0QcCAHptWICwjBIXN
276
+ h92vFQIUYwhqBWbUw+TtBuw1v/kZ1Zr11rxNLxctVNp4oqCgQy5I08iBDiIc
277
+ 3H/68dk8gXu8xenhR/wOa9SaVFs6y3JicVDfBD3cxCw6pvCNUYSZq5WSPxgZ
278
+ l2MrTM2rJA3M3CerHYo9/SmS4csVj8ZCOz4a4ybWJ3fH4g/VciAi+De0HPFC
279
+ QfvuZSGlBBe6ycuwB4gYvZiowFTGc7unAz1T+Tj4IMhxVwUINujUuD1CgfIQ
280
+ XQv+sNfxLewYn3ZHF23QLrOn/+//9X/CK0yZj6gnmbQn88H/mPDMHSZS86Ex
281
+ H8xhrhCYoj64AfW5pIeh4E5QmI4Y+32FPQ8EkeG7ZPSoepgiUnz6FG+wK61E
282
+ mPZC+0uI8+3NEXu+6/PRz/K7lQwG5KeGH2KQUh6UubOvpPXmfOsHb9hz2PCv
283
+ 2zasXt15GItbrk2ro/Ex7HCfn/nwpS39DbYX/BTxoa+S3/FfVsRkgGAwQ/FN
284
+ 0BbjNE1otC1DfiFHkj1/LVceh4H+CJCY+Xxxk6m1dHqAAOhbzqqtpg4eCt0c
285
+ IIvb7mTaDi3QjJ7vyCu+erv4jWo09fXCBlPt+dEnytf7/AS3MJgZGyRYEIoV
286
+ m9afQ9MLAS3Eoj1NdG9R1mDKbv9c/1ix8xfTTwvdfDgLEZjO+Fj1ha9sQP0A
287
+ rjGl7Ek08CXoliACV8RGwwFUboa4EK9mCq8k639qIh3/hptazMzxaVW0YjCI
288
+ 2E0gF+I1PWd94//VseQUwGpojHwBXxW6c18vbLGetJg9SHpOP6dp3FdrP3MQ
289
+ Nns2NQdyIVLVqcQ8/ByhmF2pdQwkxXe7+qOF8Kfgj+NzG/b8XPhDZKBj6Zvw
290
+ p2djAiB/uOI8TQ6ACt1VYC7uemWKG5b1Ycc+llN/fsBN+P8VccEPUR3GePk8
291
+ KItbr6da98MI5ncAn72LgpWbjr/ClmcgLG42aZUKFwDhjoV1JRTB1hAOAX0N
292
+ Os4iKIsXiCkGP2OCzshee+4FHLYg+CG0nwNjcedTvUe4QCxxK9FIN6HxRUCW
293
+ +/Ik6EyX6XMemNCFN9aIDomG6ElhW+6KrIBJRnAbtQhIblF70iursV45+G52
294
+ VzCmrKSoZMb67JKlvre9w54fMYpv+yOmZl5VjPGBCRpezterTNue8wU9x0kx
295
+ 3JEYU7tio46g70i7nIexCv/En50crrZoLXU269Qr9WnFlCnolTTs0x57vubk
296
+ 5SgzZj5cRVAlmvjxCagCkc/NtTcTnp9S6NNgFrc/Xal7E/6rmm7I3Pv2eMX5
297
+ wSfcgmbnv15BSG0f9Zi2lbAdOxqkNA0E85p/wsTC7qqoDCQ3BLD86mAX4zgl
298
+ zDbsyDjlRWHP6XpFZJLPyMF0BsTiEZly347g/mdYfOXkP1dUsuEDVO5T3y1u
299
+ Z6rT7pxs3888m7pBdgHmYtqmmsY6Dn9zcPdngdK36l4CPoqwZPbs56vsXd9I
300
+ 63Oi0qyojkoLFaLslytoZVp93eY+yt01NF90daZPulkQK2gebyJM82EBn0Ur
301
+ E3SkvoHWsh+votjSJ8DZoCCFn1dvTX/BdZsxgMUtTveA+x69zu+HZ6d+z90Y
302
+ 8GIkpmvyW2m5E8u2xf1gkarplUBexQKBadzdz3lC7tyyV9V1EQbqucthrbA5
303
+ Rn1xh8OoopzrfYrsVScY6pym+lBpnbNQVtP5povpufKFVSvSinqeKmMEml7m
304
+ 29WLM/4z1OZbCrVZUIFe++dXHirU5lCGf9jbxYYx2Gam0P0/ULDN8lI/MZWT
305
+ 2Jp7K2AbQ66uU8o2H1nTomjXKUyYfjsWeQTeEHkCOzbpzCKbgEFHXv3GCoH2
306
+ mLv6ozUHpIHVwy5dW/LhDQE4ywru5a431U59NlwFa6ZQ/pg14mQunWyLl9ZH
307
+ y8MCKNNOtArdH/Hul2GGFA8YCLNe9cFau5Wqtoj2PGdg8eKI27g5KHpSFKnS
308
+ jCiOigL9+kNeFOji7hddWXwTUZXIbPxL5cHiX0yNXl+j1wfU+iONQ7/WFxdi
309
+ 3RCYoXRpu6YhbrAf0MyJuaEPrf8PK/JJzAoHEgidLdRJ3EjZP9QPJpiMQl89
310
+ B5YPKI4ZPlcpGGOn273Xe0m4y2M2eYfQllsFBgMD/SeOUHJQ/kZ1knn/XRC+
311
+ mOyo3mAj6ARGjzDFS+h9EfPSg0bBrFk1q9qopqpmnR4XuTlWBeh8VUlNYDgS
312
+ mYiLgSSYQ65K8gV8gIcaocR50tveyU4RVRkRbr9gCiQjkIwoEoNkCUj0qU2B
313
+ XDvWZc1uN9vpynEnb4sfMI1WEVOluxTNgxVYdUFRv+igJWGkAn/Qow9oYYqZ
314
+ 8BZcWLASJgFiCSCqvhoDYhoQeboToM8MAT10/dU6pYtoNWhNME6Fq92htRXP
315
+ lXA5nAgf63DtjbCQVCCxSJwfeZg4EtnAx8APORNej6tgAo1NobEYGiNojKCx
316
+ ZxrcM0YeIjaVi7unri8eaEqVUSuTX/6Oj3U1iidiiDyGheGgc9BZy4F9m8Ra
317
+ gW8lCCr4q8tn0C2s8oauMtmuN8gwAeBYDA7DvD6DUAt+JXAoADW4uBoH3YrB
318
+ fYVQmHULCDbb6Yp6qO1IJBtyLtXppbwLPpbVEzblgMEaqli4sggznh4mBfXm
319
+ I2AqDxYBAwo7l31uWjguou+M+j2HD0W0zf2BDHj/B/lB7Dm7sMrClt1od66a
320
+ rZtDZHqMC5D3fEJOvTKi2sKquDK6Uw15wHyJ/8IqEDAPegvIWD5cYzUen+tK
321
+ cyAEfBFauJpRgkifeyJZ0BSaTONZQjxRLgKm6GOGKVyPMSJhas39lnBaJbDm
322
+ KzLglOmmyT01POWlTfCwawiPCfsLwWO4q2K04TLHP0tdNxxI+gboZ+UnM3z4
323
+ MJk16VivtdOrnSWLOxxetnV1Y5DvJjAArAIUjOT5QBYd3Yk1U0VxADop8U2W
324
+ lhV0MXGoosgvpDRhNVSxwU6wPKoJI+IjVQGYrpeJBVMFS4AtD5dB6ffPYJn7
325
+ zLFcq7ZKx9KmdNY71sSyDcsNQo4ZqpNqsAYt1UZKE8NUoqfH37zncXU2Rua2
326
+ PU15H1dT3senxy+YGSf4BWVnEAUmyM8kJzBtwRlFwSYAH9wD+QFH+vYex7eh
327
+ 1DcXDbMw4W6ltINuUUi3EWj6qN7hQU4okHpiaGFIO5ZW8DAXL7oafuszB7o0
328
+ 57O/VgcXTBiCwtJQVLIIYCzPn1ayw1hxBMWUg+ZjTZj7GtbbT5Pb0OcbD4FZ
329
+ sWhCFah9LIaU08D4KeIBENmgQzkLPgDl1RBXni3xuEjXI5kWTPiGJ1J1biLd
330
+ opMLJlMMiRGkaQmVGCCp/ApgkoT+8SbTQw737SfYbWi2bvTLP08Dv6XTwOVH
331
+ NtUHS7ynm6XEe8mZ0D/aWWA+cR2VzC3AZM2WKaZJ2ap4Kijt4MbMcsvBAo5W
332
+ kEo4XcUjwf/mDKwbkvjhqRtANiM/gF0r1SWwKB9+4vs9FFf9Cx/UT8ww/X1a
333
+ zi37MMEDjxHj127Tw/iuIpzOQpS63uSBd5W0Vkf39OTZ8vYsF22vs+0FUUBH
334
+ W5hycMiHYkrRRqF7OvNwjQPC/NZMVG4CA60rSTr6ahOEtfjVjGx519TdK54T
335
+ Sk/4ZLSG/ccAY59nPPDj9Qs1BVhOcN4YdfVLD88nuONKgyIFCIiEFa0W24Cr
336
+ D3YMmGDeR5bg/UqnsdpxXw/Eh4e5czysW6PwpunC5IXAEFBc9/DRiYS3rskP
337
+ aAMkjjq1UOdVKteurxQoXEOxui6slL+hxynqlI5knP1XRCw2Eh5IfxSJC8sW
338
+ WIciskf8l59lbDj9plB67OPCcwtrFiV6BWb3w3OvFBloL4weApKZEZ4nQH81
339
+ 94mHPinczBdOyczQFySMvreGWtHbouIG1TJI42qzf3Zy0m+X29VmvV1OZgaI
340
+ 6T2HcfdvLuybNmAAlWUacztx28Tz0oBhNVes5QkUxB4InVcMZOyPPPFSWO8I
341
+ 8G79acNOsNY/OTvpnx7vtSst+Jl0qBY7ucDwvPcjWGkt5oqRhM+dDFNDFy0X
342
+ ExbQ8RameRxE4Wc/qSezTva2uw1OrVKddqZZ3v5j0hlYTo5tdFUmdLEmXDD6
343
+ q0tTCfZJup+mj4V9QI/4A6WoBHXi0TtQrmc68DbpAKxZhyAF7C9saAUe7DZQ
344
+ BHgqCUvk0hqGl26kKyEMOTu+gPnkf4VDt5VXIVAKJTcurABDF2qpXMYGCkGy
345
+ 3U1Q9NGSdMFNMZDyI6xH1bzTteqDna4Bwrw/lDb3+3HXTldKMtdj3LOhbzgg
346
+ vkAzpE5eqvuF2S5VVkxujyIXhiHCkZTBRqIQK00Zk3GBsKT5Fov7XR8jvjFa
347
+ PyPupwdlj970Kudhj8EbU364XSK5eMlC9TNQK7CYWLigB5FPYj3AtHExAigs
348
+ BqT4U+35K+iQJW+ugPdA6eTuKkHLGQF0mFATNL9jrGaGAwFUm6C4ubBc6D5a
349
+ 3UOuT7yqFdjeuXgC61KaQtjhYZndC/R9WX78pTC//md1gH80I8VQ12nLN1LU
350
+ H8pIsUvN/mGvJtFMoX5hOtZ/NDMF6JbCWWABquOBNT1fvoMeRRYoECapEQtc
351
+ y+tYZStSEnNHvXgDTCzJtQBWbaWKXfmMg2VSp5v5Omh2b/DOclBOhOvIAmww
352
+ Rf/fAkoFtAxGHqElrGOJiQR2qN0jvLGGNSG/j+Fkil2r0D07fxzzwTKC5/hY
353
+ qBpEtXqFnFXeRSYs0C6m2Kcgl6K4sgaiaEb+hFMeUtBWLY6ek+iOMcTU2S6u
354
+ 56oWU0jrcmw6adcfzNDgUIHbPqAVij6h1K80OivaGpj6msV9TQJ6uOfD5t0K
355
+ ZYTucNJOJ+lVix973vpO6RLYNCaeZcfYOkqJY+H9dQNTyG9zPLAB3f3M+hBh
356
+ luxPmIpVYhoRfO9EbV9iwmlt7K24uIBhAzl8YpGfSak3OiRfEq2E/n0h/dj2
357
+ Ci09svWP52hFzMwUM6sTSySDS917UJuFvIiuMEdyrj6nXRouMO2zDEoXPIIB
358
+ lMbQ+mTA+wYlO0ZRbZCJ7wKWIN+QVLH9p8gK4A0B6peIDGCEkc8dVcSxVIb/
359
+ WkYFdMFGNh86rgFUHQpUtQmmOeOYrX57extPlSI7kBvsNaIAqiCm+bc+gW44
360
+ 8fXBJLUOjIbbENX62vaO9eRTs9ZIy6dDDPwTxX+1hrDWF+ECOH9cfO8P4BdJ
361
+ A6cIKv5Ql9iysLAjFdnqZUmwdn0t1S5T7TK4wHYZtctUu4zaVRW1qF2qqdVb
362
+ 2/iwHnkqnXaaPEe+jTao4rYtof+0G0SvQkQIRLlWgYoHIBQwxfe/QgtUCwKb
363
+ DPNFeH1dSmkUGKGgNqQoQAiFqRamUWCIgmIz8rxem1p5y3neIkfVASoqzfmx
364
+ L0M+ki5mOsQl7J11JYt7V6HPpT+0XO5b5FPtccz8pIoi/MBBZPjDLBM1MKGB
365
+ UiGfIQw2hfEZYDxjw88sBoLMoIF8BVvOEs3QEyXY2+HZthnZ6BcLMoeHuEEX
366
+ sGUfC9s2fKHrOOAmXT8VE3zofzIEbG2SpCw5Bp36gxl0QKOG/7jHP/UR15Vs
367
+ OdvQE5CVNrAvrnUiMNGnDIbnnbRh+8uOMbZ5AyRiiIIUrXR4+I7uGBFluyGL
368
+ fSCusN4JSFsebOAa8gn3HNqUF2wydC7d/kzIsWP+iaGDKXfJOVe4mKJIbUHC
369
+ z3imxPgAOIZnmkBLDtz6ELvcUyxR5CC/kj8qcGhSJifHavSP3clV7FOPxu9T
370
+ Hk8Sl4Y+rJgjWw5gg6nhME/8wmnJ1HRYTtyvZHTK213lrMflCtWXaVJhrrMx
371
+ LMFSfgyKE2mDNOVSVydQLtnBWF4WI7TQoxA9haeUsSnjjo2bBADDCAwjMGiX
372
+ 09Z8UjoQDPsbgkExmiR+usEShaaAkFsuVYf9pz3qfwh7FGzbXazqFe+7mw9l
373
+ l9rRDaFVKr7+x7NKLSey2mfoMG7SA6c5QxqzUdzNSqI20skxCvZbWY6yrQfc
374
+ nqjDV91MFTPTqXv3AT0r6VvNWirx3N3hL0q5Um3Oka+ORaxM6wJ4hh3BcA75
375
+ ne1TWVxAY8XkmR/UDj9pF4tnZfb+X9OIlcU4J/CqqisyV5H/jO1ekSgsYQ/o
376
+ BhyraIO6jxFkWAjPKR6AUiQC/ENxwtu+vMQ95ensGtVuPpghC/Ob6071B7wf
377
+ YNOru80Qpuy1ilLHAj9MdYnpLgH6Yggqn4PrqBlv2UhK4D6V1lVcUfWESWLn
378
+ QCK5FkaIWkFcgUEvxeSMHMeWfK3W714WMlUV8j8UhzDNIYgicAhWOvyrM9Oh
379
+ DUYsAh09VfP/AS1Gt5gAjU6n3SkbUwFs7F1tb28X32IFGhAZovgalGpeBEV9
380
+ wouYv4RjJgkshkiFAdFqIvzYiXnOFNBcu7L8njIrJe0zap9R+yxuH7+k9snL
381
+ RrV/TzalG8VFo54WFzucoqvPeMijpAzaBVpTi6lpiofeaP8+FraMfCxIlhUV
382
+ 6GFJgBgBSmqZESDQ9b8YaUhofJxCuidj0XIuadba7bbud1XbQ8huiLGTlD9A
383
+ lRqL1Rrki1zVvY2LUnzMTiGTBIbOkGkiBejGRufpb/zIkyyZzDjrj9fu7LJd
384
+ nVeizBtBQtzpLs0gKgjcZsJzwPIK53vShwa6d36Y64BIBIJgA1uaOsQ44ou2
385
+ II9ly7kdq1cqNS0YaN92qM5vTtFtBBf1YlK8phhEPCjCXpDrsNopI8xIhXlb
386
+ T/PBbD1BjGifMFvNb4dKiGC1bmcAy82XJLacQKDtIek+E5pbKbMFmj+GunCX
387
+ NqBgUWDMDWOhjh0vVMdjy7Y8T7B3gCZLjj7iY6av1Pwq9pFvhoemfHM7J59D
388
+ OrrZSJFyWoUJkdDEJuUBE/clG7VvJ/p9YvqCUv75CTkqmYV2AtvfP5/v/CXV
389
+ 7XNuMZ7WWfC0gdiEpBRVpfqe7bkTSyAZiG6LrCVKJAeexMq9tX8aSv7RDCUT
390
+ WC/RoGnZC3x3Gg9lIznH0ydR3KO20VCCN0DWqRv/eNaSAZbVXuCe0sC4Inp+
391
+ g3tKZNMJ1AwYQF7ATioJSmlgPBG+ih7aN4cUZUN4KHmVZcopcjDf9uAuZh+/
392
+ waqxkJumUHV9CrVu1MvNRqdGana9VlHZjLjHiyAfJAgsL6NQthqgUP4g/d/o
393
+ yXJEYKc8FAtojaFB/G/DG72J7LHwF4CgnIP4fA0ry0LahKDdB05iU2mgM5C6
394
+ 9TjGlBuYqpTY7o72K23YRWJqtUq7U6NdESrHxfhV3AtgkqigiM66FiZZGQp0
395
+ HUXPhczeoPFwuQbj3vQRk74N92UfKLG62eQYVlzuY0oXW7J9WLn/SsvmO6xv
396
+ RKaJNzY3/5p3+KSimm/9+aMn/ZuKiFTtV9yNoicHHjpFmL5OD6DqEMCzqSeg
397
+ cJr84suDWjkeVJy0SUriqaIdotP8OJYsDFUkLDClTzpB60YtSXk5r217mKDf
398
+ jm/5zpwfPPLrkJe+dyX6+MBbRgQKV8hhXY08Q523DeX3CboqOHOMh4XDyLNp
399
+ bHffBnRyiAejmLXKIR9HYrNx5Eh/7V00fINV5gMRfUCvsSzGdjTiGNGJwRIT
400
+ AWoFRw2NG1QDq5QgurZTCJ4WjzjxIPq1wwDYyH4baCOJuPeFTdCGMOAWJpeA
401
+ xj9D47e0EtDCMIhM2GvMcFTIR8DmQ45Ml+UTWjAShiCfFV/bMID7KE7AllgG
402
+ C2YOfv0Vtv2OHN7s5tJSbi7KF+iNJSfcdXmRDKrCtq3ihFtFXgTpGY2w+IbK
403
+ lWXLD+TjonLoLN3gNx5sg4/d6480xn3Yz9hRn4+QjPNifUGQDh28oy9OD82N
404
+ gm0L64N8RvnRQgtAR4wq83KGHSYxF12RlDsdS88DbtIe0ewtzA/LSSWSg7Wa
405
+ HYqxO7/Hf9xWV9nafwU+mfLG7TbxMQIsQYABAuz/YTEC2iBHFMxa377KPv5a
406
+ jvgHGcGiNCNi8ESjj08pNh922JVaq5PQBxSiPfK3xKgtTMVnYrF1tC9inVvc
407
+ vv+i1Ac0FGEhdhL3WJfIX+7pYFtoW77Gcg+PsHnHxge2HKGlVUaBsAvz+3n9
408
+ JCPPVthW525v43ww91fLdbpD3YZ+BEkV1y79TFLLkAqQ0dbwMfNgFXF5nF4v
409
+ Zo3fVxIyzJbQjTmdp1+vLrhfW3C/nr2/OF2fQtLEgnRuSAYVG6XmyOfXmdxI
410
+ iiVQTk1ASAXoBcYHNibYgTszOXgwK8Jlodtzk6C4OPnOPEBXqHO2+c+P/d+u
411
+ LIdnvtZb6QzpcphlDF2gblCHAmlbw2zXlq6c3BK+hJlnjjeROtk5O/WVLlEa
412
+ SNjko9nWAAi2CIXBBxFsbYyhoJwaqA3gKfkFLDocLzx0qcPgxrgCI94MBEot
413
+ F+560QDjN0uZxfSBltAfASfhH0x72z8VzmsfOQELJfbbnauONpvnJKLqxCvp
414
+ j58RDHvN3RF3LZDGkqVgbrAPuHMNUYXzfHmBAZ7+Uje9DCdEIciWHJ30Wxii
415
+ ru55qrdK7uq5xlPCaXbR/SbwX5J0CpFS8i2z8CI27AtDBKwJDqlGiVHjuOZC
416
+ 479i42RWVm3+wrNbwdi+cr+zdiD9kQAt0MQy8MuJCuuphSd+HyIXpBMQ7pOB
417
+ mcsDyuylqxuhWVmE1gST4WEctZGpoqrK1geeRRkmkfgg4u1HmbXvVA+3qbt9
418
+ HKEh/KAY6VVnrAbBFAxM5Y6qiZqkVE0Iun3nKfpNjEc329VVp+e3gfva03NX
419
+ 4RKn4We6eRY3zzAEBwQWJa8jzRGa/RWbJTUbm32UmYo8y7nDQfez+HLyehcG
420
+ GaCEoayvFMVEOZwm3BDuxOK+gYW3Q8vmoN/BuyNMRE80NaXJoU+PMit7Nqbq
421
+ OVAVINSs5D3dw1WnpYLBNBByw0dxq4oKyABkbEhHdyB0RxZsaQ6pJCTG5PFf
422
+ l3u+rzRfH3tUutn+rjw3Hx3Ptefh8WummmWqWbLH6WaZapbFzQZs2i6FOTBs
423
+ +Ff3UdZMB8Qbd26UcRyTixqBZ6BVf6ByKV9YckaMIZWdx5lttJ2cIn/jzNob
424
+ RmjCZDt+9GkDpo/3Gx6f34MW+gDk66aRXV2ffAhM1mb8HsLfyJhckNzYFtNt
425
+ sUxbuO4cHPQeg9c/yJEcCpXKSgbL6NQsoaodBNwkdRpN8JEHwmMgL23AIcDK
426
+ inQY+vCM/poPLPmvIB0v+28R/8tDjf+qa8rrz5iriyBsMKX5W5il6+763f3T
427
+ s5tCdlXGfwAs1ub6U4QDGuYlOhdYDNPiwPRtbjSYY9ljTI42EZ8EpRw7u7RC
428
+ 1L2GuC+iSGosB6gPCB56BgRUimo5jeCOjxnAB0CMj4ExCQzTxqtH4fbAsieW
429
+ 7BOaVWNFDj+lj9iB8rfGMojhvZsb7ka5bhrFVRn7jk2uzcTngtI3ecLWSRtd
430
+ EerUeFg/p9b4QyplXipP3kMzLTxxMe4xgqlEmSSWUKRW8tB6JVXeA4ykxINU
431
+ YXDSxqxPmKEScx94GCr6KBydoL2qvD5iH6KhxHQa1TbDEmMb5AhKZ4ueb7mm
432
+ 5XELRYmDp4xhFOdrg10BHuSotLYxv6eiH1Zm9Qekd/edgo31ARXwVSfDQyK1
433
+ vnZP4JWLqAYPwiYNHucHhSM/2m5ahrNeoil6wF6HaCGVZUFZAx00KOI+B7PQ
434
+ 22PYDhm2jB7J8nyA4T22NM4A6xunBNIfd7nw8gsmhoAj2jI2lJTS1yobhDW8
435
+ B7PVfZOzqzuL+K+1x71XJNZfDz7HTtDUgDLnYgO0R+WscI4tAOO/wxYKj8Hp
436
+ lxg15tvi2pXku714dayUahVQ91A0wmtoiTPlhS8ME5jrcRT3BNcVzk/iV9lh
437
+ 3K87yO97I1J3Hq9V2ff+cFh/B8o0LEZVdCcSlkWqvMTIUkbQGUFnKLdNOxpg
438
+ 6aYkzeijiGxKFw+z6SI5ayMCpWZ7Qp5qp2SOATWY4NYVpskxMPGEHz0KExOe
439
+ fUC0f7H2qaCKZsFALsDawgxRuLc7skFQ4+gIpp04LFgpbSwyw4KfJeOONYJh
440
+ GX9m6ByHQqdSJjWI4RGT+1mlQceCJojb3Q049zEQ3QOEwk6BVaeHpysbbu4F
441
+ g/WnCeVQ8VWNTOFe4CkiaPnoieEG/Bfty+lgiGESC4NtP8o2FXjJtmGbjr46
442
+ SyRHtVlyKMssiAuLk2k3wCQt1lA4j7NdVYj2RRBGQ0u5FK86O9gHOcIYZq5M
443
+ BtzxxM9M2r86Hp6dov4ofoos3GaV23ffvt4LRbtKEePsVIFbeSd7P62vzeMH
444
+ CAxZGmslqPqvTEH73aNoK5eXm/H6N/BlOBZ+EHf50jPcQel7b6tSrpQfRZJb
445
+ 6KAbwT6USL+qbeUd5iKSGM46oh2o5Ts/w58DhCYjikM8iCHfmUtXJ1h3X+Gx
446
+ tl6yegvrn71SWmyKq4OJ61EUc6D2h7psOG5h3r/WJpQcDsyL57iPILm7+NLd
447
+ ECqWH6CYk+AlyU7SfZDAMcoNgw55OknMfKDY/QRsKe+I2VjynP5Waq3ZhCwd
448
+ dOfU3y+PM8qnKoGv1oEFeJDXZLvSas+1WdUkYfDhDcFNc27Aed0iB+BsEzVU
449
+ gIY3xJStzCjt+T7UC91DGf5qWjMltpbHVuVHLIeTvEarnU5trlksvSFhG81v
450
+ KuKELsJ7h7vs4GiXwRgwg53u7ZztHx2yd/unZ2y7dzKNGYwdcS9mXOYX+N/W
451
+ 5vxvsTFsqFxtQEOv93pn70/2dtnxD0dnR6dw5+yH9wfbeLH7p8Pewf6Oajqy
452
+ 44awEvSF4Kj7DTUO3RQtrdAxQqz5WCmk6iTa7kd19xZR4ZlQsVa1FefbqUzT
453
+ jeyAbhAVYwd4rlPvYEbNXZ+PpAjw8kRwO+VMrgtkqtNdlTWEwCR+9FzHOqPC
454
+ gmDwGAYuEYyKE4nXq9go+Rq94+RMrffMOlxdtA7LLfOCJNHlVqXToKtxcpVa
455
+ pPMhxCU4a+Uy/Q/6lSWolT7CrVYr1Va7YpRbrToe49IiXuomPJo3mNVVBjNf
456
+ toXCtWbi/Vq1MsVTtVVGv1MrFEVyHivKoGhTbj/cvBVDoDpu13D09PkapQkh
457
+ kHODiGCY8kFDcVVmBEltA0P/M0HCAURIv/kqF3X4V3ea8vGNCMNrto8kvePA
458
+ 1Zt0JaPw/gewSQNYrVeMTrnWXHUAa6sM4M0V6mbHsdqhydgol3EgX1s8LHI3
459
+ ckHSFmXRRmdRMp3goB1jGs6iSik+N3b4JdNfgrpoo8unMrqgcxJ+GScjRzrk
460
+ KYprD1e7o0er2XqgWQbUqRv1erm96iDVVxmkUJiuBNVxfpgcLwrQphte5wnO
461
+ WrNJY1Wp4QJpHJwXt2FTVdwDvUwFzb/hg+tiDzZQGO8eYIZm3OlgTmJTFl0O
462
+ QhYbmBu6g3OGgDaYhoSGGYDEEkhMQ2IECRO/a0h6FHU2r9jDsqRtlmsPqB7H
463
+ cTyyDzCgzQqIzbYe0LfHb24a0MbDDmg9PaCKqJQVhfzBggD9YygpeSAouRRW
464
+ /xpisiVRPCk6lj03lFMQLAVCZU4TlFZKg0Cz2sm/sFoZ/RPuexwfYWI2Yf1p
465
+ NxuNVcex+ZDjWKmX58exeIyvF0Pp4BBighsQobDAcpyLsthzx8IZWEXMXFYk
466
+ cAsGkxEchnAoQodWPYSjLHQazkuGgFSYXDycOxhzQQbYU5jGz571XFeXYBX4
467
+ HhkW70cAP+R8rRmwq6mtOs6tB52v2XF+G32IMJORBeuchdIWKVnEuM0iaNai
468
+ GGDBRHsqeBVHzA0zgmExGKbBqPBPBMMUmKnUVQyRlP5Euwv7ARSrkH/LE7bW
469
+ KRuVWqe56kC2VxnI/C0l+v/A3dltRwe3HVU1dGcR5iCnCFUH/1GZYUQRVBbY
470
+ QdBiqjySQd3xQ5nUsJkbPAKkIk0rVeZQCrjA+wKwGML6BWBhrIzy5iZYSQmR
471
+ eARPRATo30Zfffj1stpp14x6o1peddg69zxszWalPR02JNjI5xeYSsTmmHev
472
+ qIryFX+KsHqHLU11a6jsbSqRGEVI+fMaqwx/U8CYBsZ0hT80FGtgbApMV8NR
473
+ wGIRy3HoGEZalzAf+RvQs0Fzgj+R903Ow2oHpmC1WquuqtGSIfSWI0qOGiaX
474
+ c3sOVHva1Sal4jgacFghsbQpjRVm95Q6vWgwdrhty0tUZdFVEm9jpWQ3KOJG
475
+ B/NlivllkwAyDRAPs8ZqfqYBMgUQbyuALAUwjqY//jaXxGq7bpQrWvWZHUFl
476
+ nEqbo9azEj1EYrbqna3PaN6j9Bir5sfLz5E9Y99rEm+Tnfg/1PupMON7tRnP
477
+ pdPyA/Q9jBNCgJbuYq6Zk9PTBLVKoZu+f0MCMGFHNp9JSxV3vh84QR/dIEC/
478
+ 8WgFS1o+Qbd8zE7C2enBtO0qpQ1PPVkzWRj9GFq+CCWFG7jZVpN+bVNMmpO0
479
+ W0v1WT9bw9obKr/q2dxculFSjVLu10mjsGVPnqVOfDQ0eKguVIqk5VbgGaZY
480
+ yZg7kw3pEvbZhYyNt9Xfhkn6H+/O9g96p+zw6Oy/7uz35ubtbNN8MMumeCsz
481
+ 3WbC6Ke5B1LnZ8n7cUoBtB2DGiNwMmIrlB4ifbKHoljPokw+Korwn9rw59/w
482
+ px+qM5vpkewa6FTXQef816GQayCTGfPYlJ9DkemAUkIFpGiIeRLw70AOr/Gv
483
+ j/+Mu+XmuNx5VYKrV+FwReHmRLBHz8nQ0q5gDrZqpz6Vcwnzm2PX8qhajhiR
484
+ duOGPlcxn+9P/4VVNypsYGm3vqTYL86MW32o5gl0CKileprqbmPN7uZ1VBmf
485
+ 23Md3ZYjGT7lHGsTvcTDflApx0Kt/ngeoPCEWyNOFcYCnSsFtDvLjtBYYlF6
486
+ FVTWkcqF7u0hbm5uLqVD7VbDLiJegplqYSHtRTl322Vl1K2kS0Ik2f9Ry4kc
487
+ XdCaIhQxeb1rCtyZHFiui2nU+AbbAQ3YpyBUuBsEmG0cM16t//lNhCgvJET+
488
+ eUReh2mTUK7U5vqLqcaj4CkPLXsoXqpcOT+KAF0aTR4FPCnsDd2wXFXY+qlp
489
+ iqFlv5x+hXmGbHR9HXOVvTwKfl4NFqYhSn29mBCNcX3dmbFQEJQpGWOrWZkf
490
+ /14UhH7Mz7bFXzCbD/1pT4nDQx/YmT3FTdEEuN6T9lNLfYHWfdKrh0LZ+n3m
491
+ ieFTqZ5eWDZMmXtvYikDNdaXKMrVM4dwrTbWjWyUa+U5uh1LDJvDkyjTmsC/
492
+ KZYacFiWhton8fiAajhSsftcPnqjKp6dHhe69wwzj0yleMEpxSuQNz0G9vPy
493
+ ft5Koe46KiJlekQPLXorLJbV2cWSjbUGtGjFrHTG5dbCASekw0kW+cMY6/0g
494
+ lHvGruVSBEmpjuNdL5drtVZp371A/zSJ5duUew4GiMQp1Q0qaW+oZI8ZZZa+
495
+ yxmUdJxUkpidoOiUkdl03dDpbMKzSTwdUEV5QdonNfXLz6sAXzhdKu3bU2/P
496
+ VIkYS6cwwdFZdGCpWKNSo9IuG7VOp96qJsVXaCE1dJ1Ax4Ah92G9NARG4xuB
497
+ SuqeUDHzUVxc0GH6I4rjeyoUPfDb9Wm3QgNfEPJiwrXG9cWK2nLC7WC6WWjO
498
+ A5ZrN5vEcvV26RjTaGHFidMoSw31YMpM8Hz9HisgP9PXS3vVvM9etdK9QtYU
499
+ N/SM3rlT7wjC4/WwOe3hofRv7mL80h36GINY2snFi+AtOtmYdlJLw6V9VK/c
500
+ oYdTh8g7rl65fdXL00Rv92YXJ/Vn1mq22r47Tgjpl7K7bbXQgYAUbHppoHbs
501
+ 56V4HTfjDz9a5keR4xm7wLqhjBi1cmKnYN3YfNXMoU4+kJTvcQzwwRJxIzU0
502
+ GiBvHc8WygVZOwCN0Hlk3lajHZRb9ZQ/8YBovlYPKfOp7iFZJXUq0AXtYsCJ
503
+ hUurRwfmoLNKqprxN6UMpfQdDSfJtLoGToPQNUa4DnGbDcgyKkhFShCtxXmG
504
+ kYlvSKi91Fgb25RO907O93f2TtkPRyf7//PR4VnvXdY7EceoWqkPABd/Ypli
505
+ 6qM4/2Sh3XZqagJ6hNwHNtkq9Ac2dz/muGSrMk0KqgxmZq+y0b6JlBw5xZd+
506
+ kTnG2gvpO9QBvACWIkRmKkHFTWRHI/usNIgCk6sUu5iVtQB7+nAsATB0giaG
507
+ 60UhC689kIWgrwJrFEANd+CXarPAJtyOBI4H6BvAv4iUflRa+n1oebJPzScw
508
+ cI/tC1MqKKkXlkPCDbspEihqGioY+hF+f2EJexiIcM4Sid20+UBQsQy0DtJ4
509
+ F7q7ko7HJtJ8CgqVb77EEzITVorvX5Xo/QQpakl/FvfuKuxj2HqCFf5Q/gwh
510
+ fguAlM+YjBh9GivWcRxBns10BlM8toN7R0C1XJTU8xRCqjZYgpL6ucHevy4k
511
+ +U23CvFVBg+dvXThROa+OS7owQmigWOFU0MVjiCIefX3VUmBQtCpESkhH+c7
512
+ GS+cw4sWJFx0YI1Veyu8f+XYbvBiEkxjdMyxAKm2OeQhV2Y+M9yU/qhULZfr
513
+ ePh0jkv6KZ6RbZ6qcd18Z8Fe2r/ePEDXvkIiPBq1mkEKgIEunyIjPmaeJXl/
514
+ C8slGXYp1b1ajsjJr2MDSz6hnCtTenaEVk1dRXtGR8lagMe1bjaGJZ3Td2qi
515
+ Tszo0xy/qSS8C3L5LkjluyCTbxLbkB7e+NAtZXO+57S9a2XtjS1Ct03eu6gq
516
+ yaIB/VEMFH8GpdeW7YhSrdYot9V1RnXVMaUgC8e4epGOo7WLZjMV/lQvrKD6
517
+ xIe3zWapU0/hZjggtWAqBbVNlaSOX1KQUQl0yTd7p6VyGf+r1OC/SqPa6e80
518
+ Ou1W7/Vuq9Npvq7s7aRUondc5cpi58LHyZs93eDXqCvGrDF/jmG5F6CEZ2Fk
519
+ 2fqm+Ld7GIhWpfx3MBDVSrXWbzSqr3cau412+/VuvdLppQaiB0oZ4+xMDjEy
520
+ QE747cZiDsyjD0ej3Pk7GI5Ko9bsV1/Xtnc7O9V6pbxd2d2tp7cKWDVhgNVA
521
+ Dqf70B0eiN+Rf5xg+/u3G6AVAN96yDStf6S0JRvsiL2R9gUGWBduPZrtano0
522
+ u0/+p+T/1hihW/cEtvcWluM9hh7xIV1W2XNcTG0Ryu9u2y2Yho2792pdvitX
523
+ S9V6q1nuv95ultvN3e1qtby7u1OlSiK3JlEP2MlGCyNH/2rOnlfLlfKtKQPS
524
+ tFZ5fNIoCVmtNGBK9l7X2736TrW9t7fXaN2JNqeWy3as8PoF68UVTTBaRGCF
525
+ o9tSqFL+KrxTLtXq1Wa/Uq/vNduVzk67V2uX2707ss4hegHvWLQDtPkLtgcM
526
+ hJU+zsUn+rvD3bmzh9uzVrPa/kqsVem0q/1Gu9nYaZXrrxutaqWzdzfW+mMk
527
+ HPZHzHR9qiqWHVg2qOrxsSTott/fgVCN8teag+VWpb9dbjVr7RaojtVWtVnd
528
+ uxOh3kRk9eLK/CX921Kl1fxqcqlSKfd7tepOs9ZpN8o7r/ea9Z070eSdDNgP
529
+ wnco64zBDkF0R+4wxy+AqqBjfslbU61SbX4FadUp4WFdrd/Z3evt9jrV3Vqv
530
+ 1dtrLZ5yWde7FUi4K/iQHXD31pOsWa1+BcJUShU8Benv1Mq7rV5ruwqqQL2y
531
+ W15AmIxH2E1nE4uNEegkSVGvEZazuwJdYURpYbD7wQYL4rNP3xKYBQlLRs2f
532
+ Y6xfkQkdEz3PWhiBjs/yXH1vtDKfHh0enfTmjcqNWtUIpWegd6g0AulKDFfJ
533
+ GIfmX7iXJBYLkrOoFqYDoSw8XXU7L4eE7mR62xBgYU8eytm9RfatCx/t+li9
534
+ sdB1nkZqPLEqY8BGmMEwyLXqYBn4TOfoHaraPaZi5SxxtAGCJSCmsf5DX3po
535
+ hGbxhTG4NvBvoZv15f19oRt7EixMdjAFa4XCDQoZyQDDlpfISRE4w++/L9Hw
536
+ lg6QGsH3ZB91rCvyl6cn+8OtVqdGv63hCd7BOAuYEtdblQrdNvXvs7lvD9Gu
537
+ 63P3o+WO+qr1vvL3oXdGwvUFvaPc81UFczHcuuB2IKaO0QoAO1UcqL0t/hd2
538
+ FE0s3L6nqa43y0mhwXJyXIWXtFkl0eQs3zkHrhZhQbWiL7REqjVgkWuUK9Ua
539
+ 7X/zNq1Z51VOWOX2IW/fi9mnkSF6Q2GLDUrZzuNYUBQ/pyJibzEiNNn3zsPw
540
+ bCwVlkeexU6998IoIK5brTuwCr8S/QEfW7yPzpTr8EjvKhbLbBsBUGD7Y/FI
541
+ vZHlkRboQq1yrV6vr8UjuX1YxiP7E6z0dIp1vjCv/zbHusB7E45sA7NuJO0Y
542
+ 4LfJLNV8sVJdhVUGctB3OOa0XIdNtuUA9CDKoflYvDErPzoljLxslatr8cYU
543
+ 8WUMkeoekYFhGNyP3LKFD6Jj+jR9fV+sQYvTgsMgtiy7YC77kM4VHwxFQZTa
544
+ KgagmU0sjIynl3IOhlKLdhQICgbKzxA0qxqtfHD/f+++f3fEytUqQ0B/fL93
545
+ tjcHBVUoT9qzZ2kpTemmipndPRc0gHAq6vOioHKrhE41SkJgpvt0ND9zIC9U
546
+ U5sLggf1U3MECmrsP+BJL/KOsYHkSB5r6KjGL3zduD7cTX53M+fci4/MrWFf
547
+ t5qcBsPyUkH7N56met2e91uAqWmwnAmW3KOCJgOV54RqO5xYFBnxlruUg0HE
548
+ ZVC2cTX1hyAxJ9L8K3pAB5SynarjSdx8T6zACtGb2v8yRIbjbohpUL9XGr60
549
+ NcK9WG9L90JNWN0J6Zlc+wpAg0SAVETK+KOBd30BEy3lHVDBHqZP0aefdk8t
550
+ ZwNvcodh7nld3doKpI0OyvEReyo8bB3UqjeiVl2EWrXQPfxZYm585YGgEsz4
551
+ rvUJSyuhS4Gv8jihGzVs/i5+xfIgM/iWpJ2SD79X7LPgQH8iw9grp1oFwpzL
552
+ kPtaCKxwar/KBF412DLlU5Y51F9jwlNgpXZRy/jqLI/tU19oMtRbSQTljgpB
553
+ nHfK0cjfNWJxzket3nowHzWNnDGBoZfpI0BTBAGZqCmZinoLN+3knRi+YLPU
554
+ yndcSwflXSn3v1qXLEkwS2B44my70PzP8nd6gfHikMyhxX2Lq4oPgtK6PIkx
555
+ 4eqIHx0qMTMW+nQ+wVriCm1M56tefPHk1aDrzETf23RSP+gqgQNtJg2/oshH
556
+ +se79wG9wf2t3qrOu78lhhbb/Qg67E2jEnv5zY5OqhL4TKjCOt505XqNPEUP
557
+ evun7Hz/VEVX7+4f9g7+NB+ciROXR0NMdSAMLwJFEbkMQC+avctX6wPya8XE
558
+ apkS1ApH9LVIbdAx5mLJTF+YLHEwGMxHmTU67WZNZS8q1xsYx49Z/N5KLouY
559
+ kQRelSr1jRe5FtaChylWBMWY+5gGBys26fCa1Lzuzk/mB02a0O6Umq3FAfeV
560
+ UhUD7svlRrlhNDuNaaa2vHy5zZYWEs8wD2Gl+uwF7Jl/lpSfBRcelcAHqYER
561
+ HOhQStRAtkVqYBD/wC91M24/38TIhHNOPrGLso7mjRmP0Nczit2OCmw6JRW0
562
+ VKumjFwKyH41sEbdaqe52Wy1QWDBD608ZT1Cs/ksVJ7LJez/NVIfZhY16VLh
563
+ Jvh1wZ5f4mbjcnNCxXxC8YbbsJ+6fme5H79jOTefC0xescHCMYKGbn33kgmQ
564
+ LSBDQQNyGe1IXz76BFsjGWK1bdSajcpqU+zWeSKXzbKvwgCPMOg3z2NMd5I3
565
+ iVPRHDR91JuwnqIuwG49CKtP8tpmrVnfbGKk9IrTXB2xLJnmufEh8dCXdLHk
566
+ Ur3SqWAgTKVVLYkrA3YvGMpMNQNNn+IBcT/qYulaQxiwlpO7LLyAGZ44Bg6a
567
+ PJhXXO9//gVDL9uVs3HkbMurEh43lEw3VJ3ojzvl/mWlWu7foTc3Tsu9KWzc
568
+ BCvYLIENG7UpbMqFRUUOEHZBs8GMc9aiqfrVBnHxHKJUEjdMIh0SRa/qWXR7
569
+ kq08iSrl9maj01h5CgWCThnXnEKxjlICVMn2V6pXq3Ukf7XTKKHqb+gnSH+J
570
+ tc5FyE3aZo2lA8RG8/H4W5kzgPR0zqyB/Y1z5ByzNFJNIg0Qh/3pT5EMXx6x
571
+ vSlY9gOB7RFY9fw+JsmDDNPiWXH6BXgJt2J0kL/+9MilVmExoQqrz4rqZg0T
572
+ TyydFGhfzgu+yN3yzaZ393Hk0/HtM4ZTer7+8frMPvGCux65Xtx2+7pzdPD+
573
+ cH+3t7t3ykql3P1qudIeYEk5B9T28Hq5QQk1JawUssT6rl/JD8h4rR7OWNhz
574
+ bNCLHKFzoX/ggyi0ZtyaG5Xp/MTrtWVMo6JljL5IyZhcLChxXtBPjtlLB41S
575
+ pdlsN+vVTr9arlZTpqYY4/gUadqDtBPKNDGSjvpYixZ6qugbaOXBDdnbbcx7
576
+ zzBomkw+iY2EZ+eTcnJZcXBNkgNkoBklhzqhlS2RlY7DBVac5c758Kb5MMjY
577
+ 0eRCSoob1biOBR+CSFN3DVvCryHhrg8K1NslssJ0U24OdhAaoNC6WJwuoiIJ
578
+ mWBGdHm4wVyqLYuF7g73eHq5vQFQ/plIThWMm0EJnbYha5nsxtkc1oGUu0XK
579
+ KWlyM6h8m0ahu0v3f5ZrgIJ1gwss+GDPQTtX2cz36OEaIBdEkav44LPzNSDl
580
+ HTXCuqj9i/LzbtpxertVGE1eCB+LhGrY38MMsIZ9FZtW6B6ppzNLWpbBuTVc
581
+ mb/NMQ9nO7MD9+7SlXxWn5i+IK5C5XqHnQjvN5/S8C3pSYCsvnpn5iaryo2N
582
+ 1Vo92q6CViDWGGs8E/S5PZScch6CRJ4jlXoDYffid9ZoYA5h2OILAPsa/rAd
583
+ 4KnAXJnLg5jNN50I1Dl/iF5sIR4rkFckD7Eu8pnPBxgQRDHx+PJdkOUTPDMU
584
+ I536pdvD3+wd3rgLWM+3JlwF7ZYopdKvIZbPA0XxePrkTg1EA9tKGuhRTqo7
585
+ AQyn6THRfyKb5/IW8CiZaDedJHQFCZebk2Ca7DJ/OpMOjdvDWF1b0MjvY1mJ
586
+ WauiEAtMevzXQKTX+1kVe1bBM6V3rXXk/xWYW/8gB6UNnanhUISX0v8YxP55
587
+ p5u9TQ0s7Yy6c7J/fDbVbgNQRrz4fBoTQYJKNOHqblYLnD0m5KFTqpVwH1Tq
588
+ fwhKqBJLd/MDaWXq+/sF7+LnDwY/LgF1TKbxU5UfqTeE9limQa2OxWS8mYbd
589
+ JxPYl9EQ9dG9qK+zALAtVjiOBpNm4eWTC5hFtGkA3tnlIe+5WEIQ7jxX3+0A
590
+ bUEWBd/92xM0jWZvst9tsUjl1xPD79i/PbkAvfU5NhpCG+WX8OcVy36yiZbK
591
+ TVu4o3AMz4tF/Cz0r+Ff/O6n8DoBvoXnr4HYd8PnOTD+HP4F6Yk3dnA2fMeK
592
+ N76PLg3X6u2X1JywHWjmX57DRCku+MYawrvY9TRq3S1WKSPm//IcQHy3CQQY
593
+ Pi/gdCp8Rxbl9Nvwfea1zVBiBojvNvlwuIPz7HkBFH0RGoNRAd4tlbJv604i
594
+ YNiYP18IDZ3R8em/K+PzHMpsHuEU7Pjr2dZj6HHbGnoCKLkPT0wemmP23IJ2
595
+ /h1vEImvNti1Ija+ak4H1xWXrAckv35eUEn/yo22qkdWKSMdiJeuFB9dAR+l
596
+ P08Y6EoxEL17rd69voHnrtUnSJ80yD9f/YVtbeV9+edr4gL4JoNC4MFqJJ5f
597
+ bVRU93V/P2jMPyhsPizC/INCQ/FeBpEPf8mQ9UkyJTXRznwf9AE3IMXdCjaT
598
+ 573j/eduZNsbiSIUN3oZpHRoJG7yzSbM+6PBB2HS7H8H3X3+b08K3MPOqZwK
599
+ L2JhsfGkIOnNoPDizzlj9hd4AetHesc8HNM7hb88+feNOckCza8qRruEdB/2
600
+ 6WHQdwQseWYAZJkRir3d872Ts/3T/cM3GdMJbkJjKw95xefYZkAwG/gOH1LB
601
+ LtAFR4XMqgUA0/DTm99EIJ+dvN/BrO4ryeRS6QxziLEdWK+xsgjHJEYCGGEo
602
+ zQiH6zuQU3x4/TwWzc9jdsWMKXhj0wMC4455EwMSr44unj9T29tn36FENir4
603
+ Aey+D7gLoH6KQMOB6WyLAIYW1EvMY4OqU/CC/fnJs6VrVIwdrVMhom2YiDas
604
+ Tc+ewOAqDs0dUDK/AXFDTMm+dDkMB/LKwCG2zJIzKGFL8A008b3N3dGWFz5V
605
+ 6s711sB/KtzJlufL4dzK+MeIb7ByG/XN12KCf5SGUm68qNT1sMVJzFBCd5/8
606
+ /7JW741akwEA
607
+ http_version: '1.1'
608
+ recorded_at: Wed, 08 Feb 2012 08:28:59 GMT
609
+ recorded_with: VCR 2.0.0.rc1
@@ -10,7 +10,7 @@ module Wombat
10
10
  def parse
11
11
  raise ArgumentError.new('Must provide a block to locate property values') unless block_given?
12
12
 
13
- all_properties.each do |p|
13
+ all_properties.each do |p|
14
14
  p.result ||= []
15
15
  result = yield p
16
16
  if result
@@ -20,6 +20,10 @@ module Wombat
20
20
  end
21
21
  end
22
22
 
23
+ def reset
24
+ all_properties.each { |p| p.reset }
25
+ end
26
+
23
27
  def flatten(depth = nil)
24
28
  # determine the iterator length by the biggest property array that we have
25
29
  length = all_properties.map(&:result).sort { |a| a.length }.last.size
@@ -4,7 +4,7 @@ module Wombat
4
4
  return [selector.to_s] if selector.is_a? Symbol
5
5
  return context.xpath selector[6..-1], namespaces if selector.start_with? "xpath="
6
6
  return context.css selector[4..-1] if selector.start_with? "css="
7
- selector
7
+ [selector]
8
8
  end
9
9
  end
10
10
  end
data/lib/wombat/parser.rb CHANGED
@@ -1,4 +1,4 @@
1
- #coding: utf-8
1
+ #coding: utf-8
2
2
  require 'wombat/property_locator'
3
3
  require 'mechanize'
4
4
  require 'restclient'
@@ -6,7 +6,7 @@ require 'restclient'
6
6
  module Wombat
7
7
  module Parser
8
8
  include PropertyLocator
9
- attr_accessor :mechanize, :context
9
+ attr_accessor :mechanize, :context, :response_code
10
10
 
11
11
  def initialize
12
12
  @mechanize = Mechanize.new
@@ -17,6 +17,7 @@ module Wombat
17
17
  original_context = self.context
18
18
 
19
19
  metadata.iterators.each do |it|
20
+ it.reset # Clean up iterator results before starting
20
21
  select_nodes(it.selector).each do |node|
21
22
  self.context = node
22
23
  it.parse { |p| locate p }
@@ -30,14 +31,28 @@ module Wombat
30
31
  metadata.flatten
31
32
  end
32
33
 
33
- private
34
+ private
34
35
  def parser_for(metadata)
35
36
  url = "#{metadata[:base_url]}#{metadata[:list_page]}"
36
-
37
- if metadata[:format] == :html
38
- @mechanize.get(url).parser
39
- else
40
- Nokogiri::XML RestClient.get(url)
37
+ page = nil
38
+ parser = nil
39
+ begin
40
+ if metadata[:format] == :html
41
+ page = @mechanize.get(url)
42
+ parser = page.parser
43
+ else
44
+ page = RestClient.get(url)
45
+ parser = Nokogiri::XML page
46
+ end
47
+ self.response_code = page.code.to_i if page.respond_to? :code
48
+ parser
49
+ rescue
50
+ if $!.respond_to? :http_code
51
+ self.response_code = $!.http_code.to_i
52
+ elsif $!.respond_to? :response_code
53
+ self.response_code = $!.response_code.to_i
54
+ end
55
+ raise $!
41
56
  end
42
57
  end
43
58
  end
@@ -13,5 +13,9 @@ module Wombat
13
13
  def flatten(depth = nil)
14
14
  depth ? result[depth] : result
15
15
  end
16
+
17
+ def reset
18
+ self.result = nil
19
+ end
16
20
  end
17
21
  end
data/spec/crawler_spec.rb CHANGED
@@ -143,7 +143,7 @@ describe Wombat::Crawler do
143
143
 
144
144
  another_instance.crawl
145
145
  end
146
-
146
+
147
147
  it 'should remove created method missing' do
148
148
  @crawler.base_url "danielnc.com"
149
149
  @crawler.list_page "/itens"
@@ -175,5 +175,61 @@ describe Wombat::Crawler do
175
175
 
176
176
  @crawler_instance.instance_variables.index(:@metadata_dup).should be_nil
177
177
  end
178
+
179
+ context "response code" do
180
+ it "should have correct mechanize response code" do
181
+ VCR.use_cassette('basic_crawler_page') do
182
+
183
+ @crawler.base_url "http://www.terra.com.br"
184
+ @crawler.list_page '/portal'
185
+
186
+ @crawler.search "css=.btn-search"
187
+
188
+ @crawler_instance.crawl
189
+ @crawler_instance.response_code.should be(200)
190
+ end
191
+
192
+ end
193
+ it "should have correct rest client code" do
194
+ VCR.use_cassette('basic_crawler_page') do
195
+
196
+ @crawler.base_url "http://www.terra.com.br"
197
+ @crawler.list_page '/portal'
198
+
199
+ @crawler.search "css=.btn-search"
200
+ @crawler.format :xml
201
+
202
+ @crawler_instance.crawl
203
+ @crawler_instance.response_code.should be(200)
204
+ end
205
+ end
206
+
207
+ it "should have mechanize error response code" do
208
+ VCR.use_cassette('error_page') do
209
+
210
+ @crawler.base_url "http://www.terra.com.br"
211
+ @crawler.list_page '/portal'
212
+
213
+ @crawler.search "css=.btn-search"
214
+
215
+ lambda { @crawler_instance.crawl }.should raise_error("404 => Net::HTTPNotFound for http://www.terra.com.br/portal/ -- unhandled response")
216
+ @crawler_instance.response_code.should be(404)
217
+ end
218
+ end
219
+
220
+ it "should have rest client error response code" do
221
+ VCR.use_cassette('error_page') do
222
+
223
+ @crawler.base_url "http://www.terra.com.br"
224
+ @crawler.list_page '/portal'
225
+
226
+ @crawler.search "css=.btn-search"
227
+ @crawler.format :xml
228
+ lambda { @crawler_instance.crawl }.should raise_error(RestClient::ResourceNotFound)
229
+ @crawler_instance.response_code.should be(404)
230
+ end
231
+ end
232
+
233
+ end
178
234
  end
179
235
  end
@@ -34,6 +34,34 @@ describe 'basic crawler setup' do
34
34
  end
35
35
  end
36
36
 
37
+ it 'should clear iterators between multiple runs' do
38
+ crawler = Class.new
39
+ crawler.send(:include, Wombat::Crawler)
40
+
41
+ crawler.base_url "http://www.terra.com.br"
42
+ crawler.list_page '/portal'
43
+
44
+ crawler.for_each "css=.ctn-links" do
45
+ menu "css=a"
46
+ end
47
+
48
+ crawler_instance = crawler.new
49
+ result_hash = [{"menu"=>"Agenda"}, {"menu"=>"Brasileiro"}, {"menu"=>"Brasil"}, {"menu"=>"Bolsas"}, {"menu"=>"Cinema"}, {"menu"=>"Galerias de Fotos"}, {"menu"=>"Beleza"}, {"menu"=>"Esportes"}, {"menu"=>"Assine o RSS"}]
50
+ results = nil
51
+
52
+ VCR.use_cassette('basic_crawler_page') do
53
+ results = crawler_instance.crawl
54
+ end
55
+
56
+ results["iterator0"].should == result_hash
57
+
58
+ VCR.use_cassette('basic_crawler_page') do
59
+ results = crawler_instance.crawl
60
+ end
61
+
62
+ results["iterator0"].should == result_hash
63
+ end
64
+
37
65
  it 'should crawl page through block to class instance crawl method' do
38
66
  VCR.use_cassette('basic_crawler_page') do
39
67
  crawler = Class.new
@@ -121,7 +149,7 @@ describe 'basic crawler setup' do
121
149
  end
122
150
  end
123
151
 
124
- it 'should crawl xml with namespaces' do
152
+ it 'should crawl xml with namespaces' do
125
153
  VCR.use_cassette('xml_with_namespace') do
126
154
  crawler = Class.new
127
155
  crawler.send(:include, Wombat::Crawler)
@@ -26,6 +26,15 @@ describe Wombat::Iterator do
26
26
  end
27
27
  end
28
28
 
29
+ context 'reset' do
30
+ it 'should clean up properties results' do
31
+ it.prop_1 'some_selector'
32
+ it['prop_1'].result = [1, 2]
33
+ it.reset
34
+ it['prop_1'].result.should be_nil
35
+ end
36
+ end
37
+
29
38
  it 'should flatten properties to plain hash format' do
30
39
  it.prop_1 "some_selector"
31
40
  it.prop_2 "another_selector"
data/spec/wombat_spec.rb CHANGED
@@ -4,4 +4,19 @@ describe Wombat do
4
4
  it 'should provide syntactic sugar method Wombat.crawl' do
5
5
  Wombat.should respond_to(:crawl)
6
6
  end
7
+
8
+ it 'should accept regular properties (non-selectors)' do
9
+ VCR.use_cassette('broken_selector') do
10
+ lambda {
11
+ Wombat.crawl do
12
+ base_url "http://www.github.com"
13
+ list_page "/"
14
+
15
+ source :obaoba
16
+ description 'Oba Oba'
17
+ website 'http://obaoba.com.br'
18
+ end
19
+ }.should_not raise_error
20
+ end
21
+ end
7
22
  end
data/wombat.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "wombat"
8
- s.version = "0.4.0"
8
+ s.version = "0.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Felipe Lima"]
12
- s.date = "2012-05-25"
12
+ s.date = "2012-06-25"
13
13
  s.description = "Generic Web crawler with a DSL that parses structured data from web pages"
14
14
  s.email = "felipe.lima@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -28,6 +28,8 @@ Gem::Specification.new do |s|
28
28
  "Rakefile",
29
29
  "VERSION",
30
30
  "fixtures/vcr_cassettes/basic_crawler_page.yml",
31
+ "fixtures/vcr_cassettes/broken_selector.yml",
32
+ "fixtures/vcr_cassettes/error_page.yml",
31
33
  "fixtures/vcr_cassettes/for_each_page.yml",
32
34
  "fixtures/vcr_cassettes/xml_with_namespace.yml",
33
35
  "lib/wombat.rb",
@@ -57,7 +59,7 @@ Gem::Specification.new do |s|
57
59
  s.licenses = ["MIT"]
58
60
  s.require_paths = ["lib"]
59
61
  s.required_ruby_version = Gem::Requirement.new(">= 1.9")
60
- s.rubygems_version = "1.8.18"
62
+ s.rubygems_version = "1.8.24"
61
63
  s.summary = "Ruby DSL to crawl web pages"
62
64
 
63
65
  if s.respond_to? :specification_version then
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wombat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-25 00:00:00.000000000 Z
12
+ date: 2012-06-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mechanize
@@ -190,6 +190,8 @@ files:
190
190
  - Rakefile
191
191
  - VERSION
192
192
  - fixtures/vcr_cassettes/basic_crawler_page.yml
193
+ - fixtures/vcr_cassettes/broken_selector.yml
194
+ - fixtures/vcr_cassettes/error_page.yml
193
195
  - fixtures/vcr_cassettes/for_each_page.yml
194
196
  - fixtures/vcr_cassettes/xml_with_namespace.yml
195
197
  - lib/wombat.rb
@@ -235,7 +237,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
235
237
  version: '0'
236
238
  requirements: []
237
239
  rubyforge_project:
238
- rubygems_version: 1.8.18
240
+ rubygems_version: 1.8.24
239
241
  signing_key:
240
242
  specification_version: 3
241
243
  summary: Ruby DSL to crawl web pages