On Wed, Jan 30, 2013 at 10:36 AM, Carl Eberhard <carlfeberhard@gmail.com> wrote:
Dan, Are you cloning from galaxy-central or galaxy-dist? Are you cloning from the tip or a specific revision?
I installed galaxy as recommended in the docs: hg clone https://bitbucket.org/galaxy/galaxy-dist/
When you see the Syntax error, does Galaxy continue to start up after and the upload error (AttributeError: 'NoneType' object has no attribute 'add') happens later?
OK, now bizarrely I am having a slightly different problem, but AFAIK nothing has changed. I don't get that stack trace on startup and now I can upload pasted text, but I can't seem to upload files. I tried to upload a 3KB csv file called sample.csv and it shows up in history with the animated up arrow but the upload never finishes, and every 4 seconds the log shows: 127.0.0.1 - - [30/Jan/2013:11:10:09 -0700] "GET /api/histories/8237ee2988567c1c HTTP/1.1" 200 - "http://localhost:8080/history" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17" No error message in the log though. So I can at least get past my initial place where I was stuck, because the tools I am developing need only text files as input (which can be pasted). I'd still like to know why I can't upload files (from the Choose File button on the Upload File page). Thanks for your help, Dan
To make sure I'm understanding you correctly, you can find this error in the logs of both of your installations?
Thanks, C
On Tue, Jan 29, 2013 at 1:55 PM, Carl Eberhard <carlfeberhard@gmail.com> wrote:
galaxy.jobs.handler DEBUG 2013-01-29 09:43:52,107 Loaded job runner: galaxy.jobs.runners.local:LocalJobRunner galaxy.jobs.handler ERROR 2013-01-29 09:43:52,111 Job runner is not loadable: galaxy.jobs.runners.lwr Traceback (most recent call last): File "/Users/dtenenba/dev/galaxy-dist/lib/galaxy/jobs/handler.py", line 447, in _load_plugin module = __import__( module_name ) File "/Users/dtenenba/dev/galaxy-dist/lib/galaxy/jobs/runners/lwr.py", line 232 worker = threading.Thread( ( name="LwrJobRunner.thread-%d" % i ), target=self.run_next ) ^ SyntaxError: invalid syntax
It is significant - and not normal behavior. Good catch!
(You can disregard the 'Error: this request returned None from get_history()' message; it records the lack of a current history which is normal when you access those pages but haven't logged in yet)
On Tue, Jan 29, 2013 at 12:49 PM, Dan Tenenbaum <dtenenba@fhcrc.org> wrote:
Hi Carl,
On Tue, Jan 29, 2013 at 9:30 AM, Carl Eberhard <carlfeberhard@gmail.com> wrote:
Those are both fine then.
You've got us (temporarily) stumped - even the old timers here.
Can you give some rough information on your system - what OS you're using, what your network set up would be?
Thanks again for looking into this. It's Mac OS X 10.8.2 with Chrome 24.0.1312.56, though I have the same problems with Safari 6.0.2 (8536.26.17) and Firefox 17.0. Python 2.7.2.
Also - if it's not too problematic - can you do a fresh clone of Galaxy onto your system and see if that installation has the same problem?
I did this and it seems to have pretty much the same problem but a slightly different manifestation. Now I am now getting the error message "Error: this request returned None from get_history(): http://localhost:8080/" when I try and upload a file; instead, no error messages show up in the console, but the upload still fails. I do however get that error message when I try and log in as a user after registering that user.
Another thing I notice, in the output immediately after starting run.sh:
galaxy.jobs.handler DEBUG 2013-01-29 09:43:52,107 Loaded job runner: galaxy.jobs.runners.local:LocalJobRunner galaxy.jobs.handler ERROR 2013-01-29 09:43:52,111 Job runner is not loadable: galaxy.jobs.runners.lwr Traceback (most recent call last): File "/Users/dtenenba/dev/galaxy-dist/lib/galaxy/jobs/handler.py", line 447, in _load_plugin module = __import__( module_name ) File "/Users/dtenenba/dev/galaxy-dist/lib/galaxy/jobs/runners/lwr.py", line 232 worker = threading.Thread( ( name="LwrJobRunner.thread-%d" % i ), target=self.run_next ) ^ SyntaxError: invalid syntax
Maybe that is significant?
Switching back to my previous distribution I get the identical behavior...
Thanks, Dan
C
On Mon, Jan 28, 2013 at 5:03 PM, Dan Tenenbaum <dtenenba@fhcrc.org> wrote:
On Mon, Jan 28, 2013 at 1:59 PM, Carl Eberhard <carlfeberhard@gmail.com> wrote:
If you go to your galaxy root in a terminal and then cd to eggs, what is the version listed for SQLAlchemy?
SQLAlchemy-0.5.6_dev_r6498-py2.7.egg
Do you have SQLAlchemy installed already on that machine (apart from the one in Galaxy's eggs)?
I don't think so. I never knowingly installed it and in a fresh python session, 'import sqlalchemy' returns an error that there is no such module.
Thanks, Dan
On Mon, Jan 28, 2013 at 4:50 PM, Dan Tenenbaum <dtenenba@fhcrc.org> wrote: > > On Mon, Jan 28, 2013 at 1:40 PM, Carl Eberhard > <carlfeberhard@gmail.com> > wrote: > > I was incorrect in stating that the changes in the next > > galaxy-dist > > will > > help in this case, unfortunately. From the stack trace you > > posted, > > there > > is > > a deeper error with your instance that the client-side changes > > won't > > help. > > > > Can you post the size, type, and name of the file you're trying > > to > > upload? > > > > I can reproduce this by just typing "hello, world" into the > "URL/Text:" box on the "Upload File" page. Any file of any type > seems > to trigger this problem. > > Thanks, > Dan > > > > > > On Thu, Jan 24, 2013 at 6:12 PM, Dan Tenenbaum > > <dtenenba@fhcrc.org> > > wrote: > >> > >> On Wed, Jan 23, 2013 at 3:19 PM, Carl Eberhard > >> <carlfeberhard@gmail.com> > >> wrote: > >> > Another thing you might try is to upload the file to our test > >> > server: > >> > https://test.g2.bx.psu.edu/ and see if that works. > >> > > >> > >> Thanks, that does work. > >> > >> Setting up an FTP server on my local installation seems pretty > >> complex. All I really want to do is work around this issue and > >> fool > >> Galaxy into thinking that I have uploaded a file using the > >> uploader...since this is a local installation I can put a file > >> anywhere on my system, I don't have to actually upload it, just > >> place > >> it in a directory. > >> > >> If there is no such workaround, I'll wait for the fix, I guess. > >> Thanks > >> very much for working on this! > >> Dan > >> > >> > >> > > >> > On Wed, Jan 23, 2013 at 6:06 PM, Carl Eberhard > >> > <carlfeberhard@gmail.com> > >> > wrote: > >> >> > >> >> If this is happening consistently and a refresh on the > >> >> history > >> >> isn't > >> >> doing > >> >> anything, you might try ftp upload: > >> >> http://wiki.galaxyproject.org/FTPUpload > >> >> or if you have permissions or are an admin you can try > >> >> uploading > >> >> to > >> >> a > >> >> data > >> >> library: > >> >> > >> >> > >> >> > >> >> http://wiki.galaxyproject.org/Admin/DataLibraries/UploadingLibraryFiles > >> >> > >> >> > >> >> > >> >> On Wed, Jan 23, 2013 at 5:44 PM, Dan Tenenbaum > >> >> <dtenenba@fhcrc.org> > >> >> wrote: > >> >>> > >> >>> On Wed, Jan 23, 2013 at 2:42 PM, Carl Eberhard > >> >>> <carlfeberhard@gmail.com> > >> >>> wrote: > >> >>> > What sort of database are you using on your local > >> >>> > instance? > >> >>> > > >> >>> > >> >>> The default (sqlite I guess). It's a completely vanilla > >> >>> instance, I > >> >>> have not touched the config files. > >> >>> Dan > >> >>> > >> >>> > >> >>> > > >> >>> > On Wed, Jan 23, 2013 at 5:37 PM, Dan Tenenbaum > >> >>> > <dtenenba@fhcrc.org> > >> >>> > wrote: > >> >>> >> > >> >>> >> On Wed, Jan 23, 2013 at 2:35 PM, Carl Eberhard > >> >>> >> <carlfeberhard@gmail.com> > >> >>> >> wrote: > >> >>> >> > Thanks, Dan. That helps and I'll start looking into > >> >>> >> > this. > >> >>> >> > > >> >>> >> > We will be pushing out a new galaxy-dist revision > >> >>> >> > sometime > >> >>> >> > this > >> >>> >> > week > >> >>> >> > if > >> >>> >> > all > >> >>> >> > goes well. This revision includes some code for the > >> >>> >> > history > >> >>> >> > panel > >> >>> >> > that > >> >>> >> > may > >> >>> >> > help handle this situation a bit better. I'd recommend > >> >>> >> > updating > >> >>> >> > to > >> >>> >> > that > >> >>> >> > revision when it comes out. > >> >>> >> > > >> >>> >> > >> >>> >> Thanks! Is there a workaround to upload a file or add it > >> >>> >> to > >> >>> >> my > >> >>> >> history > >> >>> >> in the meantime? Command-line is ok. If there isn't one, > >> >>> >> that's > >> >>> >> ok > >> >>> >> too.... > >> >>> >> Dan > >> >>> >> > >> >>> >> > >> >>> >> > >> >>> >> > I'll let you know what I can find. > >> >>> >> > Carl > >> >>> >> > > >> >>> >> > > >> >>> >> > > >> >>> >> > On Wed, Jan 23, 2013 at 5:18 PM, Dan Tenenbaum > >> >>> >> > <dtenenba@fhcrc.org> > >> >>> >> > wrote: > >> >>> >> >> > >> >>> >> >> Hi Carl, > >> >>> >> >> > >> >>> >> >> On Wed, Jan 23, 2013 at 2:14 PM, Carl Eberhard > >> >>> >> >> <carlfeberhard@gmail.com> > >> >>> >> >> wrote: > >> >>> >> >> > Heya, Dan. > >> >>> >> >> > > >> >>> >> >> > Sorry for the trouble. > >> >>> >> >> > When you get that error again look for a line like > >> >>> >> >> > you > >> >>> >> >> > have > >> >>> >> >> > above: > >> >>> >> >> > Debug at: > >> >>> >> >> > http://localhost:8080/_debug/view/1358978130 > >> >>> >> >> > > >> >>> >> >> > If you open a new tab or window in your browser and > >> >>> >> >> > go > >> >>> >> >> > to > >> >>> >> >> > the > >> >>> >> >> > address > >> >>> >> >> > ('http://localhost:8080/_debug ...'), you should see > >> >>> >> >> > a > >> >>> >> >> > more > >> >>> >> >> > informative > >> >>> >> >> > error message - complete with a list of function > >> >>> >> >> > calls > >> >>> >> >> > that > >> >>> >> >> > led > >> >>> >> >> > to > >> >>> >> >> > the > >> >>> >> >> > error > >> >>> >> >> > (a stack trace). > >> >>> >> >> > > >> >>> >> >> > Can you post that stack trace when you see it? > >> >>> >> >> > > >> >>> >> >> > >> >>> >> >> Thanks for the quick response. Here it is: > >> >>> >> >> > >> >>> >> >> URL: > >> >>> >> >> http://localhost:8080/tool_runner/upload_async_create > >> >>> >> >> File > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> '/Users/dtenenba/dev/galaxy-dist/eggs/WebError-0.8a-py2.7.egg/weberror/evalexception/middleware.py', > >> >>> >> >> line 364 in respond > >> >>> >> >> app_iter = self.application(environ, > >> >>> >> >> detect_start_response) > >> >>> >> >> File > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> '/Users/dtenenba/dev/galaxy-dist/eggs/Paste-1.6-py2.7.egg/paste/debug/prints.py', > >> >>> >> >> line 98 in __call__ > >> >>> >> >> environ, self.app) > >> >>> >> >> File > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> '/Users/dtenenba/dev/galaxy-dist/eggs/Paste-1.6-py2.7.egg/paste/wsgilib.py', > >> >>> >> >> line 539 in intercept_output > >> >>> >> >> app_iter = application(environ, > >> >>> >> >> replacement_start_response) > >> >>> >> >> File > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> '/Users/dtenenba/dev/galaxy-dist/eggs/Paste-1.6-py2.7.egg/paste/recursive.py', > >> >>> >> >> line 80 in __call__ > >> >>> >> >> return self.application(environ, start_response) > >> >>> >> >> File > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> '/Users/dtenenba/dev/galaxy-dist/eggs/Paste-1.6-py2.7.egg/paste/httpexceptions.py', > >> >>> >> >> line 632 in __call__ > >> >>> >> >> return self.application(environ, start_response) > >> >>> >> >> File > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> '/Users/dtenenba/dev/galaxy-dist/lib/galaxy/web/framework/base.py', > >> >>> >> >> line 160 in __call__ > >> >>> >> >> body = method( trans, **kwargs ) > >> >>> >> >> File > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> '/Users/dtenenba/dev/galaxy-dist/lib/galaxy/web/framework/__init__.py', > >> >>> >> >> line 73 in decorator > >> >>> >> >> return simplejson.dumps( func( self, trans, *args, > >> >>> >> >> **kwargs > >> >>> >> >> ) > >> >>> >> >> ) > >> >>> >> >> File > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> '/Users/dtenenba/dev/galaxy-dist/lib/galaxy/webapps/galaxy/controllers/tool_runner.py', > >> >>> >> >> line 317 in upload_async_create > >> >>> >> >> datasets.append( create_dataset( name ) ) > >> >>> >> >> File > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> '/Users/dtenenba/dev/galaxy-dist/lib/galaxy/webapps/galaxy/controllers/tool_runner.py', > >> >>> >> >> line 287 in create_dataset > >> >>> >> >> return upload_common.new_upload( trans, cntrller, > >> >>> >> >> ud, > >> >>> >> >> library_bunch=library_bunch, > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> state=trans.app.model.HistoryDatasetAssociation.states.UPLOAD > >> >>> >> >> ) > >> >>> >> >> File > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> '/Users/dtenenba/dev/galaxy-dist/lib/galaxy/tools/actions/upload_common.py', > >> >>> >> >> line 213 in new_upload > >> >>> >> >> return new_history_upload( trans, uploaded_dataset, > >> >>> >> >> state ) > >> >>> >> >> File > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> '/Users/dtenenba/dev/galaxy-dist/lib/galaxy/tools/actions/upload_common.py', > >> >>> >> >> line 118 in new_history_upload > >> >>> >> >> hda.state = state > >> >>> >> >> File > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> '/Users/dtenenba/dev/galaxy-dist/lib/galaxy/model/__init__.py', > >> >>> >> >> line 1048 in set_dataset_state > >> >>> >> >> object_session( self ).add( self.dataset ) > >> >>> >> >> AttributeError: 'NoneType' object has no attribute > >> >>> >> >> 'add' > >> >>> >> >> > >> >>> >> >> Dan > >> >>> >> >> > >> >>> >> >> > >> >>> >> >> > We can take it from there and thanks, > >> >>> >> >> > Carl > >> >>> >> >> > > >> >>> >> >> > > >> >>> >> >> > On Wed, Jan 23, 2013 at 5:04 PM, Dan Tenenbaum > >> >>> >> >> > <dtenenba@fhcrc.org> > >> >>> >> >> > wrote: > >> >>> >> >> >> > >> >>> >> >> >> Hi, > >> >>> >> >> >> > >> >>> >> >> >> I installed galaxy completely from scratch: > >> >>> >> >> >> > >> >>> >> >> >> rm -rf galaxy-dist && hg clone > >> >>> >> >> >> https://bitbucket.org/galaxy/galaxy-dist/ > >> >>> >> >> >> > >> >>> >> >> >> I'm not a mercurial expert but I think I have > >> >>> >> >> >> changeset > >> >>> >> >> >> 8530:a4113cc1cb5e; at least that's the first entry > >> >>> >> >> >> in > >> >>> >> >> >> "hg > >> >>> >> >> >> log". > >> >>> >> >> >> > >> >>> >> >> >> Then started galaxy like this: > >> >>> >> >> >> cd galaxy-dist > >> >>> >> >> >> ./run.sh > >> >>> >> >> >> > >> >>> >> >> >> I went to http://localhost:8080 and tried to upload > >> >>> >> >> >> a > >> >>> >> >> >> file. I > >> >>> >> >> >> never > >> >>> >> >> >> saw the file in my history, and this is what > >> >>> >> >> >> printed > >> >>> >> >> >> out > >> >>> >> >> >> in > >> >>> >> >> >> the > >> >>> >> >> >> console after I clicked "Execute" on the "Upload > >> >>> >> >> >> File" > >> >>> >> >> >> page: > >> >>> >> >> >> > >> >>> >> >> >> galaxy.web.framework DEBUG 2013-01-23 13:56:11,573 > >> >>> >> >> >> Error: > >> >>> >> >> >> this > >> >>> >> >> >> request > >> >>> >> >> >> returned None from get_history(): > >> >>> >> >> >> > >> >>> >> >> >> http://localhost:8080/tool_runner/upload_async_create > >> >>> >> >> >> galaxy.web.framework DEBUG 2013-01-23 13:56:11,573 > >> >>> >> >> >> Error: > >> >>> >> >> >> this > >> >>> >> >> >> request > >> >>> >> >> >> returned None from get_history(): > >> >>> >> >> >> > >> >>> >> >> >> http://localhost:8080/tool_runner/upload_async_create > >> >>> >> >> >> galaxy.web.framework DEBUG 2013-01-23 13:56:11,573 > >> >>> >> >> >> Error: > >> >>> >> >> >> this > >> >>> >> >> >> request > >> >>> >> >> >> returned None from get_history(): > >> >>> >> >> >> > >> >>> >> >> >> http://localhost:8080/tool_runner/upload_async_create > >> >>> >> >> >> galaxy.web.framework DEBUG 2013-01-23 13:56:11,573 > >> >>> >> >> >> Error: > >> >>> >> >> >> this > >> >>> >> >> >> request > >> >>> >> >> >> returned None from get_history(): > >> >>> >> >> >> > >> >>> >> >> >> http://localhost:8080/tool_runner/upload_async_create > >> >>> >> >> >> galaxy.web.framework DEBUG 2013-01-23 13:56:11,573 > >> >>> >> >> >> Error: > >> >>> >> >> >> this > >> >>> >> >> >> request > >> >>> >> >> >> returned None from get_history(): > >> >>> >> >> >> > >> >>> >> >> >> http://localhost:8080/tool_runner/upload_async_create > >> >>> >> >> >> galaxy.web.framework DEBUG 2013-01-23 13:56:11,573 > >> >>> >> >> >> Error: > >> >>> >> >> >> this > >> >>> >> >> >> request > >> >>> >> >> >> returned None from get_history(): > >> >>> >> >> >> > >> >>> >> >> >> http://localhost:8080/tool_runner/upload_async_create > >> >>> >> >> >> galaxy.web.framework DEBUG 2013-01-23 13:56:11,573 > >> >>> >> >> >> Error: > >> >>> >> >> >> this > >> >>> >> >> >> request > >> >>> >> >> >> returned None from get_history(): > >> >>> >> >> >> > >> >>> >> >> >> http://localhost:8080/tool_runner/upload_async_create > >> >>> >> >> >> galaxy.web.framework DEBUG 2013-01-23 13:56:11,574 > >> >>> >> >> >> Error: > >> >>> >> >> >> this > >> >>> >> >> >> request > >> >>> >> >> >> returned None from get_history(): > >> >>> >> >> >> > >> >>> >> >> >> http://localhost:8080/tool_runner/upload_async_create > >> >>> >> >> >> galaxy.web.framework DEBUG 2013-01-23 13:56:11,574 > >> >>> >> >> >> Error: > >> >>> >> >> >> this > >> >>> >> >> >> request > >> >>> >> >> >> returned None from get_history(): > >> >>> >> >> >> > >> >>> >> >> >> http://localhost:8080/tool_runner/upload_async_create > >> >>> >> >> >> 127.0.0.1 - - [23/Jan/2013:13:56:11 -0700] "POST > >> >>> >> >> >> /tool_runner/upload_async_create HTTP/1.1" 500 - > >> >>> >> >> >> "http://localhost:8080/" "Mozilla/5.0 (Macintosh; > >> >>> >> >> >> Intel > >> >>> >> >> >> Mac > >> >>> >> >> >> OS X > >> >>> >> >> >> 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) > >> >>> >> >> >> Chrome/24.0.1312.56 > >> >>> >> >> >> Safari/537.17" > >> >>> >> >> >> Debug at: > >> >>> >> >> >> http://localhost:8080/_debug/view/1358978130 > >> >>> >> >> >> 127.0.0.1 - - [23/Jan/2013:13:56:11 -0700] "GET > >> >>> >> >> >> /tool_runner/upload_async_message HTTP/1.1" 200 - > >> >>> >> >> >> "http://localhost:8080/" "Mozilla/5.0 (Macintosh; > >> >>> >> >> >> Intel > >> >>> >> >> >> Mac > >> >>> >> >> >> OS X > >> >>> >> >> >> 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) > >> >>> >> >> >> Chrome/24.0.1312.56 > >> >>> >> >> >> Safari/537.17" > >> >>> >> >> >> 127.0.0.1 - - [23/Jan/2013:13:56:11 -0700] "GET > >> >>> >> >> >> /history > >> >>> >> >> >> HTTP/1.1" > >> >>> >> >> >> 200 > >> >>> >> >> >> - > >> >>> >> >> >> > >> >>> >> >> >> "http://localhost:8080/tool_runner/upload_async_message" > >> >>> >> >> >> "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) > >> >>> >> >> >> AppleWebKit/537.17 > >> >>> >> >> >> (KHTML, like Gecko) Chrome/24.0.1312.56 > >> >>> >> >> >> Safari/537.17" > >> >>> >> >> >> > >> >>> >> >> >> Hope someone can help. > >> >>> >> >> >> Thanks, > >> >>> >> >> >> Dan > >> >>> >> >> >> > >> >>> >> >> >> > >> >>> >> >> >> > >> >>> >> >> >> ___________________________________________________________ > >> >>> >> >> >> Please keep all replies on the list by using "reply > >> >>> >> >> >> all" > >> >>> >> >> >> in your mail client. To manage your subscriptions > >> >>> >> >> >> to > >> >>> >> >> >> this > >> >>> >> >> >> and other Galaxy lists, please use the interface > >> >>> >> >> >> at: > >> >>> >> >> >> > >> >>> >> >> >> http://lists.bx.psu.edu/ > >> >>> >> >> > > >> >>> >> >> > > >> >>> >> > > >> >>> >> > > >> >>> > > >> >>> > > >> >> > >> >> > >> > > > > >