Rails Display Current Facebook Share Count - ruby-on-rails

so I'm trying to display the current facebook share count in a Rails application. I keep getting the "can't convert string to text" error when trying to grab the current URL in my Rails app.
The code works if I put in something like facebook_shares("http://www.google.com")
The code does not work if I use facebook_shares("#{request.protocol}#{request.host_with_port}#{request.fullpath}")
Not sure how to fix this problem
Here is my current code...
helper.rb:
def facebook_shares(url)
data = Net::HTTP.get(URI.parse("http://graph.facebook.com/?ids=#{URI.escape(url)}"))
data = JSON.parse(data)
data[url]['shares']
end
view.html.erb:
<% current_url = "#{request.protocol}#{request.host_with_port}#{request.fullpath}" %>
<%= facebook_shares(current_url) %>
When I run this I get a "can't convert string into integer" error. It works if I do the code below:
<% current_url = "http://www.google.com" %>
<%= facebook_shares(current_url) %>
Super lost...

data[url]['shares'] part is suspicious. Eithere data[url] gives you Array and when you are trying ['shares'] on that Array you are getting the error,which is obvious. Or data itself is Array of something... Thus data[url] throws the error. So inspect first how data is looks like. This error is coming as Array#[] don't allow string inside []. See the below demo code:
arr = [1,2]
arr['foo']
# ~> -:2:in `[]': no implicit conversion of String into Integer (TypeError)
# ~> from -:2:in `<main>'

I figured it out. This was a horrible oversight by myself :p.
I'm in development running on a local server, so I'm pulling localhost:3000/something.
Pushing this and running the function in production works fine. Sorry everyone, but thanks for the help!

Related

Add a specific line from a document.txt to a comment field with specific id and then move to next line?

How can I add a specific line from my document.txt to YouTube comment field with specific id and then move to next line on my document.txt. The id of YouTube comment field is 'contenteditable-root'. I have created this code but the text that is been added on the YouTube comment field show in brackets for example ["Hello"]
Or in second example it shows nothing
Example 1:
file = 'comments.txt'
File.readlines(file).each do |i|
files = [i]
files.each { |val|
browser.execute_script("document.getElementById('contenteditable-root').innerHTML = '#{files}';")
}
end
Example 2:
line_number = 1
loop do
comments = IO.readlines('comments.txt')[line_number-1]
browser.execute_script("document.getElementById('contenteditable-root').innerHTML = '#{comments}';")
line_number += 1
end
comment.txt file:
Hellooo !!
hi
Goodbye
Goodnight
Assuming a whole bunch of other things here are correct, you're doing a very weird iteration, you should just use:
file = 'comments.txt'
File.readlines(file).each do |i|
browser.execute_script("document.getElementById('contenteditable-root').innerHTML = '#{i}';")
end
Seems to me like you need to learn how to debug.
Step 1: Check in irb (about irb) if your code is printing the correct text:
File.readlines('comments.txt').each do |line|
p line
end
Expected output:
=> "Line 1"
=> "Line 2"
=> "Line 3"
If not, then look up how to read a file per line.
Step 2: Does your piece of Javascript actually work?
Go to the page you're trying to test, Open the debugger (F12) and run your Javascript directly from the console:
document.getElementById('contenteditable-root').innerHTML = 'hi';
If it doesn't work, then try learning more abut Javascript on how it works interacting with elements.
Step 3: Does my piece of code actually work from Watir?
Open up irb again and try it out
require 'watir'
b = Watir::Browser.new
b.goto 'https://youryoutubepage.com/path'
b.execute_script("document.getElementById('contenteditable-root').innerHTML = 'hi';")
If it fails, google the error, look for Watir and execute_script.
Then finally run the whole combination of your code in irb:
require 'watir'
b = Watir::Browser.new
b.goto 'https://youryoutubepage.com/path'
File.readlines('comments.txt').each do |line|
b.execute_script("document.getElementById('contenteditable-root').innerHTML = 'hi';")
sleep 5 # Give yourself some time to visually confirm the changes.
end
A quick Google about your SyntaxError: Invalid or unexpected token (Selenium::WebDriver::Error::UnknownError) I see it might be a problem with the quotations that execute_script doesn't like.
Maybe try reversing the quotes:
b.execute_script('document.getElementById("contenteditable-root").innerHTML = "hi";')
In the future, please try to pinpoint your problem and don't use StackOverflow as a place to debug your code. Get your code to work step by step and focus your question on a specific function that's not working as expected.

Ruby on Rails / HAML image_path not working in else condition?

I'm currently working on a project on RoR with haml, and i have an issue i have never saw before.
I have an "user profile" with an optional image. I want to show the image if it exists, if not, i show a placeholder (stored in assets => "admin/avatar.png". So, here is my sample code below:
-unless #user.image.nil?
=image_tag #user.image.url,class:"img-responsive img-circle",style:"width:150px;height:150px;margin:auto;"
-else
%img.img-responsive.img-circle{:src => image_path("admin/avatar.png"),style:"width:150px;height:150px;margin:auto;"}
%img.img-responsive.img-circle{:src => image_path("admin/avatar.png"),style:"width:150px;height:150px;margin:auto;"}
The first
%img.img-responsive.img-circle{:src => image_path("admin/avatar.png"),style:"width:150px;height:150px;margin:auto;"}
is not working (and shows "missing") and the seconde is actually working. I'm a bit lost with this.
Anyone ?
thanks.
unless else is a kind of code smell
A solution I'd propose:
- if #user.image.present?
= image_tag(#user.image.url, class:"img-responsive img-circle",style:"width:150px;height:150px;margin:auto;")
- else
= image_tag('admin/avatar', class:"img-responsive img-circle", style:"width:150px;height:150px;margin:auto;")

Scraping data using Nokogiri

I am trying to scrape data using Nokogiri. The code I am trying to access is:
<div class="main-header">
<span>Make More Money</span>
</div>
I want to get the text "Make More Money", only. Here is my code:
url = 'xyz.com'
doc = Nokogiri::HTML(open(url))
doc.at_css('main-header span').text
Using this I am getting a NilClass error. What do I need to do to fix this?
The . for the class main-header is missing. It should be
doc.at_css('.main-header span').text

Image Data URI Active record Rails

I am running an API Request in the Rails Console to return the data of a movie poster.
I start by specifying what the movie is so,
#movies = Movie.find('Iron Man')
It then returns the one of the posters' urls
http://d3gtl9l2a4fn1j.cloudfront.net/t/p/w92/s2IG9qXfhJYxIttKyroYFBsHwzQ.jpg
I then run a code to return the above poster's data, this is what it gives
> #movie.posters.first.data
=> "\xFF\xD8\xFF\xE0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00\xFF\xDB\x00C\x00\x03\x02\x02\x03\x02\x02\x03\x03\x03\x03\x04\x03\x03\x04\x05\b\x05\x05\x04\x04\x05\n\a\a\x06\b\f\n\f\f\v\n\v\v\r\x0E\x12\x10\r\x0E\x11\x0E\v\v\x10\x16\x10\x11\x13\x14\x15\x15\x15\f\x0F\x17\x18\x16\x14\x18\x12\x14\x15\x14\xFF\xDB\x00C\x01\x03\x04\x04\x05\x04\x05\t\x05\x05\t\x14\r\v\r\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\xFF\xC0\x00\x11\b\x00\x8A\x00\\\x03\x01\x11\x00\x02\x11\x01\x03\x11\x01\xFF\xC4\x00\x1D\x00\x00\x01\x04\x03\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\a\x04\x05\x06\b\x00\x03\t\x02\x01\xFF\xC4\x00<\x10\x00\x01\x03\x02\x05\x01\a\x02\x05\x01\x05\t\x00\x00\x00\x00\x01\x02\x03\x04\x05\x11\x00\x06\a\x12!1\b\x13\x14\"AQa2q\x15R\x81\x91\xA1\t\x16#b\xC1\xD1\x17$34Br\x82\xA2\xB1\xFF\xC4\x00\x1C\x01\x00\x01\x05\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x02\x03\x04\x06\x01\a\b\xFF\xC4\x007\x11\x00\x01\x03\x03\x03\x01\x05\a\x03\x04\x01\x05\x00\x00\x00\x00\x01\x00\x02\x03\x04\x11!\x05\x121A\x13\"Qaq\x06\x14\x81\x91\xA1\xB1\xD12B\xC1#R\xF0\xF1\x15$b\x92\xA2\xE1\xFF\xDA\x00\f\x03\x01\x00\x02\x11\x03\x11\x00?\x00\xE6\xEEV\x88\x95\xBA\x01\x1C\xDE\xF8\xD5\xC4\xD0\x02\x0FR\xE3d\x7F\xD1\xFC\x9C\xAC\xC5^\x8FLi!oMi\xF8\x8D\x8FR\xA5\xB2\xB0\x91\xFA\x92\x06\x02{E'c\xA5\xCF'\xF6\x8B\xFC\x88)\xDA1\x0E\xD4\"\a\xA9\xB7\xCC\x10\xAB\x86t\xA49G\xAC\xCAa\xD4\x94).\x90\x12G\xCE\x01R\xC8%\x8C8-5S\v\x1CA\xF1M\xD4f\x82\xEA\r\xF1{\x10m\x89f6aM\xA7\x03z\xB0:A\xA2U\x9DJ\xACJ\x8DN\x88\xB7\x9CDr\xFAR\x94\xF2#8\xC6\xD7\xEA,\xA5`.=V\x92\b7\x12J7\xF6\xFB\xD2Yz\x7F\x96t\x84xE7Og)1O.\xDB\x81!$-\xC4\x9Fbw_\xF7\xC5m\x182)% \xF7\xA4!\xE7\xD0\x8B\x03\xE9\x84r\x93eD\x124\xF2\xD2G\xC3\xFD\xAA+^\xA5?N\x10\x9DxY\x13\x19/\xB5\xF2\x8D\xEAE\xFF\x00t+\e\xF8_u\x84\xAF\x8Fc\xC1\xBF?\x9B\x7F\t\xB5\n\xDB\xD3\x95\x1E\x98\xBA\r\x90\xCB]\x12\xB4\xDF#3\xD6\xA78\xA6\xE8pR\x9D\xC2\xE3\xC4\xBC\e\xDF\xF6\x1D\x7F\x8CP\x96\xBE8N\xD2O\xC1_\x8BO\x9AV\xEE\x02\xC3\xCD*\xD4\x8D\x16\xD4M\x13r*\xF3\x8E[\x97\x0E$\x85\x94D\x9A,\xE3+]\xBA!\xC1qr?\xE968\xBFK\xA8\tM\x98n~\xA1R\xA8\xA2|\"\xEF\x16\x1FD\xD4\xEC5\xA62\x14\xEB]\xD3\xD6\xB2\x87\xBF\xC8\xC6\xA5\x80\xED\xBB\xB9Y\xFD\xC3u\x9B\xC2H\x12\xD5\xBF\xBC\xF2\xAB\xDA\xD7\xC5\x96\x90\x02q\xBFE\xBF+4Z}\x17\xB0=o\xD7\x14\xD8,\x13j]ud\xF4R\xBE\xEE_\xAFR\xAAp\x83F|)(\x92\xC2]\xE5\x05\xC4\x90R\x15\xF0H\x00\xFC`m|\"\xA2'D\xFE\x1C\b>\x85AJ\xF1\x14\xADx\xE8n\x96\xF6\x86\xEC\x81*\xBE\xD5s=#\xCF\xD96+hm\xD9\xD2\xE8\x13^v\rF3\xBC\xA9q\xFC:\xC2\xBC\xC0\xDD \x05\e\xF1\xE8o\x80\xB4\xDA$\x94\x11\x061\xDB\x988v,G\xAD\xD1\xE9\xB5\xB8\xAA\xDFg\xB7k\xFA\xB7$\xDF\xD2\xC3\xE6\xA9\xEES},\xD7\"\x97\x1Cj;Ei\xDC\xF3\xC8+Kb\xE2\xEA)\x1C\x9B{\fWtL\x96\xD1\xC8\xEB\x03\xC9\xF0D\xA3\x95\xF1\xDD\xECm\xCFA\xE2\xBA-\xA6\xDA\xE7\xA1\xFAi\x067\x85\xCC\x99\xABR+\xAE\xA05\xF8m*\x9E\x9A\x1C\x178\xB9C\x8A\x04\xB8\xA4\xDF\xA8+ \xFA\x83\x8A\xEF\xD2tZK\xC9;\xC1\xB6o\xDEy\xF8\f5Fj\xF5z\xC2\e\fv'\xC4\x86\x8F\x89\xEF\x13\xF0\b\xEB\xDA_Hb\x8E\xC8\x15\asUD=Y\x9B%\x12\xA9Q\x16\xB2[\xA5\xAD\xD5on\fM\xDEb\x94\x8B\xEER\x89$%G\xCA\x94\x803:\x85tu\xF3\xD3\xD6\xE9\xF1vq\xE0\x11\x81v\xD8\x8B\xBA\xD8\x1E6\x1DQ\xAD\n\x19\xE8\xA54\xF2?{\xCD\xC5\xF2rO\x9Em\xE1~\x8B\x8Du\xCA\xAB\xD3\xFC$wW\xBD\x10\x90\xA6\x1A?\xE0.)\x7F\xFDY\xFD\xF1\xAF\x8CX]\r\xAC\x93|\x9BOK\xFD\xD2\x18\x8E\xA9\xA7\xD0R\x017\x1D~\xF8\xB1|\x15#r\xAE\xF7f\xBDj\xC8\xDAn\xFD=Y\x8F0\xB1\x04\xABi.\xA1\xB7\x16\xA6\xBD,\xB2\x84\x9D\xBF\xAE3\xB2S\xC9#\xCB\x9A\x16\xA7\xDE\xA2c\x03\x1C\xEC\xAB{\xDA\x1F<\xE9~\xA8v~\xAB\xC1{:QW\x1A\xAF\x05\xC7\xA9NH\x92\x84w\xAF\xB5u6\xB6\xC9\xEA\xA0\xE2#\xE3\xDC\x8Fq\x86S\xF6\x8C\xA8k\x9A\r\xC1Q\xD4\x18\xDD\x03\x83\x88\xB1\x18\\\xC5\xAFBS\x8D\xA5\xC0\x8B)I\v)\xFB\x8B\xDB\x1E\xB5\x10\xDE\x17\x97\xB5\xDB]e\x19\xF0\xEB\x04\xF1o\xFCq1\x8E\xCA\xDE\xE0W\x9C\xB5()\xA4\x8By\x87\x1Dz\xE0{\r\xC2\xEDCH(\xB5\x91\xEA*ah\xF3\x10\x0F\x04\xDF\r\x90\x02\x10\xFC\x87aO;cj+\x1A\x86\xBA\x15]\xE6\xBB\xA9_\x84GbC\x97\xE5\xC7\x10\vd\x9F\x90\x7F\x82\x9Cy,43\xD1\xD7L\xD7\x9B\xB5\xCE\xBB}9\x1F\x8F\x82\xF4\xC8\xAAb\xA8\xA2\x8C\xB7\x90,}\x7F\xCC\xAAo\x04\xEC\x94\x80z%v8\xD3\xBC]\xA8tG\xBC\x8E\xBA-\x06\x04<\xD9\x1Al\xE7\x10\xC4\x16\\C\x8E8\xBE\x89\x17\e\xBF\xF5\n\xC63Vt\x92#bg\xEA7\v[B\xD61\xFB\xDD\xC2\xB2\xFA\xD7\xAFs\xFBB\xD6s\x1Du\xF7\xD5I\xCBYV\x99\xDCR\xA0\xADvJ$I\xF2 \x11\xD0\xBAZK\x8BQ\xF4\x05)\x1C\x03z\xF4\xB1I\r$m\x96\xD7\xC0\xB0\xE3\x1C\x9F\xC2\xD1\xFB3J\xC7\xEA\x0F\x97\xA3\x1A\xE7\x12\x7F\xB8\x83\xB4\x7F\x9E+\x9EU\x88nC\x98B\xC6\xDD\xFEp>.\x7F\xD3\e\xC8\x9D\xB9\xA1y\xA5|&\x1A\x87\x03\xD7)3D\a\x12U\xF4\x82/\x89\xFA!\xE1t\e\xB2\xCE\x82\xE9\x85z\x83+2L(v\x02\xE1\x97jt\x8A\xA3M\xBA\xD6\xD6\xC1p\xAD.\x11\xBD\xB1\xC5\xC9I\x1E\xDE\xD8\x05$\xF2\xB4\xEC<\xAD\eib\x00<\f\x1F\x150\xD3j6\x8Cv\x8A\xD2\a\xF2\xFCF\xE9H\xCC9\\I\xF0hN\xFF\x00\x13\n\b\x90_l\xB4\xBE7#r\xC2J\xF9<\xED8k]4\x0F\xBB\xB86Ms`\x9D\x9B[\xD0 l\xED'\x99>\x8E\xF4\xF4$\x06\x9BN\xE2zz^\xC0~\xFF\x00\xB6=F\x9Ef\x80\x1A\xBC\x8ER\xE0\xE2B\b\xD5\a\x83\x9A\xE3JI\n\a\x9E1q\xE4_\b\xA4Cs\x01\xBA\x88P\x1D6\x01&\xD7\xEA/\x81\x11\e\x84Fq\x94N\xCB\xB3\x14\x84\xB7\xB5W\xF9\xBFLLE\xD0g\f\xA2:r\xA4=S\xA41\x97\xA5>\xDC\x17\xDF%\xB8\xB3]6CO(\x10\x82\xB3\xF9\n\x8AB\xBE\r\xFD1\x99\xD5\xEF\f&\xA46\xFB3a\xCD\xBA\xDB\xD3\x95\xA2\xD1^\x1F#\xA9\x89\xB6\xF1\x83\xE62\a\xC4\\z\xD9UWa;O\x9A\xF4yI\xEEd2\xB56\xE27\x03e$\x90z{\x10F(\\8\x02\xDE\n.\xC2\x01\xB9VK\xB2\x8D3\"f\xBA\xF4\xD4j\x0Ekc(\xE5\x98\x88\x12\x1E\x99)\xA76I(IY\x8E\x95\x84\x90\x16\xA4\xA4\x90\x93\xCA\x80! \x9E1\x91\xD5i\xAA\xDF\xB5\xB4\xB6\x0E7\xC9\xCD\xBC\xEC2~\xC3\xA9\b\xF5=\\Q\xC6\xE7<\x13ka\x10\xB3\xD6_\x01\xA8\xF9.\x9BG\xA9R\xDD\xCD5\x95\xE6\xA9N\xD4\x18\f\xF8J|\x87vD.\x80\xA2\x13\xB5\x92\x8F%\xEE\t\xB7\x04\xE2:h\x9C\xFD\xAD\xDC\x1C#\x01\x97\a\x92\x06O\xC4\xAD\xF6\x95\xA8\xD2i\xF4\x0Eu\xEF,\xA4\x928\xB6z\x9F!a\x85K3]I\x15|\xC5>[7\xF0\xCE<\xAE\xE1%!;Z\x06\xC8\x16\x1D<\xB6\xC6\xD6&\x0607\xC1y-d\xEF\xAA\x9D\xD3\xBF\x97\x14\xD2o\xCE%T\x91\xCBEu\x830\xE5\xEAt\xDAE\f\xA9\x12&\xB4\x98\xF2\x1D\x10\xCC\xB3\xDD_\x94\xA5\xB0\b%]\r\xC7LP\x96&n\xDE\xF4^*\x87\xC9\x1Fd\xCC\x1F\x1EQ\xCBC\xA6H\xC94\x8A\xEBYu\x99\xB4\xE4I\x1E\n\xAE\xD5B\x94\xA8\x82M\xF7m(**\xF3\xB6U\xE8R,z\x1E\x82v\xB1\xB3\xCB\e_\xEA,\xAA\xCA\xF1M\f\x8E\x8C\x90#\xCD\xFC\xF0\x8CZ\x9D\"&H\xD1\x9A]1-7\xF8\xA5Dx\xE7]?[,\x91\xB5\xA4|n\xE5G\xE3n4\xB0\x13$\xC5\xDD\x06\x16\x12F\x81\x10m\xB2s\xF8\xFC\xAA\x15\x99\x9FS\x95w\x94\x14y\xF6\xC1\xB7X\x9C\xAB\x906\xCC\n\x15Gwk\x83\xD0t8\x13\tE&\x18DZ\x04\xE4\x84\x04\x8B\x03\xB7\xAD\xF1m\x04\x90\x10T\xEE\x89\x9B\xD7Au\x89Q\xD4\x85=\x1D\xC4\xBA\x80\xE1\xE3rHP\xB8\xFD9\xF8\xC42D%\x05\xA7\x82\x9A\xC2XA\x1C\x846\xD7\xEC\xC7I\xCD\x1A\xAFY\xAEe\xEAji4\xCA\x82\x19SpR\x00K\x044\x84\xA9\t\x03\xA2n\x9E>-\x8C5%5E,]\x85S\xB79\xA4\xE7\xC4\\\x90~D-\xFC\xEE\x84\xF6r\xC0p\xF6\x83o\x03\xC1\x1F0\x9C4\x8B_\xEB\x1AQH\xACR\xE1D\x84\xEC*\xA4\x98\xD2\xA4&K\tz\xEAgv\xC1\xB5wA\x17Y6RM\x88\x04\x11l\x0F\xD44\xB6\xD6\xBD\x92\x17\x10Z\b\x166\xE7\x94B\x8A\xAA(\xC3\x9B(\xE6\xDD.\x91j\x16\xB0g|\xD3\xF8\x95VeFjb\xD7\x1D*u\xE4\xAD[]\t&\xCD\x95\xFA\xD8\x92m\xEEon\x05\xADP\xD1AG\x18\x86!k}\xFCS+\xE7\x99\xED\xDF\xFB]\xC7\xA2\x14\xDE\xF6\xC1\x81\x85\x9F\xE5[\xDE\xCD}\x94\xA8\xBA\xBF\x92\x1E\x9DQ\x8A\xE8^\xE2\x92\xFBN)+A\xB7\x04z~\xE0\xE0\rUl\xB1I\xDC\xE1i)\xA8\xA1|#<d\xA0^\xA3eZ\xEFg\x8DT\xAAQ`\xD5d\xC6\x91\x14\x82\xC4\xD8\xEB-)\xD6V7$\x9B\x1E\xB66? \xE0\xBD3\xD9U\x18y\x1C\xF4Ag\x8D\xD4\xB2\x96\x02\xAD\x86\x86\xE9\xC5z\x8D\x912\xADg6W\xA4\x05\xE6I\x0EJ4g\xAE{\x8A{\b*/\xAC\x92|\xCA+\x01\"\xC3\xEA\xF5=4qS1\xA0\x9D\xBD\xE0>\xA7\xA7\xE5e\xABj\x89\x01\x81\xD8'\xEC\x9D5\x92\xA9'5\xB9*xRP\xDB\xC2\xE9a\\\x04\xA0yR\x91\x7FD\x80\a\x1E\xD8\xB5\ff!b\x10\xE7\xB8;\xAA\xAA\xB5\xBA\x02\xCDI\xDB$\xDB\x8E\xA7\x16\xF7\x8E\xAAfH#\xB2\x17At\xA5d\x03k\x8B_\x03\"6Z\x17\x8B\xA9D\x1A\xA2X\xB2\x94\x02S`-\xEB\x8B\xA1\xC8[\xE2'\x85\xEAff\tmM\xA4\x90:\xF0p\x8B\xC3Re1&\xE9\x1D\r\x0FW\xEBq\x18\xF0_\x88%\xD5\xA5\r\xC7Q$8\xB2xO\x04\x1El#\x17\xB9\xBF\x18\xCEW\xD4\xF6\x8D;N\x02\xD5i\x14\xC0\xD5G\e\xD9\xBBq\xB5\xBC~Y\xCA\xD3^\xCB5\x1AMN\xA2\xDC\x98I\x80\xFA\x1Dq\v\x8E\xE1\t[E+)Zv\xDE\xE0\x82-n\xBC`[^6\x8B\x94Zzg\x19e0\xB4\x01\x7F\x97\x90=S<\xE7e5\t\x10\x16\xF2\x93\x1D\xB7\v\xC8\x8E\xA5\e]#y\x88\xBD\xB7X\x01\xEF\xC6,4\x87\v\x84\nh\xA4\x89\xDBd\xC1\xE6\xDE\xA9\x13IJ\x90.\xAD\xA4(s\xF1\x89:(:\xAE\x9CvG\xCF\xD9W+\xE4\xA57'9Qc\xC7,\x03\xFD\xE3\xC9m[\x82E\xD1\xB4\xF2U\x7F#\t\xE7\x19i\xE2\x90\xBC\x80\xD2\xB61L\xCD\x8Du\xC6\x10\xBF\xB6\x1E\x9D\xCA^\xAE\xE4\xAC\xE1L\x10\xAAO\xD6Jb\xA2\x14\xE8\xE4\xC6RZ\tXZ\x95\xEBp\xE8\xE1\"\xE9\t\xF76\xC6\x87\xD9\xE0\xF2\x1C\xC6\xFE\xDC\x9B\xF9\xFF\x00\xA5\x9D\xD7\xB64\t\x1EM\x9D\x8Cy\x7F\xB4\xE9\x98\xF5>]r\x9D'2\xCB\xA7\xF7*Zc\xD3\xA2S#,\xBA\x86b\xB4N\xE2\x95\x00<\xAA^\xE5\xDE\xC2\xF7M\xF1\xE8\x90\xD3\x86\x90\xCB\xF9\x93\xE6W\x98O.\xF7\xF7z`]0\xD63I\xCC\xB9.}Uq\xCB\x1D\xF4\x87P\x86;\xBD\xA9i\xB4\xD8!)\xF8\xDBc\x7FRI\xF5\xC7$\x8F\xB3xkN,\xA4\x04\x91\x9EUd\xAB\xD6^f\xA0\xF2[yhE\xF8\x01d\f5\xD8<#1F\v\x01\xB2\x1F\xB6\xBD\xB6\xB7Q\x8C\xE3J>BS\xE2\xD4\e\xDB\xB8\xDB\xE7\x13\xF6\x98\xB5\xD4{\x05\xEE\xB67\x01\xD7\xA2\xAAB\xEE\x11p\x94\x0F\xCCOL\a\xA8\xA9\xBB\xBB6\xFCQ\xAAz\a:\x03P\xEE/a\xE6S\xFC9\xA9\xA3S\xA3\"1\x02bJ\xDC.\x8E\vEV\x1D\x7F6\xD4\xF5\xF4\xDC#\xC52\xE0[\xB4\x05~\ngD\xF1+\x8D\xAD\xC7C\xEAJH\xB2\xDBR[r[\xC8SE!\xC5-*\xDCH#v\xDF\xFB\xBD>\xE7\x15\xCB\\\r\x87*\xF4R\xC0v\xBECf\x0F\xA8\x1D\a\xAD\xAD\xF1Q\xC9\xB2\x95.B\xDE_\xD4\xE1*?\x1C\xF4\xC5\xB6\xB44X,\xC4\xF3:\xA2WJ\xFEI\xBA\xF0\xCB\x81\xB5\xA4\xA9!i\x04\x12\x93\xD0\xDB\xD3\x0F\xB5\xC2\xAE9\xBA\xBD=\x89\xB5*\x8D\x97r4\xF3'.\xB0\x89,V\xCC\xA6gI\x8CJ\x18m\xE0\x86\xB6\xC7u \xA9\v\x05)\xB9W\x90\x8E\x0FP#\x8A\xA8\x1E\xF7\r\xA7\x90\x8D\xD2\xCC\xC60\x977\x17\xF8'N\xD1\xF5\x8A\xBEd\xD76\xE0\xB1%\xFA\x92it\xF4\xA5\x96\x90\x90;\xB7\x9El8\xFA\xAC:(\xA7\xBA\x1E\xC2\xC0zcQ\xA5G\x1E\x9B\xA6\xBA\xA6Q\xCF>y\xB0\x1F5\x99\xD4\xE4\x93S\xACm4G\xFC\xEAS\xC4|\xB4\xEC\x1At\x14L\x8C\xE4\x12\xEB+\x02;\xED\x80B\x10\xB2\xDF\x02\xFF\x00O\xA8\xE9pol^\xD35\xA6j/{\x03v\xB9\xB9\xE6\xF8B\xB5-\nM9\xADyv\xE0q\xC7T?\xD4\x1A\xF4\xE9Q*\x11\x1F\x84\xA8t\xC8i\xEEc\xA8\x9F+\xA9\a\xC9ok$^\xDF\xE28\xD2\xC5\x17\xEE\xBD\xC9Y\xE2\xEB\x90\xD2\xAAmfF\xEA\x9C\x83\xE9\xB8\xDB\x15\xA6=\xF5\xAC\x85\xBD\xC0\xA3\xA0\xDB\x19PQ%\xB6\x1CuM\x96\xCCtr\xB7V\x10\x00\xF98\x8AI64\xB8\xF4Vi\xA0uL\xCC\x85\xBC\xB8\x81\xF3*mU\xA2;\x1A\x1C\x14\xA1 7b\xBB$rU\xD0\x13\xF6\x18\xCE\xB2P\xE7\xB8\xBB\x95\xE9\xF5\x9AS\xA1\xA7\xA7dc\xBA.}\\x?\x00\x9BSMz2\xD0RU\xDF\x02\bROC\xF1\x89;at0\xE9\xCFh\xB1\xC9)\x92\xB6\x16\xCB\xFD\xD2\x88U\xBD\xBE}qj#\xB8nY]D\x18\x9F\xD9t\t\xAC\xE2t\x1Dm\x8D\xC3\xC8'\xA5\xFAbX\xBFX\xBA\xE1\xE1\\\x1E\xC42\xE3W\xB33\xB4\xC9\xCBb\x99Jx\xED_x\xA1g\xDCH+\xDA\x94\xF5\xDER\x95[\xA0\xE3\xDF\x83vJ#\xF6\t\x9A8*\xA9\xA8tg\xB2'\x05NP\xFDk:U\xB5+R\x19\xA1\xCD\xA9SK\xABe,C\x8E\\!\x83\xFD\xDA\x12H \xA4lJ.G&\xE6\xDDp\xCDn\xA28)\xE1\xA1i\xCF'\xCB\x18\xBF\xA9\xE3\xD1I\xA3S\xBEi\xA4\xAC-\xC0\x16\x1Ef\xF9\xB7\xC1/\xD4\f\xE3\x02$\xEA}\x1E4\x05S\xEBT\xFAtV*\xE5]\xE8q\xC9+e\n>W\x14JR\x90\x12\b\x00\x1D\xC4\xDE\xF8\x17\xA1m\x8Ei\x1D\xD4\x8F\xE5\x18\xD7C\x9D\x04c\xA5\xCF\xD9\r3\xDB\xCF\xCB\xA7\xA6\xC0:\x9E\x8A\bQ;O\xCF\xB7\xA7\xEE1\xE9t\x92\x89\x06\x17\x99T#b\x90\x17*\xE3]\xA4\xED\xAA=\xC7S~\xB8\xEC\xB0\x878\x92\x16\x82\t\x7F\xA6\x14A \x9B\x01\xC9\xC6)\xAD\xBA2\xA7\xFA3\x93\xE5\xE6<\xF5\x05\r\xC6[\xE9a+\x90R\x94\xDE\xFBG\x03\xF7#\x1456>:W\x109\xC2\xD7{\"!~\xAF\e\xA56\f\xBB\xB3\xE41\xF5\xB2\xB5Ze\xD9O2jM\x1E\n\xA3\xD3K\xB5\x04G\xF3\xC5u\xC0\x85\r\xB6\xDF`y;I\x00\xFC\x91\xEF\x8CC\xE5\x91\xF3=\x90\x8B\x8B\xAFy\x8Am*\x8E\x8A\x9D\xDA\x94\x96yh\xC76?\x95\x01\xED5\xA3u\r\am\x86+\x10\xFC\rQ\xF6\xD2Xl\e\xDD&\xF7?\xA0\x1C\xFE\x98\xB3J%t\xDD\x9C\x82\xDDP\x9D~\xAFM\xFF\x00\x8B5\xFA{\xB7\x12v\x0F^O\xC8*\xB10\xA9J\xEF\x14|\xCA\xE6\xDE\xD8\xD47\x18\v\xE7\xC9\xEE\xE3\xBD\xDC\x94\x98\xF9\x96O\xB9\xBE\x1E\x15Eb{?\xE9\x8EB\xAD\x96\xE5gY\r\xB1\x19\xB4\xA9\xD7\x83\xB3T\xD9\t\x04\x02\xAD\xA8\xE4\x00H\xEA}p6\xA2\xA2X\xDF\xB5\x9Fdf\x9E\x96\x19\"\xDD'>\xA8\xE5\xFE\xC9\xA8\xD9\x17R(\x8Dd\xFA\xCA#e\xEA\xE8\xEE\xDC\x94\xA5\x17\xC4v\xD4\x9B\x87\x10\xA3\xE67M\xEC\x0F7\xB7=q{N\xD5\xA4k$d\xE2\xFBE\xC7\x9A\xA3\xA8i,q\x88\xC3\x80\xE3c\xD6\xC9\xA3R5\xE6.C\xAA\xD0\xE9\x94X\xD2#\xE4(2C\xB1b)jK\x93\xCA-\xDE:\xE9E\xB7)~\x97 \x01kq\x86\xBBO\xAA\xADw\xBC\xCE-\xBF\xE8\x15\x86\xD6\xD3Q\xB4\xD3S\xE7f>i]gVrGhL\xE3\x1ERY\xA9e\xAA\xDDI\x86`\xC8L\xB8\xC9Z%\xBA\x9B\x86\xDF\x0E6n\x16R\x9D\xAA\x04sd\x9B\x8B`\x8B4\xCFp\xED*X\xEB\x800\b\xB17<rG\xA2\x1C5'\xD7\x18\xA9f`\x04\xBB$\e\xDA\xC3\x9E\x01\xF5Qz\xCE\\\xADG\xABD\xA3Di\xC9h\x85\t\xC9N\xC4Jv]$\xABr\x8FP\x15\xB0$\xD8\x91\xF4\xD8X\x8B\x92Zv\xA3\v[\xDA\xC8\xE0\x0E\xED\xB9\xEA\xA2\xD4\xB4\xA9\x8B\xBB(\xDA\\6\xEE\xC7D\x16\xCC\x90\xD1\x16\xAC\xEBo\x8E\xE5V\n\tP\xB5\xC1\xE4\x11\xEE9\xEB\x8D\x98|re\xA6\xEB2\xC6=\x8D\x01\xC3*\x05\x97\xA8\xC9\x9F-\b\xEF\x80$\xFERF2t\xF0\xDD\xC1\x1A\x9E]\x8D7]B\xFE\x98\x9A\t\x06\xA1^\xAAf\n\x9CF\xE4\xB1\x19\x80\xDBd\x8B\x82\xA2A\xE7\xF6\x183\xAB\x86Q\xD21\xA0w\xDC~\x8B)\xA6\xCF-~\xA0\xFB\x1F\xE9\xB0[\a\x93tx\xD6\xAC\xE5J\xEC\xE1\xAE\x99J\xAE!\x94Q\xF7KT\x96\xE3\xA4\x05\x14\xBC\xC2\x81Jz\x0F\xA9\xB6\x8F\xDD8\xF2\xDA\xBF\xFAy\x85CF\b\xCF\xAD\xED\xFC\xAFv\xD0\xA8]\xAE\xD2\xBA\x84\xC9g\xB4\xD9\xA4\xF0\x05\xAF\x9F\xFCW0\xFBgv\x84\xA8v\x82\xD4\xBA\x8D~f\xD6b0\x9F\v\n*\r\xD2\xCBc\xD0\x1FS\xEE}M\xF1\xCAv\xB9\xEE\xED\x1E2~\x83\xA0F5\x9Fw\xD3\xA9=\xC2\x94\xDD\xB1\x82/\xFD\xCE?\xA8\xFF\x00\x03\xC0\x05Yd\xAC\xA9#z\x01\x82\xA0Yy\x8C\xAE\xDCV\xB4yH=9\xC3\x82\x85Xn\xCB9\xE2%:\xBBP\xA2\xD6\x18\xA7I\xA2V`\x1A}A\xD9\xF1\xDEt\xB0\xC2\x9EJ\xD6Q\xDDr\x92JB\xAFc}\x80p0*\xB6# \xB86 \xDF\b\xE6\x9D \x04\xB4\x8B\xE1\x17u36Qh3\xD3A\xC9\x91\xA1S\x11\x1A#\x8E\xAA\xA6\xD9R\xEE\xAB\x03\xDE\xA8\xAB\x9EGN/\xCF\xBE\x19E\x14\x92\xBE\xEE\xC98N\xD4&d-hf-\x94\x1E\xCEB^l\xCBj\\h\xD2%\xC8K\x89u\ta\x05E\xB7\a\xD5\xC0\xE8,I\xBFKc\xD2\x19]\x19\xA6\xDB1\xDA\xE6\xD8\x1F\x1F\v\xFCV\x05\xB4r2\xB3t\"\xEC}\xCE8\xB76\xF8\x14\x9B\xB3\x8DI\xDC\xAF\xAA\x91\x9A}\xAF\xF7\x96[|\xECX\ak\x856\xB8\xF9\xB5\xFD}qNX\xD9,\x05\xAD\xE0\xE5\x10/0\xCA\xD9:\x8C+\x14\xF6gv}v\xB1V5t\xD2\xDC\\_\n\x14Sp\xA5n\xB9Q\x03\xEA\xE3\x80H6\xE7\xD0\xE3!QA\xB1\x8C\x8C\xB2\xE0:\xF7\xFE\x16\xBA\x9BS\x0Es\xA4k\xB2#\x16\xF4\xEB\xE6|<\x1079G\xA77Se\x96\xD8\x8D%\xB6XKiq\xD4\x82\xA2.M\xF9\xFB\xDF\xF5\xC6\xAE\x9D\x929\x9B\x9CrVR\xA6a\xBE\xCD\xE0`!\xAE\x9D\xC3i\xDA\x9B!IR\xD4O\t\x06\xD8\x96\x9EG6F\xE1\v\xAEq\xEC\xDC\xBA\xF9\xFD:\xEB\xF4\xFAm\"},\xBA\x94Hs\x95$\x9E~0o\xDA(\xDD,\x11\xC8\xDE\x02\xC5\xFB-;b\xAB\x9E'\x9C\xBB(U\xFDR\xF3\x93+\xCC\xF4\x98l8\x92\xB8\xEC\xDF\xCA}\xD2\xAE\x7F\x9Cy\xE5DW\f\x0E\xF3\xFB\xAF\xA0\xBD\x9A\x98\xC4\xF9%i\xEA>\xC7\xF2\xB9oUjE^p\x89\x19\nu\xE7\x14U\xB6\xFD\x00\xE4\x92O\x00\x01\xC9'\x801\xD6\x80\xDC\xAAZ\x8C\xCE\x99\xDD\x98\xE4\x9B\xA8\xFC\x96\xD0\xC3\x85\xB4\xAC:A\xE5\xC4\xFD'\xED\xFE\xB8p\xB9\xCA\x06\xF0\x1Al2\xB4\xE1\xCA5!\xC8\xF5\xB9\x94*\xFB\x0F#\x82\xCDJS\x97i\x11\x9Fl\xAC(\x9E\x84X\x8B\x11\xE8}1\xCE\xC7\xB7\xEE\x0EJ\x91\x93v\a\x7F\xDD\x12W\x99cQf\xD4b\xD5T\xCE`\xAETX,\xCAm\x95\xA90\xE9\xA0\x90l\x14\x82\v\xAE\xA4\x81\xEA\x10\x9B[\xCEz\x1A\xD3i#\x8EM\xA7\xA76C\xEA\xE7|\xED\xED\x0F\xC1Gs\x06l\xACe\xC8QX\x839Q\x14\xF0QS\xB1^I+o\xD0*\xC6\xE2\xFDll~1gQ\x8D\xAE\xDB\xB8duP\xD1o\x8Fv\xD7`\xF4Hr]jT,\xCB\x1A\xA8\xFC\x82\xE9S\x9B\x96\xBE\xAA$\x82?\xCF\x13\xD2\xC4X\xDB_\n:\xBBH\b\xEA\x9D\xEB\xB9\x9EK2\x1CS\x12\\\xE6\xF6\e\xB8\xE7\x04\x9E\xC8\xC8\xEF*t\xE0\x80\xA1\xD33\x14\xB7^%O\xAA\xF6\xB6\a\xBEa\x19\xDA\x116\xC2\xD28K2\xF5qt\xC9(}\xA5\xEDP\xC58e-!\xEC6!A<\"F\x96\xB8a\x1D\xF4\x9F\xB4\x85SO\xEBlH\x831\xC6]X!J\n\xB76\xE3\xF9\xC1Q\xA9\xBD\x94\xEEc\x80p\xF3#\xA9}\x9D\x86\xAE\xBD\x84\xB8\xB2\xF8\xB8\xE53k\xB6\xAF\xD5\xF5*\xBE\xCDB\xB1(\xBD%m\x8D\xEBY\xE0\\\x9E\xBE\xDDq\x8E\x9AN\xDEG?\xE4\x17\xB1\xB6\x99\x9AU<P6\xF8\x19?\x94\x1A\xABW\x19\x8F\x11\xC8\x10\xAF\xB5\xCF\xF9\x99\x00X\xC8WP>\e\a\xA2}m\xB8\xF3`!-$\xDDg\xDF3{\xD7\xC9*6I&\xE7\xD7\x0FT\t\xBEW\xCB\xE3\x8B\x89\xD3.\xAEB*#\xC3\xC8\x11\x14\xA4)%\xF2\t\xD8\x9Brx\x04\x8Fk\x8F|_\xA5\xDE\x1D\xDC\xE4\xE1E k\x87{\x85\xB0\xD4\x8D5*j2\x82V~\xB5\xA7\xDF\xD8`\xBBj\x05\#{8\xF9\xEA\xAB\x98\x84\xC7s\xF8\xE8\x9B\xE4I[\xE6\xEBYs\xE4\xFA`|\xB5\x05\xE6\xD7\xBA\xB0\xD6\x06\xF0\x12\x8AuEP\xDFB\xAEJA\xBD\xB1b\n\xAD\xA6\xC5E,A\xE19?SD\xB2\b\x16\xFB\xE0\xB0\x94?*\xA8\x88\xB57\xC8h-\xD2G\xAE!{C\x8D\xD5\x96\x93d\x91\x0E\x14\x9E.0\f\x16\x9F\xD4\x14\xE4](nIh\x85)D\x01\xC8\x1E\xA7\x16\v\xC3E\x93\x03sq\xCA\x94J\xA8\xB5U\xA3Fx\xA8\x99*IK\xDC\xF4P\xE3\xA7\xB1\x16\xC6i\xE1\xCC\x94\x8E\x8B\xD0\xC5Du\x94,.\xFDV\xB1\xF5\x1F\x9C(\xC4\xA56\xCB\x83\xB8J/\xD3s\x8A\vW\xDF\xD8b\xC3M\xF2V6f\x86\e\x04\x89\xC5)j\xBA\x94V\xA3\xEAq\"\xAA\xB5\x80V\xB0\a$\x9B\f7\x93\x84\x94\xF2\x99\x06\x8F\x16\x96\xA5=\xE1\xDA\x92\x86\x8A\x94\xB7\x1DR\x94\xBB\x03\xC6\xD1\xC0\xB9)\xFE>pT40_\x83\xFEq\xEA\xABou\xEDk\xA85\xF9\xE7\x15\xB7\e\xE5X\xB2\xF8O8\x85\xCF\xCA\xEA\xF3\xBB\x11\x87\x90\x92\xF6\x87\x8Aqf:\x873\v\x84]l\xEF\xFD\xCE/{\xDF\x8Af\xD5\xAFz\xBF1\xFD\xF00H\xE1\xD5>\xCB\xE5\xCF\xBE9\xB8\xAE\xA5\xB0j\t\x8C\xCA\xDBZJ\x81;\x85\xBD\x0E\x19$e\xE4\x14F\x96\xA8#\xD71\xC2\xE0\xA4\xAF\xAD.:\xA5$\x10\x0F\xBE\x1E\xD6\x90,\xA9\xCA\xE0\xF7\x97\x05\xAF\x0E\x00\x81\xC2\x89g8V\xF2I}\xC3\xEC\x12_0\xDC\xA4\xB3\x9Cs>\t,=0\xD7q\xC2K\xCE!If\x12K\xED\xCE\x15\xD2R\x9C\xD1\x91$ex\xF4\xB7\\\x92\x87\xFCz\x94\x94\xA5()\xDA#l\x9F\xBF\xFCA\xFBb\xBC5\x02R\xEB\x0E?\xFB\xF8S\xBE'0\v\xF5RZ\xAE\x85\xD4i\xB4\xD7\xE6\n\x94WP\xDCg\xE5\x01\xB5#\xAD,\x82V=l|\xAA\x02\xE0\\\x8C1\x9A\x83^#\xB7\x87\xD5=\xF4\xE5\x82\xF7M\x993J&g*,\x8A\xA3S\xE2\xC4\x8C\xCA\xD4\x82\x1D$\xAC\x94\xED\xBF\x1F%i\x00^\xE4\x9E\x98\x96Z\xC1\x13\xB6[)\xAC\x84\xBD\xBB\xAE\x92'M\xE67\x9F\x8EV\x93)\x96d\x04\a\f\x80\x14\xA4\x04\x16C\xA0\xDB\xAF\xD2G\xEAq\xD3X;\x1E\xD8\x0F\xF2\xF6\\l%\xD2vkns\xD3)Y6\x96\x89\xAFKnB\x14\xF8f\xC8l\x8F\xA8(\xA4\xDC\xFB\x84\xDF\xF5\xC3 \xADl\xEF\xD8\x05\xB1u$\xB4\xCE\x89\xBB\xCA\xD1\x95t\xF5\xFC\xD7D\x9D:4\xA4\xA1\xF8\xEAR[\x8A[$\xBC\xA0\x8D\xDBA\x1C\x02z\v\xE2I\xAA\xDB\v\xC3]\xD568\x1D+K\x9B\xD1$\xCD\xB9*^QD?\x12\xB0\xB5\xC8\xDC6\x84\x91\xB5I\xDBq\xF3\xF5\x7F\x18\xECUM\x9A\xE5\xBD\x13e\x85\xD1[r}\xACh\xD5b\x8BN~S\xCE\xB0\xAE\xE5Km\xC4\xA2\xE6\xCBBJ\x94\x9F~\x80\xF3k\e\x1CB\xCA\xF6Hl\x13\x9FN\xF6r\xB4\xE4],\x7F<\xC3\x86\xFB5\x16b\x99\x15\x11O\r\xAD\xB5(\xA6\xE9B\xB7\xF1\xE9\xE7\xE9\xD7\x8C*\x8A\xC6\xC3p\xE1\xD2\xEB\x91B\xE9xL\x19\xC3+/)U\x11\ro\xF8\x8D\xEC\xA1\xE0\xBD\x9B8U\xF8\xB5\xCF\xB6\x1D\f\xA2V\xDC&I\x19\x8C\xD8\xA6<N\xA2X:\xE1$\xAC\xF7iL\xA0\xDE_\xA5iJ\xD1{Nu\xF5n#\xA8\xDB\x0F\x9F\xE4\xE3'\xA4N&mC\x81\xE0\xDB\xEE\xB4Z\x936:\x01k\\\x02\x8E\xD9\xD7JX\xA7i\xBE|\x9D\xB9e\xF8\x99~\xA0\xFAw\xA3\xCA\x84\xAB\xBF\x00\x0Ey\xB8J\xF9=\n\x87[c=A\xA8\t*\xA9\xE3\xE7y?\xFA\x84b\xBE\x902\t\x9Do\xD3o\xAA\x80\xF6C\xD3\a\xF3\x96\x95\xBD%\f)\xD4?S\\1\xB1\xB2\xAB\x12\xECRI qas\xF6\xC4\xDE\xD0\xEA\xD1\xD0\xD5\x16Hm\xDC\xBEO\xAA\x83J\xA3\xED\xA9D\x9F\xF7[\xE1\x84\xD7;\"\xAAGo\xE9\xD9M\xB6\n\xCE\xDF\a\xDD\x00o\xE5\xA6'\xD3\xF4\xC5\xB9\xF5\x10=\x9Cmq6\x16i\xF9\xB8*\xB4\xB1\xC6\xED\\\xB3\xF6\xDD\xDFb\xA7}\xBF\xF4Q\x9D2\xD1\\\xB5Qd\xF7\x9E*\xB8\x88\xE5\xD0\x9D\xB7\xDB\x1D\xDE\b\xF8)#\xF48\x05\xEC\x96\xA8\xFA\xFDBV8\x10\x1A\xDB\xFC\xC8W5\xB9!4\xEDd|\xEE\xFE\n\x13vb\xA6FgJ\xF3.c\x99\nD\xD84Y\x8B\x9711\x80\xEF\x12\xCAXAQI<n\x02\xE4\\\x80H\xF4\xC6\x97Y\x986\xB6\x18\v\xACd\xC0\xF5%S\xD2{\xB4\xD3\xCBo\xD3b\xB6v\xD4\xC9\xF1\xE8\x14\xAD9\xA9\xC3aq\xE2V#;-\xA0\xE5\xB7mZ#\xB8/\xF3g\x05\xF1\x1F\xB3U\x9E\xF2\xFA\x98\xB7\\\xB0\x81\xF2$\x7F\v\x9A\xD0\x1D\x94\x12\fn\x04\xFD\x91c6\xE4WF_\xCE\xD3$6\xF2Zi5\t\x01\xB5\xB46\\\xB2\xF8J\xC2\xBA\x93p\xAF\x8EF\x042\xBCv\xF1\xB1\xA7\x97\x01\xF5\v#\xEAF\xB6\x9D\xC6\xD9\x11\xEE\xF9\x840\xEC\x8B\xA7\xCE\xE7L\xA6\xB5\xB2\xB0\xD2\xD9\xAD(\a-\xF4\x9F\x0E\x82\x9E~\xFF\x00\xCE\x0E\xEB\xD5\x1E\xEC\xE6\xB8\xFE\xE0G\xC9g\xF4h\x84\x8D\x91\xCE\xE1\xB6\xFA\xA1\xEFk\xEC\xBA\x8C\xAB\xAA\xEDSP\x00\xEE\xA9QI\x03\xDC\x85\x1F\xF3\xC5\xDFg\xE7\xF7\x9A>\xD6\xFC\xB8\xAAZ\xC0\xDBVZ\x06\x00\x1Fd\x10\xC6\x95\x04Y\x84\x92\x90\xE6=D\xCC\xF9\xBD\xBA[u\xBA\xFDF\xAA\xDD-; \xA2d\x958#'\xCB\xC3`\x9F(\xF2'\xA7\xE5\x1E\xD8\xAB\r$\x14\xFB\xBB\x16\x06\xEE76\x00\\\xF9\xF8\xA9\x9F4\x92X\xBD\xC4\xDB\x8B\x9E\x13\xEDO_u\"\xB5\x02|)\xF9\xEB0L\x87=\x8F\r-\x87\xAA\x0E)\x0F\xB5\xCF\x91`\x9ES\xE6W\a\xF3\x1F|E\x1E\x9FG\tk\xA3\x85\xA0\xB6\xF6\xB3F/\xCD\xBC.\x9C\xEA\x89\x9E\bs\xC9\xBF\x99Ir.\xB5g\xED1\x89\"&R\xCEu\xDC\xB9\x12B\x8A\xDD\x8FL\xA8:\xC3kQ\x16*)I\xB5\xEC\x00\xBF^\x06\x1F=\x15-Q\x06\xA2&\xBE\xDCnh6\xF9\x85\x10{\x9A,\xD2Bo\xA7jVl\xA4\xE7O\xED|<\xCBV\x8F\x9A\xBB\xC5;\xF8\xDA&8&oRJT\xAE\xFA\xFB\xAEA \x9B\xF48\x99\xD0\xC4\xE6vnh-\xF0\xB0\xB6<\xB8\\\x0E \xDC\x14\xB78k.{\xD4\x1A34\x8C\xCD\x9C+\x95\xFA[\x12W1\xA8u)\xEE>\xD2\x1FQQS\x81*$\x05\x1D\xEB\xB9\xEB\xE6>\xF8L\x86(\xCD\xD8\xD0\x0F\x90\x01p\x92y)\r\aR3VV\xCB\xB5z\r\x1F1T\xE9\x94Z\xBAvT)\xF1%-\xB6%\xA6\xD6\xB3\xA8\x06\xCB\x16\xE3\x9C5\xF4\xF0\xC8\xF6\xC8\xF6\x02\xE6\xF0H\x04\x8FC\xD18=\xC0X\x1C,\xCDZ\x91\x9A\xB3\xCC*\\<\xC3\x98ju\xB8\xB4\xB6\xBB\x88,\xCF\x94\xB7\x93\x15\xBD\xA9N\xD6\xC2\x89\xDA,\x84\x8B\x0FD\x8Flr\x1Ah)\xCB\x9D\v\x03K\xB9\xB0\x02\xFE\xB6\xE5p\xBD\xCE\x00\x13{'\xCA\x8Fh\rJ\xAB\xC2\x93\x0Ev{\xCC\x12\xE2\xC9c\xC3>\xCB\xD5\x17T\x87\x1A\xB1\e\x14\t\xE56R\xB8\xF98\xAE4\xEA6\xB88B\xD0A\xBF\xE9\x1C\xF8\xFA\xF9\xA9\xBD\xE2n7\x9E-\xC9\xE3\xC3\xD13\xE5\x8DO\xCD\xD9*\x9B*\x9F#\xCC\xB5J4)N%\xD7\xA3\xC1\x96\xB6\x90\xE2\xC5\xAC\xA2\x12y\"\xC3\x9F\x8CO5,\x15\x0Ek\xA6`qo\x17\x00\xDB\xD1F\xC9\x1E\xC0C\x1CE\xD3~j\xCE\x15\xBC\xF1W]S0U\xA6V\xAAKBP\xA9s\x9ES\xAE\x14\xA4Y \xA9\\\xD8a\xD0S\xC3L\xCE\xCE\x06\x06\xB7\xC0\v\x05\xC7\xBD\xF2\x1D\xCF7>i\xA3\x16\x13\x17\xA3\x8E\x94\x97\x9Cq%\x98I,\xC2If\x12K0\x92Y\x84\x92\xCC$\x96a$\xB3\t%\x98I,\xC2I\x7F\xFF\xD9"
So the above data should display the above poster.
But when i add that code
<img src="data:image/gif;base64,**HERE**" />
The movie poster isnt shown, does anyone have any idea why?
I can see one possible error. The image link you have posted in .jpg while you are setting mime-type as gif. Please check with mime type as image/jpeg.
EDIT:
I tried the following sample code, works fine:
<%
require 'open-uri'
raw_img_data= nil
open('http://d3gtl9l2a4fn1j.cloudfront.net/t/p/w92/s2IG9qXfhJYxIttKyroYFBsHwzQ.jpg') do |f| raw_img_data= f.read end
base_64_img_data= Base64.encode64(raw_img_data)
%>
<img src="data:image/jpeg;base64,<%= base_64_img_data%>" />
Did you encode the raw image data to base64 before placing it as part of the URI?

(Rails) Assert_Select's Annoying Warnings

Does anyone know how to make assert_select not output all those nasty html warnings during a rake test? You know, like this stuff:
.ignoring attempt to close body with div
opened at byte 1036, line 5
closed at byte 5342, line 42
attributes at open: {"class"=>"inner02"}
text around open: "</script>\r\t</head>\r\t<body class=\"inner02"
text around close: "\t</div>\r\t\t\t</div>\r\t\t</div>\r\t</body>\r</ht"
Thanks
It's rather that your code is generating invalid HTML. I suggest running it through a validator and fixing all the validation errors.
You can find out which test ran into the problem by using the TESTOPTS v flag:
(bundle exec) rake test TESTOPTS="-v"
This will give:
test: Request the homepage should have a node list. (PresentControllerTest): .
test: Request the homepage should have the correct title. (PresentControllerTest): ignoring attempt to close div with body
opened at byte 4378, line 89
closed at byte 17745, line 393
attributes at open: {"class"=>"colleft"}
text around open: "class=\"colmid\"> \n\t\t\t<div class=\"colleft\""
text around close: "x2.js\" ></script>\n </body>\n</html>\n\n"
ignoring attempt to close div with html
opened at byte 4378, line 89
closed at byte 17753, line 394
attributes at open: {"class"=>"colleft"}
text around open: "class=\"colmid\"> \n\t\t\t<div class=\"colleft\""
text around close: "</script>\n </body>\n</html>\n\n"
.
test: Request the homepage should not set the flash. (PresentControllerTest): .
test: Request the homepage should respond with 200. (PresentControllerTest): .
Rails's HTML scanner expects XHTML, if you're using HTML4 where tags don't have explicit closing tags, you may get this warning... doesn't look like solved issue
http://dev.rubyonrails.org/ticket/1937
http://gilesbowkett.blogspot.com/2009/10/ignoring-attempt-to-close-foo-with-bar.html
What I'd want is to know where the warning is coming from. The fact it doesn't specify the test or the controller/action which generates the invalid HTML is the big problem for me.
I had some problems after an update to rails 3.0.9 and HAML 3.1.2
What I did was silence those ugly outputs with the following code in *test_helper.rb*
# Wrap up the method assert_select because after updating to Rails 3.0.9 and HAML 3.1.2,
# I don't know why but it was raising warnings like this:
# ignoring attempt to close section with body
# opened at byte 6157, line 128
# closed at byte 16614, line 391
# attributes at open: {"class"=>"left-column"}
# text around open: "->\n\n\n</span>\n</div>\n<section class='left"
# text around close: "'1'>\n</noscript>\n</body>\n</html>\n"
# But the HTML seems to be valid (in this aspects) using a HTML validator.
ActionDispatch::Assertions::SelectorAssertions.class_eval do
alias_method :assert_select_original, :assert_select
def assert_select(*args, &block)
original_verbosity = $-v # store original output value
$-v = nil # set to nil
assert_select_original(*args, &block)
$-v = original_verbosity # and restore after execute assert_select
end
end
Anyway, I don't recommend using a solution like this. Use only if you are in hurry, and give it a good comment to explain other developers why is that estrange piece of code there.
For me, the cause was valid but poorly formed HAML.
This is what I had:
%ul
%li
= link_to "Help", help_url
- if current_user
%li
= link_to "Users", users_url
= link_to "Logout", logout_url
- else
= link_to "Login", login_url
This is what is correct for what I'd wanted to do:
%ul
%li
= link_to "Help", help_url
%li
- if current_user
= link_to "Users", users_url
= link_to "Logout", logout_url
- else
= link_to "Login", login_url
The best way to track this down is to look very carefully at the "text around open" and "text around close" and try to track down where in your template the open occurs.
Even if you do rake test TESTOPTS="-v" and the error appears to be coming from your view templates, DON'T forget to check the application layout html. This happened to me and it took a few minutes longer than I'd like to admit going back and forth between a couple index.html.erb files before I finally figured it out. Same goes for any rendered partials.

Resources