assorted-commits Mailing List for Assorted projects (Page 41)
Brought to you by:
yangzhang
You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(9) |
Dec
(12) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(86) |
Feb
(265) |
Mar
(96) |
Apr
(47) |
May
(136) |
Jun
(28) |
Jul
(57) |
Aug
(42) |
Sep
(20) |
Oct
(67) |
Nov
(37) |
Dec
(34) |
2009 |
Jan
(39) |
Feb
(85) |
Mar
(96) |
Apr
(24) |
May
(82) |
Jun
(13) |
Jul
(10) |
Aug
(8) |
Sep
(2) |
Oct
(20) |
Nov
(31) |
Dec
(17) |
2010 |
Jan
(16) |
Feb
(11) |
Mar
(17) |
Apr
(53) |
May
(31) |
Jun
(13) |
Jul
(3) |
Aug
(6) |
Sep
(11) |
Oct
(4) |
Nov
(17) |
Dec
(17) |
2011 |
Jan
(3) |
Feb
(19) |
Mar
(5) |
Apr
(17) |
May
(3) |
Jun
(4) |
Jul
(14) |
Aug
(3) |
Sep
(2) |
Oct
(1) |
Nov
(3) |
Dec
(2) |
2012 |
Jan
(3) |
Feb
(7) |
Mar
(1) |
Apr
|
May
(1) |
Jun
|
Jul
(4) |
Aug
(5) |
Sep
(2) |
Oct
(3) |
Nov
|
Dec
|
2013 |
Jan
|
Feb
|
Mar
(9) |
Apr
(5) |
May
|
Jun
(2) |
Jul
(1) |
Aug
(10) |
Sep
(1) |
Oct
(2) |
Nov
|
Dec
|
2014 |
Jan
(1) |
Feb
(3) |
Mar
(3) |
Apr
(1) |
May
(4) |
Jun
|
Jul
|
Aug
|
Sep
(2) |
Oct
|
Nov
|
Dec
|
2015 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2016 |
Jan
(1) |
Feb
|
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
2017 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
(5) |
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(2) |
2018 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <yan...@us...> - 2008-07-21 16:12:10
|
Revision: 902 http://assorted.svn.sourceforge.net/assorted/?rev=902&view=rev Author: yangzhang Date: 2008-07-21 16:12:13 +0000 (Mon, 21 Jul 2008) Log Message: ----------- added sort.cc Added Paths: ----------- sandbox/trunk/src/cc/sort.cc Added: sandbox/trunk/src/cc/sort.cc =================================================================== --- sandbox/trunk/src/cc/sort.cc (rev 0) +++ sandbox/trunk/src/cc/sort.cc 2008-07-21 16:12:13 UTC (rev 902) @@ -0,0 +1,30 @@ +#include <algorithm> +#include <vector> +using namespace std; + +class cmp { + public: bool operator()(int a, int b) const { return a < b; } +} cmp; + +int +main() +{ + vector<int> xs; + + // This doesn't work. From + // + // http://www.gamedev.net/community/forums/topic.asp?topic_id=390922&whichpage=1� + // + // "I thought you could declare classes local to functions, but apparently + // not. I moved it to the global scope and it works fine. Thanks guys." + // + // "You can to some extent, but they will have internal linkage. Template + // parameters must have external linkage, which rules out local types." + // + // class cmp { + // public: bool operator()(int a, int b) const { return a < b; } + // } cmp; + + sort(xs.begin(), xs.end(), cmp); + return 0; +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-18 08:40:14
|
Revision: 901 http://assorted.svn.sourceforge.net/assorted/?rev=901&view=rev Author: yangzhang Date: 2008-07-18 08:40:19 +0000 (Fri, 18 Jul 2008) Log Message: ----------- updated "office" number; added more sw links Modified Paths: -------------- personal-site/trunk/src/index.txt Modified: personal-site/trunk/src/index.txt =================================================================== --- personal-site/trunk/src/index.txt 2008-07-18 08:39:01 UTC (rev 900) +++ personal-site/trunk/src/index.txt 2008-07-18 08:40:19 UTC (rev 901) @@ -41,7 +41,7 @@ item( 'Jabber (Google)', 'xmpp:', 'gmail.com', 'yaaang' ); item( 'Skype', 'callto://', 'yaaang' ); item( 'FreeNode', 'irc://irc.freenode.org/', 'zeeeee' ); // TODO fix - item( 'Office', 'MIT/CSAIL <a href="http://whereis.mit.edu/map-jpg?selection=32&Buildings=go">32</a>-<a href="http://www.csail.mit.edu/resources/maps/9G/G980.gif">G980</a>, <a href="http://www.eecs.mit.edu/stata-link.html">Stata Center</a>, <a href="http://maps.google.com/maps?f=q&hl=en&geocode=&q=32+Vassar+St,+Cambridge,+MA+02139&sll=42.357926,-71.093616&sspn=0.00842,0.01575&ie=UTF8&ll=42.362682,-71.093495&spn=0.008419,0.01575&z=16&iwloc=addr">32 Vassar St., Cambridge, MA 02139</a>, <a href="callto://+1-617-253-0969">(617) 253-0969</a>' ); + item( '"Office"', 'MIT/CSAIL <a href="http://whereis.mit.edu/map-jpg?selection=32&Buildings=go">32</a>-<a href="http://www.csail.mit.edu/resources/maps/9G/G908.gif">G908</a>, <a href="http://www.eecs.mit.edu/stata-link.html">Stata Center</a>, <a href="http://maps.google.com/maps?f=q&hl=en&geocode=&q=32+Vassar+St,+Cambridge,+MA+02139&sll=42.357926,-71.093616&sspn=0.00842,0.01575&ie=UTF8&ll=42.362682,-71.093495&spn=0.008419,0.01575&z=16&iwloc=addr">32 Vassar St., Cambridge, MA 02139</a>, <a href="callto://+1-617-253-0969">(617) 253-0969</a>' ); item( 'GPG public key', '<a href="yang.gpg.asc">yang.gpg.asc</a> (<a href="http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xB1E65B60">MIT PKS entry</a>)' ); document.write( '</ul>' ); // ]]> @@ -118,9 +118,11 @@ <a name="software" /> -Software --------- +Misc Software +------------- +<!-- TODO: have a page of software --> + These are various other software I've worked on, not exclusively associated with any particular project above. @@ -128,10 +130,14 @@ - [Simple Publications Manager]: publication management web application - [gbookmark2delicious]: Python script to migrate/sync Google Bookmarks to del.icio.us +- [ICFPC 2008 entry]: with Kwon An, Chris Lesniewski-Laas, and Greg Little +- [BattleCode 2008 entry]: with Greg Little [Assorted Projects]: http://assorted.sf.net/ [Simple Publications Manager]: http://pubmgr.sf.net/ [gbookmark2delicious]: http://gbookmark2delicious.googlecode.com/ +[ICFPC 2008 entry]: http://www.assembla.com/spaces/icfpc08-csail +[BattleCode 2008 entry]: http://www.assembla.com/spaces/battlecode2008 <a name="papers" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-18 08:38:53
|
Revision: 900 http://assorted.svn.sourceforge.net/assorted/?rev=900&view=rev Author: yangzhang Date: 2008-07-18 08:39:01 +0000 (Fri, 18 Jul 2008) Log Message: ----------- tweaked exception handling for szdb Modified Paths: -------------- python-commons/trunk/src/commons/startup.py Modified: python-commons/trunk/src/commons/startup.py =================================================================== --- python-commons/trunk/src/commons/startup.py 2008-07-18 08:38:42 UTC (rev 899) +++ python-commons/trunk/src/commons/startup.py 2008-07-18 08:39:01 UTC (rev 900) @@ -12,7 +12,7 @@ from os.path import basename from sys import _current_frames from threading import currentThread -import os, sys +import os, sys, unittest class UnsetError( Exception ): pass @@ -146,6 +146,8 @@ except KeyError: pass else: + if os.environ.get( 'PYTEST', '' ) != '': + unittest.main() if do_force or runner is not None or name == '__main__': runner = ( ( lambda main, args: main( args ) ) if runner is None else runner ) @@ -173,9 +175,9 @@ status = container[0] else: status = runner( main, sys.argv ) - except BaseException, ex: - if handle_exceptions: - print >> sys.stderr, ex.message + except ( KeyboardInterrupt, Exception ), ex: + if handle_exceptions and not isinstance( ex, AssertionError ): + print >> sys.stderr, ex sys.exit(1) else: raise This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-18 08:38:36
|
Revision: 899 http://assorted.svn.sourceforge.net/assorted/?rev=899&view=rev Author: yangzhang Date: 2008-07-18 08:38:42 +0000 (Fri, 18 Jul 2008) Log Message: ----------- Modified Paths: -------------- sandbox/trunk/src/cc/longlongint.cc Modified: sandbox/trunk/src/cc/longlongint.cc =================================================================== --- sandbox/trunk/src/cc/longlongint.cc 2008-07-18 08:38:25 UTC (rev 898) +++ sandbox/trunk/src/cc/longlongint.cc 2008-07-18 08:38:42 UTC (rev 899) @@ -2,6 +2,9 @@ #include <string> #include <typeinfo> +// doesn't work: doesn't give us INT64_C() +// #include <stdint.h> + using namespace std; void f(int64_t x) { cout << x << endl; } @@ -21,15 +24,23 @@ int64_t y = 32; f(y); // f(0LL); + + // size of the various ints cout << sizeof(int64_t) << endl; cout << sizeof(long long) << endl; cout << sizeof(long int) << endl; cout << sizeof(long) << endl; + cout << sizeof(int) << endl; cout << sizeof(0LL) << endl; cout << sizeof(0L) << endl; - cout << typeid(int64_t).name() << endl; - cout << typeid(long long).name() << endl; - cout << typeid(string).name() << endl; + + // names are not very helpful + // cout << typeid(int64_t).name() << endl; + // cout << typeid(long long).name() << endl; + // cout << typeid(string).name() << endl; + + // doesn't work + // cout << INT64_C(0) << endl; return 0; } @@ -44,9 +55,6 @@ * 8 * 8 * 8 - * l - * x - * Ss * * on 32-bit machines: * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-18 08:38:18
|
Revision: 898 http://assorted.svn.sourceforge.net/assorted/?rev=898&view=rev Author: yangzhang Date: 2008-07-18 08:38:25 +0000 (Fri, 18 Jul 2008) Log Message: ----------- added abcde cd ripper config Modified Paths: -------------- configs/trunk/setup-yang.bash Added Paths: ----------- configs/trunk/src/abcde.conf Modified: configs/trunk/setup-yang.bash =================================================================== --- configs/trunk/setup-yang.bash 2008-07-18 08:38:09 UTC (rev 897) +++ configs/trunk/setup-yang.bash 2008-07-18 08:38:25 UTC (rev 898) @@ -19,6 +19,7 @@ install .synergy.conf synergy.conf install .unison unison install .signature signature +install .abcde.conf abcde.conf install .aspell.en.prepl aspell/aspell.en.prepl install .aspell.en.pws aspell/aspell.en.pws # TODO figure out a place to put the .profile Added: configs/trunk/src/abcde.conf =================================================================== --- configs/trunk/src/abcde.conf (rev 0) +++ configs/trunk/src/abcde.conf 2008-07-18 08:38:25 UTC (rev 898) @@ -0,0 +1,12 @@ +# Make sure you have cdparanoia, metaflac, flac! +OUTPUTTYPE=flac +INTERACTIVE=n +FLACOPTS='-f -8' +PADTRACKS=y +OUTPUTDIR="$HOME/tmp/new/abcde" +EJECTCD=y +EXTRAVERBOSE=y +OUTPUTFORMAT='${OUTPUT}/${ARTISTFILE} - ${ALBUMFILE}/${TRACKNUM} - ${TRACKFILE}' +mungefilename() { + echo "$@" | tr ':/' '-_' | tr -d '"?[:cntrl:]'\' +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-18 08:38:07
|
Revision: 897 http://assorted.svn.sourceforge.net/assorted/?rev=897&view=rev Author: yangzhang Date: 2008-07-18 08:38:09 +0000 (Fri, 18 Jul 2008) Log Message: ----------- renamed Added Paths: ----------- problems/gcj/2008/1-qual/A-SavingTheUniverse/ problems/gcj/2008/1-qual/A-SavingTheUniverse/A-large.in problems/gcj/2008/1-qual/A-SavingTheUniverse/A-small-attempt0.in problems/gcj/2008/1-qual/A-SavingTheUniverse/A-small-attempt1.in problems/gcj/2008/1-qual/A-SavingTheUniverse/SavingTheUniverse.py problems/gcj/2008/1-qual/A-SavingTheUniverse/notes problems/gcj/2008/1-qual/B-TrainTimetable/ problems/gcj/2008/1-qual/B-TrainTimetable/B-large.in problems/gcj/2008/1-qual/B-TrainTimetable/B-small-attempt0.in problems/gcj/2008/1-qual/B-TrainTimetable/B-small-attempt1.in problems/gcj/2008/1-qual/B-TrainTimetable/TrainTimetable.py problems/gcj/2008/1-qual/B-TrainTimetable/notes problems/gcj/2008/1-qual/C-FlySwatter/ problems/gcj/2008/1-qual/C-FlySwatter/FlySwatter.py Removed Paths: ------------- problems/gcj/2008/1-qual/A-SavingTheUniverse/A-large.in problems/gcj/2008/1-qual/A-SavingTheUniverse/A-small-attempt0.in problems/gcj/2008/1-qual/A-SavingTheUniverse/A-small-attempt1.in problems/gcj/2008/1-qual/A-SavingTheUniverse/SavingTheUniverse.py problems/gcj/2008/1-qual/A-SavingTheUniverse/notes problems/gcj/2008/1-qual/B-TrainTimetable/B-small-attempt0.in problems/gcj/2008/1-qual/B-TrainTimetable/B-small-attempt1.in problems/gcj/2008/1-qual/B-TrainTimetable/TrainTimetable.py problems/gcj/2008/1-qual/B-TrainTimetable/notes problems/gcj/2008/1-qual/C-FlySwatter/FlySwatter.py problems/gcj/2008/1-qual/FlySwatter/ problems/gcj/2008/1-qual/SavingTheUniverse/ problems/gcj/2008/1-qual/TrainTimetable/ Deleted: problems/gcj/2008/1-qual/A-SavingTheUniverse/A-large.in =================================================================== --- problems/gcj/2008/1-qual/SavingTheUniverse/A-large.in 2008-07-18 00:38:36 UTC (rev 893) +++ problems/gcj/2008/1-qual/A-SavingTheUniverse/A-large.in 2008-07-18 08:38:09 UTC (rev 897) @@ -1,6023 +0,0 @@ -20 -2 -Googol Guernsey -Googol Saudi Arabia -0 -2 -Puppy Pile -Googol Brazil -5 -Puppy Pile -Puppy Pile -Puppy Pile -Puppy Pile -Puppy Pile -3 -Googol Singapore -Googol USA -AskMe -12 -Googol USA -Googol Singapore -Googol USA -Googol USA -Googol USA -Googol USA -AskMe -AskMe -AskMe -AskMe -Googol Singapore -AskMe -3 -Googol Malaysia -Googol Kyrgyzstan -Googol Timor Leste -7 -Googol Malaysia -Googol Kyrgyzstan -Googol Malaysia -Googol Kyrgyzstan -Googol Timor Leste -Googol Timor Leste -Googol Timor Leste -3 -Googol Kyrgyzstan -Googol UK -Googol Mexico -19 -Googol UK -Googol Kyrgyzstan -Googol UK -Googol UK -Googol UK -Googol UK -Googol Mexico -Googol Mexico -Googol Mexico -Googol Mexico -Googol Kyrgyzstan -Googol Mexico -Googol UK -Googol Kyrgyzstan -Googol UK -Googol Kyrgyzstan -Googol Mexico -Googol Mexico -Googol Mexico -3 -Googol Chile -Googol Trinidad and Tobago -Alibubu -19 -Googol Trinidad and Tobago -Googol Chile -Googol Trinidad and Tobago -Googol Chile -Alibubu -Alibubu -Alibubu -Googol Trinidad and Tobago -Googol Chile -Googol Trinidad and Tobago -Googol Trinidad and Tobago -Googol Trinidad and Tobago -Googol Trinidad and Tobago -Alibubu -Alibubu -Alibubu -Alibubu -Googol Chile -Alibubu -2 -Googol Holland -DontAsk -1000 -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -Googol Holland -DontAsk -3 -Googol Namibia -Googol Brazil -Googol Morocco -998 -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -Googol Morocco -Googol Namibia -Googol Brazil -2 -A -B -20 -A -A -A -A -A -B -A -B -A -A -A -A -B -B -B -B -B -B -A -B -100 -Googol Venezuela -Googol Uzbekistan -Googol Turkmenistan -Googol Belize -Googol Libya -Lacos -Megallan -Googol Sri Lanka -Googol Dominican Republic -Googol Morocco -Googol Bulgaria -Googol UK -Googol China -Googol Micronesia -Googol Hungary -Bad Search -Googol Hong Kong -Googol Liechtenstein -Googol Anguilla -Googol Azerbaijan -Googol Senegal -B9 -Googol Gibraltar -Googol Mexico -Googol Cuba -Googol Slokvia -Googol Chile -Googol Kyrgyzstan -Googol Armenia -Googol Austria -Googol Dominica -Googol Namibia -Googol Mongolia -Googol Iceland -Googol Kenya -Googol Peru -Googol Saint Helena -Googol Indonesia -Googol Uruguay -Googol The Bahamas -Excitement -Googol UAE -Googol Montserrat -Googol Panama -Googol Pitcairn Islands -Googol Costa Rica -Googol The Gambia -Googol Canada -Googol Sweden -Googol Vanuatu -Googol American Samoa -Googol US Virgin Islands -Googol El Salvador -Wiki Search -Yeehaw Search -Googol Egypt -Googol Israel -Googol Greece -Googol Bosnia and Herzegovina -Googol Australia -Googol Greenland -Googol India -Index -Googol Haiti -Googol New Zealand -Googol Ireland -Googol Bangladesh -Alta View -Googol -Dont Ask -Tomato -CoolBot -Googol Paraguay -Googol Poland -Time Warmer -Googol Ivory Coast Cote DIvoire -Googol Djibouti -Googol San Marino -Googol Niue -Googol The Philippines -Micro Phone -Googol Malaysia -Googol Antigua and Barbuda -Dont Ask Me -Googol Botswana -Googol Isle of Man -MeGoogle -Saporo -Googol Ethiopia -Googol Luxembourg -Googol Italy -Googol Finland -Informatics -Googol Rwanda -Googol Latvia -Googol Republic of the Congo -Googol Saint Vincent and the Grenadines -Googol Lesotho -Googol Tajikistan -Googol Taiwan -1000 -Googol Sri Lanka -Googol Malaysia -Googol Libya -Googol Montserrat -Googol Chile -Googol India -Googol Botswana -Googol Israel -Googol The Bahamas -Googol Sweden -Googol Bangladesh -Googol Mongolia -Googol Vanuatu -Micro Phone -Googol The Gambia -Googol Australia -Googol UK -Wiki Search -Googol Italy -Googol Uzbekistan -Googol American Samoa -Googol Pitcairn Islands -Googol Greece -Googol Haiti -Googol Italy -Bad Search -Googol Paraguay -Googol Mongolia -Googol Indonesia -Googol Slokvia -Googol Uzbekistan -Googol Pitcairn Islands -Googol Bosnia and Herzegovina -Lacos -MeGoogle -Googol Botswana -Googol Bangladesh -Googol Gibraltar -Googol UAE -Lacos -Googol Gibraltar -Googol Australia -Googol Italy -Googol Paraguay -Googol The Bahamas -Googol Saint Helena -Googol Namibia -Googol US Virgin Islands -Googol UAE -Googol Poland -Googol Libya -Googol Finland -Googol Liechtenstein -Googol Micronesia -Yeehaw Search -Googol Dominican Republic -Micro Phone -Googol Niue -Informatics -Googol Liechtenstein -Googol Egypt -Googol Rwanda -Googol Micronesia -Googol Micronesia -Googol Taiwan -Googol US Virgin Islands -Googol Tajikistan -Googol Ireland -Time Warmer -Googol Finland -Googol Mexico -Googol Saint Vincent and the Grenadines -Googol American Samoa -Googol Micronesia -Googol Senegal -Googol Montserrat -Googol Uzbekistan -Googol El Salvador -Googol Costa Rica -Googol Latvia -Googol San Marino -Googol Vanuatu -Googol Isle of Man -Googol Republic of the Congo -Index -Googol Finland -Googol Egypt -Googol Montserrat -B9 -Googol Canada -Googol UK -Googol San Marino -Googol UAE -Googol Cuba -Googol Montserrat -Informatics -Googol Ivory Coast Cote DIvoire -Informatics -Googol Morocco -Googol Vanuatu -Dont Ask Me -Googol Mongolia -Googol Tajikistan -MeGoogle -Googol Lesotho -Googol Anguilla -Googol Armenia -Googol American Samoa -Googol Gibraltar -Googol Poland -Googol Pitcairn Islands -Googol Venezuela -Googol Gibraltar -Googol Malaysia -Googol Republic of the Congo -Googol Saint Helena -Googol Paraguay -Googol Turkmenistan -Googol Dominica -Googol Latvia -Googol Vanuatu -Googol UAE -Googol Mexico -Googol Montserrat -Googol Ireland -Googol Liechtenstein -MeGoogle -Excitement -Googol Bulgaria -Googol Saint Vincent and the Grenadines -Googol Montserrat -Googol Rwanda -Micro Phone -Excitement -Googol The Philippines -Googol Dominica -Googol Bulgaria -Googol Sri Lanka -Micro Phone -Googol Iceland -Googol Mongolia -Googol San Marino -Googol Isle of Man -Yeehaw Search -Googol Bosnia and Herzegovina -Micro Phone -Googol Italy -Dont Ask Me -Googol Antigua and Barbuda -Googol Paraguay -Googol Austria -Dont Ask Me -Googol Micronesia -Googol Libya -Googol Niue -Googol Niue -B9 -Googol New Zealand -CoolBot -Googol Namibia -Googol China -Googol Ireland -Googol San Marino -Googol Rwanda -Lacos -Googol Israel -Googol Mexico -Alta View -Googol Hong Kong -Googol Egypt -Googol Venezuela -Googol Sweden -Googol Botswana -Googol Isle of Man -Googol Egypt -Googol Republic of the Congo -Googol Liechtenstein -Googol Lesotho -Googol Niue -Googol US Virgin Islands -Tomato -Googol Australia -Saporo -Dont Ask Me -Googol Haiti -Googol Ireland -Googol Hungary -Googol Saint Helena -Googol Austria -Googol Indonesia -Googol Senegal -Googol Montserrat -Googol Turkmenistan -Googol Lesotho -Saporo -Googol Australia -Lacos -Index -Googol Chile -Googol Poland -Googol Liechtenstein -Googol Kyrgyzstan -Time Warmer -Yeehaw Search -Googol New Zealand -Googol Austria -Googol Vanuatu -Googol Antigua and Barbuda -Googol Chile -Googol The Philippines -Googol Isle of Man -Googol Sweden -Googol Uruguay -Googol Paraguay -Googol Botswana -Wiki Search -Googol Indonesia -Googol Tajikistan -Googol UAE -Googol Azerbaijan -Googol Peru -Googol India -Googol Micronesia -Googol Luxembourg -Googol Bosnia and Herzegovina -Googol Venezuela -Googol Sweden -Googol Hong Kong -Googol Hungary -Time Warmer -Googol Luxembourg -Googol Namibia -Wiki Search -Googol Haiti -Googol Isle of Man -Googol Anguilla -Informatics -Googol Kenya -Googol El Salvador -CoolBot -Googol Ireland -Googol Indonesia -CoolBot -Googol Egypt -Index -Googol Egypt -Googol Dominican Republic -Googol US Virgin Islands -Lacos -Googol Turkmenistan -Googol Gibraltar -Excitement -Googol Haiti -Googol Peru -Googol Malaysia -Time Warmer -Saporo -Googol Austria -Googol Italy -Googol Uzbekistan -Googol Libya -Googol The Philippines -Googol Isle of Man -Googol Greece -Googol Panama -Tomato -Googol Kyrgyzstan -Saporo -Googol Greece -Googol Namibia -Googol Bulgaria -Time Warmer -B9 -Googol Antigua and Barbuda -Googol Dominica -Dont Ask Me -Googol Luxembourg -Googol Italy -Googol Kenya -Googol Republic of the Congo -Informatics -Googol Greece -Saporo -Googol Israel -Googol Pitcairn Islands -Dont Ask -Googol Dominica -Googol Botswana -Googol Tajikistan -Googol Paraguay -Googol Isle of Man -Yeehaw Search -Googol US Virgin Islands -Googol Gibraltar -Googol New Zealand -Googol The Gambia -Googol Costa Rica -Googol Finland -MeGoogle -Yeehaw Search -Googol Mexico -Googol Saint Vincent and the Grenadines -Googol Armenia -Googol Pitcairn Islands -Googol Dominica -Googol Bosnia and Herzegovina -Googol The Philippines -Googol Paraguay -Googol Vanuatu -Googol Ireland -Alta View -Googol Rwanda -Time Warmer -Megallan -Googol Uzbekistan -Googol Azerbaijan -Googol Ivory Coast Cote DIvoire -Googol Namibia -Googol Belize -Googol Chile -Googol Egypt -Excitement -Micro Phone -Googol Sri Lanka -Googol Haiti -Googol Pitcairn Islands -Lacos -Googol Dominican Republic -Googol Ethiopia -Googol Finland -Index -Googol Haiti -Excitement -Googol Italy -Googol Australia -Googol Gibraltar -Googol Uzbekistan -Googol Uruguay -Googol Latvia -Googol American Samoa -Googol Belize -Googol India -Googol Republic of the Congo -Googol Niue -Googol -Googol Lesotho -Googol Vanuatu -Googol Republic of the Congo -Micro Phone -Googol El Salvador -B9 -Googol Saint Helena -Googol Pitcairn Islands -Yeehaw Search -Googol Republic of the Congo -Googol Sri Lanka -Googol American Samoa -Googol Venezuela -Bad Search -Googol Uruguay -Informatics -Googol Austria -Wiki Search -Googol Botswana -Googol Senegal -Googol China -Megallan -Googol Poland -Googol American Samoa -Googol Uzbekistan -Googol Ivory Coast Cote DIvoire -Megallan -Googol Hungary -Tomato -Googol Botswana -Googol Kenya -Alta View -Googol Isle of Man -Googol Dominica -Googol Sweden -Googol Indonesia -Googol Belize -Googol Saint Helena -Googol Iceland -Googol Morocco -Googol Namibia -Googol UAE -Googol Greenland -Googol Namibia -Googol Dominican Republic -Googol American Samoa -Googol Ivory Coast Cote DIvoire -Googol Uruguay -Googol Libya -Googol Australia -Googol Bulgaria -Googol Hong Kong -Googol Anguilla -Dont Ask Me -Googol Azerbaijan -Googol Azerbaijan -Googol Bosnia and Herzegovina -Googol Slokvia -Googol Iceland -Micro Phone -Googol India -Googol Senegal -Googol Sweden -Googol The Gambia -Googol American Samoa -Googol Sweden -Googol Peru -Lacos -Googol Botswana -Googol -Alta View -Bad Search -Googol India -Googol The Philippines -Googol Tajikistan -Tomato -Googol Austria -Googol Chile -Googol Greenland -Googol Isle of Man -Googol Indonesia -Tomato -Yeehaw Search -Googol Egypt -Lacos -Googol Poland -Googol Chile -Bad Search -Googol American Samoa -Googol China -Googol Republic of the Congo -Googol Haiti -Googol Mongolia -Googol Republic of the Congo -Googol Morocco -Googol Kenya -Googol Republic of the Congo -Googol Saint Vincent and the Grenadines -Googol The Bahamas -Googol The Philippines -Googol Hong Kong -Googol Bosnia and Herzegovina -Googol The Gambia -Googol Niue -Googol Indonesia -Googol Lesotho -Googol Sweden -Googol Azerbaijan -Googol Ivory Coast Cote DIvoire -Googol Greenland -Googol Libya -Googol China -Googol Antigua and Barbuda -Googol Bulgaria -Googol -Saporo -Dont Ask Me -Googol The Gambia -Yeehaw Search -Googol Isle of Man -Googol Bosnia and Herzegovina -Googol Uzbekistan -Googol Sweden -Googol Italy -Googol Vanuatu -Googol Morocco -Googol Cuba -Googol Pitcairn Islands -Lacos -Googol Hong Kong -Googol Djibouti -Googol Gibraltar -Time Warmer -Googol Gibraltar -Googol El Salvador -Googol China -CoolBot -Googol El Salvador -Googol Namibia -Googol The Gambia -Googol China -Saporo -Googol Australia -Googol Latvia -Googol Tajikistan -Googol The Philippines -Googol Iceland -Googol Iceland -Googol San Marino -Saporo -Googol Azerbaijan -Googol Saint Helena -Excitement -Googol Azerbaijan -Googol Chile -Googol Luxembourg -Googol Austria -Googol Belize -Googol Kenya -Googol Kenya -Googol Azerbaijan -Googol Bulgaria -Googol Dominican Republic -Googol Costa Rica -Googol Botswana -Googol China -Googol Greece -Googol Israel -Googol New Zealand -Excitement -Yeehaw Search -Googol Djibouti -Micro Phone -Googol Ireland -Googol Gibraltar -Googol Dominica -Googol Saint Vincent and the Grenadines -Googol Egypt -Googol Haiti -Time Warmer -Googol Latvia -Googol Kenya -Googol Bulgaria -Googol Peru -Yeehaw Search -Googol Saint Helena -Googol Cuba -Dont Ask Me -Googol Finland -Googol Bulgaria -Dont Ask -Googol Bulgaria -Googol Senegal -Googol Dominica -Googol Israel -Lacos -Googol Montserrat -Googol Ireland -Googol Micronesia -Googol Sri Lanka -Googol Bosnia and Herzegovina -Alta View -Googol Peru -Googol Italy -Googol Iceland -Googol Bosnia and Herzegovina -Googol Senegal -Googol Austria -Googol Ireland -Dont Ask Me -Googol Egypt -Googol Greenland -Tomato -Googol Ireland -Googol Republic of the Congo -Googol Cuba -Yeehaw Search -CoolBot -Googol Australia -Googol Costa Rica -Googol Antigua and Barbuda -Googol Armenia -Googol Israel -Yeehaw Search -Googol Bulgaria -Googol New Zealand -Googol UK -Wiki Search -Googol Austria -Googol Cuba -Googol China -Googol The Bahamas -Googol Pitcairn Islands -Googol Taiwan -Googol Austria -Googol Austria -Googol Greece -Googol Vanuatu -Googol Bulgaria -Googol Ivory Coast Cote DIvoire -Googol Isle of Man -Googol Bangladesh -Googol Peru -Googol Sri Lanka -Googol Namibia -Googol Antigua and Barbuda -Googol Namibia -Googol Isle of Man -Lacos -Googol Montserrat -Dont Ask Me -Saporo -Googol Gibraltar -Googol Finland -Googol Latvia -Googol Iceland -Googol Egypt -Lacos -Googol Uruguay -Googol Saint Helena -Googol Dominica -Googol Turkmenistan -Googol Armenia -Time Warmer -Googol Uzbekistan -Googol Greece -Googol Egypt -Googol UK -Googol Australia -Googol Ireland -MeGoogle -Googol Saint Vincent and the Grenadines -Googol Namibia -Googol Poland -Googol Belize -Googol Haiti -Googol Egypt -MeGoogle -Googol Venezuela -Googol Greenland -Googol Armenia -Googol Peru -Googol Venezuela -Googol American Samoa -Googol Chile -Googol Latvia -Dont Ask Me -Googol Iceland -Googol Taiwan -Googol Poland -Tomato -Googol Malaysia -Googol Ivory Coast Cote DIvoire -Googol Tajikistan -Googol Sri Lanka -Googol San Marino -Googol Sri Lanka -Index -Googol Ethiopia -Googol Bangladesh -Googol Armenia -Googol Chile -Index -Googol UK -Googol Taiwan -Googol Liechtenstein -Googol Chile -Megallan -Googol Belize -Googol The Philippines -Googol Bangladesh -Googol Namibia -Googol Hungary -Googol Anguilla -Googol Antigua and Barbuda -Googol UAE -Googol New Zealand -Googol Liechtenstein -Time Warmer -Googol Hong Kong -Googol Finland -Googol Saint Vincent and the Grenadines -Googol Lesotho -Googol Bangladesh -Googol The Gambia -Googol Greece -Googol Panama -Yeehaw Search -Googol Azerbaijan -Dont Ask Me -Googol Paraguay -Googol Taiwan -Googol India -Saporo -Googol UK -Googol China -Googol Libya -Googol Indonesia -Googol Anguilla -Googol Dominican Republic -Googol Hong Kong -Googol Indonesia -Googol The Bahamas -Googol Namibia -Googol Egypt -B9 -Googol Cuba -Googol Paraguay -Googol Finland -Googol American Samoa -Googol Ethiopia -Googol Antigua and Barbuda -Googol Taiwan -Googol Isle of Man -Googol Sweden -Googol Costa Rica -Googol Latvia -Googol Pitcairn Islands -Googol US Virgin Islands -Googol Hungary -Googol The Philippines -Googol Cuba -Googol Micronesia -Googol Rwanda -Googol UK -Googol Djibouti -Lacos -Bad Search -Googol Bangladesh -Googol Cuba -Googol Mexico -Googol Antigua and Barbuda -Googol India -Bad Search -Googol Ireland -Googol -Googol Ethiopia -Googol UAE -Excitement -Googol The Philippines -Googol Pitcairn Islands -Micro Phone -Googol India -Googol Panama -Googol Anguilla -Index -Excitement -Googol China -Googol Bosnia and Herzegovina -Informatics -Googol Chile -Googol Indonesia -Googol -Informatics -Googol Antigua and Barbuda -Googol The Philippines -Googol Senegal -Googol Ethiopia -Googol The Gambia -MeGoogle -Googol China -Googol Gibraltar -B9 -Googol Slokvia -Googol Indonesia -MeGoogle -Googol Costa Rica -Googol Slokvia -Micro Phone -Googol Uruguay -Lacos -Googol Cuba -Googol Anguilla -Googol Anguilla -Alta View -Googol Saint Helena -Googol Mongolia -Googol Sri Lanka -Googol Vanuatu -Googol Italy -Googol US Virgin Islands -Googol Kyrgyzstan -Micro Phone -Googol Azerbaijan -CoolBot -Index -Googol Tajikistan -Informatics -Googol American Samoa -Googol Lesotho -Googol Dominica -Googol Hungary -Googol Azerbaijan -Googol US Virgin Islands -Googol The Bahamas -Googol Israel -Googol Italy -Googol Indonesia -Googol Iceland -Tomato -Googol Ivory Coast Cote DIvoire -Googol Uruguay -Googol The Gambia -Googol Rwanda -Googol Morocco -Googol Ireland -Googol Antigua and Barbuda -Googol UAE -Googol Paraguay -Dont Ask Me -Googol Mongolia -Googol Cuba -Googol Bulgaria -Googol China -Googol Republic of the Congo -Googol Kenya -Googol Chile -Googol The Gambia -Googol Niue -Googol San Marino -Googol Panama -Googol Dominican Republic -Googol Finland -Index -Googol Greenland -Dont Ask Me -Tomato -Googol Turkmenistan -Googol Senegal -Googol Belize -Googol Cuba -Googol Canada -Googol Latvia -Tomato -Excitement -Googol Belize -Googol Peru -Googol Gibraltar -Googol Pitcairn Islands -Googol Australia -Lacos -Googol Armenia -Googol Peru -Googol -Informatics -Googol Namibia -Googol Turkmenistan -Googol Azerbaijan -Googol San Marino -Micro Phone -Googol Saint Vincent and the Grenadines -Googol Paraguay -Excitement -Googol The Bahamas -Googol Kenya -Googol El Salvador -Time Warmer -Googol Libya -Yeehaw Search -Googol The Gambia -Googol Sri Lanka -Googol Dominica -Googol Rwanda -Wiki Search -Googol El Salvador -Googol Kenya -Googol Israel -Saporo -Googol Dominican Republic -Wiki Search -Googol Taiwan -Googol Bangladesh -Googol Malaysia -MeGoogle -MeGoogle -Googol Chile -Dont Ask -Excitement -Googol Costa Rica -Googol The Gambia -Googol Paraguay -Googol Rwanda -Tomato -Googol China -Googol Botswana -Googol Libya -Googol Ireland -Googol Australia -Googol Greenland -CoolBot -Googol Greece -Googol Senegal -Googol Turkmenistan -Googol US Virgin Islands -Googol Poland -Yeehaw Search -Googol Indonesia -Googol Antigua and Barbuda -Googol Latvia -Googol Lesotho -Googol Peru -Googol Costa Rica -Bad Search -Googol -Googol Namibia -Googol Uzbekistan -Googol Latvia -Googol Uzbekistan -Googol Rwanda -Googol Finland -Googol Taiwan -Googol Ireland -Googol Saint Helena -Tomato -Googol Dominica -B9 -Googol Chile -Googol Canada -Googol Mongolia -Saporo -Googol Anguilla -Googol Luxembourg -Googol Australia -Googol Paraguay -Excitement -Googol Mongolia -Googol The Philippines -Googol Austria -Googol Bangladesh -Googol Slokvia -Googol Kyrgyzstan -Googol Uzbekistan -Tomato -Googol Montserrat -Googol Gibraltar -Wiki Search -Googol Pitcairn Islands -Googol -Megallan -Googol Luxembourg -Googol China -Googol Bosnia and Herzegovina -Googol Egypt -Googol Sweden -Googol Armenia -Googol Isle of Man -Dont Ask -Megallan -Googol Mongolia -Wiki Search -Googol Costa Rica -Googol Turkmenistan -Googol Panama -Googol Libya -Googol Kyrgyzstan -Googol Peru -Googol Luxembourg -Googol Bosnia and Herzegovina -Googol Ireland -Googol Egypt -Dont Ask Me -Googol Pitcairn Islands -Googol Morocco -Lacos -MeGoogle -Dont Ask Me -Googol Bulgaria -Googol Antigua and Barbuda -Googol US Virgin Islands -Googol Liechtenstein -Googol Paraguay -Googol Haiti -Googol Ivory Coast Cote DIvoire -Googol The Philippines -Googol New Zealand -Googol Egypt -Googol New Zealand -Googol Iceland -Googol India -Googol Sweden -Googol The Bahamas -Googol Australia -Googol Turkmenistan -Googol Antigua and Barbuda -Googol Haiti -Googol Austria -Dont Ask -Googol Libya -Saporo -MeGoogle -Googol China -Googol Gibraltar -Googol Dominica -Googol Poland -Googol The Philippines -Dont Ask -Googol Israel -Googol Italy -Googol US Virgin Islands -Googol Australia -Googol Australia -Googol Ivory Coast Cote DIvoire -Googol Mexico -Googol Kenya -Yeehaw Search -Saporo -Googol UAE -Tomato -Googol Paraguay -Yeehaw Search -Googol Anguilla -Googol Haiti -Googol Micronesia -Googol Poland -Googol Lesotho -4 -Googol Argentina -Googol Nicaragua -Googol Senegal -Googol Samoa -60 -Googol Samoa -Googol Senegal -Googol Samoa -Googol Nicaragua -Googol Nicaragua -Googol Senegal -Googol Senegal -Googol Nicaragua -Googol Samoa -Googol Samoa -Googol Samoa -Googol Samoa -Googol Senegal -Googol Senegal -Googol Samoa -Googol Senegal -Googol Samoa -Googol Nicaragua -Googol Senegal -Googol Senegal -Googol Nicaragua -Googol Samoa -Googol Nicaragua -Googol Argentina -Googol Samoa -Googol Samoa -Googol Samoa -Googol Samoa -Googol Samoa -Googol Samoa -Googol Samoa -Googol Nicaragua -Googol Nicaragua -Googol Senegal -Googol Nicaragua -Googol Samoa -Googol Argentina -Googol Samoa -Googol Samoa -Googol Samoa -Googol Samoa -Googol Samoa -Googol Samoa -Googol Samoa -Googol Senegal -Googol Samoa -Googol Senegal -Googol Nicaragua -Googol Senegal -Googol Samoa -Googol Argentina -Googol Samoa -Googol Samoa -Googol Nicaragua -Googol Samoa -Googol Samoa -Googol Samoa -Googol Samoa -Googol Argentina -Googol Argentina -10 -Tomato -Googol Norfolk Island -Googol Ethiopia -Googol Isle of Man -Googol Uganda -Googol Croatia -Googol Cook Islands -Googol Panama -Googol Libya -Lacos -100 -Googol Panama -Googol Panama -Googol Croatia -Googol Cook Islands -Googol Cook Islands -Googol Libya -Tomato -Googol Panama -Googol Ethiopia -Googol Cook Islands -Googol Croatia -Googol Panama -Tomato -Googol Norfolk Island -Googol Cook Islands -Googol Croatia -Googol Norfolk Island -Googol Panama -Googol Panama -Googol Libya -Lacos -Googol Panama -Googol Isle of Man -Googol Ethiopia -Googol Libya -Lacos -Googol Ethiopia -Tomato -Googol Panama -Googol Libya -Lacos -Lacos -Lacos -Lacos -Googol Panama -Googol Libya -Lacos -Googol Libya -Lacos -Lacos -Googol Panama -Googol Libya -Lacos -Googol Libya -Googol Panama -Googol Panama -Googol Cook Islands -Lacos -Googol Uganda -Googol Libya -Googol Libya -Googol Libya -Lacos -Lacos -Lacos -Lacos -Googol Panama -Lacos -Lacos -Lacos -Lacos -Lacos -Googol Libya -Googol Panama -Lacos -Lacos -Googol Libya -Lacos -Lacos -Googol Libya -Googol Libya -Googol Panama -Lacos -Lacos -Googol Libya -Googol Isle of Man -Googol Panama -Lacos -Lacos -Googol Panama -Lacos -Googol Panama -Lacos -Lacos -Googol Uganda -Googol Libya -Googol Libya -Googol Panama -Googol Panama -Googol Libya -Lacos -Lacos -Googol Cook Islands -Googol Cook Islands -Lacos -Lacos -Lacos -Googol Libya -Lacos -Lacos -3 -Googol Tajikistan -Googol Costa Rica -Googol Saint Helena -30 -Googol Saint Helena -Googol Tajikistan -Googol Saint Helena -Googol Saint Helena -Googol Saint Helena -Googol Saint Helena -Googol Costa Rica -Googol Saint Helena -Googol Costa Rica -Googol Costa Rica -Googol Tajikistan -Googol Costa Rica -Googol Tajikistan -Googol Tajikistan -Googol Tajikistan -Googol Saint Helena -Googol Saint Helena -Googol Saint Helena -Googol Costa Rica -Googol Tajikistan -Googol Saint Helena -Googol Tajikistan -Googol Saint Helena -Googol Tajikistan -Googol Costa Rica -Googol Costa Rica -Googol Tajikistan -Googol Saint Helena -Googol Saint Helena -Googol Saint Helena -100 -Googol Saudi Arabia -Googol San Marino -Googol Pakistan -Googol Malta -Googol Australia -Googol Switzerland -YouGoogle -Googol UAE -Googol Rwanda -Googol British Virgin Islands -Googol Singapore -AliWebsite -Googol Cuba -Yeehaw Search -Googol Bolivia -Googol Peru -Googol Portugal -Googol Guatemala -Googol Trinidad and Tobago -Googol Iceland -Googol Solomon Islands -Googol Kenya -Googol Ukraine -Googol Dominica -Googol Hong Kong -Saporo -Googol Latvia -Megallan -fBay -Googol Uganda -Bad Search -Googol Nepal -Googol Ivory Coast Cote DIvoire -NSM Search -Googol South Korea -Googol Haiti -Googol France -Googol The Bahamas -Tomato -Googol Sri Lanka -Googol Bosnia and Herzegovina -Googol Demark -Googol Saint Vincent and the Grenadines -Googol Puerto Rico -Googol Liechtenstein -Googol Montserrat -Googol Kazakhstan -Googol Mauritius -MeGoogle -Lacos -Googol Cook Islands -Googol Republic of the Congo -Googol Finland -Puppy Pile -Index -Googol Pitcairn Islands -Micro Phone -Googol Greece -AskMe -Googol UK -Googol Vanuatu -Googol Kyrgyzstan -Googol Holland -Googol Austria -Googol Paraguay -Googol Zambia -Googol US Virgin Islands -Googol Malawi -Dont Ask Me -Googol Belize -Excitement -InkToMilk -Googol Democratic Republic of the Congo -Googol Morocco -Googol Antigua and Barbuda -Googol Fiji -B9 -Googol Jamaica -Googol Germany -Alta View -Googol Canada -Googol Nicaragua -Googol Ireland -Googol Russia -DontAsk -Googol Armenia -Informatics -Dubai -Live Seek -Googol Tonga -Googol Argentina -Googol Belgium -Googol Namibia -Googol Uruguay -Googol South Africa -Gurujh -Googol Lesotho -Googol Vietnam -Googol Bulgaria -Googol Japan -1000 -Googol Ivory Coast Cote DIvoire -Megallan -Googol Pakistan -Live Seek -Googol Kyrgyzstan -Googol Ivory Coast Cote DIvoire -Googol Namibia -Googol Trinidad and Tobago -Googol Greece -Excitement -Googol The Bahamas -Googol Singapore -Googol Rwanda -Googol Demark -Googol Vietnam -Megallan -Googol Guatemala -Bad Search -Googol Cuba -Googol Belize -Googol Germany -Excitement -Googol Zambia -Googol Kazakhstan -Googol The Bahamas -YouGoogle -Live Seek -Googol British Virgin Islands -Googol Belgium -Puppy Pile -YouGoogle -Saporo -Googol Ireland -Googol UAE -Yeehaw Search -Googol Saint Vincent and the Grenadines -Googol Demark -Googol Australia -Googol Vanuatu -Googol Saudi Arabia -Googol Fiji -Googol Japan -Googol Rwanda -Informatics -Googol Demark -Googol UAE -Googol Singapore -Googol Greece -Googol The Bahamas -Googol Hong Kong -Saporo -Googol Trinidad and Tobago -Googol Uruguay -Googol Namibia -Googol Holland -Googol Nepal -Googol Saudi Arabia -Lacos -Googol Demark -Googol Tonga -Googol Pakistan -Lacos -AliWebsite -Informatics -Googol Greece -Googol Dominica -Megallan -Googol Bulgaria -fBay -Live Seek -Googol Japan -Googol Pakistan -Informatics -Googol UAE -Googol Tonga -fBay -Googol Peru -Googol Vietnam -Informatics -Puppy Pile -Googol Kenya -Googol Singapore -Excitement -Googol Portugal -Googol Malta -Googol Ivory Coast Cote DIvoire -Googol Mauritius -Googol Pakistan -Informatics -Googol Belgium -Googol Tonga -Dubai -Googol France -Googol San Marino -Googol Belize -Gurujh -Saporo -Googol Lesotho -Googol Uruguay -Googol Pitcairn Islands -Dubai -Googol Uruguay -Googol UK -Googol Democratic Republic of the Congo -Googol Saudi Arabia -Googol Montserrat -Googol Saudi Arabia -Googol Cuba -Googol Demark -Dubai -Dont Ask Me -Googol Paraguay -Gurujh -Googol France -Googol Ireland -Googol Bulgaria -Googol Democratic Republic of the Congo -Megallan -Googol San Marino -Index -Googol Iceland -Googol Tonga -Googol Demark -Googol Greece -Googol Belgium -Googol Cuba -Googol Republic of the Congo -Googol Guatemala -Googol UAE -Googol Montserrat -Excitement -Googol Uruguay -Googol France -Megallan -Googol Zambia -Googol South Korea -Googol Morocco -Googol Austria -Lacos -Googol Guatemala -MeGoogle -Googol Portugal -Googol Nicaragua -Googol Liechtenstein -Puppy Pile -Googol Holland -Googol Puerto Rico -Saporo -Googol Argentina -Googol Puerto Rico -Googol Ireland -YouGoogle -Googol Ivory Coast Cote DIvoire -Googol Kenya -Googol Holland -Googol Ukraine -Googol Ivory Coast Cote DIvoire -Googol Peru -Googol The Bahamas -Googol Demark -Googol Vanuatu -Googol UAE -Googol South Korea -Gurujh -Googol The Bahamas -Googol San Marino -Bad Search -Googol Rwanda -Googol Zambia -Googol Canada -Megallan -Googol Cuba -Googol Lesotho -Googol UAE -Googol UK -Googol Cook Islands -Excitement -Googol Pakistan -B9 -Googol Kyrgyzstan -Googol Kazakhstan -Index -Googol Zambia -Googol Germany -Googol Germany -fBay -Googol San Marino -Googol Cuba -Googol Demark -Googol The Bahamas -Puppy Pile -Googol Pakistan -Googol Mauritius -Googol Tonga -Googol Lesotho -Dubai -Googol Belgium -Googol Latvia -Googol Vietnam -Index -YouGoogle -Googol Hong Kong -Googol Belize -Googol Pakistan -Googol Nepal -Megallan -Googol Cook Islands -Googol San Marino -Googol Uganda -Googol Latvia -Googol Vanuatu -Googol Jamaica -Googol Ireland -Googol Latvia -Puppy Pile -Googol Vanuatu -Micro Phone -Puppy Pile -InkToMilk -Googol Saudi Arabia -Googol Uruguay -Googol Ukraine -Googol San Marino -Tomato -Googol Cuba -Gurujh -Megallan -Googol Malta -Googol Ukraine -Googol Dominica -Googol Vanuatu -fBay -Googol Kazakhstan -Megallan -Googol Uganda -Googol Germany -Index -Googol Russia -Googol Canada -Dubai -Googol UAE -Googol Bosnia and Herzegovina -Googol Holland -Googol Argentina -Googol Zambia -Googol Portugal -Googol Cook Islands -Googol Kenya -Googol Belize -Googol Solomon Islands -Googol Iceland -Googol Kyrgyzstan -Googol Puerto Rico -Googol Solomon Islands -Googol San Marino -AskMe -Googol Portugal -Megallan -Googol Holland -Googol Sri Lanka -Googol Cook Islands -Googol Solomon Islands -Googol Belize -Googol Vietnam -Googol Cook Islands -Googol Saudi Arabia -Googol Fiji -Googol Australia -Googol Armenia -Index -Googol Uruguay -Googol Argentina -Googol Uruguay -Puppy Pile -Googol Canada -Googol UK -Dont Ask Me -Megallan -Googol Nicaragua -Googol The Bahamas -Googol Mauritius -Googol San Marino -Googol Saudi Arabia -Googol Uruguay -Googol Solomon Islands -Googol Pakistan -Googol Cook Islands -Googol France -Megallan -Googol Singapore -Googol Germany -Googol Canada -Googol Ivory Coast Cote DIvoire -Googol Mauritius -Googol Germany -DontAsk -Googol Kazakhstan -Puppy Pile -Googol Tonga -Megallan -YouGoogle -Googol Nicaragua -Googol Iceland -Googol Japan -Googol Nepal -Googol Lesotho -Googol UK -Googol San Marino -Saporo -Tomato -Tomato -Googol Antigua and Barbuda -Googol Bosnia and Herzegovina -Googol The Bahamas -Googol Paraguay -Googol Holland -Googol The Bahamas -Googol Portugal -Googol San Marino -Dont Ask Me -Googol Latvia -Googol Germany -Googol Mauritius -AskMe -Googol Ukraine -Googol Hong Kong -Googol Demark -Googol Belize -Googol Jamaica -Megallan -Googol Vietnam -Googol Armenia -YouGoogle -Googol Peru -Googol Armenia -Googol Sri Lanka -AliWebsite -Googol Demark -Googol Demark -Googol South Korea -Googol Ireland -Googol Ireland -Googol UAE -Googol Ukraine -Googol Trinidad and Tobago -Googol Fiji -Informatics -Googol Greece -Googol Argentina -Googol Armenia -Googol Dominica -Googol Bolivia -Googol Holland -Excitement -Googol Morocco -Informatics -Gurujh -Googol Cuba -Puppy Pile -Googol Morocco -Googol Demark -Puppy Pile -Index -Googol Cook Islands -Googol US Virgin Islands -Googol France -Googol Belgium -Googol Nicaragua -Alta View -Googol Nepal -Googol Trinidad and Tobago -Googol Vanuatu -AliWebsite -Googol Latvia -Informatics -Googol Uganda -Googol San Marino -Dont Ask Me -Dubai -Googol Tonga -Googol Finland -Googol Sin... [truncated message content] |
From: <yan...@us...> - 2008-07-18 08:34:26
|
Revision: 896 http://assorted.svn.sourceforge.net/assorted/?rev=896&view=rev Author: yangzhang Date: 2008-07-18 08:34:35 +0000 (Fri, 18 Jul 2008) Log Message: ----------- changed load to importdb() (wipes out what was there before!); prevent redundant saves by seeing if the db has changed since prev; fixed dump bug omitting concept; tweak exception handling Modified Paths: -------------- simple-zdb/trunk/src/zdb.py Modified: simple-zdb/trunk/src/zdb.py =================================================================== --- simple-zdb/trunk/src/zdb.py 2008-07-18 01:36:55 UTC (rev 895) +++ simple-zdb/trunk/src/zdb.py 2008-07-18 08:34:35 UTC (rev 896) @@ -2,8 +2,9 @@ from __future__ import with_statement -from cPickle import load, dump +from cPickle import load, dump, dumps from cStringIO import StringIO +from commons.log import info, config_logging from commons.exceps import handle_exceptions from commons.files import soft_makedirs from commons.startup import run_main @@ -14,7 +15,10 @@ from sys import stdin, stdout, stderr from time import time from unittest import TestCase, main as test_main +from functools import partial +info = partial( info, '' ) + dbdir = path( '~/.zdb/db-' ).expanduser() # @@ -24,10 +28,18 @@ class zdb_exception( Exception ): pass +def importdb( p ): + global db + with file( path( p ).expanduser() ) as f: + createdb() + for o in parse( f.read() ): db.addobj( o ) + class zdb( object ): 'The actual DB.' def __init__( self ): self.name2obj = {} + def __eq__( self, other ): + return type( self ) == type( other ) and self.name2obj == other.name2obj # User-facing functions (these are the console commands) def add( self, name, parents, props ): self.addobj( obj( name, parents, props ) ) @@ -37,6 +49,7 @@ del self.name2obj[ name ] def dump( self, path ): with file( path, 'w' ) as f: + self.name2obj[ 'concept' ].dump(f) for parent in sorted( db.name2obj.iterkeys() ): first = True for name, o in sorted( db.name2obj.iteritems() ): @@ -46,24 +59,7 @@ print >> f, '===', parent, '===' print >> f first = False - print >> f, o.name - for field, values in sorted( o.props.iteritems() ): - for value in values: - if '\n' in value: - print >> f, '%s::' % field - print >> f, value - print >> f, '::' - else: - print >> f, '%s: %s' % ( field, value ) - print >> f - def load( self, path ): - names = set() - with file( path ) as f: - for o in parse( f.read() ): - self.updateobj( o ) - if o.name in names: - raise zdb_exception( 'duplicate names detected in load input' ) - names.add( o ) + o.dump(f) # API functions def addobj( self, o ): if o.name in db.name2obj: raise zdb_exception('already exists: ' + o.name) @@ -75,7 +71,7 @@ try: for name, o in self.name2obj.iteritems(): assert name == o.name, 'name mismatch' - assert len( o.parents ) == 1 or name == 'concept' and o.parents == [], \ + assert name == 'concept' and o.parents == [] or len( o.parents ) == 1, \ 'all objs beside concept must have single parent (for now)' for p in o.parents: assert p in self.name2obj, 'parent doesnt exist: %s' % p @@ -91,7 +87,7 @@ def __init__( self, name, parents, props ): global db self.name = name - assert parents != None and parents != [] + assert parents != None and parents != [] or name == 'concept' self.parents = parents self.props = {} for p in props: self.props[p] = [] @@ -100,6 +96,17 @@ self.name == other.name and self.props == other.props and self.parents == other.parents ) + def dump( self, f ): + print >> f, self.name + for field, values in sorted( self.props.iteritems() ): + for value in values: + if '\n' in value: + print >> f, '%s::' % field + print >> f, value + print >> f, '::' + else: + print >> f, '%s: %s' % ( field, value ) + print >> f def addprop( self, field, value ): try: d = self.props[ field ] except: d = self.props[ field ] = [] @@ -114,34 +121,44 @@ def loaddb(): global db - dbs = dbfiles() - if dbs == []: + paths = dbfiles() + if paths == []: raise zdb_exception('no DB to load') else: - with file(dbs[-1]) as f: tstamp, db = load(f) + with file(paths[-1]) as f: tstamp, db = load(f) def savedb(): global db - dbs = dbfiles() - newdb = dbdir + str( dbnum(dbs[-1]) + 1 if len( dbs ) > 0 else 0 ) - soft_makedirs( newdb.dirname() ) + paths = dbfiles() + newpath = dbdir + str( dbnum(paths[-1]) + 1 if len( paths ) > 0 else 0 ) + soft_makedirs( newpath.dirname() ) db.check() - with file(newdb, 'w') as f: dump( ( time(), db ), f ) + # check if there have been any changes + dosave = True + if paths != []: + with file(paths[-1]) as f: tstamp, prevdb = load(f) + if prevdb == db: + info( 'no changes, not saving' ) + dosave = False + if dosave: + info( 'saving', newpath ) + with file(newpath, 'w') as f: dump( ( time(), db ), f ) # # zdb # -def createdb(): +def createdb( init = False ): 'Initialize a new DB and set the `db` global to it.' global db db = zdb() - db.add( 'concept', [], [ 'notes' ] ) - # some common types - db.add( 'person', [ 'concept' ], [ 'cell', 'email', 'aim', 'msn', 'google', 'residence' ] ) -# db.add( 'place', [ 'concept' ], [ 'yelp URL' ] ) -# db.add( 'event', [ 'concept' ], [ 'date/time' ] ) -# db.add( 'group', [ 'concept' ], [ 'cell' ] ) + if init: + db.add( 'concept', [], [ 'notes' ] ) + # some common types + db.add( 'person', [ 'concept' ], [ 'cell', 'email', 'aim', 'msn', 'google', 'residence' ] ) +# db.add( 'place', [ 'concept' ], [ 'yelp URL' ] ) +# db.add( 'event', [ 'concept' ], [ 'date/time' ] ) +# db.add( 'group', [ 'concept' ], [ 'cell' ] ) # # parser @@ -156,7 +173,7 @@ return f.readline().rstrip() try: f = StringIO(s.strip()) - parents = None + parents = [] while True: line = readline(f).strip() if line == '': break @@ -192,7 +209,7 @@ class parser_tests( TestCase ): def setUp( self ): - createdb() + createdb( True ) def test_simple( self ): parsed = list( parse( ''' Yang Zhang @@ -224,13 +241,15 @@ def main( argv ): global db + config_logging( do_console = True ) + try: loaddb() - except zdb_exception: createdb() + except zdb_exception: createdb( True ) while True: stdout.write( '>>> ' ) line = stdin.readline() - if line == '': break + if line == '': print; break words = line.split() if words != []: cmd, params = words[0], words[1:] @@ -240,13 +259,13 @@ elif cmd == 'del': db.rm( *params ) elif cmd == 'set': db.set( *params ) elif cmd == 'dump': db.dump( *params ) - elif cmd == 'load': db.load( *params ) + elif cmd == 'load': importdb( *params ) elif cmd == 'quit': break else: raise zdb_exception( 'bad command: ' + cmd ) - except BaseException, ex: + except Exception, ex: # print >> stderr, ex handle_exceptions() savedb() -run_main( handle_exceptions = True ) +run_main( handle_exceptions = False ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-18 01:36:46
|
Revision: 895 http://assorted.svn.sourceforge.net/assorted/?rev=895&view=rev Author: yangzhang Date: 2008-07-18 01:36:55 +0000 (Fri, 18 Jul 2008) Log Message: ----------- added basic consistency checking; added load/dump for entire db using sections (delimiting parents); fixed to use multi-value props Modified Paths: -------------- simple-zdb/trunk/README simple-zdb/trunk/src/zdb.py Modified: simple-zdb/trunk/README =================================================================== --- simple-zdb/trunk/README 2008-07-18 00:39:19 UTC (rev 894) +++ simple-zdb/trunk/README 2008-07-18 01:36:55 UTC (rev 895) @@ -14,5 +14,4 @@ Bugs: -- handle multiple values per property - handle inheritance correctly Modified: simple-zdb/trunk/src/zdb.py =================================================================== --- simple-zdb/trunk/src/zdb.py 2008-07-18 00:39:19 UTC (rev 894) +++ simple-zdb/trunk/src/zdb.py 2008-07-18 01:36:55 UTC (rev 895) @@ -32,42 +32,85 @@ def add( self, name, parents, props ): self.addobj( obj( name, parents, props ) ) def set( self, name, field, value ): - self.name2obj[ name ].props[ field ] = value + self.name2obj[ name ].addprop( field, value ) def rm( self, name ): del self.name2obj[ name ] def dump( self, path ): with file( path, 'w' ) as f: - f.write( 'blah' ) - def load( self, parent, path ): + for parent in sorted( db.name2obj.iterkeys() ): + first = True + for name, o in sorted( db.name2obj.iteritems() ): + if o.parents == [ parent ]: + # header + if first: + print >> f, '===', parent, '===' + print >> f + first = False + print >> f, o.name + for field, values in sorted( o.props.iteritems() ): + for value in values: + if '\n' in value: + print >> f, '%s::' % field + print >> f, value + print >> f, '::' + else: + print >> f, '%s: %s' % ( field, value ) + print >> f + def load( self, path ): + names = set() with file( path ) as f: - for o in parse( f.read(), [parent] ): - self.addobj( o ) + for o in parse( f.read() ): + self.updateobj( o ) + if o.name in names: + raise zdb_exception( 'duplicate names detected in load input' ) + names.add( o ) # API functions def addobj( self, o ): + if o.name in db.name2obj: raise zdb_exception('already exists: ' + o.name) self.name2obj[ o.name ] = o + def updateobj( self, o ): + self.name2obj[ o.name ] = o + def check( self ): + o = None + try: + for name, o in self.name2obj.iteritems(): + assert name == o.name, 'name mismatch' + assert len( o.parents ) == 1 or name == 'concept' and o.parents == [], \ + 'all objs beside concept must have single parent (for now)' + for p in o.parents: + assert p in self.name2obj, 'parent doesnt exist: %s' % p + # TODO make sure there are no cycles in the parent graph and that + # everything terminates at root 'concept' + except AssertionError, ex: + print >> stderr, o.name + raise class obj( object ): 'An object in the ZDB object database' - __slots__ = 'name parents props'.split() - def __eq__( self, other ): - return ( type( self ) == type( other ) and - self.name == other.name and - self.props == other.props and - self.parents == other.parents ) + # __slots__ = 'name parents props'.split() def __init__( self, name, parents, props ): global db self.name = name + assert parents != None and parents != [] self.parents = parents self.props = {} for p in props: self.props[p] = [] - if name in db.name2obj: raise zdb_exception('already exists: ' + name) + def __eq__( self, other ): + return ( type( self ) == type( other ) and + self.name == other.name and + self.props == other.props and + self.parents == other.parents ) + def addprop( self, field, value ): + try: d = self.props[ field ] + except: d = self.props[ field ] = [] + d.append( value ) # # DB files management # -def dbfiles(): return sorted( dbdir.glob('*'), key = dbnum ) -def dbnum(dbpath): return int( x.split('-')[-1] ) +def dbfiles(): return sorted( path( '/' ).glob(dbdir + '*'), key = dbnum ) +def dbnum(dbpath): return int( dbpath.split('-')[-1] ) def loaddb(): global db @@ -82,6 +125,7 @@ dbs = dbfiles() newdb = dbdir + str( dbnum(dbs[-1]) + 1 if len( dbs ) > 0 else 0 ) soft_makedirs( newdb.dirname() ) + db.check() with file(newdb, 'w') as f: dump( ( time(), db ), f ) # @@ -103,7 +147,7 @@ # parser # -def parse( s, parents ): +def parse( s ): line = None counter = free_struct() counter.i = 0 @@ -112,26 +156,32 @@ return f.readline().rstrip() try: f = StringIO(s.strip()) + parents = None while True: - name = readline(f).strip() - if name == '': break - o = obj( name, parents, [] ) - while True: - line = readline(f).strip() - if line == '': break - m = match( '^([^:]+)::$', line ) - if m is not None: - field = m.group(1) - buf = [] - while True: - line = readline(f) - if line == '::': break - buf.append( line ) - value = '\n'.join( buf ).rstrip() - else: - [field, value] = line.split(': ', 1) - o.props[ field ] = value - yield o + line = readline(f).strip() + if line == '': break + if line.startswith( '=== ' ) and line.endswith( ' ===' ): + parents = [ line.lstrip('=').rstrip('=').strip() ] + assert '' == readline(f) # read an empty line + continue + else: + o = obj( line, parents, [] ) + while True: + line = readline(f).strip() + if line == '': break + m = match( '^([^:]+)::$', line ) + if m is not None: + field = m.group(1) + buf = [] + while True: + line = readline(f) + if line == '::': break + buf.append( line ) + value = '\n'.join( buf ).rstrip() + else: + [ field, value ] = line.split(': ', 1) + o.addprop( field, value ) + yield o except: print >> stderr, 'line %d: %s' % ( counter.i, line ) raise @@ -153,18 +203,18 @@ :: Michael Jackson -google: emilie +email: mj...@ne... notes:: - loves kids :: ''', [ 'person' ] ) ) expected = [None] * 2 expected[0] = obj( 'Yang Zhang', [ 'person' ], '' ) - expected[0].props[ 'google' ] = 'yaaang' - expected[0].props[ 'notes' ] = '- sucks\n- lame' + expected[0].addprop( 'google', 'yaaang' ) + expected[0].addprop( 'notes', '- sucks\n- lame' ) expected[1] = obj( 'Michael Jackson', [ 'person' ], '' ) - expected[1].props[ 'google' ] = 'emilie' - expected[1].props[ 'notes' ] = '- loves kids' + expected[1].addprop( 'email', 'mj...@ne...' ) + expected[1].addprop( 'notes', '- loves kids' ) self.assertEqual( parsed, expected ) # @@ -180,6 +230,7 @@ while True: stdout.write( '>>> ' ) line = stdin.readline() + if line == '': break words = line.split() if words != []: cmd, params = words[0], words[1:] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-18 00:39:12
|
Revision: 894 http://assorted.svn.sourceforge.net/assorted/?rev=894&view=rev Author: yangzhang Date: 2008-07-18 00:39:19 +0000 (Fri, 18 Jul 2008) Log Message: ----------- forgot to add in prev commit Added Paths: ----------- problems/gcj/2008/1-qual/TrainTimetable/B-large.in Added: problems/gcj/2008/1-qual/TrainTimetable/B-large.in =================================================================== --- problems/gcj/2008/1-qual/TrainTimetable/B-large.in (rev 0) +++ problems/gcj/2008/1-qual/TrainTimetable/B-large.in 2008-07-18 00:39:19 UTC (rev 894) @@ -0,0 +1,7718 @@ +100 +0 +1 2 +01:40 01:41 +01:39 01:40 +01:40 01:41 +3 +1 1 +01:40 01:41 +01:44 01:45 +10 +3 2 +01:40 01:41 +01:40 01:42 +01:40 01:43 +01:49 01:50 +01:50 01:51 +1 +2 2 +12:02 12:05 +12:10 12:11 +12:01 12:04 +12:00 12:02 +5 +4 2 +00:14 00:21 +00:20 00:29 +00:18 00:26 +00:06 00:14 +00:13 00:21 +00:10 00:17 +0 +4 2 +00:01 00:10 +00:18 00:24 +00:15 00:24 +00:15 00:20 +00:02 00:07 +00:12 00:17 +9 +4 5 +20:39 20:50 +20:38 20:58 +20:33 20:50 +20:42 21:05 +20:01 20:30 +20:41 20:56 +20:05 20:17 +20:50 21:18 +20:03 20:24 +10 +7 8 +05:03 05:07 +05:12 05:15 +05:13 05:14 +05:14 05:15 +05:03 05:05 +05:00 05:04 +05:09 05:10 +05:04 05:07 +05:07 05:09 +05:05 05:08 +05:05 05:06 +05:10 05:13 +05:05 05:10 +05:15 05:19 +05:11 05:13 +4 +3 11 +19:53 20:13 +19:09 19:38 +18:50 19:00 +19:46 20:13 +19:04 19:20 +19:44 19:58 +19:03 19:19 +19:52 20:03 +19:48 20:11 +19:05 19:34 +19:51 20:21 +19:26 19:45 +19:29 19:47 +19:53 20:09 +13 +25 69 +12:05 12:24 +12:21 12:40 +13:26 13:41 +13:28 13:47 +12:38 12:53 +13:40 13:50 +12:40 12:55 +12:09 12:28 +12:48 12:58 +13:03 13:21 +12:18 12:28 +13:08 13:19 +12:57 13:10 +12:22 12:38 +13:24 13:38 +13:05 13:25 +13:20 13:30 +13:49 14:04 +13:41 13:53 +13:11 13:22 +12:19 12:30 +12:57 13:15 +13:05 13:18 +13:47 14:00 +12:38 12:56 +14:38 14:54 +11:59 12:15 +12:45 13:03 +11:19 11:31 +12:27 12:44 +11:01 11:14 +15:00 15:11 +12:06 12:20 +11:46 11:56 +11:57 12:13 +13:17 13:37 +12:15 12:33 +14:30 14:44 +11:19 11:37 +13:48 14:02 +13:54 14:04 +13:17 13:29 +11:44 11:59 +12:44 13:00 +11:47 11:58 +14:34 14:54 +14:03 14:19 +14:05 14:25 +11:38 11:52 +11:45 12:01 +12:59 13:11 +12:35 12:52 +14:10 14:23 +14:14 14:24 +12:46 12:59 +14:56 15:06 +12:20 12:40 +13:29 13:44 +11:02 11:17 +11:18 11:33 +12:17 12:29 +11:32 11:45 +14:01 14:14 +13:14 13:33 +12:33 12:53 +11:13 11:23 +13:29 13:48 +11:37 11:56 +12:30 12:46 +11:46 12:00 +11:27 11:46 +14:35 14:48 +14:10 14:27 +14:45 15:04 +14:14 14:31 +12:05 12:23 +14:18 14:28 +12:18 12:32 +12:56 13:07 +11:49 12:07 +11:32 11:48 +13:13 13:23 +14:46 15:03 +14:06 14:22 +14:35 14:53 +15:00 15:13 +14:07 14:27 +12:12 12:29 +13:44 13:54 +14:19 14:37 +12:31 12:48 +12:50 13:07 +14:58 15:15 +13:08 13:22 +15 +29 58 +14:42 18:05 +15:47 18:05 +19:25 22:01 +12:45 16:33 +19:56 23:33 +11:34 15:19 +17:58 19:59 +17:08 17:55 +16:08 17:22 +19:53 20:57 +19:00 20:56 +14:41 16:51 +11:34 12:50 +09:06 10:04 +19:39 23:00 +13:06 15:48 +15:40 16:31 +10:03 11:57 +15:08 16:51 +12:41 16:28 +12:25 14:03 +11:13 14:42 +17:12 19:27 +19:47 23:00 +12:46 13:23 +12:08 14:55 +17:19 19:00 +15:07 18:10 +11:48 15:07 +13:50 14:51 +19:06 19:35 +11:33 13:37 +18:07 19:51 +14:51 18:04 +19:01 20:50 +15:13 17:40 +16:39 20:42 +13:45 15:49 +17:53 20:31 +12:24 16:48 +10:24 14:13 +16:19 18:55 +15:57 17:56 +19:34 22:44 +13:21 15:43 +13:38 15:39 +16:17 18:40 +17:46 20:36 +18:42 22:55 +11:58 16:29 +17:58 20:31 +09:02 13:36 +19:03 21:18 +10:24 12:12 +17:01 18:05 +17:48 20:42 +18:01 23:01 +12:05 16:55 +12:33 16:41 +13:24 15:32 +15:06 17:05 +19:32 22:55 +19:23 19:36 +17:24 19:38 +12:00 15:56 +11:14 14:15 +09:21 13:11 +14:45 17:19 +19:20 21:27 +09:16 10:47 +11:02 11:20 +09:02 11:33 +10:18 15:06 +10:58 14:11 +17:15 19:42 +15:32 16:50 +11:09 13:51 +19:07 21:27 +10:10 10:29 +11:10 12:50 +18:03 21:39 +19:00 20:15 +19:30 23:34 +13:05 16:40 +18:29 22:46 +13:45 16:32 +11:29 11:42 +45 +19 42 +16:22 20:07 +01:38 05:14 +13:32 17:08 +16:32 19:54 +07:54 11:45 +09:55 13:42 +04:57 08:57 +03:57 07:11 +05:33 08:35 +02:23 05:44 +11:58 15:09 +12:46 16:15 +00:31 03:56 +16:02 19:10 +14:59 18:33 +09:05 12:46 +18:51 22:02 +11:11 14:39 +07:47 11:40 +02:23 04:41 +13:35 19:20 +08:39 10:06 +12:41 15:34 +02:42 14:29 +00:12 15:05 +01:32 08:05 +05:21 13:57 +01:56 08:17 +13:45 18:27 +18:28 22:38 +19:33 23:40 +09:18 18:41 +06:10 20:09 +07:54 10:34 +06:28 15:15 +11:46 23:37 +10:23 23:47 +06:16 10:40 +16:59 21:27 +16:51 23:03 +04:04 05:53 +00:10 03:10 +18:24 19:43 +09:15 12:58 +13:13 23:33 +14:02 22:47 +04:15 13:21 +08:02 09:08 +17:37 21:30 +09:28 18:50 +01:15 05:00 +05:43 18:37 +16:37 19:53 +13:19 16:25 +19:41 22:44 +19:01 22:30 +13:33 16:24 +04:57 11:13 +18:09 19:46 +03:15 14:33 +09:01 21:09 +60 +100 20 +13:40 17:07 +04:05 07:13 +13:32 17:25 +15:12 18:50 +19:52 23:01 +04:42 07:55 +09:35 12:40 +11:29 15:19 +11:48 15:40 +08:47 12:01 +02:47 06:29 +19:37 23:01 +09:07 13:07 +01:50 05:04 +00:57 04:19 +04:44 08:02 +01:20 05:18 +10:34 13:40 +08:14 11:19 +06:09 09:46 +04:53 08:41 +12:03 15:30 +17:31 20:32 +07:42 11:42 +15:38 19:32 +04:57 08:22 +05:07 08:35 +04:58 08:03 +18:13 21:17 +04:51 08:36 +17:31 20:45 +18:45 22:40 +15:26 18:50 +13:29 17:14 +14:03 17:30 +11:12 14:32 +02:06 05:48 +11:46 15:45 +16:55 19:56 +18:00 21:52 +04:31 08:11 +12:13 15:36 +00:38 03:41 +06:43 10:05 +13:11 16:43 +14:33 17:54 +16:20 19:51 +12:43 16:00 +19:06 22:31 +04:57 08:40 +19:38 22:39 +10:52 14:03 +18:20 21:49 +12:35 16:30 +08:38 12:00 +10:51 14:41 +16:29 20:06 +17:16 20:59 +15:44 18:58 +05:16 08:26 +00:09 03:39 +14:55 18:08 +03:45 07:32 +10:36 14:18 +15:35 18:57 +17:52 21:30 +03:41 07:38 +00:02 03:05 +08:11 11:32 +14:29 17:34 +20:00 23:27 +14:52 18:27 +07:30 11:30 +14:13 18:13 +00:44 04:14 +12:22 16:04 +18:39 21:43 +19:12 23:03 +12:55 16:01 +04:57 08:11 +09:37 13:17 +10:38 13:53 +15:23 18:59 +10:25 13:58 +09:51 13:07 +09:11 13:07 +13:34 17:33 +07:51 11:25 +05:40 08:42 +19:03 22:20 +02:32 05:37 +03:09 06:39 +04:39 08:15 +07:26 10:57 +04:49 08:15 +00:42 03:46 +13:58 17:05 +15:02 18:59 +15:35 19:34 +07:29 10:55 +12:49 16:46 +04:38 09:28 +03:00 07:15 +15:52 19:50 +14:53 17:53 +12:46 16:08 +07:39 12:30 +18:26 23:12 +19:30 23:50 +06:36 10:51 +09:48 13:36 +14:25 19:24 +10:40 14:44 +00:09 03:21 +12:52 17:46 +17:06 20:09 +13:59 17:03 +05:51 09:11 +06:06 10:33 +10:42 14:15 +13 +20 30 +01:49 02:13 +02:36 03:33 +04:31 05:12 +05:48 06:06 +06:42 06:45 +06:49 07:14 +08:21 08:34 +09:12 10:08 +11:10 12:08 +12:38 13:15 +13:29 13:56 +15:10 16:09 +16:44 17:23 +18:01 18:30 +19:07 19:51 +20:03 20:58 +21:53 22:52 +20:18 20:19 +20:35 21:08 +21:38 21:55 +02:19 02:27 +03:34 04:30 +05:15 05:39 +06:16 06:32 +06:47 06:48 +07:23 08:19 +08:39 09:08 +10:16 11:06 +12:16 12:28 +13:22 13:25 +14:04 15:03 +16:14 16:42 +17:33 17:55 +18:31 19:01 +19:56 19:57 +21:05 21:44 +22:58 23:56 +19:35 20:09 +20:24 20:25 +21:14 21:33 +22:02 22:05 +22:48 22:54 +14:32 14:33 +15:41 16:00 +16:31 17:01 +17:44 17:52 +18:11 18:26 +19:17 19:39 +20:25 20:28 +21:33 22:10 +0 +60 40 +03:08 03:51 +04:15 04:46 +05:27 05:50 +06:23 07:22 +07:54 08:05 +08:13 08:43 +09:39 10:08 +10:23 10:46 +11:40 12:17 +12:59 13:38 +13:47 14:23 +14:54 15:00 +15:40 15:50 +16:17 16:24 +16:41 17:06 +18:04 18:37 +19:29 19:40 +20:04 20:52 +21:15 22:07 +22:57 23:22 +15:13 15:46 +15:51 16:16 +16:43 17:01 +17:10 17:19 +18:08 18:26 +19:18 19:45 +20:23 21:09 +21:51 22:04 +22:20 22:29 +08:02 08:25 +08:32 09:21 +09:52 10:32 +10:48 11:46 +12:46 13:38 +14:36 15:30 +15:48 15:55 +16:06 16:29 +17:13 17:32 +18:32 18:33 +18:43 18:51 +19:36 19:54 +19:58 20:33 +20:53 21:26 +21:36 22:32 +22:43 22:57 +18:55 19:11 +19:49 20:48 +20:51 20:58 +21:19 21:45 +22:01 22:46 +04:49 05:21 +06:21 06:41 +07:39 08:32 +08:55 09:12 +09:41 10:05 +10:57 10:59 +11:21 12:08 +12:36 12:37 +12:54 13:45 +13:56 14:28 +02:25 03:08 +03:52 04:15 +04:46 05:26 +05:50 06:22 +07:22 07:53 +08:05 08:13 +08:43 09:39 +10:08 10:22 +10:46 11:39 +12:18 12:58 +13:39 13:46 +14:24 14:53 +15:01 15:39 +15:50 16:17 +16:24 16:40 +17:07 18:04 +18:38 19:28 +19:41 20:03 +20:53 21:15 +22:08 22:57 +22:16 23:13 +14:57 15:12 +15:46 15:50 +16:17 16:43 +17:02 17:10 +17:19 18:08 +18:26 19:17 +19:46 20:23 +21:09 21:51 +22:04 22:19 +22:30 23:06 +08:26 08:32 +09:21 09:52 +10:32 10:47 +11:46 12:46 +13:39 14:36 +15:30 15:48 +15:55 16:05 +16:30 17:12 +17:32 18:31 +24 +10 12 +04:38 04:48 +04:37 04:46 +04:58 04:59 +04:52 05:00 +04:46 04:53 +04:29 04:30 +04:38 04:42 +04:52 05:02 +04:17 04:27 +04:44 04:52 +04:51 05:00 +04:49 04:54 +04:54 05:01 +04:44 04:50 +04:41 04:45 +04:54 05:02 +04:19 04:24 +04:31 04:35 +04:43 04:50 +04:07 04:15 +04:32 04:42 +04:56 04:57 +5 +15 2 +12:40 13:45 +05:07 06:30 +08:11 09:35 +11:08 12:40 +14:26 15:38 +05:47 07:12 +09:00 10:52 +12:31 14:01 +07:10 08:34 +10:25 12:25 +14:12 15:31 +06:58 08:57 +11:07 12:59 +07:54 09:50 +11:33 13:12 +11:19 12:37 +13:49 15:13 +13 +4 12 +14:07 14:55 +11:05 11:52 +12:30 13:18 +14:06 14:39 +14:25 14:57 +14:58 15:32 +11:54 12:30 +13:19 14:02 +14:39 15:09 +11:09 11:59 +12:32 13:21 +14:20 14:50 +14:22 14:53 +11:26 12:09 +12:59 13:53 +14:57 15:54 +5 +13 17 +10:33 10:50 +10:21 10:40 +10:30 10:50 +10:29 10:40 +10:38 10:57 +10:21 10:32 +10:20 10:30 +10:56 11:16 +10:39 10:51 +10:21 10:39 +10:59 11:18 +10:38 10:50 +10:27 10:44 +10:56 11:06 +10:49 11:09 +10:57 11:11 +10:44 11:04 +10:39 10:56 +10:31 10:50 +10:58 11:10 +10:10 10:20 +10:43 10:55 +10:22 10:32 +10:52 11:04 +10:56 11:10 +10:11 10:24 +10:49 11:04 +10:21 10:39 +10:12 10:27 +10:53 11:05 +15 +18 19 +10:21 10:36 +11:12 11:31 +12:03 12:14 +12:53 13:05 +13:53 14:04 +14:23 14:33 +15:07 15:24 +15:54 16:04 +16:38 16:49 +17:21 17:32 +18:06 18:23 +18:50 19:07 +19:28 19:40 +20:20 20:32 +21:06 21:17 +12:00 12:11 +12:56 13:13 +13:59 14:17 +10:50 11:08 +11:41 11:58 +12:26 12:36 +13:20 13:38 +14:04 14:17 +14:45 14:57 +15:37 15:52 +16:09 16:21 +16:49 17:07 +17:41 18:01 +18:28 18:39 +19:10 19:27 +19:48 20:06 +20:37 20:56 +21:32 21:50 +12:30 12:43 +13:24 13:42 +14:35 14:55 +15:30 15:43 +2 +20 19 +21:31 21:46 +21:45 21:55 +21:44 22:02 +20:07 20:19 +20:49 20:59 +21:30 21:43 +20:12 20:32 +20:53 21:03 +21:20 21:39 +22:00 22:11 +20:30 20:46 +21:04 21:21 +21:54 22:05 +20:56 21:14 +21:36 21:56 +21:46 22:03 +19:30 19:45 +19:57 20:15 +20:47 21:05 +21:25 21:43 +21:46 22:01 +21:57 22:07 +19:46 20:06 +20:23 20:42 +21:09 21:23 +21:52 22:04 +19:54 20:05 +20:35 20:47 +21:05 21:16 +21:39 21:54 +20:53 21:04 +21:30 21:44 +20:41 20:55 +21:23 21:36 +21:58 22:11 +21:26 21:39 +19:45 19:56 +20:24 20:38 +21:07 21:18 +30 +20 20 +19:01 20:16 +15:24 16:39 +18:53 20:08 +15:36 16:41 +19:01 20:11 +20:03 21:17 +19:36 20:56 +20:31 21:49 +13:03 14:21 +16:14 17:27 +20:08 21:28 +19:54 21:11 +17:17 18:31 +20:52 22:00 +20:41 21:51 +21:51 23:03 +17:01 18:03 +20:37 21:56 +18:23 19:31 +21:59 23:01 +20:46 21:53 +20:19 21:21 +13:27 14:34 +17:13 18:27 +20:30 21:48 +13:54 15:00 +17:20 18:30 +21:06 22:13 +17:45 18:46 +21:36 22:47 +14:46 15:54 +18:03 19:15 +21:54 23:13 +18:31 19:34 +15:17 16:30 +18:53 20:01 +20:16 21:30 +18:56 20:00 +16:06 17:26 +20:13 21:23 +40 +50 50 +00:56 01:42 +00:48 01:41 +00:33 01:13 +00:31 01:08 +00:13 01:03 +00:48 01:19 +00:59 01:32 +00:49 01:39 +00:12 01:02 +00:23 01:05 +00:10 01:10 +00:07 00:38 +00:17 01:08 +00:12 01:11 +00:58 01:46 +00:34 01:18 +00:33 01:09 +00:33 01:13 +00:04 00:56 +00:39 01:19 +00:54 01:35 +00:06 00:55 +00:41 01:16 +00:45 01:36 +00:30 01:00 +00:05 01:04 +00:31 01:24 +00:11 01:03 +00:28 00:59 +00:42 01:23 +00:50 01:21 +00:24 01:15 +00:00 00:41 +00:45 01:15 +00:39 01:39 +00:04 00:55 +00:19 00:53 +00:54 01:29 +00:42 01:29 +00:13 00:48 +00:54 01:33 +00:20 01:14 +00:11 00:43 +00:13 00:54 +00:48 01:33 +00:26 01:13 +00:25 01:06 +00:40 01:36 +00:52 01:40 +00:44 01:25 +00:12 00:56 +00:30 01:07 +00:55 01:47 +00:43 01:42 +00:40 01:12 +00:06 00:43 +00:48 01:19 +00:22 01:08 +00:47 01:44 +00:35 01:11 +00:49 01:33 +00:28 01:02 +00:53 01:47 +00:37 01:29 +00:25 01:12 +00:51 01:38 +00:54 01:35 +00:41 01:18 +00:07 00:38 +00:36 01:07 +00:03 00:58 +00:48 01:28 +00:56 01:46 +00:40 01:29 +00:26 00:56 +00:03 00:41 +00:51 01:42 +00:21 00:58 +00:55 01:33 +00:20 01:20 +00:06 00:58 +00:22 01:00 +00:17 01:11 +00:48 01:48 +00:47 01:46 +00:09 01:03 +00:54 01:46 +00:55 01:41 +00:51 01:23 +00:51 01:26 +00:03 00:56 +00:58 01:44 +00:00 00:32 +00:14 00:52 +00:32 01:11 +00:43 01:30 +00:10 00:46 +00:21 01:08 +00:45 01:21 +00:03 00:40 +41 +49 51 +00:14 01:13 +01:46 02:44 +00:10 00:47 +00:54 01:49 +01:46 02:46 +00:35 01:14 +01:41 02:34 +01:28 02:18 +00:30 01:19 +00:39 01:29 +01:36 02:16 +01:28 02:06 +01:36 02:16 +00:22 00:54 +01:57 02:34 +01:12 01:53 +01:24 01:54 +01:53 02:44 +01:39 02:22 +00:41 01:31 +00:15 01:05 +01:46 02:38 +00:17 01:02 +00:58 01:31 +01:41 02:27 +01:38 02:23 +01:32 02:08 +00:23 01:17 +01:40 02:26 +00:43 01:31 +01:44 02:44 +01:23 02:12 +01:11 02:09 +00:58 01:40 +00:17 00:58 +01:19 01:53 +00:04 00:37 +01:04 01:40 +00:46 01:32 +00:19 01:13 +00:08 01:00 +00:40 01:11 +00:23 01:03 +00:38 01:21 +01:39 02:35 +01:09 02:00 +00:04 00:35 +01:18 02:06 +01:29 02:29 +01:15 01:50 +00:25 01:19 +01:33 02:14 +01:00 01:58 +00:12 00:59 +01:48 02:36 +01:58 02:56 +00:01 00:49 +01:30 02:22 +01:45 02:39 +01:15 02:14 +00:44 01:29 +01:29 02:13 +01:36 02:35 +00:48 01:22 +00:05 00:53 +00:32 01:07 +00:32 01:19 +01:00 01:34 +01:55 02:38 +00:13 01:10 +00:36 01:36 +01:57 02:40 +01:39 02:20 +01:55 02:27 +01:07 01:56 +01:02 01:54 +00:49 01:46 +01:44 02:32 +01:59 02:55 +01:03 01:46 +00:04 00:40 +01:02 01:37 +01:21 01:52 +01:19 01:49 +00:39 01:33 +01:53 02:32 +00:42 01:27 +00:39 01:31 +00:49 01:42 +00:42 01:27 +00:02 00:43 +01:29 02:10 +00:16 00:47 +01:16 01:51 +00:12 00:46 +00:46 01:39 +00:02 00:55 +01:42 02:36 +01:13 01:54 +00:43 01:18 +42 +48 52 +00:47 01:31 +02:12 02:53 +02:46 03:39 +01:35 02:19 +00:29 01:14 +02:01 03:01 +01:38 02:14 +02:14 03:08 +01:55 02:48 +02:10 03:08 +02:11 03:02 +01:15 02:15 +03:00 03:52 +00:10 00:41 +02:37 03:14 +02:48 03:39 +00:08 01:04 +02:52 03:49 +01:39 02:33 +02:48 03:44 +01:50 02:42 +02:32 03:28 +01:16 01:53 +01:52 02:38 +02:12 02:49 +00:40 01:26 +02:41 03:39 +01:12 02:09 +01:07 02:01 +01:59 02:42 +02:52 03:30 +00:34 01:07 +02:20 03:13 +03:00 03:40 +01:28 02:08 +00:06 01:06 +00:49 01:45 +00:58 01:44 +00:27 01:27 +00:37 01:23 +02:11 03:11 +00:50 01:22 +02:34 03:16 +02:51 03:23 +01:24 02:17 +00:26 01:00 +02:49 03:47 +01:35 02:34 +01:13 01:59 +00:52 01:28 +02:33 03:05 +01:45 02:37 +01:41 02:28 +02:26 03:12 +00:31 01:29 +02:36 03:07 +00:33 01:29 +00:07 00:47 +01:50 02:21 +01:27 02:11 +00:49 01:24 +02:17 03:02 +00:34 01:13 +02:20 03:18 +01:29 02:00 +00:53 01:49 +00:36 01:28 +00:19 01:18 +01:06 01:36 +02:02 02:34 +01:29 02:00 +00:10 00:49 +00:54 01:38 +00:12 00:47 +00:19 00:51 +00:40 01:26 +02:38 03:31 +02:17 02:59 +00:36 01:35 +01:06 02:06 +01:04 01:57 +00:26 01:20 +01:43 02:21 +02:53 03:53 +02:09 03:00 +02:03 02:48 +02:47 03:33 +01:09 01:41 +01:42 02:28 +02:07 02:58 +02:10 02:40 +02:11 02:52 +02:24 03:17 +00:35 01:29 +00:25 01:07 +01:44 02:24 +02:48 03:46 +01:54 02:43 +02:05 02:47 +02:01 02:41 +43 +47 53 +00:23 01:05 +03:45 04:33 +02:47 03:42 +02:28 03:00 +03:48 04:26 +01:31 02:07 +01:10 02:01 +02:15 03:07 +01:00 01:55 +02:10 03:06 +03:42 04:12 +03:39 04:21 +03:43 04:35 +03:38 04:20 +00:00 00:32 +03:53 04:29 +02:54 03:33 +00:55 01:41 +01:47 02:25 +02:30 03:27 +02:58 03:35 +03:14 03:47 +01:44 02:23 +00:57 01:53 +00:11 00:57 +03:16 04:01 +02:01 02:56 +02:27 03:24 +03:48 04:37 +00:06 00:59 +03:08 04:02 +01:57 02:27 +01:20 01:50 +03:03 03:39 +00:58 01:34 +00:47 01:36 +02:28 03:15 +01:28 02:25 +03:22 04:15 +03:49 04:42 +02:03 02:59 +00:47 01:17 +01:18 02:06 +02:03 02:38 +01:12 01:56 +00:53 01:40 +01:57 02:56 +03:15 04:00 +03:46 04:43 +02:19 03:14 +00:39 01:10 +00:28 01:09 +03:55 04:35 +00:55 01:41 +02:00 02:41 +03:04 04:03 +00:34 01:29 +00:13 01:00 +01:06 02:04 +01:52 02:36 +00:14 00:48 +02:42 03:42 +02:03 03:00 +00:45 01:26 +03:16 03:57 +00:55 01:48 +02:26 03:11 +03:13 04:02 +01:21 01:52 +03:25 03:55 +03:03 03:37 +02:02 03:01 +01:36 02:35 +02:58 03:36 +03:55 04:30 +03:54 04:34 +03:36 04:24 +03:33 04:33 +02:53 03:32 +03:43 04:28 +02:44 03:40 +01:42 02:36 +03:30 04:20 +02:31 03:04 +02:47 03:27 +00:35 01:22 +01:17 01:58 +02:06 02:58 +01:33 02:08 +02:30 03:01 +02:00 02:47 +00:46 01:40 +02:27 03:07 +00:07 00:41 +02:00 02:37 +00:13 00:49 +03:53 04:28 +02:28 03:24 +03:34 04:09 +03:21 03:56 +44 +46 54 +02:33 03:25 +02:25 02:58 +00:24 01:11 +00:11 00:41 +02:11 03:03 +04:45 05:42 +02:14 02:48 +04:50 05:31 +00:12 01:10 +00:25 01:15 +03:45 04:37 +03:30 04:04 +03:44 04:27 +01:53 02:46 +04:48 05:46 +04:57 05:52 +04:04 04:38 +03:45 04:30 +03:46 04:31 +03:19 03:49 +00:55 01:31 +02:04 02:36 +04:52 05:28 +04:03 04:55 +00:35 01:17 +01:58 02:28 +01:00 01:58 +04:32 05:10 +01:53 02:52 +04:22 04:53 +03:42 04:34 +03:51 04:21 +04:18 04:50 +02:34 03:15 +02:00 02:49 +02:37 03:33 +00:20 01:07 +04:42 05:28 +04:07 04:48 +01:43 02:15 +00:11 00:47 +02:13 02:51 +04:19 05:18 +00:06 00:58 +02:48 03:33 +04:34 05:11 +03:56 04:53 +02:22 02:59 +04:00 04:38 +03:18 04:17 +01:29 02:05 +00:55 01:51 +03:24 04:00 +03:28 04:15 +01:11 02:02 +01:01 01:40 +02:52 03:35 +02:17 03:05 +02:54 03:29 +04:17 04:58 +00:18 00:55 +01:49 02:39 +02:57 03:29 +03:14 03:46 +01:56 02:46 +04:26 05:12 +04:41 05:29 +02:39 03:17 +00:50 01:29 +03:14 04:01 +02:05 02:59 +00:31 01:12 +04:38 05:10 +03:00 03:44 +01:00 01:30 +04:26 05:04 +04:23 04:58 +04:25 05:18 +02:56 03:43 +00:48 01:18 +00:40 01:35 +02:56 03:38 +02:47 03:19 +00:46 01:31 +00:29 01:21 +04:45 05:42 +00:57 01:32 +04:53 05:44 +00:53 01:51 +03:30 04:18 +04:44 05:35 +04:34 05:26 +04:38 05:24 +02:28 03:19 +00:13 01:10 +02:09 02:42 +00:39 01:39 +03:39 04:35 +04:09 05:00 +03:42 04:14 +45 +45 55 +05:31 06:01 +04:02 04:45 +01:44 02:34 +01:20 02:11 +03:36 04:17 +05:04 06:01 +03:38 04:25 +05:34 06:23 +01:32 02:31 +04:44 05:40 +03:20 04:18 +02:39 03:33 +05:29 06:24 +00:41 01:36 +00:47 01:20 +04:47 05:18 +04:22 04:59 +02:05 02:58 +02:31 03:10 +00:16 01:13 +00:02 00:35 +03:26 04:25 +04:42 05:15 +03:26 03:57 +04:29 05:03 +00:55 01:43 +05:59 06:51 +03:45 04:22 +01:55 02:44 +05:16 05:49 +04:07 05:00 +02:21 02:57 +02:35 03:10 +04:47 05:38 +02:04 02:34 +02:59 03:54 +05:24 06:02 +00:05 00:56 +02:15 02:47 +01:27 02:11 +05:42 06:27 +05:25 06:03 +02:29 03:29 +00:54 01:46 +05:20 06:12 +03:04 03:48 +02:27 03:19 +05:02 05:37 +05:46 06:29 +01:42 02:39 +02:45 03:29 +05:12 06:01 +02:08 02:48 +05:25 06:09 +04:08 05:00 +03:09 04:02 +03:33 04:18 +03:51 04:51 +04:27 04:59 +00:42 01:13 +00:46 01:22 +01:06 01:58 +05:53 06:33 +04:15 05:15 +01:32 02:14 +03:13 03:59 +05:31 06:27 +01:25 02:20 +04:44 05:14 +01:41 02:21 +03:14 03:56 +01:18 02:15 +02:51 03:40 +05:10 06:05 +02:27 03:00 +01:09 01:40 +04:51 05:51 +01:46 02:39 +00:56 01:55 +00:40 01:24 +00:50 01:35 +05:30 06:24 +00:56 01:54 +01:34 02:14 +03:03 03:38 +01:52 02:40 +00:07 01:07 +05:32 06:20 +02:10 02:42 +02:21 03:16 +03:09 03:40 +01:25 01:58 +01:34 02:15 +00:48 01:29 +04:48 05:32 +03:51 04:37 +02:30 03:15 +02:28 02:59 +02:13 02:59 +00:45 01:22 +46 +44 56 +01:00 01:56 +03:26 04:14 +02:31 03:21 +05:18 06:14 +01:39 02:10 +05:22 06:09 +00:02 00:47 +03:06 03:36 +04:47 05:25 +05:04 05:35 +00:35 01:11 +00:42 01:26 +03:18 04:12 +03:10 04:00 +00:40 01:30 +04:34 05:26 +00:23 01:21 +06:36 07:36 +01:34 02:23 +03:03 03:57 +02:32 03:18 +03:13 03:51 +04:05 04:39 +06:17 07:04 +02:32 03:04 +06:54 07:32 +01:12 02:02 +00:06 00:46 +06:54 07:42 +01:56 02:55 +04:37 05:11 +04:44 05:35 +00:35 01:17 +02:52 03:45 +01:31 02:03 +02:00 02:43 +04:56 05:56 +02:57 03:46 +01:45 02:42 +07:00 07:43 +06:18 07:14 +03:36 04:30 +04:17 05:04 +02:43 03:36 +00:16 01:12 +00:11 01:02 +04:19 05:14 +03:42 04:22 +03:30 04:19 +06:58 07:55 +04:01 04:54 +00:39 01:11 +02:22 03:02 +05:20 05:52 +06:26 06:59 +00:34 01:09 +01:22 02:18 +05:13 06:11 +05:33 06:33 +06:32 07:32 +00:55 01:38 +06:59 07:46 +01:41 02:18 +01:07 01:39 +04:37 05:12 +02:43 03:37 +03:27 04:06 +00:15 01:05 +05:43 06:28 +03:56 04:32 +02:31 03:05 +01:59 02:55 +05:43 06:43 +01:45 02:20 +03:33 04:06 +01:02 01:35 +06:32 07:19 +06:31 07:20 +00:34 01:18 +04:56 05:43 +06:28 07:15 +02:41 03:23 +06:54 07:27 +01:36 02:20 +00:23 01:21 +05:02 06:02 +06:43 07:23 +03:11 04:03 +03:32 04:14 +00:46 01:29 +02:33 03:11 +03:18 03:51 +00:53 01:30 +00:13 00:43 +02:09 02:56 +01:41 02:23 +06:09 06:43 +05:15 05:57 +03:15 04:06 +02:49 03:43 +47 +43 57 +03:08 04:06 +06:07 06:45 +05:09 05:47 +00:47 01:45 +00:56 01:55 +06:58 07:35 +07:51 08:25 +06:21 06:59 +03:53 04:27 +00:38 01:09 +05:39 06:15 +03:52 04:47 +06:06 06:42 +02:25 03:16 +06:22 07:10 +02:35 03:31 +00:52 01:43 +03:18 03:56 +00:31 01:27 +03:44 04:14 +00:33 01:08 +06:06 06:59 +07:53 08:28 +01:44 02:41 +01:24 02:00 +06:18 07:05 +01:45 02:22 +01:48 02:40 +07:58 08:33 +05:09 06:07 +00:58 01:53 +04:06 04:50 +05:34 06:22 +07:43 08:39 +01:17 01:55 +02:41 03:25 +01:08 01:49 +02:31 03:19 +06:12 06:52 +03:58 04:40 +07:13 07:52 +01:55 02:44 +05:09 05:43 +05:58 06:42 +05:23 05:54 +00:58 01:42 +02:03 02:47 +06:02 06:41 +06:33 07:09 +04:55 05:42 +06:59 07:30 +01:00 01:51 +04:08 05:05 +02:31 03:16 +03:06 03:53 +05:28 06:18 +00:25 01:01 +05:30 06:28 +07:15 08:11 +04:43 05:24 +02:40 03:32 +01:01 02:00 +05:00 05:50 +02:23 03:15 +02:10 03:00 +00:18 01:15 +04:21 04:58 +06:42 07:28 +01:54 02:30 +07:54 08:36 +05:54 06:28 +01:59 02:42 +05:35 06:18 +00:09 00:57 +07:13 07:48 +06:00 06:32 +03:47 04:24 +07:29 08:07 +02:54 03:42 +04:31 05:22 +04:33 05:12 +04:51 05:43 +00:27 01:13 +00:35 01:08 +07:06 08:03 +03:13 03:46 +03:31 04:30 +06:47 07:31 +07:59 08:51 +07:28 08:04 +04:42 05:30 +02:56 03:54 +05:44 06:18 +06:33 07:33 +04:46 05:43 +00:34 01:26 +06:09 06:55 +02:22 03:00 +01:47 02:19 +07:58 08:51 +48 +42 58 +05:43 06:41 +06:11 06:57 +08:06 08:54 +07:18 08:06 +04:01 04:37 +08:04 08:45 +00:16 00:47 +06:59 07:39 +02:08 02:51 +08:58 09:38 +00:02 00:46 +04:46 05:23 +01:27 02:23 +00:48 01:41 +01:43 02:35 +05:03 05:55 +01:39 02:30 +01:49 02:27 +06:08 07:00 +05:53 06:28 +06:45 07:45 +06:30 07:22 +05:06 05:54 +01:13 01:57 +08:26 09:15 +02:05 03:03 +07:28 07:58 +03:05 03:39 +01:03 01:57 +01:36 02:34 +00:06 01:01 +01:39 02:21 +00:08 00:54 +00:41 01:33 +04:51 05:33 +04:20 04:50 +00:16 01:13 +07:55 08:26 +08:35 09:08 +05:02 05:42 +01:05 01:53 +05:50 06:37 +01:28 02:27 +03:21 04:00 +08:51 09:45 +01:34 02:17 +01:07 01:41 +06:11 06:51 +02:18 02:54 +05:41 06:15 +03:50 04:40 +01:13 02:12 +04:34 05:06 +08:40 09:40 +07:00 07:40 +08:06 08:49 +08:29 09:25 +07:32 08:12 +06:08 06:39 +05:36 06:06 +07:04 07:35 +01:27 02:02 +08:26 09:02 +02:40 03:16 +05:47 06:28 +00:28 01:17 +03:19 03:53 +07:39 08:16 +00:14 00:53 +00:35 01:29 +05:48 06:35 +06:02 06:44 +05:14 06:09 +02:29 03:24 +03:39 04:18 +07:27 08:23 +00:40 01:39 +05:29 06:28 +05:47 06:21 +08:36 09:15 +07:40 08:13 +08:29 09:08 +08:39 09:20 +01:56 02:39 +02:49 03:47 +07:06 07:49 +08:18 09:08 +06:41 07:41 +03:58 04:29 +02:54 03:25 +05:49 06:23 +01:31 02:02 +04:50 05:29 +02:39 03:29 +08:33 09:10 +02:16 03:01 +07:16 07:56 +07:26 08:14 +01:53 02:51 +02:52 03:37 +49 +41 59 +04:20 05:01 +06:57 07:48 +04:55 05:33 +09:06 09:39 +02:52 03:49 +07:59 08:53 +07:10 08:01 +08:28 09:06 +00:40 01:38 +06:03 06:58 +01:28 02:25 +07:50 08:24 +02:29 03:29 +06:11 06:43 +04:47 05:19 +09:12 10:11 +02:45 03:43 +06:41 07:19 +05:34 06:34 +00:48 01:38 +09:50 10:48 +00:49 01:27 +07:27 08:25 +00:53 01:29 +06:18 06:56 +03:29 04:06 +08:47 09:22 +02:06 02:46 +09:18 10:12 +00:25 00:57 +00:42 01:24 +01:22 02:11 +06:20 06:54 +03:15 04:03 +00:22 00:59 +06:02 06:42 +00:21 00:56 +04:23 04:58 +02:57 03:49 +01:21 01:57 +06:48 07:28 +08:32 09:12 +00:00 00:48 +06:32 07:06 +02:16 03:09 +08:40 09:16 +09:46 10:36 +05:50 06:26 +02:45 03:23 +00:59 01:57 +04:48 05:24 +09:21 10:21 +00:10 00:48 +04:57 05:56 +05:40 06:30 +00:51 01:26 +02:27 03:04 +02:21 03:13 +00:04 00:51 +07:10 07:45 +07:14 07:47 +06:12 07:05 +08:51 09:38 +03:35 04:09 +03:14 04:03 +04:02 04:56 +00:45 01:28 +00:20 00:57 +05:26 06:21 +09:56 10:27 +09:09 09:57 +05:02 05:52 +02:02 02:39 +07:17 08:17 +00:38 01:12 +02:24 03:06 +09:45 10:29 +00:44 01:18 +01:02 01:49 +01:15 02:13 +04:18 04:57 +00:56 01:51 +00:32 01:14 +04:48 05:40 +07:29 08:29 +01:18 02:15 +07:21 07:54 +04:19 05:01 +06:41 07:22 +06:43 07:41 +02:54 03:40 +08:05 09:01 +09:29 10:13 +00:35 01:26 +06:44 07:22 +04:22 04:56 +05:48 06:44 +08:19 08:50 +08:52 09:38 +00:47 01:47 +50 +40 60 +00:40 01:23 +04:50 05:41 +00:36 01:27 +04:28 05:26 +01:03 01:52 +05:13 05:46 +07:27 08:06 +10:17 10:55 +03:03 03:54 +08:18 09:01 +02:27 03:17 +09:23 09:54 +10:46 11:22 +03:40 04:33 +05:28 06:10 +01:44 02:31 +01:32 02:19 +09:46 10:26 +04:00 04:34 +00:49 01:21 +04:16 05:00 +05:06 06:00 +09:23 09:57 +08:19 08:53 +03:09 03:49 +08:15 08:54 +04:55 05:53 +07:49 08:22 +06:35 07:26 +08:29 09:19 +06:48 07:40 +00:29 01:20 +07:10 07:44 +01:35 02:05 +05:55 06:47 +07:58 08:37 +01:41 02:35 +06:48 07:32 +09:07 09:58 +03:54 04:35 +03:54 04:25 +02:45 03:24 +07:00 07:42 +05:54 06:25 +05:49 06:39 +00:54 01:28 +08:20 08:57 +05:58 06:58 +03:39 04:35 +03:32 04:31 +01:27 02:11 +08:25 09:23 +02:30 03:08 +07:42 08:14 +00:28 01:14 +10:32 11:11 +06:06 06:40 +01:59 02:51 +10:18 10:49 +03:38 04:23 +09:28 10:11 +10:18 10:54 +10:04 10:47 +06:51 07:36 +09:48 10:40 +08:59 09:29 +03:09 03:56 +04:40 05:33 +09:16 09:57 +10:24 11:02 +10:08 10:46 +04:32 05:18 +09:52 10:23 +06:47 07:44 +01:08 02:07 +02:01 02:48 +07:15 07:56 +01:30 02:06 +06:37 07:14 +06:27 07:10 +06:29 07:21 +02:03 02:35 +01:29 02:28 +01:30 02:00 +07:16 08:01 +01:20 01:57 +02:34 03:32 +09:16 09:46 +09:58 10:53 +08:53 09:26 +10:21 11:07 +07:08 07:49 +06:01 06:37 +05:46 06:45 +06:27 06:58 +03:16 04:07 +05:52 06:24 +02:49 03:40 +03:22 03:56 +10:13 11:03 +51 +39 61 +09:55 10:37 +04:34 05:32 +05:40 06:27 +11:29 12:13 +04:19 05:02 +03:15 04:02 +05:25 06:03 +06:29 07:26 +00:34 01:23 +07:30 08:14 +07:05 07:38 +02:27 03:03 +06:18 07:13 +09:57 10:53 +09:20 10:07 +05:31 06:09 +07:13 07:44 +07:17 08:03 +06:57 07:32 +08:16 08:46 +07:55 08:44 +01:54 02:50 +04:07 04:45 +03:07 03:57 +02:16 03:05 +06:33 07:33 +04:55 05:48 +05:02 05:58 +01:10 01:51 +00:07 00:45 +03:01 03:56 +03:16 04:00 +10:42 11:36 +10:50 11:45 +01:58 02:58 +02:30 03:03 +02:42 03:31 +05:09 06:09 +07:47 08:31 +03:41 04:37 +10:47 11:31 +05:24 05:57 +04:57 05:53 +00:22 01:03 +08:48 09:39 +04:10 05:10 +06:40 07:33 +06:37 07:21 +07:23 08:18 +07:38 08:22 +07:02 07:52 +07:30 08:05 +03:36 04:15 +02:00 02:43 +11:24 12:06 +05:06 05:46 +00:16 01:04 +03:08 03:40 +04:43 05:34 +09:04 09:42 +00:25 01:16 +00:40 01:24 +09:45 10:34 +11:59 12:33 +08:36 09:15 +09:06 09:37 +09:54 10:54 +00:06 01:01 +09:02 09:54 +08:41 09:40 +01:37 02:17 +05:44 06:17 +01:17 02:17 +01:59 02:52 +02:40 03:34 +03:33 04:14 +07:13 07:50 +01:32 02:21 +11:48 12:22 +11:07 11:46 +03:18 04:17 +03:22 04:05 +11:46 12:18 +07:49 08:31 +03:19 04:15 +03:55 04:51 +04:17 05:11 +03:52 04:24 +08:04 09:02 +07:41 08:17 +10:59 11:51 +00:00 00:42 +09:14 10:12 +05:51 06:25 +11:01 11:40 +09:31 10:11 +08:49 09:28 +00:18 00:56 +00:19 00:59 +03:50 04:45 +52 +38 62 +12:15 12:52 +01:16 02:03 +08:33 09:03 +06:37 07:32 +02:12 03:05 +06:59 07:36 +08:46 09:18 +04:06 05:04 +11:38 12:21 +08:30 09:06 +10:16 11:03 +08:24 09:01 +04:53 05:53 +02:03 03:00 +07:44 08:34 +07:36 08:19 +03:22 04:01 +08:44 09:41 +11:53 12:24 +12:24 13:17 +08:26 09:19 +05:19 06:10 +06:22 06:56 +03:38 04:15 +06:50 07:40 +04:16 05:16 +09:35 10:05 +11:19 11:51 +04:56 05:56 +00:43 01:41 +11:16 12:15 +08:54 09:34 +11:40 12:10 +08:42 09:33 +01:18 02:03 +06:17 07:17 +06:22 07:20 +06:07 06:59 +06:14 07:12 +07:49 08:28 +04:50 05:50 +06:55 07:26 +07:23 08:05 +08:58 09:30 +10:20 11:02 +00:13 01:06 +00:43 01:33 +03:06 03:40 +02:14 03:09 +03:18 04:05 +11:08 11:46 +05:29 06:10 +11:25 12:23 +01:46 02:28 +01:06 01:55 +07:27 08:10 +01:17 02:07 +11:33 12:28 +06:05 06:54 +04:14 05:00 +04:03 04:56 +01:15 01:53 +03:19 04:15 +07:44 08:33 +09:59 10:49 +09:42 10:24 +02:01 02:56 +06:28 07:17 +03:29 03:59 +10:03 11:02 +09:21 09:53 +00:27 01:08 +01:18 01:56 +05:36 06:10 +11:51 12:38 +10:15 11:07 +02:59 03:53 +11:43 12:37 +01:29 02:05 +10:49 11:20 +01:59 02:44 +12:39 13:26 +11:03 12:03 +12:13 13:02 +05:05 05:38 +11:27 12:14 +01:58 02:39 +03:22 04:02 +00:33 01:06 +00:46 01:16 +01:22 01:57 +10:17 11:00 +13:00 13:47 +04:29 05:08 +01:07 01:47 +04:30 05:09 +05:40 06:11 +01:07 01:37 +01:39 02:32 +03:07 03:43 +53 +37 63 +11:23 11:59 +13:21 14:18 +08:33 09:33 +03:58 04:30 +08:43 09:38 +09:12 09:58 +02:31 03:25 +12:44 13:44 +01:40 02:23 +04:46 05:30 +04:19 04:51 +12:50 13:34 +03:27 04:08 +07:11 07:42 +02:21 03:00 +00:40 01:10 +03:41 04:23 +01:08 01:48 +13:00 13:55 +10:12 10:47 +07:17 08:02 +06:41 07:12 +00:48 01:39 +01:44 02:38 +02:08 02:40 +05:57 06:39 +01:25 01:56 +06:37 07:14 +10:22 10:53 +07:01 07:55 +07:14 07:54 +11:47 12:40 +13:45 14:20 +01:20 02:04 +02:02 02:32 +07:16 07:47 +12:09 12:46 +04:27 05:24 +00:18 01:17 +09:27 10:16 +01:42 02:14 +00:24 01:06 +13:26 14:17 +11:13 12:00 +02:29 02:59 +07:58 08:55 +00:17 01:09 +04:09 05:02 +10:46 11:21 +10:14 11:12 +04:29 05:20 +09:17 10:15 +08:21 09:06 +02:51 03:40 +04:30 05:18 +09:55 10:41 +09:46 10:44 +05:31 06:05 +07:04 07:44 +05:12 05:47 +06:29 07:02 +00:34 01:17 +04:07 04:46 +02:32 03:22 +04:37 05:34 +13:18 14:00 +10:24 11:12 +06:48 07:19 +05:03 05:57 +13:04 13:48 +03:40 04:21 +09:18 10:13 +04:14 05:05 +10:41 11:13 +00:24 01:05 +06:10 06:58 +09:52 10:27 +06:08 06:46 +06:39 07:24 +01:15 01:49 +02:36 03:22 +08:23 09:00 +07:30 08:09 +04:01 04:48 +07:26 08:02 +13:41 14:34 +11:55 12:32 +11:50 12:38 +13:58 14:48 +11:26 12:17 +10:17 11:03 +03:41 04:40 +13:22 14:09 +03:17 04:08 +01:30 02:10 +01:40 02:23 +05:48 06:22 +13:50 14:36 +01:11 01:57 +13:57 14:46 +54 +36 64 +13:15 14:00 +14:33 15:33 +02:48 03:47 +05:42 06:19 +00:23 00:54 +14:15 14:47 +04:37 05:28 +02:25 03:10 +08:01 08:55 +06:00 06:44 +14:45 15:22 +00:44 01:14 +02:23 03:20 +09:51 10:47 +11:05 12:03 +05:09 06:09 +03:35 04:19 +00:51 01:47 +08:18 09:18 +08:39 09:28 +00:21 00:52 +02:42 03:13 +02:34 03:04 +06:56 07:33 +09:03 09:49 +01:31 02:08 +10:11 10:57 +13:29 14:05 +03:24 04:22 +11:43 12:43 +13:05 13:58 +13:07 14:07 +08:08 08:47 +03:38 04:25 +10:25 11:20 +08:59 09:35 +08:58 09:44 +04:11 04:48 +05:46 06:24 +00:48 01:18 +04:30 05:06 +08:47 09:19 +01:53 02:30 +06:11 06:52 +06:39 07:29 +06:59 07:57 +02:38 03:37 +01:28 02:14 +03:31 04:07 +04:30 05:16 +03:37 04:27 +11:36 12:08 +05:36 06:17 +00:34 01:05 +06:15 07:09 +07:16 08:12 +09:31 10:31 +02:09 02:58 +04:42 05:20 +14:57 15:41 +11:33 12:09 +05:56 06:39 +10:51 11:41 +11:47 12:21 +11:46 12:37 +14:21 15:11 +00:38 01:12 +07:44 08:16 +14:28 15:26 +13:30 14:17 +10:20 11:01 +08:56 09:36 +06:33 07:20 +14:22 14:52 +12:32 13:05 +04:09 04:39 +14:25 15:05 +13:58 14:42 +12:52 13:47 +09:40 10:30 +14:42 15:34 +14:36 15:06 +11:55 12:53 +12:50 13:27 +12:55 13:55 +03:47 04:33 +14:22 15:06 +01:07 01:39 +00:19 01:07 +12:01 12:40 +11:50 12:38 +02:39 03:26 +01:01 01:50 +03:36 04:26 +03:14 03:50 +02:18 03:11 +05:18 05:57 +06:43 07:13 +10:33 11:11 +11:54 12:26 +55 +35 65 +02:04 02:41 +10:36 11:19 +11:50 12:39 +12:32 13:30 +00:56 01:37 +08:05 08:38 +02:14 03:02 +00:25 01:02 +01:12 01:48 +02:21 03:00 +12:01 12:59 +08:41 09:31 +11:59 12:35 +00:07 00:52 +06:45 07:16 +05:44 06:41 +12:19 13:19 +03:41 04:26 +09:46 10:17 +02:54 03:35 +11:56 12:28 +09:55 10:54 +09:16 10:04 +08:53 09:49 +02:54 03:45 +04:35 05:35 +07:25 08:07 +01:03 02:01 +05:58 06:51 +09:22 10:22 +01:20 01:52 +05:14 05:49 +09:29 10:20 +08:55 09:38 +13:40 14:21 +07:06 07:43 +10:50 11:20 +03:55 04:34 +13:03 13:56 +01:37 02:07 +11:19 11:49 +14:21 14:55 +09:21 09:51 +04:57 05:45 +09:26 10:26 +08:47 09:35 +14:17 15:16 +10:20 10:52 +08:56 09:30 +16:00 16:39 +12:12 12:56 +05:16 06:03 +10:07 10:42 +03:28 04:07 +06:17 07:12 +09:31 10:26 +13:07 13:46 +00:18 01:13 +00:45 01:20 +01:17 02:13 +06:01 06:49 +13:28 14:18 +04:21 05:21 +15:29 16:10 +07:42 08:32 +06:33 07:11 +15:22 16:01 +04:56 05:46 +15:54 16:39 +06:33 07:23 +14:30 15:18 +10:17 11:09 +09:28 10:25 +14:24 15:00 +02:43 03:30 +07:20 07:52 +06:06 06:50 +10:28 11:00 +11:58 12:33 +15:09 15:51 +00:42 01:16 +09:06 09:51 +00:13 01:10 +04:50 05:27 +07:17 08:07 +01:19 02:03 +05:24 06:12 +11:15 12:04 +00:18 01:11 +08:42 09:34 +01:38 02:31 +10:39 11:11 +02:10 03:07 +04:52 05:37 +15:45 16:40 +03:53 04:52 +02:57 03:44 +01:19 01:53 +12:31 13:11 +05:36 06:18 +56 +34 66 +03:43 04:33 +09:26 10:01 +06:31 07:09 +08:21 08:54 +09:35 10:05 +09:54 10:38 +12:53 13:28 +14:58 15:38 +04:25 05:07 +15:06 16:06 +10:56 11:32 +13:23 13:58 +15:45 16:16 +12:21 13:08 +09:11 10:06 +05:17 06:12 +16:50 17:38 +05:55 06:51 +06:05 07:01 +05:09 06:04 +11:02 11:58 +01:50 02:37 +06:01 06:38 +08:34 09:29 +15:44 16:21 +00:53 01:35 +06:46 07:36 +05:03 05:45 +06:20 07:14 +10:52 11:30 +03:38 04:34 +07:17 07:59 +11:20 12:00 +05:34 06:13 +13:14 13:44 +03:34 04:17 +16:15 16:52 +07:02 07:56 +11:41 12:28 +15:50 16:47 +15:37 16:33 +05:49 06:49 +16:05 16:39 +04:11 04:56 +02:15 02:58 +15:10 16:06 +11:52 12:41 +13:24 14:23 +00:36 01:12 +16:05 16:51 +07:06 07:52 +13:35 14:05 +02:02 02:57 +15:40 16:24 +04:18 05:04 +04:35 05:18 +14:28 15:18 +12:44 13:40 +02:09 02:55 +14:45 15:37 +04:46 05:38 +02:45 03:30 +06:52 07:50 +07:51 08:29 +10:13 10:55 +14:49 15:46 +13:24 14:02 +14:51 15:46 +16:45 17:26 +02:38 03:30 +03:33 04:09 +16:38 17:28 +03:18 04:13 +06:45 07:18 +08:19 09:17 +15:27 16:16 +14:24 15:21 +02:07 02:37 +02:58 03:42 +03:38 04:09 +16:32 17:06 +03:55 04:53 +16:20 16:57 +00:24 01:22 +07:26 08:18 +12:48 13:25 +09:34 10:17 +07:45 08:30 +04:21 04:58 +15:47 16:41 +11:02 11:36 +15:59 16:33 +03:51 04:48 +10:20 11:17 +03:56 04:45 +10:44 11:42 +03:20 03:56 +11:07 11:37 +01:53 02:49 +11:13 12:00 +57 +33 67 +11:44 12:32 +15:57 16:36 +06:18 07:08 +00:28 01:24 +16:45 17:18 +14:08 14:53 +05:06 05:48 +01:03 01:33 +01:16 02:11 +03:47 04:28 +00:05 00:43 +11:08 11:57 +04:36 05:33 +15:23 16:10 +10:04 10:38 +15:32 16:08 +05:26 06:08 +05:22 06:06 +08:20 08:53 +08:04 08:40 +10:53 11:26 +08:41 09:12 +14:40 15:36 +08:59 09:33 +13:44 14:26 +14:42 15:27 +09:45 10:31 +01:55 02:52 +08:52 09:22 +07:34 08:13 +07:57 08:39 +12:34 13:19 +12:38 13:09 +04:29 05:13 +01:35 02:18 +00:43 01:15 +10:56 11:36 +07:29 08:26 +04:29 05:24 +13:00 13:38 +14:02 14:51 +07:26 08:05 +06:20 07:11 +03:07 03:40 +06:19 07:10 +09:02 09:56 +06:59 07:29 +15:25 16:12 +14:24 15:22 +17:40 18:37 +04:54 05:35 +04:41 05:14 +00:31 01:11 +17:35 18:22 +02:18 02:59 +00:55 01:39 +05:40 06:23 +16:07 16:55 +13:22 14:01 +08:06 09:00 +03:07 03:49 +05:17 06:08 +12:47 13:32 +03:48 04:22 +13:13 13:50 +15:14 16:04 +11:16 12:12 +10:03 10:40 +03:54 04:38 +05:42 06:24 +08:24 09:20 +11:22 12:04 +03:53 04:24 +15:59 16:43 +07:47 08:30 +14:38 15:36 +01:45 02:15 +15:25 15:57 +07:04 07:54 +01:23 01:57 +10:58 11:51 +03:27 04:20 +00:21 01:08 +15:42 16:32 +17:12 17:56 +15:22 16:17 +06:00 06:56 +10:48 11:36 +15:45 16:21 +06:21 06:58 +11:46 12:39 +02:54 03:26 +12:38 13:14 +01:30 02:04 +15:33 16:24 +07:11 07:47 +03:13 04:05 +15:26 16:01 +14:15 15:11 +11:54 12:33 +58 +32 68 +14:04 14:37 +07:35 08:20 +14:17 14:50 +07:53 08:30 +03:13 03:53 +12:53 13:27 +17:06 17:47 +03:32 04:15 +18:17 19:08 +09:01 09:47 +12:32 13:04 +10:47 11:43 +07:54 08:54 +15:44 16:31 +16:38 17:28 +05:15 06:09 +04:19 05:03 +02:36 03:15 +10:08 11:03 +13:36 14:13 +18:18 18:57 +03:46 04:18 +13:29 14:00 +08:53 09:53 +11:39 12:14 +00:13 00:54 +00:38 01:33 +17:02 17:45 +07:33 08:23 +09:00 09:52 +18:50 19:34 +02:06 02:39 +17:24 18:06 +12:55 13:40 +11:00 11:40 +01:36 02:25 +13:22 14:00 +14:25 15:17 +12:01 12:39 +01:37 02:13 +07:21 08:13 +07:16 08:04 +01:28 02:14 +18:53 19:35 +04:07 04:50 +08:27 08:58 +14:23 15:16 +11:59 12:34 +10:04 11:02 +17:29 18:23 +10:34 11:23 +01:41 02:41 +05:09 05:43 +13:08 13:43 +01:49 02:39 +16:29 17:05 +12:10 12:48 +16:32 17:30 +03:47 04:27 +12:23 12:54 +05:50 06:20 +14:06 14:46 +09:40 10:38 +18:22 19:13 +06:10 06:54 +15:58 16:54 +14:32 15:19 +00:16 00:54 +02:21 03:00 +13:19 14:12 +16:47 17:41 +07:04 07:37 +11:57 12:27 +18:30 19:09 +14:26 15:05 +12:01 12:52 +10:29 11:13 +12:42 13:19 +16:21 16:59 +14:04 15:03 +12:55 13:25 +08:08 09:02 +12:56 13:44 +19:00 19:38 +10:23 11:00 +12:16 13:12 +04:08 05:04 +12:26 13:01 +05:57 06:40 +00:15 01:15 +09:31 10:30 +07:46 08:30 +08:14 09:04 +02:57 03:49 +14:56 15:55 +15:26 16:16 +13:24 14:19 +15:42 16:30 +08:38 09:23 +07:21 07:58 +59 +31 69 +13:55 14:45 +15:21 16:21 +05:36 06:32 +01:46 02:36 +15:16 15:53 +00:45 01:32 +09:20 09:51 +10:17 10:56 +09:22 10:17 +03:39 04:18 +00:41 01:39 +02:57 03:38 +19:58 20:47 +03:12 04:10 +18:50 19:39 +10:37 11:15 +08:19 09:11 +18:38 19:34 +00:42 01:20 +06:09 06:43 +09:42 10:36 +19:07 20:06 +13:43 14:29 +11:16 12:05 +17:33 18:18 +09:11 09:58 +15:03 15:57 +00:22 01:07 +06:28 06:58 +09:18 09:57 +16:10 16:54 +11:52 12:49 +12:07 12:49 +07:38 08:14 +06:22 06:53 +08:49 09:28 +04:02 04:52 +03:03 03:46 +05:10 05:55 +08:21 08:56 +07:00 07:32 +16:28 17:11 +06:59 07:51 +16:25 17:12 +05:10 05:55 +17:36 18:10 +07:48 08:37 +15:36 16:14 +14:33 15:03 +16:19 16:53 +03:53 04:36 +12:34 13:08 +06:16 06:47 +02:15 03:14 +00:16 00:57 +00:09 01:07 +17:22 17:55 +06:50 07:31 +18:32 19:26 +08:58 09:35 +07:14 08:09 +07:22 08:04 +08:57 09:43 +18:38 19:19 +05:53 06:30 +01:30 02:30 +13:34 14:24 +01:18 01:50 +00:32 01:08 +16:06 17:05 +16:09 17:06 +06:12 07:04 +04:30 05:00 +19:13 20:08 +18:49 19:45 +14:02 14:45 +09:57 10:29 +03:40 04:33 +04:41 05:20 +09:11 10:02 +11:35 12:13 +15:56 16:26 +15:25 16:19 +02:24 03:13 +12:59 13:57 +05:23 06:00 +04:58 05:52 +08:37 09:32 +03:44 04:37 +00:25 01:03 +01:58 02:36 +18:19 19:11 +16:01 16:38 +12:54 13:45 +06:10 06:44 +02:14 03:04 +08:53 09:53 +15:59 16:39 +19:56 20:52 +07:03 07:45 +60 +50 80 +22:37 22:51 +16:38 16:51 +01:01 01:15 +08:54 09:06 +14:34 14:48 +04:11 04:21 +13:16 13:28 +04:06 04:20 +22:51 23:04 +14:57 15:08 +07:34 07:49 +17:39 17:50 +09:46 10:00 +06:04 06:16 +00:58 01:09 +07:18 07:29 +02:48 03:01 +15:30 15:44 +17:04 17:18 +03:44 03:54 +03:32 03:47 +06:30 06:43 +05:18 05:31 +21:58 22:09 +03:13 03:26 +16:36 16:51 +17:55 18:08 +06:41 06:52 +15:03 15:13 +17:05 17:20 +12:54 13:08 +01:17 01:27 +01:43 01:55 +22:22 22:33 +03:15 03:30 +00:42 00:56 +14:01 14:12 +21:36 21:48 +00:10 00:24 +22:20 22:33 +00:26 00:37 +03:49 04:00 +11:14 11:26 +13:42 13:52 +05:50 06:03 +08:01 08:15 +05:48 06:00 +20:26 20:40 +20:22 20:34 +05:54 06:06 +02:01 03:12 +02:27 03:41 +22:09 23:37 +21:51 23:11 +15:31 17:14 +19:29 21:20 +13:57 15:40 +14:26 15:28 +03:50 05:48 +08:19 09:21 +02:38 04:24 +14:06 15:41 +19:14 20:15 +11:53 13:51 +05:32 07:31 +01:34 02:57 +19:17 21:14 +12:46 13:53 +13:20 15:07 +09:01 10:58 +00:32 02:01 +22:10 23:21 +19:56 21:13 +17:32 19:04 +16:34 17:49 +02:04 03:14 +03:09 04:26 +03:51 05:15 +08:32 10:13 +08:17 09:32 +07:00 08:06 +07:14 08:39 +07:58 09:13 +09:01 10:34 +11:03 12:50 +10:13 12:01 +03:31 05:31 +04:30 05:41 +21:38 22:46 +03:53 04:57 +10:06 11:28 +18:41 20:41 +12:01 13:35 +08:55 10:15 +14:54 16:00 +18:29 19:56 +10:36 12:22 +14:49 16:43 +04:48 06:41 +08:55 10:34 +11:13 12:51 +03:03 04:41 +16:05 17:54 +16:21 17:34 +19:47 20:58 +20:57 22:34 +17:22 18:45 +21:08 22:38 +08:47 10:17 +07:16 08:26 +18:52 20:05 +04:52 06:27 +11:06 12:35 +05:07 06:21 +18:01 19:45 +01:15 02:43 +11:10 12:19 +07:43 09:19 +15:29 16:43 +19:17 20:39 +08:11 10:00 +06:20 08:12 +00:15 01:34 +09:11 10:52 +11:59 13:14 +02:35 03:46 +03:37 04:49 +13:57 15:12 +04:30 05:51 +20:13 21:53 +59 +49 81 +21:47 22:06 +20:14 20:24 +04:50 05:10 +13:11 13:30 +20:58 21:16 +06:38 06:51 +18:05 18:18 +17:16 17:33 +04:10 04:21 +18:28 18:48 +12:55 13:13 +18:05 18:24 +11:40 11:59 +08:27 08:37 +18:48 19:04 +21:21 21:37 +12:51 13:11 +20:51 21:05 +16:26 16:38 +15:27 15:41 +12:50 13:03 +17:09 17:23 +05:37 05:55 +08:08 08:28 +15:38 15:54 +16:25 16:45 +10:59 11:13 +01:00 01:15 +21:40 21:58 +05:16 05:31 +00:55 01:11 +05:39 05:52 +09:37 09:51 +04:26 04:41 +19:04 19:17 +08:07 08:22 +12:57 13:10 +18:20 18:34 +01:23 01:41 +21:43 21:53 +13:51 14:04 +03:24 03:40 +02:00 02:14 +15:51 16:07 +06:00 06:13 +15:37 15:54 +19:42 19:59 +08:53 09:06 +10:59 11:16 +04:33 05:33 +05:01 06:14 +04:49 06:20 +00:45 02:43 +18:58 20:03 +10:24 12:21 +07:52 09:32 +06:15 07:50 +15:28 17:00 +01:32 03:29 +14:36 16:04 +12:28 13:58 +02:04 03:14 +19:39 21:10 +16:16 17:33 +13:52 15:46 +01:20 02:59 +20:04 21:50 +16:41 18:20 +14:37 16:21 +12:36 13:50 +21:46 22:54 +12:23 13:50 +03:38 05:17 +00:53 02:11 +08:25 10:08 +21:00 22:49 +02:24 04:23 +08:42 09:51 +14:20 16:02 +11:34 13:15 +21:09 22:11 +20:35 22:01 +02:16 03:32 +00:51 02:21 +14:52 15:55 +08:10 09:33 +17:31 19:22 +15:02 16:53 +19:40 20:51 +14:55 16:20 +13:35 14:37 +09:12 10:23 +11:27 13:12 +06:10 07:20 +15:39 17:20 +05:03 06:19 +18:48 20:21 +07:25 09:20 +12:34 14:29 +19:07 20:35 +13:53 15:25 +12:50 13:50 +16:20 17:57 +19:02 20:26 +18:28 20:10 +00:39 02:03 +06:17 07:24 +20:40 22:26 +00:57 02:54 +09:00 10:51 +18:52 20:42 +07:30 08:54 +11:14 12:49 +07:17 08:47 +08:31 09:35 +11:55 13:43 +08:22 09:28 +21:17 22:39 +09:27 10:50 +02:37 04:12 +08:09 09:15 +06:17 07:42 +01:36 03:28 +15:38 17:36 +16:22 17:50 +10:53 12:44 +13:36 15:07 +07:56 09:22 +08:49 09:49 +18:38 20:12 +58 +48 82 +00:41 00:53 +15:40 15:58 +05:32 05:49 +01:09 01:29 +14:07 14:17 +19:08 19:32 +08:01 08:15 +18:57 19:21 +07:06 07:18 +04:56 05:17 +13:14 13:24 +15:51 16:08 +02:06 02:21 +14:54 15:08 +14:51 15:03 +12:15 12:31 +19:22 19:45 +01:10 01:27 +18:27 18:41 +13:10 13:29 +15:47 16:05 +17:41 18:03 +08:13 08:31 +07:39 08:04 +09:53 10:11 +05:22 05:32 +00:13 00:32 +08:56 09:09 +15:05 15:21 +11:57 12:19 +06:01 06:11 +14:31 14:43 +14:50 15:01 +06:30 06:52 +06:19 06:43 +16:20 16:40 +15:00 15:22 +02:02 02:21 +07:42 07:52 +19:31 19:55 +19:10 19:32 +10:55 11:18 +13:19 13:37 +02:57 03:13 +17:50 18:09 +04:53 05:08 +08:55 09:20 +19:02 19:19 +14:10 16:05 +14:58 16:43 +13:23 14:45 +05:46 06:58 +14:28 16:10 +04:00 05:10 +03:54 05:24 +13:54 15:19 +10:57 12:24 +05:18 07:16 +10:55 12:08 +03:25 04:50 +13:02 14:09 +02:57 04:33 +09:22 10:46 +18:40 20:26 +13:05 14:47 +08:19 09:49 +05:46 07:30 +12:09 13:39 +07:07 08:13 +01:40 03:33 +12:50 14:30 +12:51 14:26 +13:03 14:22 +06:26 08:22 +06:50 08:50 +18:26 19:37 +12:04 13:15 +09:48 11:01 +08:03 10:01 +08:30 09:42 +19:17 20:17 +02:54 04:18 +06:32 07:39 +00:18 01:22 +06:36 07:54 +14:30 15:36 +03:42 05:36 +07:55 09:18 +11:44 13:43 +17:06 19:00 +04:45 06:30 +15:17 16:53 +07:50 09:48 +09:11 10:12 +14:48 16:21 +17:26 18:57 +17:36 18:48 +20:31 21:38 +04:01 05:33 +15:26 16:42 +04:49 05:55 +01:12 03:12 +07:48 09:35 +04:16 05:58 +04:35 05:48 +04:00 05:52 +05:39 06:55 +04:45 05:51 +09:56 10:58 +19:51 21:11 +02:12 03:13 +03:44 04:49 +13:36 14:45 +12:57 14:05 +12:07 13:47 +08:45 09:49 +07:39 09:35 +11:37 13:19 +17:42 19:01 +03:39 05:11 +05:47 06:52 +02:26 03:55 +14:44 16:36 +08:57 10:42 +15:46 17:26 +10:04 11:27 +06:27 08:15 +17:15 19:10 +17:50 19:33 +14:10 15:51 +57 +47 83 +06:52 07:18 +14:29 14:54 +05:24 05:51 +11:52 12:17 +15:08 15:23 +04:50 05:02 +19:05 19:30 +09:48 10:03 +02:12 02:29 +09:07 09:20 +12:01 12:24 +04:54 05:04 +06:15 06:30 +12:39 13:09 +18:45 19:01 +08:16 08:28 +12:34 12:52 +08:20 08:40 +11:45 12:01 +14:38 15:08 +08:06 08:28 +04:34 05:04 +17:15 17:44 +00:50 01:20 +10:21 10:42 +06:44 07:14 +14:49 15:14 +10:20 10:50 +04:42 05:09 +09:44 10:14 +07:41 08:03 +14:35 15:05 +04:12 04:37 +00:29 00:55 +06:39 06:59 +19:12 19:22 +18:55 19:16 +05:37 05:54 +08:48 09:00 +06:05 06:34 +10:45 11:08 +01:01 01:28 +07:52 08:04 +11:46 12:04 +14:16 14:31 +13:58 14:16 +13:59 14:25 +16:30 18:28 +16:15 17:35 +19:17 21:10 +19:58 21:38 +11:07 12:25 +13:08 15:02 +19:53 21:11 +03:54 05:41 +18:45 20:23 +06:04 07:49 +11:59 13:26 +19:54 21:30 +12:04 13:50 +19:27 21:02 +06:16 07:19 +15:46 17:28 +18:00 19:08 +15:41 17:19 +03:07 04:30 +18:06 19:44 +02:33 03:43 +15:04 16:48 +09:55 11:11 +15:26 16:28 +00:13 01:40 +17:43 19:08 +07:35 09:05 +02:40 03:44 +13:20 14:28 +05:43 07:37 +15:11 16:51 +09:28 10:27 +09:27 11:12 +05:42 07:13 +19:00 20:18 +15:56 16:59 +19:12 20:17 +19:13 20:51 +05:31 07:28 +09:58 11:02 +14:08 15:18 +15:11 16:11 +18:14 20:04 +07:12 08:19 +04:41 06:34 +12:33 14:27 +18:30 20:23 +15:43 17:05 +01:53 03:12 +08:53 10:43 +12:37 14:15 +05:35 07:22 +01:13 02:14 +14:19 15:31 +12:12 13:36 +14:58 16:52 +13:02 14:36 +01:13 02:47 +02:06 03:24 +01:32 03:13 +18:43 19:57 +02:38 04:29 +01:53 03:02 +08:39 10:38 +17:22 18:36 +19:53 21:53 +15:41 17:36 +16:12 17:49 +04:04 05:33 +05:44 07:07 +00:27 01:33 +19:57 21:43 +04:13 05:32 +12:59 14:24 +16:06 17:30 +09:04 10:39 +07:28 08:35 +01:32 02:39 +18:54 20:11 +05:55 07:13 +03:34 04:36 +00:03 01:30 +17:54 19:00 +56 +46 84 +02:35 03:09 +14:14 14:42 +07:55 08:15 +12:07 12:40 +09:38 10:05 +12:32 13:00 +08:03 08:20 +12:38 13:13 +08:08 08:23 +07:26 07:48 +00:06 00:40 +15:04 15:37 +03:35 03:54 +15:18 15:31 +06:44 07:03 +05:03 05:19 +13:04 13:20 +10:47 11:18 +17:38 17:49 +04:31 04:48 +05:54 06:14 +11:07 11:31 +14:26 14:36 +13:15 13:40 +15:42 16:16 +18:49 19:16 +01:26 01:52 +04:10 04:37 +05:06 05:17 +15:19 15:30 +10:14 10:33 +01:31 01:54 +05:26 05:36 +15:11 15:31 +15:16 15:34 +14:04 14:16 +05:24 05:50 +15:24 15:58 +15:35 16:04 +13:50 14:23 +02:39 03:14 +15:02 15:21 +08:34 08:50 +11:36 12:05 +15:14 15:27 +11:55 12:14 +13:40 15:12 +11:20 12:28 +01:46 03:36 +07:15 08:54 +18:22 19:45 +05:52 07:22 +04:08 05:51 +09:23 11:16 +09:36 11:24 +08:05 09:19 +00:46 02:07 +05:24 06:28 +07:29 09:05 +09:35 10:44 +05:52 07:36 +14:15 15:20 +15:32 16:54 +02:06 03:13 +13:31 15:19 +07:28 08:41 +12:20 13:40 +04:53 06:44 +17:29 19:04 +12:58 14:56 +07:58 09:25 +05:34 06:44 +09:33 10:50 +09:10 10:58 +03:48 05:04 +10:34 12:14 +12:24 13:23 +12:44 13:58 +12:07 13:42 +18:06 19:17 +16:37 18:11 +10:02 11:28 +02:58 03:59 +10:52 12:48 +10:15 11:29 +17:36 18:40 +14:02 15:25 +07:07 08:38 +15:23 16:54 +14:12 15:45 +07:52 09:20 +09:58 11:44 +08:16 10:06 +06:01 07:21 +13:03 14:09 +04:08 05:41 +04:59 06:57 +06:54 08:48 +00:12 01:34 +14:50 16:15 +00:36 02:16 +04:24 05:46 +06:32 08:13 +05:52 07:37 +01:42 03:21 +00:19 01:50 +04:14 05:44 +13:08 15:00 +10:09 11:44 +00:19 02:16 +09:54 11:44 +09:53 11:36 +11:39 13:15 +04:04 06:02 +02:44 03:59 +05:03 06:14 +12:18 13:53 +03:42 04:57 +13:23 14:46 +04:26 05:32 +11:18 12:52 +09:01 10:15 +18:09 20:04 +07:19 08:21 +00:56 02:19 +16:08 17:25 +02:06 03:48 +16:26 17:53 +17:10 18:50 +06:49 07:55 +55 +45 85 +15:07 15:22 +13:30 13:52 +12:16 12:53 +13:51 14:16 +06:58 07:38 +03:47 04:23 +08:10 08:50 +14:52 15:12 +11:27 11:49 +04:53 05:12 +17:42 18:02 +09:54 10:19 +03:05 03:18 +02:26 02:36 +12:09 12:33 +01:31 01:53 +00:40 00:55 +16:50 17:17 +10:52 11:28 +16:19 16:42 +07:18 07:44 +07:59 08:19 +11:56 12:06 +12:32 12:46 +08:07 08:33 +04:44 05:18 +16:00 16:31 +12:02 12:21 +17:45 18:21 +13:48 14:17 +05:49 06:16 +06:34 06:51 +10:48 11:27 +15:38 16:09 +12:15 12:32 +08:25 08:58 +03:59 04:31 +10:56 11:20 +12:26 13:05 +16:06 16:27 +03:15 03:43 +14:26 14:56 +15:29 15:54 +16:32 16:54 +16:11 16:34 +04:21 06:15 +14:23 16:06 +11:49 13:11 +00:24 02:23 +00:46 02:13 +13:13 14:54 +16:31 17:39 +02:04 03:54 +15:44 17:16 +04:09 05:58 +06:17 07:55 +11:33 13:01 +15:49 17:09 +02:01 03:32 +08:57 09:56 +10:50 11:54 +14:25 16:01 +10:51 11:54 +07:55 09:01 +08:46 10:23 +14:57 16:17 +08:58 10:05 +12:41 13:44 +07:44 09:40 +09:03 10:27 +10:24 11:27 +08:35 10:18 +09:40 10:58 +09:28 10:55 +15:41 17:23 +16:52 18:31 +16:41 17:44 +08:58 10:48 +03:00 04:53 +09:18 10:26 +15:42 16:54 +05:36 06:51 +00:18 01:28 +04:04 06:03 +06:24 08:12 +10:04 11:31 +10:04 11:25 +03:08 04:28 +02:19 04:11 +05:11 06:15 +04:02 05:09 +11:58 13:24 +00:14 02:02 +13:57 15:33 +15:18 17:09 +09:50 11:32 +15:28 17:27 +17:03 19:03 +13:46 14:51 +13:49 15:24 +10:29 12:03 +13:57 15:18 +08:38 10:17 +17:49 19:40 +16:54 18:52 +10:55 12:06 +11:26 12:27 +11:52 13:11 +11:28 13:09 +01:49 03:36 +11:03 12:15 +17:30 18:29 +14:44 15:59 +12:40 13:45 +15:39 17:37 +06:59 08:17 +14:37 15:54 +16:12 17:48 +02:06 03:19 +09:25 10:31 +17:07 18:17 +05:02 06:23 +03:09 04:36 +04:02 06:02 +02:26 03:30 +09:37 10:59 +12:10 13:51 +17:43 18:51 +11:14 13:07 +01:51 02:50 +54 +44 86 +14:47 15:03 +01:04 01:47 +16:21 16:52 +11:39 11:59 +03:19 03:47 +08:40 09:17 +10:36 10:49 +00:08 00:29 +00:10 00:36 +00:44 01:04 +12:40 13:10 +07:46 08:09 +16:28 16:58 +03:35 04:13 +11:42 12:05 +02:11 02:23 +16:52 17:31 +16:21 16:34 +08:47 09:30 +07:34 08:15 +09:35 10:06 +16:06 16:18 +14:44 15:24 +01:15 01:47 +13:20 13:51 +13:00 13:27 +10:23 10:43 +06:22 06:55 +10:26 11:10 +16:30 16:56 +10:12 10:43 +04:39 05:01 +13:33 13:55 +02:50 03:14 +05:50 06:13 +00:35 01:04 +05:26 05:42 +10:02 10:44 +12:55 13:08 +12:22 12:54 +01:58 02:34 +00:56 01:38 +01:11 01:38 +09:03 09:22 +03:54 04:56 +10:38 12:29 +08:35 10:30 +15:43 17:14 +10:33 11:54 +14:41 15:54 +15:47 16:54 +03:33 04:38 +10:48 12:48 +12:56 14:49 +13:43 15:23 +03:33 04:34 +07:34 09:25 +15:44 17:33 +12:46 14:40 +01:31 03:19 +03:35 05:15 +01:57 03:53 +04:58 06:51 +06:12 07:13 +04:04 05:47 +03:39 05:15 +00:55 02:49 +12:47 14:01 +06:12 07:57 +15:51 17:03 +08:46 09:51 +06:02 07:51 +08:41 09:54 +16:38 18:14 +12:06 13:30 +00:10 01:47 +11:56 13:21 +02:50 04:28 +06:13 08:08 +10:48 11:53 +16:46 18:45 +11:48 13:45 +12:16 13:47 +07:22 08:43 +16:30 17:30 +09:42 10:56 +11:25 13:17 +14:36 16:00 +09:11 10:48 +06:04 07:30 +09:07 11:01 +12:30 14:29 +09:42 10:45 +08:32 09:38 +15:10 16:55 +04:41 06:36 +07:21 08:29 +01:36 03:04 +10:54 11:58 +15:49 17:32 +03:22 05:16 +12:18 13:28 +12:22 13:37 +06:44 08:11 +14:44 16:28 +07:16 09:05 +14:35 15:40 +11:58 13:46 +10:09 11:55 +04:21 06:15 +12:30 13:51 +10:29 12:24 +06:40 08:36 +09:23 10:46 +13:55 15:09 +15:37 17:31 +01:22 03:22 +03:13 05:06 +16:27 17:37 +12:18 13:43 +08:58 10:55 +10:50 11:55 +15:36 17:14 +09:52 11:01 +00:32 01:54 +01:36 03:21 +03:45 05:39 +07:12 08:23 +06:10 07:25 +12:02 13:14 +53 +43 87 +07:05 07:15 +11:12 11:23 +13:02 13:28 +10:07 10:34 +03:06 03:23 +06:03 06:19 +13:48 14:34 +07:25 08:07 +10:30 11:06 +03:17 03:54 +03:35 04:20 +03:58 04:18 +14:36 15:18 +09:59 10:25 +06:42 07:03 +15:55 16:42 +02:18 02:50 +05:27 05:52 +09:10 09:29 +03:45 04:10 +09:55 10:41 +10:42 11:25 +03:01 03:26 +14:08 14:29 +11:12 11:37 +14:59 15:37 +04:45 05:25 +03:29 04:08 +03:45 04:17 +04:22 04:41 +05:43 06:29 +04:26 05:03 +12:53 13:40 +15:41 16:01 +02:27 03:04 +13:25 13:39 +08:29 08:53 +09:32 10:11 +13:16 13:27 +00:54 01:39 +07:23 07:56 +08:37 09:20 +14:54 15:21 +10:55 12:41 +11:32 12:57 +09:29 11:19 +14:39 16:18 +10:50 12:29 +08:36 09:49 +07:47 08:51 +05:38 07:08 +11:29 12:50 +08:59 10:54 +06:35 08:34 +05:25 07:19 +13:39 14:49 +12:10 13:28 +03:48 05:11 +05:27 06:50 +14:48 16:05 +01:54 03:32 +06:55 08:05 +15:40 17:38 +01:34 03:09 +07:00 08:09 +06:33 07:56 +04:34 06:20 +05:27 06:31 +08:16 10:12 +08:46 09:52 +04:08 05:52 +01:32 02:55 +04:34 06:00 +11:28 13:04 +08:04 09:53 +13:49 15:11 +01:43 02:47 +09:49 11:22 +15:26 16:49 +01:13 02:33 +00:22 02:09 +04:51 06:38 +06:04 07:19 +06:54 08:52 +13:43 15:15 +08:57 10:11 +05:55 07:21 +15:41 16:54 +02:05 03:17 +06:17 07:21 +08:20 09:23 +09:55 11:08 +00:17 01:16 +10:59 12:57 +11:15 13:15 +06:26 07:37 +10:31 11:34 +05:15 06:15 +13:34 15:24 +12:02 13:50 +08:46 10:14 +15:04 16:28 +11:35 12:39 +15:33 16:40 +13:14 14:57 +13:00 15:00 +05:28 06:37 +02:36 04:28 +12:38 14:03 +11:30 13:22 +03:07 05:04 +10:25 12:01 +00:31 01:43 +06:52 08:36 +15:46 17:06 +01:11 02:28 +13:36 15:31 +15:23 17:02 +11:47 13:23 +14:50 16:28 +01:46 03:05 +00:16 01:25 +00:58 02:08 +11:02 12:20 +01:58 03:41 +00:50 02:35 +03:05 04:48 +07:01 08:27 +01:28 02:50 +09:26 10:53 +52 +42 88 +04:49 05:40 +10:11 10:24 +11:39 12:15 +08:29 08:46 +07:09 07:44 +10:45 11:32 +02:47 03:03 +12:19 12:48 +12:23 12:52 +03:47 04:21 +13:31 14:19 +11:04 11:54 +00:03 00:21 +05:53 06:15 +04:31 05:08 +07:41 08:04 +00:21 00:37 +10:49 11:44 +13:43 14:03 +10:00 10:52 +03:19 04:11 +07:53 08:25 +04:18 04:50 +05:56 06:25 +06:22 07:00 +12:58 13:41 +03:12 03:28 +12:37 13:26 +08:34 09:00 +06:12 06:36 +07:21 07:39 +07:20 07:41 +12:27 13:12 +14:55 15:46 +06:38 07:16 +13:59 14:16 +14:04 14:33 +03:04 03:54 +05:52 06:10 +05:44 06:25 +13:52 14:43 +02:07 03:00 +02:32 03:57 +08:26 10:20 +13:04 14:06 +13:37 14:57 +08:24 10:15 +05:40 07:05 +13:42 14:59 +11:46 13:11 +02:59 04:46 +02:57 04:53 +03:35 04:36 +03:16 04:46 +11:43 13:15 +06:31 07:44 +14:42 16:10 +11:10 12:47 +12:01 13:42 +13:11 14:47 +11:52 13:17 +01:49 03:48 +05:04 06:37 +08:36 10:22 +08:26 09:55 +06:16 07:58 +13:17 15:01 +02:29 03:48 +07:06 08:25 +13:35 15:12 +05:16 06:30 +11:54 13:36 +02:27 03:32 +14:14 15:33 +02:44 04:14 +00:44 02:41 +08:31 10:19 +11:18 13:01 +01:59 03:16 +03:17 04:32 +11:33 13:12 +01:58 03:23 +07:01 08:58 +11:52 13:24 +14:13 16:12 +14:17 15:58 +09:11 10:55 +02:55 04:30 +00:19 01:43 +06:09 07:27 +07:26 08:43 +08:18 10:06 +04:06 05:24 +10:07 11:33 +08:55 10:28 +08:12 09:32 +03:21 04:28 +10:27 11:33 +06:16 07:15 +09:06 11:02 +10:19 11:58 +09:24 10:30 +10:29 11:36 +11:15 12:46 +09:20 10:55 +04:13 05:48 +09:47 11:21 +05:34 06:36 +01:07 02:09 +03:42 04:52 +03:46 05:02 +02:36 04:22 +12:04 13:23 +02:56 04:49 +13:58 15:01 +01:48 02:50 +07:17 09:14 +10:02 11:14 +11:59 13:29 +09:59 11:59 +08:17 10:13 +03:38 05:06 +09:27 10:41 +06:21 08:06 +13:11 14:31 +03:33 05:16 +09:02 10:01 +03:42 05:16 +08:53 10:43 +03:15 05:09 +51 +41 89 +12:19 12:53 +13:02 13:55 +05:37 06:09 +12:09 13:03 +01:29 01:40 +06:29 07:18 +10:02 10:45 +02:03 02:21 +01:18 01:52 +00:14 01:09 +00:55 01:38 +04:32 05:28 +00:47 01:00 +07:00 07:33 +13:49 14:27 +06:42 07:39 +00:17 01:10 +13:27 14:24 +11:57 12:27 +03:29 04:09 +00:52 01:44 +03:52 04:07 +02:21 03:14 +00:53 01:50 +01:18 01:52 +07:21 07:52 +00:04 00:53 +09:53 10:43 +11:32 11:53 +01:46 02:36 +02:47 03:05 +04:57 05:47 +08:09 09:06 +12:52 13:51 +06:32 06:52 +06:35 07:18 +03:06 03:53 +13:48 14:34 +00:15 01:09 +08:17 08:54 +07:05 07:17 +07:49 09:12 +07:54 09:19 +08:02 09:24 +08:37 09:54 +06:51 07:52 +02:08 04:02 +02:18 03:20 +11:33 12:47 +03:04 04:13 +13:47 15:25 +13:59 15:49 +05:29 06:52 +01:27 02:48 +04:27 06:18 +02:55 04:08 +00:53 02:00 +12:21 13:44 +02:17 03:25 +04:58 06:26 +13:03 14:37 +00:33 02:31 +02:49 03:50 +04:21 05:47 +02:22 03:55 +02:09 03:28 +01:20 02:48 +07:42 09:15 +05:17 06:55 +01:00 02:46 +10:24 11:39 +02:21 04:20 +13:17 15:15 +07:53 08:54 +02:38 03:39 +08:52 10:50 +00:09 02:02 +00:27 02:15 +09:49 11:14 +09:43 11:02 +09:27 11:10 +06:00 07:51 +05:39 07:06 +09:15 10:37 +11:03 12:40 +02:57 04:32 +02:17 03:47 +03:07 04:07 +03:17 04:18 +08:33 09:36 +08:12 10:08 +11:54 12:57 +04:00 05:05 +06:59 08:24 +10:52 12:45 +08:51 10:08 +12:16 13:31 +01:04 02:34 +01:33 02:45 +04:37 06:14 +13:13 14:40 +03:15 04:46 +04:28 06:05 +10:42 11:51 +04:49 06:19 +01:24 02:34 +09:24 10:37 +13:02 14:05 +00:26 01:27 +13:41 15:33 +06:00 07:29 +03:36 04:35 +04:19 06:07 +09:06 10:40 +01:24 02:43 +05:55 06:56 +01:14 02:33 +06:05 07:54 +06:11 07:25 +10:16 11:43 +11:22 13:04 +08:55 10:28 +04:11 06:07 +12:27 14:01 +05:01 06:30 +04:52 06:32 +07:06 08:37 +04:23 05:32 +12:55 14:44 +02:06 04:06 +50 +40 90 +01:30 01:53 +00:00 00:48 +09:43 10:11 +01:28 02:30 +06:57 07:21 +02:09 03:02 +11:58 12:46 +09:54 10:55 +05:40 06:35 +08:39 09:21 +00:59 01:32 +06:31 06:50 +10:24 11:07 +03:43 04:36 +05:00 05:28 +00:59 01:33 +01:12 02:05 +02:49 03:11 +07:45 07:57 +03:57 04:14 +12:07 12:26 +01:43 02:28 +01:28 01:58 +00:18 01:12 +03:28 04:11 +01:33 02:20 +11:41 12:17 +07:07 07:43 +06:55 07:45 +01:28 01:50 +06:17 07:09 +06:35 07:07 +11:33 11:56 +02:12 03:09 +08:10 08:30 +06:18 07:15 +00:30 01:22 +12:19 13:21 +08:48 09:44 +03:14 03:34 +10:20 11:22 +01:28 02:28 +11:13 13:02 +11:08 12:32 +07:25 09:07 +08:04 09:27 +01:22 03:08 +08:38 09:40 +02:56 04:16 +01:11 02:32 +06:06 07:42 +06:50 08:47 +05:50 07:02 +07:11 08:15 +03:18 04:23 +07:15 08:42 +07:38 09:03 +08:35 09:54 +03:38 04:38 +03:14 05:07 +01:28 02:56 +10:10 11:34 +08:38 10:35 +04:49 06:14 +10:51 12:17 +11:18 13:07 +08:58 10:00 +04:26 05:49 +05:51 07:51 +02:53 04:05 +08:09 09:16 +00:01 01:35 +05:50 07:50 +03:19 04:35 +10:11 11:32 +04:19 05:54 +03:16 04:33 +00:56 02:02 +03:04 04:12 +02:46 03:51 +07:03 09:01 +11:13 13:09 +02:01 03:07 +11:39 12:56 +02:13 04:03 +07:14 08:47 +09:52 11:07 +03:21 05:00 +11:19 12:44 +03:28 04:50 +03:08 04:10 +07:58 09:19 +05:12 07:00 +02:06 04:01 +07:34 08:49 +01:52 03:25 +01:27 03:00 +05:39 06:59 +01:35 03:20 +00:42 01:51 +10:35 12:17 +04:57 06:19 +03:34 05:33 +07:35 09:09 +08:42 10:32 +05:37 07:34 +04:18 05:49 +08:33 09:40 +12:28 14:16 +09:09 10:33 +10:54 12:46 +10:18 12:01 +10:52 11:56 +12:58 14:32 +10:41 11:46 +12:43 13:50 +06:22 07:54 +04:32 06:25 +01:05 02:29 +07:16 08:39 +08:54 10:00 +06:43 08:07 +06:37 08:31 +03:10 04:28 +06:10 07:25 +04:08 05:13 +07:48 09:21 +08:42 10:27 +04:14 06:13 +07:56 09:17 +49 +39 91 +11:25 11:47 +07:50 08:11 +08:01 09:10 +09:46 10:56 +07:27 08:25 +08:33 08:50 +00:41 01:05 +01:18 01:30 +06:01 06:12 +06:50 07:36 +04:18 05:27 +04:56 05:45 +05:46 05:58 +11:32 11:50 +04:31 05:37 +08:02 09:08 +08:49 09:51 +04:44 05:26 +07:43 08:05 +03:11 03:29 +07:18 07:34 +03:59 04:44 +11:13 12:03 +03:50 04:57 +05:08 05:23 +08:22 09:22 +07:54 08:20 +10:02 10:20 +08:04 08:59 +05:45 06:36 +01:02 01:42 +04:40 05:10 +11:34 12:44 +05:03 06:01 +01:18 02:27 +04:29 05:39 +11:50 12:09 +07:51 08:15 +01:39 02:08 +07:33 09:30 +07:22 08:27 +09:06 11:06 +07:37 08:56 +00:51 02:48 +08:31 10:05 +05:04 06:51 +06:38 08:20 +07:23 09:00 +01:46 02:46 +11:38 12:41 +04:54 06:16 +01:39 03:08 +10:29 11:47 +04:38 06:05 +11:42 12:55 +11:18 12:57 +09:00 10:07 +02:41 03:50 +11:03 12:58 +11:45 13:21 +00:57 02:07 +04:56 05:58 +06:40 07:40 +09:41 10:45 +04:56 06:52 +07:58 09:42 +05:47 06:46 +08:52 10:47 +06:29 07:29 +07:20 08:32 +10:26 12:14 +09:15 10:36 +11:23 12:33 +01:27 03:11 +11:25 12:44 +00:40 01:57 +00:19 01:52 +11:48 13:00 +10:27 12:11 +01:51 02:59 +11:12 13:03 +05:34 07:25 +05:44 06:53 +10:29 12:04 +03:00 04:57 +07:14 08:20 +00:34 02:19 +07:38 09:20 +07:37 08:54 +01:06 02:54 +05:44 06:46 +09:52 11:20 +00:22 01:45 +11:32 13:22 +05:47 06:51 +10:09 11:37 +05:57 07:51 +03:33 05:09 +11:11 12:27 +11:48 13:04 +01:56 03:09 +01:33 03:09 +05:58 07:05 +01:14 03:07 +11:25 13:06 +01:49 03:33 +07:22 08:55 +04:15 05:35 +01:30 02:41 +02:17 03:32 +11:27 12:37 +06:13 07:36 +09:33 10:54 +09:03 10:33 +02:19 03:38 +00:23 01:54 +01:24 03:21 +11:15 12:31 +08:38 10:37 +03:50 04:52 +10:58 12:03 +10:15 12:08 +10:39 12:14 +04:31 05:40 +02:22 04:21 +05:47 07:14 +09:35 11:19 +06:13 07:50 +03:54 05:04 +07:42 08:54 +48 +38 92 +08:18 09:01 +08:24 08:36 +06:52 07:34 +06:44 07:32 +07:48 08:24 +00:09 01:22 +00:20 01:06 +00:23 00:49 +05:31 06:09 +05:28 05:38 +09:48 10:12 +00:50 01:49 +09:18 09:44 +07:45 08:14 +08:07 08:53 +06:47 07:45 +09:11 09:35 +10:10 11:06 +10:02 10:16 +01:41 02:53 +01:36 02:13 +03:31 04:27 +06:45 07:07 +09:03 09:18 +02:15 02:31 +03:31 03:46 +01:03 02:00 +00:58 01:54 +05:15 06:26 +01:35 02:45 +05:35 05:57 +05:27 06:22 +03:44 04:58 +08:23 09:30 +10:20 11:16 +02:44 03:15 +06:57 07:08 +06:42 07:14 +00:35 01:50 +00:21 01:20 +07:02 08:51 +08:22 10:15 +02:15 04:08 +04:58 06:28 +01:51 02:57 +07:27 08:45 +04:00 05:06 +01:50 03:04 +00:20 01:30 +06:50 07:50 +08:35 10:12 +07:25 09:20 +04:30 06:06 +05:00 06:08 +02:44 03:51 +10:29 12:01 +04:28 05:45 +05:46 07:05 +08:02 10:00 +08:04 09:48 +10:17 11:46 +09:51 11:08 +08:47 10:06 +00:02 02:00 +00:05 01:42 +05:54 07:08 +08:02 09:01 +06:55 08:38 +10:34 11:56 +10:33 11:52 +00:48 02:27 +00:20 01:47 +04:53 06:29 +10:53 12:32 +02:39 04:10 +04:10 05:42 +00:35 01:39 +01:35 03:08 +05:34 07:13 +00:27 01:49 +10:04 11:03 +03:41 04:47 +01:50 03:05 +07:45 09:37 +02:27 03:48 +00:26 01:32 +05:13 06:25 +08:09 09:22 +04:43 06:15 +07:30 09:03 +00:12 02:08 +07:33 08:47 +04:47 06:38 +05:22 06:26 +04:54 06:16 +09:59 11:25 +01:34 03:00 +01:37 03:26 +05:24 06:32 +05:28 06:59 +09:12 11:03 +04:55 06:15 +04:37 06:33 +09:15 10:17 +03:08 04:32 +10:56 12:06 +10:30 11:30 +04:48 05:59 +10:43 11:50 +01:48 03:04 +05:45 07:13 +09:53 11:06 +03:50 05:30 +03:06 04:53 +10:41 11:44 +08:05 09:55 +00:16 01:52 +10:42 11:42 +07:48 09:13 +08:16 09:23 +03:03 04:54 +06:29 08:22 +10:27 12:06 +01:44 03:06 +03:16 04:35 +00:34 01:43 +07:22 09:22 +10:55 12:24 +02:19 03:41 +01:39 03:21 +47 +37 93 +06:21 06:56 +08:24 08:37 +02:53 03:36 +03:07 03:57 +08:06 09:24 +04:56 05:43 +05:20 05:47 +04:13 05:19 +08:02 09:21 +00:04 01:21 +02:42 03:10 +06:28 07:46 +09:01 10:03 +05:31 05:50 +04:07 05:27 +08:42 09:41 +07:21 08:20 +09:27 10:36 +02:54 03:26 +00:02 00:17 +01:22 01:35 +07:51 08:11 +04:29 04:43 +01:48 02:21 +07:02 07:45 +04:49 06:01 +09:43 10:29 +03:51 05:01 +01:28 01:46 +06:03 06:20 +00:28 01:13 +05:24 06:09 +08:30 09:30 +06:23 07:13 +04:39 04:57 +06:09 07:24 +05:42 06:34 +05:35 06:55 +08:00 09:19 +01:06 02:33 +03:03 04:04 +08:50 10:46 +04:37 06:02 +08:44 09:56 +05:27 06:30 +04:22 05:55 +00:21 01:22 +07:28 08:27 +09:57 11:51 +08:50 09:56 +09:48 11:11 +00:55 02:18 +07:35 09:11 +06:48 07:50 +07:13 08:22 +07:24 09:11 +04:33 06:06 +00:45 02:31 +00:46 02:30 +00:47 02:17 +07:36 09:31 +06:54 08:36 +06:35 08:21 +03:31 04:54 +06:24 07:45 +00:07 01:24 +06:18 07:27 +08:13 09:12 +08:51 10:17 +08:08 09:50 +08:24 10:10 +00:12 01:42 +02:37 03:42 +03:31 04:36 +00:58 02:07 +00:08 01:46 +05:32 07:19 +06:13 07:27 +00:55 02:11 +08:25 09:57 +07:43 09:12 +00:11 01:54 +02:40 04:27 +08:40 10:22 +04:30 06:30 +09:21 10:35 +09:32 10:42 +04:39 06:17 +00:59 02:44 +04:31 06:15 +03:10 04:18 +05:21 06:46 +01:04 02:33 +06:08 08:05 +01:14 03:08 +04:49 06:08 +04:37 05:37 +02:46 03:47 +00:54 02:36 +01:09 02:33 +06:17 07:41 +07:53 09:43 +05:57 07:50 +01:58 03:50 +04:18 05:53 +03:52 05:29 +05:49 06:48 +03:11 04:54 +03:05 04:44 +03:11 04:49 +05:00 ... [truncated message content] |
From: <yan...@us...> - 2008-07-18 00:38:32
|
Revision: 893 http://assorted.svn.sourceforge.net/assorted/?rev=893&view=rev Author: yangzhang Date: 2008-07-18 00:38:36 +0000 (Fri, 18 Jul 2008) Log Message: ----------- added gcj 08 qualification work Added Paths: ----------- problems/gcj/2008/ problems/gcj/2008/1-qual/ problems/gcj/2008/1-qual/FlySwatter/ problems/gcj/2008/1-qual/FlySwatter/FlySwatter.py problems/gcj/2008/1-qual/SavingTheUniverse/ problems/gcj/2008/1-qual/SavingTheUniverse/A-large.in problems/gcj/2008/1-qual/SavingTheUniverse/A-small-attempt0.in problems/gcj/2008/1-qual/SavingTheUniverse/A-small-attempt1.in problems/gcj/2008/1-qual/SavingTheUniverse/SavingTheUniverse.py problems/gcj/2008/1-qual/SavingTheUniverse/notes problems/gcj/2008/1-qual/TrainTimetable/ problems/gcj/2008/1-qual/TrainTimetable/B-small-attempt0.in problems/gcj/2008/1-qual/TrainTimetable/B-small-attempt1.in problems/gcj/2008/1-qual/TrainTimetable/TrainTimetable.py problems/gcj/2008/1-qual/TrainTimetable/notes Added: problems/gcj/2008/1-qual/FlySwatter/FlySwatter.py =================================================================== --- problems/gcj/2008/1-qual/FlySwatter/FlySwatter.py (rev 0) +++ problems/gcj/2008/1-qual/FlySwatter/FlySwatter.py 2008-07-18 00:38:36 UTC (rev 893) @@ -0,0 +1,41 @@ +#!/usr/bin/env python + +from sys import stdin +from math import pi, sqrt, sin, cos + +def frange( start, step, stop ): + while start < stop: + yield start + start += step + +ntests = int( stdin.readline() ) +for test in xrange( ntests ): + f, R, t, r, g = map( float, stdin.readline().split() ) + ring = pi * R**2 - pi * (R-t)**2 + d = 2*r + # TODO real R + # TODO pad ring and bars + + # ignore squares that are outside + # subtract whole squares that are inside + # look at which squares are partially enclosed + z = r + while 1: + z += g + d + if z >= R: break + x = y = -z + def squares(): + for x in frange( -z, g+d, z ): + for y in frange( -z, g+d, z ): + yield x,y + def points((x,y)): return ( (x,y), (x+g,y), (x,y+g), (x+g,y+g) ) + def dist((x0,y0),(x1,y1)=(0,0)): return sqrt((x1-x0)**2+(y1-y0)**2) + for sq in squares(): + # print points(sq) + if all( dist(p) > R for p in points(sq) ): print 'outside' + elif all( dist(p) < R for p in points(sq) ): area += g**2; print 'inside' + else: + # TODO left off here! + + print 'Case #%d:' % ( test + 1 ) + print '' Property changes on: problems/gcj/2008/1-qual/FlySwatter/FlySwatter.py ___________________________________________________________________ Added: svn:executable + * Added: problems/gcj/2008/1-qual/SavingTheUniverse/A-large.in =================================================================== --- problems/gcj/2008/1-qual/SavingTheUniverse/A-large.in (rev 0) +++ problems/gcj/2008/1-qual/SavingTheUniverse/A-large.in 2008-07-18 00:38:36 UTC (rev 893) @@ -0,0 +1,6023 @@ +20 +2 +Googol Guernsey +Googol Saudi Arabia +0 +2 +Puppy Pile +Googol Brazil +5 +Puppy Pile +Puppy Pile +Puppy Pile +Puppy Pile +Puppy Pile +3 +Googol Singapore +Googol USA +AskMe +12 +Googol USA +Googol Singapore +Googol USA +Googol USA +Googol USA +Googol USA +AskMe +AskMe +AskMe +AskMe +Googol Singapore +AskMe +3 +Googol Malaysia +Googol Kyrgyzstan +Googol Timor Leste +7 +Googol Malaysia +Googol Kyrgyzstan +Googol Malaysia +Googol Kyrgyzstan +Googol Timor Leste +Googol Timor Leste +Googol Timor Leste +3 +Googol Kyrgyzstan +Googol UK +Googol Mexico +19 +Googol UK +Googol Kyrgyzstan +Googol UK +Googol UK +Googol UK +Googol UK +Googol Mexico +Googol Mexico +Googol Mexico +Googol Mexico +Googol Kyrgyzstan +Googol Mexico +Googol UK +Googol Kyrgyzstan +Googol UK +Googol Kyrgyzstan +Googol Mexico +Googol Mexico +Googol Mexico +3 +Googol Chile +Googol Trinidad and Tobago +Alibubu +19 +Googol Trinidad and Tobago +Googol Chile +Googol Trinidad and Tobago +Googol Chile +Alibubu +Alibubu +Alibubu +Googol Trinidad and Tobago +Googol Chile +Googol Trinidad and Tobago +Googol Trinidad and Tobago +Googol Trinidad and Tobago +Googol Trinidad and Tobago +Alibubu +Alibubu +Alibubu +Alibubu +Googol Chile +Alibubu +2 +Googol Holland +DontAsk +1000 +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +Googol Holland +DontAsk +3 +Googol Namibia +Googol Brazil +Googol Morocco +998 +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +Googol Morocco +Googol Namibia +Googol Brazil +2 +A +B +20 +A +A +A +A +A +B +A +B +A +A +A +A +B +B +B +B +B +B +A +B +100 +Googol Venezuela +Googol Uzbekistan +Googol Turkmenistan +Googol Belize +Googol Libya +Lacos +Megallan +Googol Sri Lanka +Googol Dominican Republic +Googol Morocco +Googol Bulgaria +Googol UK +Googol China +Googol Micronesia +Googol Hungary +Bad Search +Googol Hong Kong +Googol Liechtenstein +Googol Anguilla +Googol Azerbaijan +Googol Senegal +B9 +Googol Gibraltar +Googol Mexico +Googol Cuba +Googol Slokvia +Googol Chile +Googol Kyrgyzstan +Googol Armenia +Googol Austria +Googol Dominica +Googol Namibia +Googol Mongolia +Googol Iceland +Googol Kenya +Googol Peru +Googol Saint Helena +Googol Indonesia +Googol Uruguay +Googol The Bahamas +Excitement +Googol UAE +Googol Montserrat +Googol Panama +Googol Pitcairn Islands +Googol Costa Rica +Googol The Gambia +Googol Canada +Googol Sweden +Googol Vanuatu +Googol American Samoa +Googol US Virgin Islands +Googol El Salvador +Wiki Search +Yeehaw Search +Googol Egypt +Googol Israel +Googol Greece +Googol Bosnia and Herzegovina +Googol Australia +Googol Greenland +Googol India +Index +Googol Haiti +Googol New Zealand +Googol Ireland +Googol Bangladesh +Alta View +Googol +Dont Ask +Tomato +CoolBot +Googol Paraguay +Googol Poland +Time Warmer +Googol Ivory Coast Cote DIvoire +Googol Djibouti +Googol San Marino +Googol Niue +Googol The Philippines +Micro Phone +Googol Malaysia +Googol Antigua and Barbuda +Dont Ask Me +Googol Botswana +Googol Isle of Man +MeGoogle +Saporo +Googol Ethiopia +Googol Luxembourg +Googol Italy +Googol Finland +Informatics +Googol Rwanda +Googol Latvia +Googol Republic of the Congo +Googol Saint Vincent and the Grenadines +Googol Lesotho +Googol Tajikistan +Googol Taiwan +1000 +Googol Sri Lanka +Googol Malaysia +Googol Libya +Googol Montserrat +Googol Chile +Googol India +Googol Botswana +Googol Israel +Googol The Bahamas +Googol Sweden +Googol Bangladesh +Googol Mongolia +Googol Vanuatu +Micro Phone +Googol The Gambia +Googol Australia +Googol UK +Wiki Search +Googol Italy +Googol Uzbekistan +Googol American Samoa +Googol Pitcairn Islands +Googol Greece +Googol Haiti +Googol Italy +Bad Search +Googol Paraguay +Googol Mongolia +Googol Indonesia +Googol Slokvia +Googol Uzbekistan +Googol Pitcairn Islands +Googol Bosnia and Herzegovina +Lacos +MeGoogle +Googol Botswana +Googol Bangladesh +Googol Gibraltar +Googol UAE +Lacos +Googol Gibraltar +Googol Australia +Googol Italy +Googol Paraguay +Googol The Bahamas +Googol Saint Helena +Googol Namibia +Googol US Virgin Islands +Googol UAE +Googol Poland +Googol Libya +Googol Finland +Googol Liechtenstein +Googol Micronesia +Yeehaw Search +Googol Dominican Republic +Micro Phone +Googol Niue +Informatics +Googol Liechtenstein +Googol Egypt +Googol Rwanda +Googol Micronesia +Googol Micronesia +Googol Taiwan +Googol US Virgin Islands +Googol Tajikistan +Googol Ireland +Time Warmer +Googol Finland +Googol Mexico +Googol Saint Vincent and the Grenadines +Googol American Samoa +Googol Micronesia +Googol Senegal +Googol Montserrat +Googol Uzbekistan +Googol El Salvador +Googol Costa Rica +Googol Latvia +Googol San Marino +Googol Vanuatu +Googol Isle of Man +Googol Republic of the Congo +Index +Googol Finland +Googol Egypt +Googol Montserrat +B9 +Googol Canada +Googol UK +Googol San Marino +Googol UAE +Googol Cuba +Googol Montserrat +Informatics +Googol Ivory Coast Cote DIvoire +Informatics +Googol Morocco +Googol Vanuatu +Dont Ask Me +Googol Mongolia +Googol Tajikistan +MeGoogle +Googol Lesotho +Googol Anguilla +Googol Armenia +Googol American Samoa +Googol Gibraltar +Googol Poland +Googol Pitcairn Islands +Googol Venezuela +Googol Gibraltar +Googol Malaysia +Googol Republic of the Congo +Googol Saint Helena +Googol Paraguay +Googol Turkmenistan +Googol Dominica +Googol Latvia +Googol Vanuatu +Googol UAE +Googol Mexico +Googol Montserrat +Googol Ireland +Googol Liechtenstein +MeGoogle +Excitement +Googol Bulgaria +Googol Saint Vincent and the Grenadines +Googol Montserrat +Googol Rwanda +Micro Phone +Excitement +Googol The Philippines +Googol Dominica +Googol Bulgaria +Googol Sri Lanka +Micro Phone +Googol Iceland +Googol Mongolia +Googol San Marino +Googol Isle of Man +Yeehaw Search +Googol Bosnia and Herzegovina +Micro Phone +Googol Italy +Dont Ask Me +Googol Antigua and Barbuda +Googol Paraguay +Googol Austria +Dont Ask Me +Googol Micronesia +Googol Libya +Googol Niue +Googol Niue +B9 +Googol New Zealand +CoolBot +Googol Namibia +Googol China +Googol Ireland +Googol San Marino +Googol Rwanda +Lacos +Googol Israel +Googol Mexico +Alta View +Googol Hong Kong +Googol Egypt +Googol Venezuela +Googol Sweden +Googol Botswana +Googol Isle of Man +Googol Egypt +Googol Republic of the Congo +Googol Liechtenstein +Googol Lesotho +Googol Niue +Googol US Virgin Islands +Tomato +Googol Australia +Saporo +Dont Ask Me +Googol Haiti +Googol Ireland +Googol Hungary +Googol Saint Helena +Googol Austria +Googol Indonesia +Googol Senegal +Googol Montserrat +Googol Turkmenistan +Googol Lesotho +Saporo +Googol Australia +Lacos +Index +Googol Chile +Googol Poland +Googol Liechtenstein +Googol Kyrgyzstan +Time Warmer +Yeehaw Search +Googol New Zealand +Googol Austria +Googol Vanuatu +Googol Antigua and Barbuda +Googol Chile +Googol The Philippines +Googol Isle of Man +Googol Sweden +Googol Uruguay +Googol Paraguay +Googol Botswana +Wiki Search +Googol Indonesia +Googol Tajikistan +Googol UAE +Googol Azerbaijan +Googol Peru +Googol India +Googol Micronesia +Googol Luxembourg +Googol Bosnia and Herzegovina +Googol Venezuela +Googol Sweden +Googol Hong Kong +Googol Hungary +Time Warmer +Googol Luxembourg +Googol Namibia +Wiki Search +Googol Haiti +Googol Isle of Man +Googol Anguilla +Informatics +Googol Kenya +Googol El Salvador +CoolBot +Googol Ireland +Googol Indonesia +CoolBot +Googol Egypt +Index +Googol Egypt +Googol Dominican Republic +Googol US Virgin Islands +Lacos +Googol Turkmenistan +Googol Gibraltar +Excitement +Googol Haiti +Googol Peru +Googol Malaysia +Time Warmer +Saporo +Googol Austria +Googol Italy +Googol Uzbekistan +Googol Libya +Googol The Philippines +Googol Isle of Man +Googol Greece +Googol Panama +Tomato +Googol Kyrgyzstan +Saporo +Googol Greece +Googol Namibia +Googol Bulgaria +Time Warmer +B9 +Googol Antigua and Barbuda +Googol Dominica +Dont Ask Me +Googol Luxembourg +Googol Italy +Googol Kenya +Googol Republic of the Congo +Informatics +Googol Greece +Saporo +Googol Israel +Googol Pitcairn Islands +Dont Ask +Googol Dominica +Googol Botswana +Googol Tajikistan +Googol Paraguay +Googol Isle of Man +Yeehaw Search +Googol US Virgin Islands +Googol Gibraltar +Googol New Zealand +Googol The Gambia +Googol Costa Rica +Googol Finland +MeGoogle +Yeehaw Search +Googol Mexico +Googol Saint Vincent and the Grenadines +Googol Armenia +Googol Pitcairn Islands +Googol Dominica +Googol Bosnia and Herzegovina +Googol The Philippines +Googol Paraguay +Googol Vanuatu +Googol Ireland +Alta View +Googol Rwanda +Time Warmer +Megallan +Googol Uzbekistan +Googol Azerbaijan +Googol Ivory Coast Cote DIvoire +Googol Namibia +Googol Belize +Googol Chile +Googol Egypt +Excitement +Micro Phone +Googol Sri Lanka +Googol Haiti +Googol Pitcairn Islands +Lacos +Googol Dominican Republic +Googol Ethiopia +Googol Finland +Index +Googol Haiti +Excitement +Googol Italy +Googol Australia +Googol Gibraltar +Googol Uzbekistan +Googol Uruguay +Googol Latvia +Googol American Samoa +Googol Belize +Googol India +Googol Republic of the Congo +Googol Niue +Googol +Googol Lesotho +Googol Vanuatu +Googol Republic of the Congo +Micro Phone +Googol El Salvador +B9 +Googol Saint Helena +Googol Pitcairn Islands +Yeehaw Search +Googol Republic of the Congo +Googol Sri Lanka +Googol American Samoa +Googol Venezuela +Bad Search +Googol Uruguay +Informatics +Googol Austria +Wiki Search +Googol Botswana +Googol Senegal +Googol China +Megallan +Googol Poland +Googol American Samoa +Googol Uzbekistan +Googol Ivory Coast Cote DIvoire +Megallan +Googol Hungary +Tomato +Googol Botswana +Googol Kenya +Alta View +Googol Isle of Man +Googol Dominica +Googol Sweden +Googol Indonesia +Googol Belize +Googol Saint Helena +Googol Iceland +Googol Morocco +Googol Namibia +Googol UAE +Googol Greenland +Googol Namibia +Googol Dominican Republic +Googol American Samoa +Googol Ivory Coast Cote DIvoire +Googol Uruguay +Googol Libya +Googol Australia +Googol Bulgaria +Googol Hong Kong +Googol Anguilla +Dont Ask Me +Googol Azerbaijan +Googol Azerbaijan +Googol Bosnia and Herzegovina +Googol Slokvia +Googol Iceland +Micro Phone +Googol India +Googol Senegal +Googol Sweden +Googol The Gambia +Googol American Samoa +Googol Sweden +Googol Peru +Lacos +Googol Botswana +Googol +Alta View +Bad Search +Googol India +Googol The Philippines +Googol Tajikistan +Tomato +Googol Austria +Googol Chile +Googol Greenland +Googol Isle of Man +Googol Indonesia +Tomato +Yeehaw Search +Googol Egypt +Lacos +Googol Poland +Googol Chile +Bad Search +Googol American Samoa +Googol China +Googol Republic of the Congo +Googol Haiti +Googol Mongolia +Googol Republic of the Congo +Googol Morocco +Googol Kenya +Googol Republic of the Congo +Googol Saint Vincent and the Grenadines +Googol The Bahamas +Googol The Philippines +Googol Hong Kong +Googol Bosnia and Herzegovina +Googol The Gambia +Googol Niue +Googol Indonesia +Googol Lesotho +Googol Sweden +Googol Azerbaijan +Googol Ivory Coast Cote DIvoire +Googol Greenland +Googol Libya +Googol China +Googol Antigua and Barbuda +Googol Bulgaria +Googol +Saporo +Dont Ask Me +Googol The Gambia +Yeehaw Search +Googol Isle of Man +Googol Bosnia and Herzegovina +Googol Uzbekistan +Googol Sweden +Googol Italy +Googol Vanuatu +Googol Morocco +Googol Cuba +Googol Pitcairn Islands +Lacos +Googol Hong Kong +Googol Djibouti +Googol Gibraltar +Time Warmer +Googol Gibraltar +Googol El Salvador +Googol China +CoolBot +Googol El Salvador +Googol Namibia +Googol The Gambia +Googol China +Saporo +Googol Australia +Googol Latvia +Googol Tajikistan +Googol The Philippines +Googol Iceland +Googol Iceland +Googol San Marino +Saporo +Googol Azerbaijan +Googol Saint Helena +Excitement +Googol Azerbaijan +Googol Chile +Googol Luxembourg +Googol Austria +Googol Belize +Googol Kenya +Googol Kenya +Googol Azerbaijan +Googol Bulgaria +Googol Dominican Republic +Googol Costa Rica +Googol Botswana +Googol China +Googol Greece +Googol Israel +Googol New Zealand +Excitement +Yeehaw Search +Googol Djibouti +Micro Phone +Googol Ireland +Googol Gibraltar +Googol Dominica +Googol Saint Vincent and the Grenadines +Googol Egypt +Googol Haiti +Time Warmer +Googol Latvia +Googol Kenya +Googol Bulgaria +Googol Peru +Yeehaw Search +Googol Saint Helena +Googol Cuba +Dont Ask Me +Googol Finland +Googol Bulgaria +Dont Ask +Googol Bulgaria +Googol Senegal +Googol Dominica +Googol Israel +Lacos +Googol Montserrat +Googol Ireland +Googol Micronesia +Googol Sri Lanka +Googol Bosnia and Herzegovina +Alta View +Googol Peru +Googol Italy +Googol Iceland +Googol Bosnia and Herzegovina +Googol Senegal +Googol Austria +Googol Ireland +Dont Ask Me +Googol Egypt +Googol Greenland +Tomato +Googol Ireland +Googol Republic of the Congo +Googol Cuba +Yeehaw Search +CoolBot +Googol Australia +Googol Costa Rica +Googol Antigua and Barbuda +Googol Armenia +Googol Israel +Yeehaw Search +Googol Bulgaria +Googol New Zealand +Googol UK +Wiki Search +Googol Austria +Googol Cuba +Googol China +Googol The Bahamas +Googol Pitcairn Islands +Googol Taiwan +Googol Austria +Googol Austria +Googol Greece +Googol Vanuatu +Googol Bulgaria +Googol Ivory Coast Cote DIvoire +Googol Isle of Man +Googol Bangladesh +Googol Peru +Googol Sri Lanka +Googol Namibia +Googol Antigua and Barbuda +Googol Namibia +Googol Isle of Man +Lacos +Googol Montserrat +Dont Ask Me +Saporo +Googol Gibraltar +Googol Finland +Googol Latvia +Googol Iceland +Googol Egypt +Lacos +Googol Uruguay +Googol Saint Helena +Googol Dominica +Googol Turkmenistan +Googol Armenia +Time Warmer +Googol Uzbekistan +Googol Greece +Googol Egypt +Googol UK +Googol Australia +Googol Ireland +MeGoogle +Googol Saint Vincent and the Grenadines +Googol Namibia +Googol Poland +Googol Belize +Googol Haiti +Googol Egypt +MeGoogle +Googol Venezuela +Googol Greenland +Googol Armenia +Googol Peru +Googol Venezuela +Googol American Samoa +Googol Chile +Googol Latvia +Dont Ask Me +Googol Iceland +Googol Taiwan +Googol Poland +Tomato +Googol Malaysia +Googol Ivory Coast Cote DIvoire +Googol Tajikistan +Googol Sri Lanka +Googol San Marino +Googol Sri Lanka +Index +Googol Ethiopia +Googol Bangladesh +Googol Armenia +Googol Chile +Index +Googol UK +Googol Taiwan +Googol Liechtenstein +Googol Chile +Megallan +Googol Belize +Googol The Philippines +Googol Bangladesh +Googol Namibia +Googol Hungary +Googol Anguilla +Googol Antigua and Barbuda +Googol UAE +Googol New Zealand +Googol Liechtenstein +Time Warmer +Googol Hong Kong +Googol Finland +Googol Saint Vincent and the Grenadines +Googol Lesotho +Googol Bangladesh +Googol The Gambia +Googol Greece +Googol Panama +Yeehaw Search +Googol Azerbaijan +Dont Ask Me +Googol Paraguay +Googol Taiwan +Googol India +Saporo +Googol UK +Googol China +Googol Libya +Googol Indonesia +Googol Anguilla +Googol Dominican Republic +Googol Hong Kong +Googol Indonesia +Googol The Bahamas +Googol Namibia +Googol Egypt +B9 +Googol Cuba +Googol Paraguay +Googol Finland +Googol American Samoa +Googol Ethiopia +Googol Antigua and Barbuda +Googol Taiwan +Googol Isle of Man +Googol Sweden +Googol Costa Rica +Googol Latvia +Googol Pitcairn Islands +Googol US Virgin Islands +Googol Hungary +Googol The Philippines +Googol Cuba +Googol Micronesia +Googol Rwanda +Googol UK +Googol Djibouti +Lacos +Bad Search +Googol Bangladesh +Googol Cuba +Googol Mexico +Googol Antigua and Barbuda +Googol India +Bad Search +Googol Ireland +Googol +Googol Ethiopia +Googol UAE +Excitement +Googol The Philippines +Googol Pitcairn Islands +Micro Phone +Googol India +Googol Panama +Googol Anguilla +Index +Excitement +Googol China +Googol Bosnia and Herzegovina +Informatics +Googol Chile +Googol Indonesia +Googol +Informatics +Googol Antigua and Barbuda +Googol The Philippines +Googol Senegal +Googol Ethiopia +Googol The Gambia +MeGoogle +Googol China +Googol Gibraltar +B9 +Googol Slokvia +Googol Indonesia +MeGoogle +Googol Costa Rica +Googol Slokvia +Micro Phone +Googol Uruguay +Lacos +Googol Cuba +Googol Anguilla +Googol Anguilla +Alta View +Googol Saint Helena +Googol Mongolia +Googol Sri Lanka +Googol Vanuatu +Googol Italy +Googol US Virgin Islands +Googol Kyrgyzstan +Micro Phone +Googol Azerbaijan +CoolBot +Index +Googol Tajikistan +Informatics +Googol American Samoa +Googol Lesotho +Googol Dominica +Googol Hungary +Googol Azerbaijan +Googol US Virgin Islands +Googol The Bahamas +Googol Israel +Googol Italy +Googol Indonesia +Googol Iceland +Tomato +Googol Ivory Coast Cote DIvoire +Googol Uruguay +Googol The Gambia +Googol Rwanda +Googol Morocco +Googol Ireland +Googol Antigua and Barbuda +Googol UAE +Googol Paraguay +Dont Ask Me +Googol Mongolia +Googol Cuba +Googol Bulgaria +Googol China +Googol Republic of the Congo +Googol Kenya +Googol Chile +Googol The Gambia +Googol Niue +Googol San Marino +Googol Panama +Googol Dominican Republic +Googol Finland +Index +Googol Greenland +Dont Ask Me +Tomato +Googol Turkmenistan +Googol Senegal +Googol Belize +Googol Cuba +Googol Canada +Googol Latvia +Tomato +Excitement +Googol Belize +Googol Peru +Googol Gibraltar +Googol Pitcairn Islands +Googol Australia +Lacos +Googol Armenia +Googol Peru +Googol +Informatics +Googol Namibia +Googol Turkmenistan +Googol Azerbaijan +Googol San Marino +Micro Phone +Googol Saint Vincent and the Grenadines +Googol Paraguay +Excitement +Googol The Bahamas +Googol Kenya +Googol El Salvador +Time Warmer +Googol Libya +Yeehaw Search +Googol The Gambia +Googol Sri Lanka +Googol Dominica +Googol Rwanda +Wiki Search +Googol El Salvador +Googol Kenya +Googol Israel +Saporo +Googol Dominican Republic +Wiki Search +Googol Taiwan +Googol Bangladesh +Googol Malaysia +MeGoogle +MeGoogle +Googol Chile +Dont Ask +Excitement +Googol Costa Rica +Googol The Gambia +Googol Paraguay +Googol Rwanda +Tomato +Googol China +Googol Botswana +Googol Libya +Googol Ireland +Googol Australia +Googol Greenland +CoolBot +Googol Greece +Googol Senegal +Googol Turkmenistan +Googol US Virgin Islands +Googol Poland +Yeehaw Search +Googol Indonesia +Googol Antigua and Barbuda +Googol Latvia +Googol Lesotho +Googol Peru +Googol Costa Rica +Bad Search +Googol +Googol Namibia +Googol Uzbekistan +Googol Latvia +Googol Uzbekistan +Googol Rwanda +Googol Finland +Googol Taiwan +Googol Ireland +Googol Saint Helena +Tomato +Googol Dominica +B9 +Googol Chile +Googol Canada +Googol Mongolia +Saporo +Googol Anguilla +Googol Luxembourg +Googol Australia +Googol Paraguay +Excitement +Googol Mongolia +Googol The Philippines +Googol Austria +Googol Bangladesh +Googol Slokvia +Googol Kyrgyzstan +Googol Uzbekistan +Tomato +Googol Montserrat +Googol Gibraltar +Wiki Search +Googol Pitcairn Islands +Googol +Megallan +Googol Luxembourg +Googol China +Googol Bosnia and Herzegovina +Googol Egypt +Googol Sweden +Googol Armenia +Googol Isle of Man +Dont Ask +Megallan +Googol Mongolia +Wiki Search +Googol Costa Rica +Googol Turkmenistan +Googol Panama +Googol Libya +Googol Kyrgyzstan +Googol Peru +Googol Luxembourg +Googol Bosnia and Herzegovina +Googol Ireland +Googol Egypt +Dont Ask Me +Googol Pitcairn Islands +Googol Morocco +Lacos +MeGoogle +Dont Ask Me +Googol Bulgaria +Googol Antigua and Barbuda +Googol US Virgin Islands +Googol Liechtenstein +Googol Paraguay +Googol Haiti +Googol Ivory Coast Cote DIvoire +Googol The Philippines +Googol New Zealand +Googol Egypt +Googol New Zealand +Googol Iceland +Googol India +Googol Sweden +Googol The Bahamas +Googol Australia +Googol Turkmenistan +Googol Antigua and Barbuda +Googol Haiti +Googol Austria +Dont Ask +Googol Libya +Saporo +MeGoogle +Googol China +Googol Gibraltar +Googol Dominica +Googol Poland +Googol The Philippines +Dont Ask +Googol Israel +Googol Italy +Googol US Virgin Islands +Googol Australia +Googol Australia +Googol Ivory Coast Cote DIvoire +Googol Mexico +Googol Kenya +Yeehaw Search +Saporo +Googol UAE +Tomato +Googol Paraguay +Yeehaw Search +Googol Anguilla +Googol Haiti +Googol Micronesia +Googol Poland +Googol Lesotho +4 +Googol Argentina +Googol Nicaragua +Googol Senegal +Googol Samoa +60 +Googol Samoa +Googol Senegal +Googol Samoa +Googol Nicaragua +Googol Nicaragua +Googol Senegal +Googol Senegal +Googol Nicaragua +Googol Samoa +Googol Samoa +Googol Samoa +Googol Samoa +Googol Senegal +Googol Senegal +Googol Samoa +Googol Senegal +Googol Samoa +Googol Nicaragua +Googol Senegal +Googol Senegal +Googol Nicaragua +Googol Samoa +Googol Nicaragua +Googol Argentina +Googol Samoa +Googol Samoa +Googol Samoa +Googol Samoa +Googol Samoa +Googol Samoa +Googol Samoa +Googol Nicaragua +Googol Nicaragua +Googol Senegal +Googol Nicaragua +Googol Samoa +Googol Argentina +Googol Samoa +Googol Samoa +Googol Samoa +Googol Samoa +Googol Samoa +Googol Samoa +Googol Samoa +Googol Senegal +Googol Samoa +Googol Senegal +Googol Nicaragua +Googol Senegal +Googol Samoa +Googol Argentina +Googol Samoa +Googol Samoa +Googol Nicaragua +Googol Samoa +Googol Samoa +Googol Samoa +Googol Samoa +Googol Argentina +Googol Argentina +10 +Tomato +Googol Norfolk Island +Googol Ethiopia +Googol Isle of Man +Googol Uganda +Googol Croatia +Googol Cook Islands +Googol Panama +Googol Libya +Lacos +100 +Googol Panama +Googol Panama +Googol Croatia +Googol Cook Islands +Googol Cook Islands +Googol Libya +Tomato +Googol Panama +Googol Ethiopia +Googol Cook Islands +Googol Croatia +Googol Panama +Tomato +Googol Norfolk Island +Googol Cook Islands +Googol Croatia +Googol Norfolk Island +Googol Panama +Googol Panama +Googol Libya +Lacos +Googol Panama +Googol Isle of Man +Googol Ethiopia +Googol Libya +Lacos +Googol Ethiopia +Tomato +Googol Panama +Googol Libya +Lacos +Lacos +Lacos +Lacos +Googol Panama +Googol Libya +Lacos +Googol Libya +Lacos +Lacos +Googol Panama +Googol Libya +Lacos +Googol Libya +Googol Panama +Googol Panama +Googol Cook Islands +Lacos +Googol Uganda +Googol Libya +Googol Libya +Googol Libya +Lacos +Lacos +Lacos +Lacos +Googol Panama +Lacos +Lacos +Lacos +Lacos +Lacos +Googol Libya +Googol Panama +Lacos +Lacos +Googol Libya +Lacos +Lacos +Googol Libya +Googol Libya +Googol Panama +Lacos +Lacos +Googol Libya +Googol Isle of Man +Googol Panama +Lacos +Lacos +Googol Panama +Lacos +Googol Panama +Lacos +Lacos +Googol Uganda +Googol Libya +Googol Libya +Googol Panama +Googol Panama +Googol Libya +Lacos +Lacos +Googol Cook Islands +Googol Cook Islands +Lacos +Lacos +Lacos +Googol Libya +Lacos +Lacos +3 +Googol Tajikistan +Googol Costa Rica +Googol Saint Helena +30 +Googol Saint Helena +Googol Tajikistan +Googol Saint Helena +Googol Saint Helena +Googol Saint Helena +Googol Saint Helena +Googol Costa Rica +Googol Saint Helena +Googol Costa Rica +Googol Costa Rica +Googol Tajikistan +Googol Costa Rica +Googol Tajikistan +Googol Tajikistan +Googol Tajikistan +Googol Saint Helena +Googol Saint Helena +Googol Saint Helena +Googol Costa Rica +Googol Tajikistan +Googol Saint Helena +Googol Tajikistan +Googol Saint Helena +Googol Tajikistan +Googol Costa Rica +Googol Costa Rica +Googol Tajikistan +Googol Saint Helena +Googol Saint Helena +Googol Saint Helena +100 +Googol Saudi Arabia +Googol San Marino +Googol Pakistan +Googol Malta +Googol Australia +Googol Switzerland +YouGoogle +Googol UAE +Googol Rwanda +Googol British Virgin Islands +Googol Singapore +AliWebsite +Googol Cuba +Yeehaw Search +Googol Bolivia +Googol Peru +Googol Portugal +Googol Guatemala +Googol Trinidad and Tobago +Googol Iceland +Googol Solomon Islands +Googol Kenya +Googol Ukraine +Googol Dominica +Googol Hong Kong +Saporo +Googol Latvia +Megallan +fBay +Googol Uganda +Bad Search +Googol Nepal +Googol Ivory Coast Cote DIvoire +NSM Search +Googol South Korea +Googol Haiti +Googol France +Googol The Bahamas +Tomato +Googol Sri Lanka +Googol Bosnia and Herzegovina +Googol Demark +Googol Saint Vincent and the Grenadines +Googol Puerto Rico +Googol Liechtenstein +Googol Montserrat +Googol Kazakhstan +Googol Mauritius +MeGoogle +Lacos +Googol Cook Islands +Googol Republic of the Congo +Googol Finland +Puppy Pile +Index +Googol Pitcairn Islands +Micro Phone +Googol Greece +AskMe +Googol UK +Googol Vanuatu +Googol Kyrgyzstan +Googol Holland +Googol Austria +Googol Paraguay +Googol Zambia +Googol US Virgin Islands +Googol Malawi +Dont Ask Me +Googol Belize +Excitement +InkToMilk +Googol Democratic Republic of the Congo +Googol Morocco +Googol Antigua and Barbuda +Googol Fiji +B9 +Googol Jamaica +Googol Germany +Alta View +Googol Canada +Googol Nicaragua +Googol Ireland +Googol Russia +DontAsk +Googol Armenia +Informatics +Dubai +Live Seek +Googol Tonga +Googol Argentina +Googol Belgium +Googol Namibia +Googol Uruguay +Googol South Africa +Gurujh +Googol Lesotho +Googol Vietnam +Googol Bulgaria +Googol Japan +1000 +Googol Ivory Coast Cote DIvoire +Megallan +Googol Pakistan +Live Seek +Googol Kyrgyzstan +Googol Ivory Coast Cote DIvoire +Googol Namibia +Googol Trinidad and Tobago +Googol Greece +Excitement +Googol The Bahamas +Googol Singapore +Googol Rwanda +Googol Demark +Googol Vietnam +Megallan +Googol Guatemala +Bad Search +Googol Cuba +Googol Belize +Googol Germany +Excitement +Googol Zambia +Googol Kazakhstan +Googol The Bahamas +YouGoogle +Live Seek +Googol British Virgin Islands +Googol Belgium +Puppy Pile +YouGoogle +Saporo +Googol Ireland +Googol UAE +Yeehaw Search +Googol Saint Vincent and the Grenadines +Googol Demark +Googol Australia +Googol Vanuatu +Googol Saudi Arabia +Googol Fiji +Googol Japan +Googol Rwanda +Informatics +Googol Demark +Googol UAE +Googol Singapore +Googol Greece +Googol The Bahamas +Googol Hong Kong +Saporo +Googol Trinidad and Tobago +Googol Uruguay +Googol Namibia +Googol Holland +Googol Nepal +Googol Saudi Arabia +Lacos +Googol Demark +Googol Tonga +Googol Pakistan +Lacos +AliWebsite +Informatics +Googol Greece +Googol Dominica +Megallan +Googol Bulgaria +fBay +Live Seek +Googol Japan +Googol Pakistan +Informatics +Googol UAE +Googol Tonga +fBay +Googol Peru +Googol Vietnam +Informatics +Puppy Pile +Googol Kenya +Googol Singapore +Excitement +Googol Portugal +Googol Malta +Googol Ivory Coast Cote DIvoire +Googol Mauritius +Googol Pakistan +Informatics +Googol Belgium +Googol Tonga +Dubai +Googol France +Googol San Marino +Googol Belize +Gurujh +Saporo +Googol Lesotho +Googol Uruguay +Googol Pitcairn Islands +Dubai +Googol Uruguay +Googol UK +Googol Democratic Republic of the Congo +Googol Saudi Arabia +Googol Montserrat +Googol Saudi Arabia +Googol Cuba +Googol Demark +Dubai +Dont Ask Me +Googol Paraguay +Gurujh +Googol France +Googol Ireland +Googol Bulgaria +Googol Democratic Republic of the Congo +Megallan +Googol San Marino +Index +Googol Iceland +Googol Tonga +Googol Demark +Googol Greece +Googol Belgium +Googol Cuba +Googol Republic of the Congo +Googol Guatemala +Googol UAE +Googol Montserrat +Excitement +Googol Uruguay +Googol France +Megallan +Googol Zambia +Googol South Korea +Googol Morocco +Googol Austria +Lacos +Googol Guatemala +MeGoogle +Googol Portugal +Googol Nicaragua +Googol Liechtenstein +Puppy Pile +Googol Holland +Googol Puerto Rico +Saporo +Googol Argentina +Googol Puerto Rico +Googol Ireland +YouGoogle +Googol Ivory Coast Cote DIvoire +Googol Kenya +Googol Holland +Googol Ukraine +Googol Ivory Coast Cote DIvoire +Googol Peru +Googol The Bahamas +Googol Demark +Googol Vanuatu +Googol UAE +Googol South Korea +Gurujh +Googol The Bahamas +Googol San Marino +Bad Search +Googol Rwanda +Googol Zambia +Googol Canada +Megallan +Googol Cuba +Googol Lesotho +Googol UAE +Googol UK +Googol Cook Islands +Excitement +Googol Pakistan +B9 +Googol Kyrgyzstan +Googol Kazakhstan +Index +Googol Zambia +Googol Germany +Googol Germany +fBay +Googol San Marino +Googol Cuba +Googol Demark +Googol The Bahamas +Puppy Pile +Googol Pakistan +Googol Mauritius +Googol Tonga +Googol Lesotho +Dubai +Googol Belgium +Googol Latvia +Googol Vietnam +Index +YouGoogle +Googol Hong Kong +Googol Belize +Googol Pakistan +Googol Nepal +Megallan +Googol Cook Islands +Googol San Marino +Googol Uganda +Googol Latvia +Googol Vanuatu +Googol Jamaica +Googol Ireland +Googol Latvia +Puppy Pile +Googol Vanuatu +Micro Phone +Puppy Pile +InkToMilk +Googol Saudi Arabia +Googol Uruguay +Googol Ukraine +Googol San Marino +Tomato +Googol Cuba +Gurujh +Megallan +Googol Malta +Googol Ukraine +Googol Dominica +Googol Vanuatu +fBay +Googol Kazakhstan +Megallan +Googol Uganda +Googol Germany +Index +Googol Russia +Googol Canada +Dubai +Googol UAE +Googol Bosnia and Herzegovina +Googol Holland +Googol Argentina +Googol Zambia +Googol Portugal +Googol Cook Islands +Googol Kenya +Googol Belize +Googol Solomon Islands +Googol Iceland +Googol Kyrgyzstan +Googol Puerto Rico +Googol Solomon Islands +Googol San Marino +AskMe +Googol Portugal +Megallan +Googol Holland +Googol Sri Lanka +Googol Cook Islands +Googol Solomon Islands +Googol Belize +Googol Vietnam +Googol Cook Islands +Googol Saudi Arabia +Googol Fiji +Googol Australia +Googol Armenia +Index +Googol Uruguay +Googol Argentina +Googol Uruguay +Puppy Pile +Googol Canada +Googol UK +Dont Ask Me +Megallan +Googol Nicaragua +Googol The Bahamas +Googol Mauritius +Googol San Marino +Googol Saudi Arabia +Googol Uruguay +Googol Solomon Islands +Googol Pakistan +Googol Cook Islands +Googol France +Megallan +Googol Singapore +Googol Germany +Googol Canada +Googol Ivory Coast Cote DIvoire +Googol Mauritius +Googol Germany +DontAsk +Googol Kazakhstan +Puppy Pile +Googol Tonga +Megallan +YouGoogle +Googol Nicaragua +Googol Iceland +Googol Japan +Googol Nepal +Googol Lesotho +Googol UK +Googol San Marino +Saporo +Tomato +Tomato +Googol Antigua and Barbuda +Googol Bosnia and Herzegovina +Googol The Bahamas +Googol Paraguay +Googol Holland +Googol The Bahamas +Googol Portugal +Googol San Marino +Dont Ask Me +Googol Latvia +Googol Germany +Googol Mauritius +AskMe +Googol Ukraine +Googol Hong Kong +Googol Demark +Googol Beliz... [truncated message content] |
From: <yan...@us...> - 2008-07-16 05:46:38
|
Revision: 892 http://assorted.svn.sourceforge.net/assorted/?rev=892&view=rev Author: yangzhang Date: 2008-07-15 22:46:48 -0700 (Tue, 15 Jul 2008) Log Message: ----------- can now (incorrectly - see README) parse the full set of people in my notes.txt Modified Paths: -------------- simple-zdb/trunk/README simple-zdb/trunk/src/zdb.py Modified: simple-zdb/trunk/README =================================================================== --- simple-zdb/trunk/README 2008-07-16 05:08:50 UTC (rev 891) +++ simple-zdb/trunk/README 2008-07-16 05:46:48 UTC (rev 892) @@ -9,3 +9,10 @@ queries - revision controlled wiki: history is maintained, feed of updates is provided +Todo +---- + +Bugs: + +- handle multiple values per property +- handle inheritance correctly Modified: simple-zdb/trunk/src/zdb.py =================================================================== --- simple-zdb/trunk/src/zdb.py 2008-07-16 05:08:50 UTC (rev 891) +++ simple-zdb/trunk/src/zdb.py 2008-07-16 05:46:48 UTC (rev 892) @@ -4,8 +4,10 @@ from cPickle import load, dump from cStringIO import StringIO +from commons.exceps import handle_exceptions from commons.files import soft_makedirs from commons.startup import run_main +from commons.structs import free_struct from os import rename from path import path from re import match @@ -26,8 +28,9 @@ 'The actual DB.' def __init__( self ): self.name2obj = {} + # User-facing functions (these are the console commands) def add( self, name, parents, props ): - self.name2obj[ name ] = obj( name, parents, props ) + self.addobj( obj( name, parents, props ) ) def set( self, name, field, value ): self.name2obj[ name ].props[ field ] = value def rm( self, name ): @@ -35,9 +38,13 @@ def dump( self, path ): with file( path, 'w' ) as f: f.write( 'blah' ) - def load( self, path ): + def load( self, parent, path ): with file( path ) as f: - parse( f.read() ) + for o in parse( f.read(), [parent] ): + self.addobj( o ) + # API functions + def addobj( self, o ): + self.name2obj[ o.name ] = o class obj( object ): 'An object in the ZDB object database' @@ -54,7 +61,6 @@ self.props = {} for p in props: self.props[p] = [] if name in db.name2obj: raise zdb_exception('already exists: ' + name) - db.name2obj[name] = self # # DB files management @@ -86,41 +92,49 @@ 'Initialize a new DB and set the `db` global to it.' global db db = zdb() - obj( 'concept', [], [ 'notes' ] ) + db.add( 'concept', [], [ 'notes' ] ) # some common types - obj( 'person', [ 'concept' ], [ 'cell', 'email', 'aim', 'msn', 'google', 'residence' ] ) -# obj( 'place', [ 'concept' ], [ 'yelp URL' ] ) -# obj( 'event', [ 'concept' ], [ 'date/time' ] ) -# obj( 'group', [ 'concept' ], [ 'cell' ] ) + db.add( 'person', [ 'concept' ], [ 'cell', 'email', 'aim', 'msn', 'google', 'residence' ] ) +# db.add( 'place', [ 'concept' ], [ 'yelp URL' ] ) +# db.add( 'event', [ 'concept' ], [ 'date/time' ] ) +# db.add( 'group', [ 'concept' ], [ 'cell' ] ) # # parser # def parse( s, parents ): - f = StringIO(s.strip()) - os = [] - while True: - name = f.readline().strip() - if name == '': break - o = obj( name, parents, [] ) + line = None + counter = free_struct() + counter.i = 0 + def readline( f ): + counter.i += 1 + return f.readline().rstrip() + try: + f = StringIO(s.strip()) while True: - line = f.readline().strip() - if line == '': break - m = match( '^([^:]+)::$', line ) - if m is not None: - field = m.group(1) - buf = [] - while True: - line = f.readline().rstrip() - if line == '::': break - buf.append( line ) - value = '\n'.join( buf ).rstrip() - else: - [field, value] = line.split(': ', 1) - o.props[ field ] = value - os.append( o ) - return os + name = readline(f).strip() + if name == '': break + o = obj( name, parents, [] ) + while True: + line = readline(f).strip() + if line == '': break + m = match( '^([^:]+)::$', line ) + if m is not None: + field = m.group(1) + buf = [] + while True: + line = readline(f) + if line == '::': break + buf.append( line ) + value = '\n'.join( buf ).rstrip() + else: + [field, value] = line.split(': ', 1) + o.props[ field ] = value + yield o + except: + print >> stderr, 'line %d: %s' % ( counter.i, line ) + raise # # tests @@ -130,8 +144,7 @@ def setUp( self ): createdb() def test_simple( self ): - createdb() - parsed = parse( ''' + parsed = list( parse( ''' Yang Zhang google: yaaang notes:: @@ -144,8 +157,7 @@ notes:: - loves kids :: - ''', [ 'person' ] ) - createdb() + ''', [ 'person' ] ) ) expected = [None] * 2 expected[0] = obj( 'Yang Zhang', [ 'person' ], '' ) expected[0].props[ 'google' ] = 'yaaang' @@ -169,20 +181,20 @@ stdout.write( '>>> ' ) line = stdin.readline() words = line.split() - params = words[1:] if words != []: - cmd = words[0] + cmd, params = words[0], words[1:] try: if False: pass - elif cmd == 'add': db.add( *params ) - elif cmd == 'del': db.rm( *params ) - elif cmd == 'set': db.set( *params ) - elif cmd == 'edit': db.dump( *params ) - elif cmd == 'save': db.load( *params ) + elif cmd == 'add': db.add( *params ) + elif cmd == 'del': db.rm( *params ) + elif cmd == 'set': db.set( *params ) + elif cmd == 'dump': db.dump( *params ) + elif cmd == 'load': db.load( *params ) elif cmd == 'quit': break else: raise zdb_exception( 'bad command: ' + cmd ) except BaseException, ex: - print >> stderr, ex + # print >> stderr, ex + handle_exceptions() savedb() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-16 05:08:46
|
Revision: 891 http://assorted.svn.sourceforge.net/assorted/?rev=891&view=rev Author: yangzhang Date: 2008-07-15 22:08:50 -0700 (Tue, 15 Jul 2008) Log Message: ----------- more complex test case Modified Paths: -------------- simple-zdb/trunk/src/zdb.py Modified: simple-zdb/trunk/src/zdb.py =================================================================== --- simple-zdb/trunk/src/zdb.py 2008-07-16 05:04:18 UTC (rev 890) +++ simple-zdb/trunk/src/zdb.py 2008-07-16 05:08:50 UTC (rev 891) @@ -131,18 +131,28 @@ createdb() def test_simple( self ): createdb() - [parsed] = parse( ''' + parsed = parse( ''' Yang Zhang google: yaaang notes:: -- rocks - sucks +- lame :: + +Michael Jackson +google: emilie +notes:: +- loves kids +:: ''', [ 'person' ] ) createdb() - expected = obj( 'Yang Zhang', [ 'person' ], '' ) - expected.props[ 'google' ] = 'yaaang' - expected.props[ 'notes' ] = '- rocks\n- sucks' + expected = [None] * 2 + expected[0] = obj( 'Yang Zhang', [ 'person' ], '' ) + expected[0].props[ 'google' ] = 'yaaang' + expected[0].props[ 'notes' ] = '- sucks\n- lame' + expected[1] = obj( 'Michael Jackson', [ 'person' ], '' ) + expected[1].props[ 'google' ] = 'emilie' + expected[1].props[ 'notes' ] = '- loves kids' self.assertEqual( parsed, expected ) # This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-16 05:04:15
|
Revision: 890 http://assorted.svn.sourceforge.net/assorted/?rev=890&view=rev Author: yangzhang Date: 2008-07-15 22:04:18 -0700 (Tue, 15 Jul 2008) Log Message: ----------- added initial version of simple-zdb, which has brain-dead objects and props, along with a simple parser for my silly little textual object description format/language Added Paths: ----------- simple-zdb/ simple-zdb/trunk/ simple-zdb/trunk/README simple-zdb/trunk/src/ simple-zdb/trunk/src/zdb.py Added: simple-zdb/trunk/README =================================================================== --- simple-zdb/trunk/README (rev 0) +++ simple-zdb/trunk/README 2008-07-16 05:04:18 UTC (rev 890) @@ -0,0 +1,11 @@ +Overview +-------- + +Combination of: + +- bookmark manager, contact manager, tasklist, calendar, notebook +- object graph database, like freebase +- blog, tumblelog: customizable feeds; very flexible since they're continuous + queries +- revision controlled wiki: history is maintained, feed of updates is provided + Added: simple-zdb/trunk/src/zdb.py =================================================================== --- simple-zdb/trunk/src/zdb.py (rev 0) +++ simple-zdb/trunk/src/zdb.py 2008-07-16 05:04:18 UTC (rev 890) @@ -0,0 +1,179 @@ +#!/usr/bin/env python + +from __future__ import with_statement + +from cPickle import load, dump +from cStringIO import StringIO +from commons.files import soft_makedirs +from commons.startup import run_main +from os import rename +from path import path +from re import match +from sys import stdin, stdout, stderr +from time import time +from unittest import TestCase, main as test_main + +dbdir = path( '~/.zdb/db-' ).expanduser() + +# +# fundamental classes +# + +class zdb_exception( Exception ): + pass + +class zdb( object ): + 'The actual DB.' + def __init__( self ): + self.name2obj = {} + def add( self, name, parents, props ): + self.name2obj[ name ] = obj( name, parents, props ) + def set( self, name, field, value ): + self.name2obj[ name ].props[ field ] = value + def rm( self, name ): + del self.name2obj[ name ] + def dump( self, path ): + with file( path, 'w' ) as f: + f.write( 'blah' ) + def load( self, path ): + with file( path ) as f: + parse( f.read() ) + +class obj( object ): + 'An object in the ZDB object database' + __slots__ = 'name parents props'.split() + def __eq__( self, other ): + return ( type( self ) == type( other ) and + self.name == other.name and + self.props == other.props and + self.parents == other.parents ) + def __init__( self, name, parents, props ): + global db + self.name = name + self.parents = parents + self.props = {} + for p in props: self.props[p] = [] + if name in db.name2obj: raise zdb_exception('already exists: ' + name) + db.name2obj[name] = self + +# +# DB files management +# + +def dbfiles(): return sorted( dbdir.glob('*'), key = dbnum ) +def dbnum(dbpath): return int( x.split('-')[-1] ) + +def loaddb(): + global db + dbs = dbfiles() + if dbs == []: + raise zdb_exception('no DB to load') + else: + with file(dbs[-1]) as f: tstamp, db = load(f) + +def savedb(): + global db + dbs = dbfiles() + newdb = dbdir + str( dbnum(dbs[-1]) + 1 if len( dbs ) > 0 else 0 ) + soft_makedirs( newdb.dirname() ) + with file(newdb, 'w') as f: dump( ( time(), db ), f ) + +# +# zdb +# + +def createdb(): + 'Initialize a new DB and set the `db` global to it.' + global db + db = zdb() + obj( 'concept', [], [ 'notes' ] ) + # some common types + obj( 'person', [ 'concept' ], [ 'cell', 'email', 'aim', 'msn', 'google', 'residence' ] ) +# obj( 'place', [ 'concept' ], [ 'yelp URL' ] ) +# obj( 'event', [ 'concept' ], [ 'date/time' ] ) +# obj( 'group', [ 'concept' ], [ 'cell' ] ) + +# +# parser +# + +def parse( s, parents ): + f = StringIO(s.strip()) + os = [] + while True: + name = f.readline().strip() + if name == '': break + o = obj( name, parents, [] ) + while True: + line = f.readline().strip() + if line == '': break + m = match( '^([^:]+)::$', line ) + if m is not None: + field = m.group(1) + buf = [] + while True: + line = f.readline().rstrip() + if line == '::': break + buf.append( line ) + value = '\n'.join( buf ).rstrip() + else: + [field, value] = line.split(': ', 1) + o.props[ field ] = value + os.append( o ) + return os + +# +# tests +# + +class parser_tests( TestCase ): + def setUp( self ): + createdb() + def test_simple( self ): + createdb() + [parsed] = parse( ''' +Yang Zhang +google: yaaang +notes:: +- rocks +- sucks +:: + ''', [ 'person' ] ) + createdb() + expected = obj( 'Yang Zhang', [ 'person' ], '' ) + expected.props[ 'google' ] = 'yaaang' + expected.props[ 'notes' ] = '- rocks\n- sucks' + self.assertEqual( parsed, expected ) + +# +# main +# + +def main( argv ): + global db + + try: loaddb() + except zdb_exception: createdb() + + while True: + stdout.write( '>>> ' ) + line = stdin.readline() + words = line.split() + params = words[1:] + if words != []: + cmd = words[0] + try: + if False: pass + elif cmd == 'add': db.add( *params ) + elif cmd == 'del': db.rm( *params ) + elif cmd == 'set': db.set( *params ) + elif cmd == 'edit': db.dump( *params ) + elif cmd == 'save': db.load( *params ) + elif cmd == 'quit': break + else: raise zdb_exception( 'bad command: ' + cmd ) + except BaseException, ex: + print >> stderr, ex + + savedb() + +run_main( handle_exceptions = True ) Property changes on: simple-zdb/trunk/src/zdb.py ___________________________________________________________________ Name: svn:executable + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-14 01:19:59
|
Revision: 889 http://assorted.svn.sourceforge.net/assorted/?rev=889&view=rev Author: yangzhang Date: 2008-07-13 18:20:02 -0700 (Sun, 13 Jul 2008) Log Message: ----------- added aspell Modified Paths: -------------- configs/trunk/setup-yang.bash Added Paths: ----------- configs/trunk/src/aspell/ configs/trunk/src/aspell/aspell.en.prepl configs/trunk/src/aspell/aspell.en.pws Modified: configs/trunk/setup-yang.bash =================================================================== --- configs/trunk/setup-yang.bash 2008-07-13 19:21:00 UTC (rev 888) +++ configs/trunk/setup-yang.bash 2008-07-14 01:20:02 UTC (rev 889) @@ -19,4 +19,6 @@ install .synergy.conf synergy.conf install .unison unison install .signature signature +install .aspell.en.prepl aspell/aspell.en.prepl +install .aspell.en.pws aspell/aspell.en.pws # TODO figure out a place to put the .profile Added: configs/trunk/src/aspell/aspell.en.prepl =================================================================== --- configs/trunk/src/aspell/aspell.en.prepl (rev 0) +++ configs/trunk/src/aspell/aspell.en.prepl 2008-07-14 01:20:02 UTC (rev 889) @@ -0,0 +1,29 @@ +personal_repl-1.1 en 0 +transfered transferred +inte's Intel's +requied Required +genericized generic +alredy allured +pased passed +awhere where +infered inferred +indices indexes +de do +primatives primates +lessions lessons +kbytes KB +mbyte MB +laborous laborers +desciptors descriptors +bootsrap bootstrap +attemps attempts +dispating dissipating +dictacted dictated +useable usable +architecutes architectures +speficy specify +convient convenient +maintaing maintaining +independencies Independence +independencies independence +independencies independence assertions Added: configs/trunk/src/aspell/aspell.en.pws =================================================================== --- configs/trunk/src/aspell/aspell.en.pws (rev 0) +++ configs/trunk/src/aspell/aspell.en.pws 2008-07-14 01:20:02 UTC (rev 889) @@ -0,0 +1,125 @@ +personal_ws-1.1 en 124 +runtime +API +Pawan +dBi +Masahiro +superclass +arg +RDBMS +SerAccel +al +uplink +thresholding +hypercall +Addref +SGI +GUIDs +JNI +DMAed +CarTel +addrefs +ReiserFS +libOSs +MATLAB +Arvind +OpenEmbedded +TCP +Thiagarajan +Fi +Eq +Shih +et +Schwarz +accel +XPath +tuple +CPUs +NUMAness +summarization +bool +changelog +Abadi +manycore +Rayming +const +UDP +TLB +vectorizing +malloc +MATLAB's +LOC +Zhang +SQL +dom +livelock +resumable +CSV +Hari +multithreaded +DoS +MV +posteriori +MLE +multinomial +RMSE +stl +IOMMU +HiStar's +Deshpande +AutoMirror +Tri +th +multicore +HiStar +abbrvnat +typedef +libc +PCI +VM +Celeron +Wi +advisor +typename +Atheros +virtualization +GHz +TODO +VMM +toolchain +filesystem +Bychkovsky +hypervisor +exokernel +XStream +Cheung +NUMA +AdSense +Xen +PostgreSQL +Google +OLS +LaGrange +boolean +EasyWifi +Eriksson +stateful +AFX +deallocation +GPS +preemptively +Netflix +TxLinux +EVDO +tuples +tuple's +overfits +AMD +libOS +declaratively +RCU +Balakrishnan +Soekris +pseudocode +McRT +ILP This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-13 19:20:52
|
Revision: 888 http://assorted.svn.sourceforge.net/assorted/?rev=888&view=rev Author: yangzhang Date: 2008-07-13 12:21:00 -0700 (Sun, 13 Jul 2008) Log Message: ----------- added command_name(); added handle_exceptions to startup() Modified Paths: -------------- python-commons/trunk/src/commons/startup.py Modified: python-commons/trunk/src/commons/startup.py =================================================================== --- python-commons/trunk/src/commons/startup.py 2008-07-13 18:47:55 UTC (rev 887) +++ python-commons/trunk/src/commons/startup.py 2008-07-13 19:21:00 UTC (rev 888) @@ -9,6 +9,7 @@ from .log import ( critical, debug, config_logging ) from .environ import ( get_environs ) from .interp import interp +from os.path import basename from sys import _current_frames from threading import currentThread import os, sys @@ -113,8 +114,11 @@ sys.stderr.flush() critical( '', output ) +def command_name(): + return basename(sys.argv[0]) + def run_main( main = None, do_force = False, runner = None, - use_sigquit_handler = False ): + use_sigquit_handler = False, handle_exceptions = False ): """ A feature-ful program starter. Configures logging and psyco, then runs the C{main} function defined in the caller's module, passing @@ -149,25 +153,32 @@ do_debug = os.environ.get( 'PYDBG', '' ) != '' do_profile = os.environ.get( 'PYPROF', '' ) != '' - if do_debug: - import pdb - signal(SIGINT, lambda *args: pdb.set_trace()) - status = pdb.runcall( runner, main, sys.argv ) - elif do_profile: - from cProfile import runctx - container = [] - try: - outpath = os.environ[ 'PYPROF' ] % \ - currentThread().getName() - except: - error( 'bad PYPROF:', os.environ[ 'PYPROF' ] ) + try: + if do_debug: + import pdb + signal(SIGINT, lambda *args: pdb.set_trace()) + status = pdb.runcall( runner, main, sys.argv ) + elif do_profile: + from cProfile import runctx + container = [] + try: + outpath = os.environ[ 'PYPROF' ] % \ + currentThread().getName() + except: + error( 'bad PYPROF:', os.environ[ 'PYPROF' ] ) + status = runner( main, sys.argv ) + else: + runctx( 'container[0] = runner( main, sys.argv )', + globals(), locals(), filename = outpath ) + status = container[0] + else: status = runner( main, sys.argv ) + except BaseException, ex: + if handle_exceptions: + print >> sys.stderr, ex.message + sys.exit(1) else: - runctx( 'container[0] = runner( main, sys.argv )', - globals(), locals(), filename = outpath ) - status = container[0] - else: - status = runner( main, sys.argv ) + raise ## watchdog timer commits suicide if after 3 seconds we ## still have not exited This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-13 18:47:46
|
Revision: 887 http://assorted.svn.sourceforge.net/assorted/?rev=887&view=rev Author: yangzhang Date: 2008-07-13 11:47:55 -0700 (Sun, 13 Jul 2008) Log Message: ----------- added countdown Added Paths: ----------- shell-tools/trunk/src/countdown.py Added: shell-tools/trunk/src/countdown.py =================================================================== --- shell-tools/trunk/src/countdown.py (rev 0) +++ shell-tools/trunk/src/countdown.py 2008-07-13 18:47:55 UTC (rev 887) @@ -0,0 +1,34 @@ +#!/usr/bin/env python + +from commons.startup import command_name, run_main +from time import sleep, time +from sys import stdout + +def main( argv ): + start = time() + + try: + arg = argv[1] + if False: pass + elif arg[-1] == 's': mult = 1 + elif arg[-1] == 'm': mult = 60 + elif arg[-1] == 'h': mult = 3600 + elif arg[-1].isdigit(): mult = 1 + else: raise Exception() + if arg[-1].isalpha(): arg = arg[:-1] + except: raise Exception( '%s <time>[h|m|s]' % command_name() ) + + t = int(arg) * mult + end = start + t + try: + while True: + now = time() + elap, rem = now - start, end - now + if now >= end: break + print '\r%dm%ds elapsed, %dm%ds remaining' % (elap/60, elap%60, rem/60, rem%60), + stdout.flush() + sleep(1) + except: + print + +run_main(handle_exceptions = True) Property changes on: shell-tools/trunk/src/countdown.py ___________________________________________________________________ Name: svn:executable + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-12 19:34:47
|
Revision: 886 http://assorted.svn.sourceforge.net/assorted/?rev=886&view=rev Author: yangzhang Date: 2008-07-12 12:34:51 -0700 (Sat, 12 Jul 2008) Log Message: ----------- added Spinner, InheritedFields Added Paths: ----------- sandbox/trunk/src/java/InheritedFields.java sandbox/trunk/src/java/Spinner.java Added: sandbox/trunk/src/java/InheritedFields.java =================================================================== --- sandbox/trunk/src/java/InheritedFields.java (rev 0) +++ sandbox/trunk/src/java/InheritedFields.java 2008-07-12 19:34:51 UTC (rev 886) @@ -0,0 +1,16 @@ +public class InheritedFields { + public static class A { String s = "A"; } + public static class B extends A { String s = "B"; } + public static void main(String[] args) { + System.out.println(new A().s); + System.out.println(new B().s); + System.out.println(((A) new B()).s); + /** + * Prints: + * + * A + * B + * A # means fields aren't polymorphic! + */ + } +} Added: sandbox/trunk/src/java/Spinner.java =================================================================== --- sandbox/trunk/src/java/Spinner.java (rev 0) +++ sandbox/trunk/src/java/Spinner.java 2008-07-12 19:34:51 UTC (rev 886) @@ -0,0 +1,8 @@ +public class Spinner { + public static void main(String[] args) { + int i = 0; + while (true) { + if (++i == Integer.MAX_VALUE) System.out.print('.'); + } + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-07 21:45:29
|
Revision: 885 http://assorted.svn.sourceforge.net/assorted/?rev=885&view=rev Author: yangzhang Date: 2008-07-07 14:45:31 -0700 (Mon, 07 Jul 2008) Log Message: ----------- reorg sf hosts Modified Paths: -------------- configs/trunk/src/ssh/config Modified: configs/trunk/src/ssh/config =================================================================== --- configs/trunk/src/ssh/config 2008-07-07 21:45:04 UTC (rev 884) +++ configs/trunk/src/ssh/config 2008-07-07 21:45:31 UTC (rev 885) @@ -72,11 +72,7 @@ HostName pubmgr.cvs.sourceforge.net User yangzhang -Host pubmgr - HostName pubmgr.sourceforge.net - User yangzhang - -Host shell-sf +Host sf HostName shell.sourceforge.net User yangzhang This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-07 21:44:56
|
Revision: 884 http://assorted.svn.sourceforge.net/assorted/?rev=884&view=rev Author: yangzhang Date: 2008-07-07 14:45:04 -0700 (Mon, 07 Jul 2008) Log Message: ----------- added underlining; added m-b for ToggleBrowser Modified Paths: -------------- configs/trunk/src/vim/plugin/_yang.vim Modified: configs/trunk/src/vim/plugin/_yang.vim =================================================================== --- configs/trunk/src/vim/plugin/_yang.vim 2008-07-07 21:42:05 UTC (rev 883) +++ configs/trunk/src/vim/plugin/_yang.vim 2008-07-07 21:45:04 UTC (rev 884) @@ -15,9 +15,10 @@ nnoremap <silent> <C-BS> :call ShiftWordInSpace(-1)<CR> nnoremap <silent> \cw :call CenterWordInSpace()<CR> + nnoremap <silent> \va :call AlignWordWithWordInPreviousLine()<CR> -nmap <m-b> :silent call ToggleBrowser()<CR> +nnoremap <m-b> :silent call ToggleBrowser()<CR> "map <F1> :call ToggleSketch()<CR> @@ -25,8 +26,15 @@ map <space> <c-f> map <s-space> <c-b> -imap <f6> <c-r>=system("date")[0:-2]<cr> -imap <f7> <c-r>=strftime("%Y-%m-%d")<cr> +" underline with character of your choice, e.g.: <f5>- or <f5>= +nnoremap <f5> yyp<c-v>$r +inoremap <f5> <esc>yyp<c-v>$r + +" insert timestamp +inoremap <f6> <c-r>=system("date")[0:-2]<cr> + +" insert datestamp +inoremap <f7> <c-r>=strftime("%Y-%m-%d")<cr> " imap <f6> <c-r>=strftime("%d/%m/%Y %H:%M:%S")<cr> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-07 21:41:57
|
Revision: 883 http://assorted.svn.sourceforge.net/assorted/?rev=883&view=rev Author: yangzhang Date: 2008-07-07 14:42:05 -0700 (Mon, 07 Jul 2008) Log Message: ----------- disabled cppcomplete Added Paths: ----------- configs/trunk/src/vim/plugin/cppcomplete.vim.disabled Removed Paths: ------------- configs/trunk/src/vim/plugin/cppcomplete.vim Deleted: configs/trunk/src/vim/plugin/cppcomplete.vim =================================================================== --- configs/trunk/src/vim/plugin/cppcomplete.vim 2008-07-07 21:41:16 UTC (rev 882) +++ configs/trunk/src/vim/plugin/cppcomplete.vim 2008-07-07 21:42:05 UTC (rev 883) @@ -1,2389 +0,0 @@ -" This plugin helps you complete things like: -" variableName.abc -" variableName->abc -" typeName::abc -" from the members of the struct/class/union that starts with abc. -" If you just type abc will the script complete it with the names that -" starts with abc and ignore any current scope. -" -" The default key mapping to complete the code are: -" Alt+l in insert mode will try to find the possible completions and display -" them in a popup menu. Also normal completions to the names in -" cppcomplete.tags. -" Alt+j in insert mode will show the popup menu with the last results. -" Selecting one of the items will paste the text. -" F8/F9 will work in a similar way as Ctrl+N, Ctrl+P in unextended vim so the -" script can be used without the popup menu. -" F5 in insert mode will lookup the class and display it in a preview window -" The key mapping are only tested under Windows and linux and they will not -" work on all platforms. Changing the mappings is easy. -" -" The plugin is depending on that exuberant ctags has generated a tags file -" called cppcomplete.tags with the same options as in the following example: -" ctags -n -f cppcomplete.tags --fields=+ai --C++-types=+p * -" The script has a command called GenerateTags that executes the above ctags -" command. The tag file cppcomplete.tags is local to the script so you can -" use other tag files without affecting cppcomplete. -" Java users do not need the --C++-types flag. -" -" For C/C++ can the script generate the cppcomplete.tags from the included -" files for you. This is based on vims checkpath function. The path must be -" set correct, see the vim documentation. -" -" This script do not requires grep anymore but it is supported. If the option -" is set to build an internal list with derived classes and the first -" completion takes a very long time may grep speed things up. -" For Windows does the DJGPP port of grep works. -" You only need grep.exe from the grep'version'b.zip file. -" A good place for grep.exe could be the compilers bin directory. -" The zip file is in the v2gnu directory, it can be downloaded from here: -" http://www.delorie.com/djgpp/getting.html -" -" It is possible to define a set of lines from cppcomplete.tags with regular -" expressions. I call the set for a block. The functions for this: -" BuildBlockFromRegexp the command to build the block, see below. -" NextInBlock jump to the line described in the block, can be called by Shift+F8 -" PrevInBlock same as the above but in the other direction, use Shift+F9 -" EchoBlock shows the block itself -" BuildMenuFromBlock builds a menu in GUI mode from the block -" The jumps are done with an internal function so the tag stack will not be -" affected. -" -" Some simple examples there > is the prompt: -" >class:l -" Gives a block with all members that has a scope of a class beginning with l -" >^a.*\ts\t -" all structures beginning with an a -" >^\(a\|b\|c) -" Everything that starts with a,b or c -" The full vim history mechanism can be used. -" -" The script has a number of variables that can be set from the menu in the -" GUI or wildmenu versions. They are at the top of the script file with descriptions if -" you want to change them more permanent. -" -" For Java do you probably want to generate a cppcomplete.tags file from the -" sources of the Java SDK. The use is like with C/C++ but you will get a -" better result if you change some of the configuration variables. -" The default access is treated as if it was public. -" -" If you are new to vim and have not heard about ctags, regexp, grep are they -" all described in the online documentation. Just type :help followed by the word you -" want more information about. They are excellent tools that can be used for -" many things. - - -" BUGS/Features -" This plugin does not really understand any C/C++ code, it is not a real parser. -" It works surprisingly well but can of course give a surprising result. :) -" The current scope is unknown. -" Multidimensional arrays should not have a space between ][, e.g. -" xyz[1][2].abc should be OK but not xyz[1] [2].abc -" The script does not accept functions, e.g. xyc()->abc will not be completed or rather -" it will be completed but from all names beginning with abc. -" (GTK) If the mouse leaves and then reenters the popup menu is the text cursor affected. -" (GTK) The popup is displayed at the mouse position and not the text cursor position. -" For internal use is register c used. -" Requires exuberant ctags. -" The only tested platforms for the popup menu are GTK (linux) and Windows. -" + probably a lot of other issues -" -" Anyway, I have done some testing with MFC, DX9 framework (not COM), Java SDK, STL with -" good results. - - -" Here is the configuration variables. -" -" The following two options only applies to Windows. -" This is the only tested grep program under windows and the only one that -" works with command.com. If grep is used depends on s:useBuffer and -" s:neverUseGrep. -let s:useDJGPP=has("win32") || has("win16") || has("dos16") || has("dos32") - -" This is the only way to get a popup menu under Windows so it should always -" be set if you are running under Windows. -let s:useWinMenu=has("gui_running") && has("gui_win32") - -" The rest is platform independent. -" Use an internal buffer instead of grep? -" This should be the fastest option but in some cases is it much faster to use -" grep. See s:neverUseGrep below. -let s:useBuffer=1 - -" Using an internal buffer probably makes the searches faster but building a -" variable line by line is very expensive in a vim script. The reason is that -" you do not have real variables like in C/C++ but more like names for values. -" If s:useInternalList is not set will this variable not matter. -let s:neverUseGrep= has("win32") || has("win16") || has("dos16") || has("dos32") - -" The script can make a list with the classes that is derived from another -" classes. This may be faster than looking in cppcomplete.tags but the -" problem is that the list can take a very long time to build. -" If s:useBuffer is not true is an internal list always used. -let s:useInternalList=0 - -" Search for typedefs? -let s:searchTDefs=1 - -" search for macros? -" this is not well supported -let s:searchMacros=0 - -" How many lines can the menu have? -" Not used under Windows. -let s:maxNMenuLines=35 - -" Search cppcomplete.tags for class members? -" It is _really_ recommended that this is on or the script will not know of -" classes that is members in other classes. -let s:searchClassMembers=1 - -" This is similar to the above but check if xxx in xxx.abc is a class type. -let s:searchClassTags=1 - -" Search cppcomplete.tags for global variables? -" If they are declared in the current file should the script find them but I turned -" it on anyway. -let s:searchGlobalVars=1 - -" ctags sometimes miss to set the access so the check is disabled by default. -" If you are using Java should I turn on this check because ctags does not -" miss the access for Java in the same way as for C++. -let s:accessCheck=0 - -" I like the preview window but the default is not to display it. -let s:showPreview=0 - -" The default language is C/C++, the other option is Java. -let s:currLanguage="C/C++" - -" The max size of the popup menu. Perhaps is 50 more than that is useful. -" If you set this to some big value may it take a long time before the -" script has finished. -let s:tooBig=50 - -" The max number of items that the popup menu will be built from if you -" are not using an internal buffer on linux. -" This is to prevent very long lists being built internally since this could -" be very slow. The best value depends on how many identical identifiers it is -" in cppcomplete.tags. -" If you are running gvim will you get a warning if the limit is reached. -let s:maxGrepHits=9999 - -" Setting this option on means that the ancestor can be anything. -" This is a good idea since the script does not know the current scope and -" ctags also (sometimes) treats namespaces as class scopes. -let s:relaxedParents=1 - -" How the grep program is invoked. The GNU grep has an --mmap option -" for faster memory mapping. This can be set from the menu. -let s:grepPrg="grep" - -" Should the access information be displayed on the popup? -let s:showAccess=0 - -" Should :: show the whole scope with items from the ancestors? -" This does not seems to be the case in MSVC and that is probably a sensible -" way to handle it concerning the main use in class implementation. -" The default is anyway the more correct show everything alternative. -let s:colonNoInherit=0 - -" Extra help. -let s:nannyMode=1 - -" Complete all identifiers from cppcomplete.tags? -" Pretty much the same is already in vim but I prefer the popup instead of -" single stepping with Ctrl-N or Ctrl-P. -let s:completeOrdinary=1 - -" Max recursive depth search for typedefs. This is mostly to prevent the -" script to enter an endless loop for some special cases. -let s:maxDepth=3 - -" A new option to give console users with wildmenu access to the menus. -let s:useWildMenu=&wildmenu - -" Mappings -" Take them as suggestions only. -imap <F5> <ESC>:PreviewClass<CR>a -if has("gui_running") - if (s:useWinMenu) - imap <A-j> <ESC>:popup PopUp<CR>a - imap <A-l> <ESC>:BuildMenu<CR>a - else - imap <A-l> <ESC>:BuildMenu<CR><RightMouse>a - imap <A-j> <ESC><RightMouse>a - endif -endif -imap <F8> <ESC>:InsNextHit<CR>a -imap <F9> <ESC>:InsPrevHit<CR>a -map <S-F9> <ESC>:PrevInBlock<CR> -map <S-F8> <ESC>:NextInBlock<CR> - - -" From this line should you be more careful if you change anything. -" -" Commands -command! -nargs=0 AppendFromCheckpath call s:AppendFromCheckpath() -command! -nargs=0 GenerateFromCheckpath call s:GenerateFromCheckpath() -command! -nargs=0 GenerateTags call s:GenerateTags() -command! -nargs=0 PreviewClass call s:PreCl() -if has("gui_running") || s:useWildMenu - command! -nargs=0 BuildMenu call s:BuildMenu() - command! -nargs=0 DoMenu call s:DoMenu() - command! -nargs=0 RestorePopup call s:SetStandardPopup() - command! -nargs=0 RefreshMenu call s:RefreshMenu() - command! -nargs=0 ClearFromTags call s:ClearFromTags() - command! -nargs=0 InsertToTags call s:InsertToTags() - command! -nargs=0 ToggleTDefs call s:ToggleTDefs() - command! -nargs=0 ToggleMacros call s:ToggleMacros() - command! -nargs=0 BrowseNFiles call s:BrowseNFiles() - command! -nargs=0 GenerateAndAppend call s:GenerateAndAppend() - command! -nargs=1 PreviewEntry call s:PreviewEntry(<f-args>) - command! -nargs=0 ToggleAccess call s:ToggleAccess() - command! -nargs=0 ToggleGD call s:ToggleGD() - command! -nargs=0 TogglePreview call s:TogglePreview() - command! -nargs=0 SetLanguage call s:SetLanguage() - command! -nargs=0 ToggleRelaxed call s:ToggleRelaxed() - command! -nargs=0 ToggleGlobalVars call s:ToggleGlobalVars() - command! -nargs=0 ToggleClassMembers call s:ToggleClassMembers() - command! -nargs=0 ToggleClassTags call s:ToggleClassTags() - command! -nargs=0 ToggleFastGrep call s:ToggleFastGrep() - command! -nargs=0 ToggleShowAccess call s:ToggleShowAccess() - command! -nargs=0 ToggleInheritance call s:ToggleInheritance() - command! -nargs=0 ToggleNanny call s:ToggleNanny() - command! -nargs=0 ShowCurrentSettings call s:ShowCurrentSettings() - command! -nargs=0 SetMaxHits call s:SetMaxHits() - command! -nargs=0 BuildMenuFromBlock call s:BuildMenuFromBlock() -endif -command! -nargs=0 InsPrevHit call s:InsPrevHit() -command! -nargs=0 InsNextHit call s:InsNextHit() - -command! -nargs=0 BuildBlockFromRegexp call s:BuildBlockFromRegexp() -command! -nargs=0 NextInBlock call s:NextInBlock() -command! -nargs=0 PrevInBlock call s:PrevInBlock() -command! -nargs=0 EchoBlock call s:EchoBlock() -command! -nargs=1 JumpToLineInBlock call s:JumpToLineInBlock(<f-args>) - - -" some variables for internal use -let s:listAge=0 -let s:bufAge=0 -let s:lastHit=0 -let s:hitList="" -let s:regexBlock="" -let s:nannyAsked="\n" -if s:useBuffer - let s:cutBack='\@>' - let s:groupS='\%(' -else - let s:cutBack='' - let s:groupS='\(' -endif - -if has("win32") || has("win16") || has("dos16") || has("dos32") - let s:ctagsTemp=tempname() - let s:grepTemp=tempname() -endif -" build the gui menu -if has("gui_running") || s:useWildMenu - "set mousemodel=popup " yang - silent! aunmenu &cppcomplete - silent! tunmenu &cppcomplete - amenu &cppcomplete.&GenerateTags.&Rebuild\ from\ current\ directory<Tab>:GenerateTags :GenerateTags<CR> - tmenu &cppcomplete.&GenerateTags.&Rebuild\ from\ current\ directory Generate a new cppcomplete.tags file from the files in the current dorectory - amenu &cppcomplete.&GenerateTags.&Append\ from\ current\ directory<Tab>:GenerateAndAppend :GenerateAndAppend<CR> - tmenu &cppcomplete.&GenerateTags.&Append\ from\ current\ directory Append instead of creating a totally new one. - amenu &cppcomplete.&GenerateTags.&Browse\ file\ to\ append<Tab>:BrowseNFiles :BrowseNFiles<CR> - tmenu &cppcomplete.&GenerateTags.&Browse\ file\ to\ append Append a file using the file browser. - amenu &cppcomplete.&GenerateTags.A&uto\ Generate\ a\ new\ one<Tab>:GenerateFromCheckpath :GenerateFromCheckpath<CR> - tmenu &cppcomplete.&GenerateTags.A&uto\ Generate\ a\ new\ one Auto generate a new cppcomplete.tags file for C/C++. - amenu &cppcomplete.&GenerateTags.Aut&o\ Generate\ and\ append<Tab>:AppendFromCheckpath :AppendFromCheckpath<CR> - tmenu &cppcomplete.&GenerateTags.Aut&o\ Generate\ and\ append Auto generate and append. - amenu &cppcomplete.&Use\ generated\ tag\ file\ in\ tags.&No<TAB>:ClearFromTags :ClearFromTags<CR> - tmenu &cppcomplete.&Use\ generated\ tag\ file\ in\ tags.&No Do not use cppcomplete.tags as an ordinary tag file - amenu &cppcomplete.&Use\ generated\ tag\ file\ in\ tags.&Yes<Tab>:InsertToTags :InsertToTags<CR> - tmenu &cppcomplete.&Use\ generated\ tag\ file\ in\ tags.&Yes Use cppcomplete.tags as an ordinary tag file - amenu &cppcomplete.-SEP1- <NOP> - amenu &cppcomplete.&Toggle\ search\ options.&Typedefs<Tab>:ToggleTDefs :ToggleTDefs<CR> - tmenu &cppcomplete.&Toggle\ search\ options.&Typedefs Toggle search for typedefs - amenu &cppcomplete.&Toggle\ search\ options.&Macros<Tab>:ToggleMacros :ToggleMacros<CR> - tmenu &cppcomplete.&Toggle\ search\ options.&Macros Toggle search for macros - amenu &cppcomplete.&Toggle\ search\ options.&Access\ check<Tab>:ToggleAccess :ToggleAccess<CR> - tmenu &cppcomplete.&Toggle\ search\ options.&Access\ check Should only items with the proper access be displayed? - amenu &cppcomplete.&Toggle\ search\ options.&Relaxed\ ancestor\ check<Tab>:ToggleRelaxed :ToggleRelaxed<CR> - tmenu &cppcomplete.&Toggle\ search\ options.&Relaxed\ ancestor\ check Allow inner classes that may be wrong but hard to check? - amenu &cppcomplete.&Toggle\ search\ options.Global\ &variables<Tab>:ToggleGlobalVars :ToggleGlobalVars<CR> - tmenu &cppcomplete.&Toggle\ search\ options.Global\ &variables Search cppcomplete.tags for global variables? - amenu &cppcomplete.&Toggle\ search\ options.&Classes\ as\ class\ members<Tab>:ToggleClassMembers :ToggleClassMembers<CR> - tmenu &cppcomplete.&Toggle\ search\ options.&Classes\ as\ class\ members Complete classes that is members of other classes? - amenu &cppcomplete.&Toggle\ search\ options.Inner\ class\ &names\ in\ tags<Tab>:ToggleClassTags :ToggleClassTags<CR> - tmenu &cppcomplete.&Toggle\ search\ options.Inner\ class\ &names\ in\ tags Search cppcomplete.tags for classes that is defined in other classes scope? - amenu &cppcomplete.Toggle\ &misc\ options.&Show\ access<Tab>:ToggleShowAccess :ToggleShowAccess<CR> - tmenu &cppcomplete.Toggle\ &misc\ options.&Show\ access Should the popup menu also display access information? - amenu &cppcomplete.Toggle\ &misc\ options.&Inheritance\ for\ ::<Tab>:ToggleInheritance :ToggleInheritance<CR> - tmenu &cppcomplete.Toggle\ &misc\ options.&Inheritance\ for\ :: Should :: also show inherited items? - amenu &cppcomplete.Toggle\ &misc\ options.&Nanny\ mode<Tab>:ToggleNanny :ToggleNanny<CR> - tmenu &cppcomplete.Toggle\ &misc\ options.&Nanny\ mode Try to give some extra help. - amenu &cppcomplete.Toggle\ &misc\ options.&Fast\ grep<Tab>:ToggleFastGrep :ToggleFastGrep<CR> - tmenu &cppcomplete.Toggle\ &misc\ options.&Fast\ grep --mmap option for GNU grep - amenu &cppcomplete.Toggle\ &misc\ options.&Preview<Tab>:TogglePreview :TogglePreview<CR> - tmenu &cppcomplete.Toggle\ &misc\ options.&Preview Open a preview window after completion? - amenu &cppcomplete.-SEP2- <NOP> - amenu &cppcomplete.&Preview\ menu.Scan\ for\ new\ &items<Tab>:RefreshMenu :RefreshMenu<CR> - tmenu &cppcomplete.&Preview\ menu.Scan\ for\ new\ &items Scan cppcomplete.tags for classes, structures and unions - amenu &cppcomplete.&Preview\ menu.&Classes.*****\ \ \ Nothing\ yet\ \ \ ***** <NOP> - amenu &cppcomplete.&Preview\ menu.&Structures.*****\ \ \ Nothing\ yet\ \ \ ****** <NOP> - amenu &cppcomplete.&Preview\ menu.&Unions.*****\ \ \ Nothing\ yet\ \ \ ***** <NOP> - amenu &cppcomplete.&Block\ menu.&Build\ Menu\ From\ Block<Tab>:BuildMenuFromBlock :BuildMenuFromBlock<CR> - tmenu &cppcomplete.&Block\ menu.&Build\ Menu\ From\ Block Build a menu from the items in the current block. - amenu &cppcomplete.-SEP3- <NOP> - amenu &cppcomplete.S&et\ C/C++\ or\ Java<Tab>:SetLanguage :SetLanguage<CR> - tmenu &cppcomplete.S&et\ C/C++\ or\ Java Set the current language used. - amenu &cppcomplete.Set\ max\ number\ of\ &hits\ displayed<Tab>:SetMaxHits :SetMaxHits<CR> - tmenu &cppcomplete.Set\ max\ number\ of\ &hits\ displayed How many items should the popup menu have? - amenu &cppcomplete.&Show\ current\ settings<Tab>ShowCurrentSettings :ShowCurrentSettings<CR> - tmenu &cppcomplete.&Show\ current\ settings List the current settings. - amenu &cppcomplete.-SEP4- <NOP> - amenu &cppcomplete.&RestorePopUp<Tab>:RestorePopup :RestorePopup<CR> - tmenu &cppcomplete.&RestorePopUp Restores the popup menu. -endif - -function! s:PreCl() - if &previewwindow - call confirm("You are not supposed to do this then you\nalready are in the Preview window.","&OK",1,"Error") - return - endif - if ! s:CheckForTagFile() - return - endif - let oldParents=s:relaxedParents - call s:GetPieces() - let s:relaxedParents=oldParents - if (s:gotCType) - call s:PreviewEntry(s:clType) - endif -endfunction -function! s:PreviewEntry(entry) - if &previewwindow - call confirm("You are not supposed to do this then you\nalready are in the Preview window.","&OK",1,"Error") - return - endif - if ! s:CheckForTagFile() - return - endif - if (a:entry!="") - let tagsSav=&tags - let &tags="cppcomplete.tags" - execute "ptag " . a:entry - silent! wincmd P - if &previewwindow - normal! zt - silent! wincmd p - endif - let &tags=tagsSav - endif -endfunction -function! s:TogglePreview() - let s:showPreview=!s:showPreview -endfunction -function! s:ToggleAccess() - let s:accessCheck=!s:accessCheck - if s:accessCheck - let cText="Access check enabled" - else - let cText="Access check disabled" - endif - call confirm(cText, "&OK",1,"Info") -endfunction -function! s:ToggleTDefs() - let s:searchTDefs=!s:searchTDefs - if (s:searchTDefs) - let cText="Typedefs is now included in the search" - else - let cText="Further searches will not look for typedefs" - endif - call confirm(cText,"&OK",1,"Info") -endfunction -function! s:ToggleMacros() - let s:searchMacros=!s:searchMacros - if (s:searchMacros) - let cText="Macros is now included in the search" - else - let cText="Further searches will not look for macros" - endif - call confirm(cText,"&OK",1,"Info") -endfunction -function! s:ToggleRelaxed() - let s:relaxedParents=! s:relaxedParents - if s:relaxedParents - let cText="Ancestor check is now set to relaxed" - else - let cText="Strict ancestor check is now enabled" - endif - call confirm(cText, "&OK",1,"Info") -endfunction -function! s:ToggleClassMembers() - let s:searchClassMembers=! s:searchClassMembers - if s:searchClassMembers - let cText="Search for classes as class members is enabled" - elseif confirm("This is not recommended if your classes\contains other classes as members","&Do it anyway\n&Cancel",2,"Warning")==1 - let cText="No search for classes as class members" - else - let s:searchClassMembers=1 - return - endif - call confirm(cText, "&OK",1, "Info") -endfunction -function! s:ToggleClassTags() - let s:searchClassTags=! s:searchClassTags - if s:searchClassTags - let cText="Search for class names is enabled" - else - let cText="No search for class names" - endif - call confirm(cText, "&OK",1, "Info") -endfunction -function! s:ToggleFastGrep() - if (s:grepPrg=="grep") - let s:grepPrg="grep --mmap" - let cText="Fast GNU grep enabled" - else - let s:grepPrg="grep" - let cText="Standard grep is now used" - end - call confirm(cText, "&OK",1, "Info") -endfunction -function! s:ToggleInheritance() - let s:colonNoInherit=! s:colonNoInherit - if s:colonNoInherit - let cText=":: will not show items from the ancestors" - else - let cText=":: will show the whole scope with items from the ancestors" - endif - call confirm(cText, "&OK",1, "Info") -endfunction -function! s:ToggleNanny() - let s:nannyMode=! s:nannyMode - if s:nannyMode - let cText="Nanny mode enabled" - else - let cText="Nanny mode disabled" - endif - call confirm(cText,"&OK",1,"Info") -endfunction -function! s:ToggleShowAccess() - let s:showAccess=! s:showAccess - if s:showAccess - let cText="Access information will be displayed if available on the popup menu" - else - let cText="No access information will be displayed" - endif - call confirm(cText, "&OK",1, "Info") -endfunction -function! s:ToggleGlobalVars() - let s:searchGlobalVars=! s:searchGlobalVars - if s:searchGlobalVars - let cText="Search for global variables is enabled" - else - let cText="No search for global variables" - endif - call confirm(cText, "&OK",1, "Info") -endfunction -function! s:InsertToTags() - if (match(&tags, "cppcomplete.tags,",0)>=0) - call confirm("cppcomplete.tags is already in tags","&OK",1,"Info") - else - let &tags="cppcomplete.tags," . &tags - endif -endfunction -function! s:ClearFromTags() - if (match(&tags,"cppcomplete.tags")<0) - call confirm("tags did not include cppcomplete.tags","&OK",1,"Info") - else - let &tags=substitute(&tags,"cppcomplete.tags.","","g") - endif -endfunction - -function! s:SetGrepArg(argtxt) - silent! call delete(s:grepTemp) - split - silent! execute "edit! " s:grepTemp - let @c=a:argtxt - normal! "cp - silent! w - silent! bwipeout -endfunction -function! s:RefreshMenu() - if ! s:CheckForTagFile() - return - endif - let spaceAfter="[^!\t]\\+\t" - let res=confirm("If you have a big cppcomplete.tags file may strange things happen", "&All\n&Just items in the current directory\n&Cancel",2,"Warning") - if res==1 - let fileSelect=spaceAfter - elseif res==3 - return - else - let fileSelect="[^\\/\t]\\+\t" - endif - silent! aunmenu cppcomplete.Preview.Classes - silent! aunmenu cppcomplete.Preview.Structures - silent! aunmenu cppcomplete.Preview.Unions - let cf=0 - let sf=0 - let uf=0 - if s:useBuffer && s:neverUseGrep - split - let items="" - call s:CheckHiddenLoaded() - let x=line(".") - execute ":call search('^" . spaceAfter . fileSelect . spaceAfter . "\\%(c\\|s\\|u\\)','W')" - while line(".")!=x - let x=line(".") - normal! "cyy$ - let items=items . @c - execute ":call search('^" . spaceAfter . fileSelect . spaceAfter . "\\%(c\\|s\\|u\\)','W')" - endwhile - quit - elseif s:useDJGPP - call s:SetGrepArg("'^" . spaceAfter . fileSelect . spaceAfter . s:groupS . "c\\|s\\|u\\)' cppcomplete.tags") - silent! let items=system(s:grepPrg . " @" . s:grepTemp) - else - let items=system(s:grepPrg . " '^" . spaceAfter . fileSelect . spaceAfter . s:groupS . "c\\|s\\|u\\)' cppcomplete.tags") - endif - let nextM=0 - let nclines=0 - let nslines=0 - let nulines=0 - let cMore="" - let sMore="" - let uMore="" - - while match(items,"\t",nextM)>0 - let oldM=nextM - let @c=strpart(items,nextM,match(items,"\t",nextM)-nextM) - let nextM=matchend(items,"\n",nextM) - if nextM<0 - let nextM=strlen(items) - endif - let mc=match(items,"^[^\t]*\t[^\t]*\t[^\t]*\tc",oldM) - let ms=match(items,"^[^\t]*\t[^\t]*\t[^\t]*\ts.*",oldM) - if (mc>=0) && (mc<nextM) - let cf=1 - execute "amenu .200 &cppcomplete.&Preview.&Classes." . cMore . @c . " :PreviewEntry " . @c ."<CR>" - let nclines=nclines+1 - if (! s:useWinMenu) - if (nclines%s:maxNMenuLines)==0 - let cMore=cMore . "More." - endif - endif - elseif (ms>=0) && (ms<nextM) - let sf=1 - execute "amenu .300 &cppcomplete.&Preview.&Structures." . sMore . @c . " :PreviewEntry " . @c ."<CR>" - let nslines=nslines+1 - if (! s:useWinMenu) - if (nslines%s:maxNMenuLines)==0 - let sMore=sMore . "More." - endif - endif - - else - let uf=1 - execute "amenu .400 &cppcomplete.&Preview.&Unions." . uMore . @c . " :PreviewEntry " . @c ."<CR>" - let nulines=nulines+1 - if (! s:useWinMenu) - if (nulines%s:maxNMenuLines)==0 - let uMore=uMore . "More." - endif - endif - - endif - endwhile - if cf==0 - amenu &cppcomplete.&Preview.&Classes.*****\ \ \ no\ classes\ found\ \ \ ***** <NOP> - endif - if sf==0 - amenu &cppcomplete.&Preview.&Structures.*****\ \ \ no\ structures\ found\ \ \ ***** <NOP> - endif - if uf==0 - amenu &cppcomplete.&Preview.&Unions.*****\ \ \ no\ unions\ found\ \ \ ***** <NOP> - endif -endfunction - -function! s:BuildMenuFromBlock() - let hittedList="\n" - if s:regexBlock=="" - call confirm("No block to build the menu from.\nYou must first create the block with the\n:BuildBlockFromRegexp command.","&OK",1,"Error") - return - endif - silent! aunmenu cppcomplete.Block\ menu.menu\ built\ from\ regexp - let spaceAfter="[^!\t]\\+\t" - let nLines=0 - let skippedLines=0 - let nextM=0 - let grouped=confirm("Which type of menu","&Grouped by visibility\n&Not grouped",1,"Question") - if grouped!=1 - if grouped!=2 - return - else - let grouped=0 - endif - endif - let bMore="" - let uMore="" - let uLines=0 - while match(s:regexBlock, "\t", nextM)>0 - let oldM=nextM - let nLines=nLines+1 - let @c=strpart(s:regexBlock, nextM, match(s:regexBlock,"\t",nextM)-nextM) - let nextM=matchend(s:regexBlock,"\n",nextM) - if nextM<0 - let nextM=strlen(s:regexBlock) - endif - if grouped - let gStart=matchend(s:regexBlock,"^[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t" . s:groupS . "class\\|struct\\|union\\|\\<interface\\):",oldM) - if gStart>matchend(s:regexBlock,"\n",oldM) - let gStart=-1 - endif - if gStart<0 - let uLines=uLines+1 - if !s:useWinMenu - if (uLines % s:maxNMenuLines)==0 - let uMore=uMore . "More." - endif - endif - let group="uncategorized." . uMore - else - let gEnd=match(s:regexBlock,"[\n\t]",gStart) - let group=strpart(s:regexBlock, gStart, gEnd-gStart) . "." - endif - else - let group="" - if !s:useWinMenu - if ((nLines-skippedLines) % s:maxNMenuLines)==0 - let bMore=bMore . "More." - endif - endif - endif - if match(hittedList, "\n" . group . @c . "\n")<0 - let hittedList=hittedList . group . @c . "\n" - execute "amenu &cppcomplete.&Block\\ menu.menu\\ built\\ from\\ regexp." . bMore . group . @c . " :JumpToLineInBlock " . nLines . "<CR>" - else - let skippedLines=skippedLines+1 - endif - endwhile - if nLines==0 - call confirm("Could not build the menu", "&OK",1,"Error") - elseif skippedLines==0 - call confirm("A menu with " . nLines . " items has been built.\nIt is placed in the Block menu", "&OK", 1, "Info") - else - call confirm("From the original " . nLines . " items was " . skippedLines . "\n skipped because of name clashes.\nThe resulting menu can be reached from the Block menu.", "&OK", 1, "Info") - endif -endfunction - -function! s:SetStandardPopup() - aunmenu PopUp - " The popup menu - an 1.10 PopUp.&Undo u - an 1.15 PopUp.-SEP1- <Nop> - vnoremenu 1.20 PopUp.Cu&t "+x - vnoremenu 1.30 PopUp.&Copy "+y - cnoremenu 1.30 PopUp.&Copy <C-Y> - nnoremenu 1.40 PopUp.&Paste "+gP - cnoremenu 1.40 PopUp.&Paste <C-R>+ - if has("virtualedit") - vnoremenu <script> 1.40 PopUp.&Paste "-c<Esc><SID>Paste - inoremenu <script> 1.40 PopUp.&Paste <Esc><SID>Pastegi - else - vnoremenu <script> 1.40 PopUp.&Paste "-c<Esc>gix<Esc><SID>Paste"_x - inoremenu <script> 1.40 PopUp.&Paste x<Esc><SID>Paste"_s - endif - vnoremenu 1.50 PopUp.&Delete x - an 1.55 PopUp.-SEP2- <Nop> - vnoremenu 1.60 PopUp.Select\ Blockwise <C-V> - an 1.70 PopUp.Select\ &Word vaw - an 1.80 PopUp.Select\ &Line V - an 1.90 PopUp.Select\ &Block <C-V> - an 1.100 PopUp.Select\ &All ggVG -endfunction -function! s:BuildIt() - let s:nHits=0 - let s:hitList="\n" - if has("gui_running") || s:useWildMenu - aunmenu PopUp - endif - if (s:matches=="") - if has("gui_running") || s:useWildMenu - amenu PopUp.****\ \ no\ completions\ found\ \ ***** :let @c=''<CR> - endif - return - endif - let nextM=0 - let line=1 - let pMore="" - let totHits=0 - - while (s:tooBig>s:nHits) && (match(s:matches,"\t",nextM)>0) - let totHits=totHits+1 - let @c=strpart(s:matches, nextM, match(s:matches,"\t",nextM)-nextM) - if match(s:hitList,"\n" . substitute(@c,"\\~", ":","g") . "\n")<0 - let sAcc=matchend(s:matches,"access:",nextM) - let accEnd=match(s:matches,"\n",nextM) - if (accEnd<0) - let accEnd=strlen(s:matches) - endif - if (sAcc>0) && (sAcc<accEnd) && s:showAccess - let accStr="<Tab>" . strpart(s:matches, sAcc, accEnd-sAcc) - else - let accStr="" - endif - if has("gui_running") || s:useWildMenu - execute "silent amenu PopUp." . pMore . @c . accStr . " :let @c=\"" . @c ."\"<Bar>DoMenu<CR>" - endif - let s:hitList=s:hitList . substitute(@c,"\\~", ":","g") . "\n" - let s:nHits=s:nHits+1 - let line=line+1 - if (! s:useWinMenu) - if (line % s:maxNMenuLines)==0 - let pMore=pMore . "More." - endif - endif - endif - let nextM=matchend(s:matches,"\n",nextM) - if nextM<0 - let nextM=strlen(s:matches) - endif - endwhile - let s:hitList=strpart(s:hitList,1) - if (s:nHits>=s:tooBig) - let s:nHits=s:nHits+1 - let s:hitList=s:hitList . "xxxxxxMAX_NR_OF_HITSxxxxxx\n" - if has("gui_running") || s:useWildMenu - if !s:useWinMenu - execute "amenu PopUp." . pMore . "xxxxxxMAX_NR_OF_HITSxxxxxx <NOP>" - else - amenu PopUp.****\ \ Max\ number\ of\ hits\ reched\ **** <NOP> - endif - endif - call confirm( "Max number of hits reached", "&OK", 1,"Warning") - elseif totHits>=s:maxGrepHits - call confirm("The number of items the popup was built from\nis equal to s:maxGrepHits.\nMore completions may exists.","&OK",1,"Warning") - endif - if s:nHits==0 && (has("gui_running") || s:useWildMenu) - amenu PopUp.*****\ \ Strange\ output\ from\ grep\ \ ***** :let @c=""<CR> - endif -endfunction -function! s:xAndBack() - let colP = col(".") - normal! x - if (col(".")==colP) - normal! h - endif -endfunction -function! s:RemoveTyped() - if (s:uTyped=="\\~") - call s:xAndBack() - elseif (s:uTyped!="") - if (strlen(s:uTyped)>1) - if (strlen(s:uTyped)==3) && (match(s:uTyped,"\\~")>=0) - call s:xAndBack() - else - normal! db - endif - endif - call s:xAndBack() - endif - let c = getline(line("."))[col(".") - 1] - if (c=="~") - call s:xAndBack() - endif -endfunction -function! s:DoMenu() - if @c=="" - return - endif - let colP = col(".") - normal! l - if colP!=col(".") - normal! hh - let strangeFix=1 - else - let strangeFix=0 - endif - call s:RemoveTyped() - normal! "cp - if (strangeFix) - normal! l - endif - if (s:showPreview) - call s:PreviewEntry(@c) - endif - let s:uTyped="" -endfunction -function! s:InsNextHit() - if (s:IsHitted()) - call s:DelHit() - let s:lastHit=s:lastHit+1 - if (s:lastHit>s:nHits) - let s:lastHit=1 - endif - call s:InsHit() - else - let s:lastHit=1 - let winMenuSav=s:useWinMenu - let s:useWinMenu=0 - call s:BuildMenu() - let s:useWinMenu=winMenuSav - if (s:nHits>0) - call s:RemoveTyped() - call s:InsHit() - else - call confirm("No completions was found","&OK",1,"Error") - let s:lastHit=0 - endif - endif -endfunction -function! s:InsPrevHit() - if (s:IsHitted()) - call s:DelHit() - let s:lastHit=s:lastHit-1 - if (s:lastHit<1) - let s:lastHit=s:nHits - endif - call s:InsHit() - else - let winMenuSav=s:useWinMenu - let s:useWinMenu=0 - call s:BuildMenu() - let s:useWinMenu=winMenuSav - let s:lastHit=s:nHits - if (s:nHits>0) - call s:RemoveTyped() - call s:InsHit() - else - call confirm("No completions was found","&OK",1,"Error") - endif - endif -endfunction - -function! s:IsHitted() - if (s:lastHit>0) && expand("<cword>")==substitute(s:CurrentHit(),":","","g") - return expand("<cword>")!="" - endif - return 0 -endfunction -function! s:CurrentHit() - let prevM=0 - let nextM=matchend(s:hitList,"\n") - let toGo=s:lastHit - while (toGo>1) && match(s:hitList, "\n", nextM) - let prevM=nextM - let nextM=matchend(s:hitList,"\n",nextM) - if (nextM<0) - let nextM=strlen(s:hitList) - endif - let toGo=toGo-1 - endwhile - if (toGo==1) - return strpart(s:hitList, prevM, nextM-prevM-1) - endif - return "" -endfunction -function! s:DelHit() - let prevTyped=s:uTyped - let s:uTyped=substitute(s:CurrentHit(),":","\\~","g") - call s:RemoveTyped() - let s:uTyped=prevTyped -endfunction -function! s:InsHit() - let @c=substitute(s:CurrentHit(),":","\\~","g") - normal! "cp - if (s:showPreview) - call s:PreviewEntry(@c) - endif -endfunction - -function! s:UpdateInheritList() - let spaceAfter="[^!\t]\\+\t" - let after3=spaceAfter . spaceAfter . spaceAfter - if (s:listAge!=getftime("cppcomplete.tags")) - if s:useBuffer && s:neverUseGrep - split - let s:inheritsList="\n" - call s:CheckHiddenLoaded() - let x=line(".") - execute ":call search('^" . after3 . ".*inherits:','W')" - while line(".")!=x - let x=line(".") - normal! "cyy$ - let s:inheritsList=s:inheritsList . @c - execute ":call search('^" . after3 . ".*inherits:','W')" - endwhile - quit - elseif s:useDJGPP - call s:SetGrepArg("'^" . after3 . ".*" ."inherits:.*' cppcomplete.tags") - silent! let s:inheritsList="\n" . system(s:grepPrg . " @" . s:grepTemp) - else - let s:inheritsList="\n" . system(s:grepPrg . " '^" . after3 . ".*" ."inherits:.*' cppcomplete.tags") - endif - let s:listAge=getftime("cppcomplete.tags") - endif -endfunction -function! s:BuildSinglePass() - if s:tooBig<=s:nHits - return - endif - normal! ^ - call search("\t") - normal! "cy^ - if match(s:hitList, "\n" . substitute(@c,"\\~",":","g") . "\n")<0 - if has("gui_running") || s:useWildMenu - execute "amenu PopUp." . s:menuMore . @c . " :let @c=\"" . @c ."\"<Bar>DoMenu<CR>" - endif - let s:hitList=s:hitList . substitute(@c,"\\~", ":", "g") . "\n" - let s:nHits=s:nHits+1 - if (s:nHits%s:maxNMenuLines)==0 - if ! s:useWinMenu - let s:menuMore=s:menuMore . "More." - endif - endif - endif -endfunction - -function! s:SetMatchesFromBuffer(grepArg) - let s:nHits=0 - let s:hitList="\n" - let s:menuMore="" - let s:matches="" - if has("gui_running") || s:useWildMenu - if ! s:showAccess - aunmenu PopUp - endif - endif - split - call s:CheckHiddenLoaded() - silent! execute s - if s:uTyped!="" - if s:showAccess - silent! execute s:RangeOf(s:uTyped) . "global/" . a:grepArg . '/let s:matches=s:matches . getline(".") . "\n"' - call histdel("search",-1) - quit - return - else - silent! execute s:RangeOf(s:uTyped) . "global/" . a:grepArg . "/call s:BuildSinglePass()" - call histdel("search",-1) - endif - else - if s:showAccess - silent! execute "1,$ global/" . a:grepArg . '/let s:matches=s:matches . getline(".") . "\n"' - call histdel("search",-1) - quit - return - else - silent! execute "1,$ global/" . a:grepArg . "/call s:BuildSinglePass()" - call histdel("search",-1) - endif - endif - quit - let s:hitList=strpart(s:hitList,1) - if (s:nHits>=s:tooBig) - let s:nHits=s:nHits+1 - let s:hitList=s:hitList . "xxxxxxMAX_NR_OF_HITSxxxxxx\n" - if has("gui_running") || s:useWildMenu - if !s:useWinMenu - execute "amenu PopUp." . s:menuMore . "xxxxxxMAX_NR_OF_HITSxxxxxx <NOP>" - else - amenu PopUp.****\ \ Max\ number\ of\ hits\ reched\ **** <NOP> - endif - endif - call confirm( "Max number of hits reached", "&OK", 1,"Warning") - elseif (s:nHits==0) - if has("gui_running") || s:useWildMenu - amenu PopUp.****\ \ no\ completions\ found\ \ ***** :let @c=''<CR> - endif - endif -endfunction - -function! s:BuildFromOrdinary() - let maxGrep=" --max-count=" . s:maxGrepHits - if s:useBuffer - call s:SetMatchesFromBuffer("^" . s:uTyped . s:groupS . "[^ \t]*\\)" . s:cutBack . "\t") - elseif s:useDJGPP - call s:SetGrepArg("'^" . s:uTyped . "[^ \t]*\t'") - let s:matches=system(s:grepPrg . " @" . s:grepTemp . " cppcomplete.tags") - else - let s:matches=system(s:grepPrg . maxGrep . " '^" . s:uTyped . "[^ \t]*\t' cppcomplete.tags") - endif -endfunction - -function! s:BuildMenu() - if &previewwindow - call confirm("Dont do this is the Preview window","&OK",1,"Error") - return - endif - let s:nHits=0 - if ! s:CheckForTagFile() - return - endif - call s:UpdatehiddenBuffer() - let oldParents=s:relaxedParents - call s:GetPieces() - if (s:gotCType) - let spaceAfter=s:groupS . "[^! \t]\\+\\)" . s:cutBack . "\t" - let someSpaceAfter=s:groupS . "[^\t]\\+\\)" . s:cutBack . "\t" - let after3=spaceAfter . someSpaceAfter . someSpaceAfter - - if s:useInternalList || (! s:useBuffer) - call s:UpdateInheritList() - endif - let accSav=s:accessCheck - if s:colonSep && s:colonNoInherit - let s:classList=s:clType . "\t" - let s:accessCheck=0 - let s:colonSep=0 - else - call s:GetParents() - endif - let firstPart=s:uTyped . after3 . "[a-z]\t" . s:groupS . "\\<class\\|\\<struct\\|\\<union\\|\\<interface\\)" . s:cutBack . ":" - if ! s:colonSep - if s:accessCheck - if s:currLanguage=="Java" - let secondPart=s:groupS . "file:\t\\)\\?\\<access:" . s:groupS . "\\<default\\>\\|\\<public\\>\\)" - else - let secondPart=s:groupS . "file:\t\\)\\?\\<access:public" - endif - else - let secondPart="" - endif - elseif s:accessCheck - if s:currLanguage=="Java" - let secondPart=s:groupS . "file:\t\\)\\?\\<access:" . s:groupS . "\\<public\\>\\|\\<default\\>\\|\\<protected\\>\\)\\|" - else - let secondPart=s:groupS . "file:\t\\)\\?\\<access:" . s:groupS . "\\<public\\>\\|\\<protected\\>\\)\\|" - endif - else - let secondPart="\\|" - endif - let maxGrep=" --max-count=" . s:maxGrepHits . " " - if s:colonSep - if s:useBuffer - call s:SetMatchesFromBuffer("^" . s:groupS . firstPart . s:classList . secondPart . firstPart . s:clType . "\t\\)") - elseif (s:useDJGPP) - call s:SetGrepArg("'^" . s:groupS . firstPart . s:classList . secondPart . firstPart . s:clType . "\t\\)' cppcomplete.tags") - silent! let s:matches=system(s:grepPrg . " @" . s:grepTemp) - else - let s:matches=system(s:grepPrg . maxGrep . " '^" . s:groupS . firstPart . s:classList . secondPart . firstPart . s:clType . "\t\\)' cppcomplete.tags") - endif - - else - if s:useBuffer - call s:SetMatchesFromBuffer("^" . firstPart . s:classList . secondPart) - elseif s:useDJGPP - call s:SetGrepArg("'^" . firstPart . s:classList . secondPart . "'") - silent! let s:matches=system(s:grepPrg . " @" . s:grepTemp . " cppcomplete.tags") - else - let s:matches=system(s:grepPrg . maxGrep . " '^" . firstPart . s:classList . secondPart . "' cppcomplete.tags") - endif - endif - let s:accessCheck=accSav - if (! s:useBuffer) || s:showAccess - call s:BuildIt() - endif - elseif s:completeOrdinary && (s:uTyped!="") && (! s:gotCSep) - call s:BuildFromOrdinary() - if (!s:useBuffer) || s:showAccess - call s:BuildIt() - endif - else - let s:matches="" - call s:BuildIt() - endif - let s:relaxedParents=oldParents - if s:useWinMenu - let @c="" - popup PopUp - endif -endfunction - -" Get the input and try to determine the class type -" I know that this code is ugly and that a version with regular -" expressions should be much shorter and nicer. -" Anyway, I replaced it with a few lines using regexp but that was noticeable -" slower so I changed it back. -function! s:GetPieces() - let lineP = line(".") - let colP = virtcol(".") - - let s:gotUTyped=0 - let s:gotCSep=0 - let s:gotCType=0 - let s:colonSep=0 - let s:uTyped="" - let s:clType="" - - call s:GetUserTyped() - if (s:gotUTyped>0) - if line(".")!=lineP - let lineP2 = line(".") - let colP2 = virtcol(".") - call search("//","bW") - if (virtcol(".")!=colP2) && (lineP2==line(".")) - exe lineP.'normal! '.colP.'|' - return - else - exe lineP2.'normal! '.colP2.'|' - endif - endif - call s:GetClassSep() - if (s:gotCSep) - let s:innerStruct=0 - let s:currDepth=0 - let s:isStruct=0 - if (s:colonSep) - let s:clType=expand("<cword>") - let s:gotCType=(s:clType!="") - call s:CheckClassType() - else - call s:GetClassType() - endif - endif - endif - exe lineP.'normal! '.colP.'|' -endfunction -" The stuff that was typed after ::, -> or . -function! s:GetUserTyped() - let c = getline(line("."))[col(".") - 1] - normal! wb - if (c!="~") - let c = getline(line("."))[col(".") - 1] - if (c=="]") - normal! e - let c = getline(line("."))[col(".") - 1] - normal! b - endif - else - let s:uTyped="\\~" - let s:gotUTyped=1 - return - endif - if ((c == "-") || (c == ".") || (c==":") || (c==">")) - let s:uTyped="" - else - let s:uTyped = expand("<cword>") - if (strlen(s:uTyped)>0) - normal! h - let c = getline(line("."))[col(".") - 1] - normal! l - endif - if (c=="~") - let s:uTyped="\\~" . s:uTyped - endif - normal! b - endif - let s:gotUTyped=1 -endfunction -" the code is using w and b movements and that makes the code harder -" a better method is probably using single char moves -function! s:GetClassSep() - let c = getline(line("."))[col(".") - 1] - if ((c == "-") || (c == ".")) - if c=="-" - normal! l - let c = getline(line("."))[col(".") - 1] - if c!=">" - return 0 - endif - normal! h - endif - normal! b - let s:gotCSep=1 - elseif (c==":") - let s:gotCSep=1 - let s:colonSep=1 - - normal! b - let c = getline(line("."))[col(".") - 1] - if (c==">") - let nangle=1 - while ((nangle>0) && line(".")>1)) - normal! b - let c = getline(line("."))[col(".") - 1] - if (c==">") - let nangle=nangle+1 - elseif (c="<") - let nangle=nangle-1 - endif - endwhile - normal! b - endif - elseif (c==">") - normal! l - let c = getline(line("."))[col(".") - 1] - if (c==":") - let s:gotCSep=1 - let s:colonSep=1 - - normal! b - let c = getline(line("."))[col(".") - 1] - if (c==">") - let nangle=1 - while (nangle>0) && (line(".")>1) - normal! b - let c = getline(line("."))[col(".") - 1] - if (c==">") - let nangle=nangle+1 - elseif (c=="<") - let nangle=nangle-1 - endif - endwhile - normal! b - endif - endif - elseif (c=="]") - normal! e - let done=0 - while ! done - let c = getline(line("."))[col(".") - 1] - if (c==".") || (c==">") - let s:gotCSep=1 - let done=1 - elseif (c==":") - let s:colonSep=1 - let s:gotCSep=1 - let done=1 - elseif (c=="~") - normal! h - else - let done=1 - endif - endwhile - normal! b - if s:gotCSep - let c = getline(line("."))[col(".") - 1] - while (c!="[") && (line(".")>1) - normal! b - let c = getline(line("."))[col(".") - 1] - endwhile - if ! (line(".")>1) - let s:gotCSep=0 - else - normal! b - endif - endif - endif -endfunction - -function! s:GetClassType() - let lineT=line(".") - let colT=virtcol(".") - let last_buffer=bufnr("$") - let hasTagJumped=s:JumpToDecl(0) - if hasTagJumped==0 - exe lineT.'normal! '.colT.'|' - let hasTagJumped=s:JumpToDecl(1) - if hasTagJumped==0 - return - endif - endif - if hasTagJumped==-2 - return - elseif (hasTagJumped!=-1) - call s:GetType() - endif - if hasTagJumped==1 - if bufnr("$")!=last_buffer - bwipeout - else - quit - endif - endif - if s:gotCType - call s:CheckClassType() - if (s:gotCType) - return - endif - let s:isStruct=0 - endif - let s:innerStruct=0 - if hasTagJumped==2 - exe lineT.'normal! '.colT.'|' - let hasTagJumped=s:JumpToDecl(1) - if hasTagJumped>0 - call s:GetType() - if hasTagJumped==1 - if bufnr("$")!=last_buffer - bwipeout - else - quit - endif - endif - endif - if s:gotCType && (hasTagJumped!=-2) - call s:CheckClassType() - endif - endif -endfunction -function! s:CheckClassType() - let spaceAfter=s:groupS . "[^!\t]\\+\\)" . s:cutBack . "\t" - let goodTypes="s\\|u\\|c\\|i" - if s:searchTDefs - let goodTypes=goodTypes . "\\|t" - endif - if s:searchMacros - let goodTypes=goodTypes . "\\|d" - endif - let goodTypes=s:groupS . goodTypes . "\\)" . s:cutBack - if s:useBuffer - split - call s:CheckHiddenLoaded() - let foundIt="" - silent! execute s:RangeOf(s:clType) . "global/" . s:clType . "\t" . spaceAfter . spaceAfter . goodTypes . '/let foundIt=foundIt . getline(".") . "\n"' - call histdel("search",-1) - quit - elseif s:useDJGPP - call s:SetGrepArg("'^" . s:clType . "\t" . spaceAfter . spaceAfter . goodTypes . "' cppcomplete.tags") - silent! let foundIt=system(s:grepPrg . " @" . s:grepTemp) - else - let foundIt=system(s:grepPrg . " '^" . s:clType . "\t" . spaceAfter . spaceAfter . goodTypes . "' cppcomplete.tags") - endif - if foundIt=="" - let s:gotCType=0 - elseif match(foundIt, "\t\\%(s\\|u\\|c\\|i\\)[\t\n]")<0 - let s:gotCType=0 - if match(foundIt, "\tt[\t\n]")>0 - if s:searchTDefs - call s:GetTypedef(foundIt) - endif - else - if s:searchMacros - call s:GetMacro(foundIt) - endif - endif - elseif match(foundIt, "\ts[\t\n]")>=0 - let s:isStruct=1 - endif -endfunction -function! s:IsTypedefStruct(wordCheck) - let isStructSave=s:isStruct - let s:isStruct=0 - let clTypeSave=s:clType - let s:clType=a:wordCheck - let s:currDepth=0 - call s:CheckClassType() - if s:gotCType && (s:clType!=a:wordCheck) - call s:CheckClassType() - endif - let res=s:isStruct && s:gotCType - let s:isStruct=isStructSave - let s:typeDefStruct=s:clType - let s:clType=clTypeSave - return res -endfunction - -function! s:JumpToDecl(jumpAllowed) - let lineT=line(".") - let colT=virtcol(".") - let s:innerStruct=0 - if a:jumpAllowed && (s:searchGlobalVars || s:searchClassMembers || s:searchClassTags) - if s:DoGlobalJump() - if s:gotCType - return -2 - else - return 1 - endif - endif - endif - exe lineT.'normal! '.colT.'|' - normal! b - let c = getline(line("."))[col(".") - 1] - if a:jumpAllowed && (! s:searchClassTags) && ((c==".") || (c=="-") || (c==":")) - let lucky=1 - if (c=="-") - normal! l - let c = getline(line("."))[col(".") - 1] - if (c!=">") - let lucky=0 - endif - normal! h - endif - if lucky && (line(".")!=lineT) - let lineT2=line(".") - let colT2=virtcol(".") - let newLine=line(".") - if (search("//","bW")==newLine) - let lucky=0 - endif - exe lineT2.'normal! '.colT2.'|' - endif - normal! w - if lucky - let s:innerStruct=1 - let s:gotCType=1 - let s:clType = expand("<cword>") - return -1 - endif - endif - exe lineT.'normal! '.colT.'|' - if a:jumpAllowed - return 0 - endif - call s:Bettergd() - if ((virtcol(".") == colT) && (line(".") == lineT)) - return 0 - endif - return 2 -endfunction -function! s:GetType() - while (line(".")>1) - normal! b - let c = getline(line("."))[col(".") - 1] - - if (c == ")") - let lineT2=line(".") - let colT2=virtcol(".") - normal! l - let c = getline(line("."))[col(".") - 1] - if (c==";") || (c=="{") - return - endif - exe lineT2.'normal! '.colT2.'|' - - normal! [(b - continue - elseif (c=="]") - while (c!="[") && (line(".")>1) - normal! b - let c = getline(line("."))[col(".") - 1] - endwhile - if ! (line(".")>1) - return - else - continue - endif - elseif (c=="[") - continue - elseif (c==";") || (c=="{") - return - endif - if (c == ",") - normal! b - elseif (c=="}") - normal! [{ - if search('\(\<struct\>\|\<union\>\|\<class\>\).*\_s*\%#')>0 - let s:gotCType=1 - normal! w - let s:clType = expand("<cword>") - endif - return - else - let s:clType = expand("<cword>") - if ((c!="*") && (c!="&") && (s:clType!="const") && (s:clType!="static")) - normal! w - let c = getline(line("."))[col(".") - 1] - normal! b - if (c!=",") - let prevLine=line(".") - let c = getline(line("."))[col(".") - 1] - normal! b - if (line(".")!=prevLine) - let lineT2=line(".") - let colT2=virtcol(".") - let newLine=line(".") - if (search("//","bW")==newLine) - let c2="x" - else - let c2 = getline(line("."))[col(".") - 1] - endif - exe lineT2.'normal! '.colT2.'|' - else - let c2 = getline(line("."))[col(".") - 1] - endif - let nangle=0 - if (c==">") - if (c2==">") - let nangle=2 - else - let nangle=1 - endif - elseif (c2==">") - let nangle=1 - else - if (c2==":") || (c2==".") || (c2=="-") - let s:relaxedParents=1 - elseif (c2=="<") - continue - endif - let s:gotCType=1 - return - endif - while((nangle>0) && (line(".")>1)) - normal! b - let c = getline(line("."))[col(".") - 1] - if (c==">") - let nangle=nangle+1 - elseif (c=="<") - let nangle=nangle-1 - endif - endwhile - endif - elseif (c=="*") - normal! l - let c = getline(line("."))[col(".") - 1] - normal! h - if (c=="/") - normal! [/ - endif - endif - endif - endwhile -endfunction -function! s:InComment(lineT2, colT2) - if search('\%' . a:lineT2 . 'l\/\/','bW')!=0 - return 1 - endif - let ce=search('\*\/','W') - if ce!=0 - let cs=search('\/\*','bW') - if cs<=a:lineT2 - return 1 - endif - execute a:lineT2 . 'normal! ' . a:colT2 . '|' - endif - return 0 -endfunction - -function! s:Bettergd() - let lineT2=line(".") - let colT2=virtcol(".") - let lStart=lineT2 - let cStart=colT2 - let searchFor=expand("<cword>") - let s='\%(\(=.*\)\@<!\*\|&\|\_s\)' - call search('\([[:alnum:]_]' . s . '*\_s\+\|,\|<.*[->]\@<!>\|\]\|}\(.*\<searchFor\>\)\@=\)' . s . '*' . searchFor . '\_s*\(;\|,\|=\|[\|(\|)\)','bW') - while (line(".")!=lineT2) || (colT2!=virtcol(".")) - let lineT2=line(".") - let colT2=virtcol(".") - if s:InComment(lineT2, colT2)==0 - normal! [( - if (lineT2!=line(".")) || (colT2!=virtcol(".")) - if search('\([[:alnum:]_]' . s . '*\_s\+\|<.*[->]\@<!>\|\[.*\]\)' . s . '*\<' . searchFor . '\>\_s*\(,\|[\|)\)','W')!=lineT2 - execute lineT2 . 'normal! ' . colT2 . '|' - else - call search('\<' . searchFor . '\>') - return - endif - else - let c = getline(line("."))[col(".") - 1] - if (c=='}') - normal! [{ - if search('.*\(\<struct\>\|\<union\>\|\<class\>\).*\_s*\%#')>0 - execute lineT2 . 'normal! ' . colT2 . '|' - else - execute lineT2 . 'normal! ' . colT2 . '|' - continue - endif - endif - call search('\<' . searchFor . '\>') - return - endif - call search('\([[:alnum:]_]' . s . '*\_s\+\|,\|<.*[->]\@<!>\|\]\|}\(.*\<searchFor\>\)\@=\)' . s . '*' . searchFor . '\_s*\(;\|,\|=\|[\|(\|)\)','bW') - endif - endwhile - execute lStart . 'normal! ' . cStart . '|' - -endfunction - -function! s:JumpToInterestingLine(lines, i) - let lEnd=match(a:lines, "\n", a:i) - if lEnd<0 - let lEnd=strlen(a:lines) - endif - let lStart=0 - while (lEnd>match(a:lines, "\n", lStart)) - let lStart=matchend(a:lines, "\n", lStart) - if lStart<0 - call s:DoTagLikeJump(strpart(a:lines,0,lEnd)) - return - endif - endwhile - call s:DoTagLikeJump(strpart(a:lines,lStart,lEnd)) -endfunction - -" If a typedef was used -function! s:GetTypedef(foundIt) - let s:gotCType=0 - let s:currDepth=s:currDepth+1 - if s:currDepth>=s:maxDepth - return - endif - split - let last_buffer=bufnr("$") - call s:DoTagLikeJump(a:foundIt) - call search(s:clType) - let lineT=line(".") - let colT=virtcol(".") - call s:GetClassType() - if ! s:gotCType - exe lineT.'normal! '.colT.'|' - call s:GetType() - endif - if bufnr("$")!=last_buffer - bwipeout - else - quit - endif -endfunction -" a simple approach for macros -function! s:GetMacro(foundIt) - let last_buffer=bufnr("$") - split - call s:DoTagLikeJump(a:foundIt) - normal! www - let s:clType=expand("<cword>") - if (s:clType=="class" || s:clType=="struct" || s:clType=="union") - normal! w - let s:clType=expand("<cword>") - endif - let s:gotCType=1 - if bufnr("$")!=last_buffer - bwipeout - else - quit - endif -endfunction -function! s:IsLocal(l) - return match(a:l,"[^\t)*\t[^\t\\/]\\+\t")>=0 -endfunction -" Get the ancestors, I do not think that ctags always gives a complete list -function! s:GetParents() - let s:classList= "\\<" . s:clType . "\\>" - let clName=s:clType - let unsearched="" - let searched="" - let done=0 - - if (! s:useInternalList ) && s:useBuffer - split - call s:CheckHiddenLoaded() - endif - while (! done) - if s:useInternalList || (! s:useBuffer) - let nextM=match(s:inheritsList,"\n\\<". clName . "\\>\t") - if (nextM>=0) - let nextM=nextM+1 - let inhLine=strpart(s:inheritsList, nextM, match(s:inheritsList,"\n",nextM)-nextM) - else - let inhLine="" - endif - else - let inhLine="" - silent! execute s:RangeOf(clName) . " global/" . "^" . clName . '\>\t\%([^\t]*\)\@>\t\%([^\t]*\)\@>\t[suci]\t.*\<inherits:/if (inhLine=="" || ! s:IsLocal(inhLine)) | let inhLine=getline(".") . "\n" | endif' - call histdel("search",-1) - endif - if (inhLine!="") - let i2=matchend(inhLine, "inherits:") - let c="," - while c=="," - let i=match(inhLine,"[,\t\n]",i2) - let @c=strpart(inhLine,i2,i-i2) - if match(searched,":\\<" . @c . "\\>:")<0 - let searched=searched . ":" . @c . ":" - if s:isStruct - if s:IsTypedefStruct(@c) - let @c=s:typeDefStruct - let searched=searched . ":" . s:typeDefStruct . ":" - else - let @c=strpart(inhLine,i2,i-i2) - endif - let s:classList=s:classList . "\\|" . "\\<" . @c . "\\>" - else - let s:classList=s:classList . "\\|" . "\\<" . @c . "\\>" - endif - if (strlen(unsearched)>0) - let unsearched=unsearched . ":" . @c - else - let unsearched=@c - endif - endif - let c=inhLine[i] - let i2=i+1 - endwhile - endif - if (strlen(unsearched)<=0) - let done=1 - elseif (match(unsearched,":")>0) - let clName=strpart(unsearched, 0, match(unsearched,":")) - let unsearched=strpart(unsearched, matchend(unsearched,":")) - else - let clName=unsearched - let unsearched="" - endif - endwhile - if (! s:useInternalList) && s:useBuffer - quit - endif - if (s:innerStruct) - if s:classList!=s:clType - let rest="\\|" . strpart(s:classList, matchend(s:classList,"|")) - else - let rest="" - endif - if s:currLanguage=="Java" - let s:classList=s:groupS . "[^\\.]*\\.\\)*" s:groupS . ".*\\." . s:clType . rest . "\\)" . s:groupS . "\\.<anonymous>\\)*" . s:groupS . "\t" - else - let s:classList=s:groupS . "[^:]*::\\)*" . s:groupS . ".*::" . s:clType . rest . "\\)" . s:groupS . "::<anonymous>\\)*" . s:groupS . "\t\\|$\\)" - endif - elseif s:currLanguage=="Java" - if s:relaxedParents - let s:classList=s:groupS . s:groupS . s:groupS . "[^\\.\t]*\\)" . s:cutBack . "\\.\\)*\\)" . s:groupS . s:classList . "\\)" . s:groupS . "\\.<anonymous>\\)*\t" - else - let s:classList=s:groupS . "<anonymous>.\\)*" . s:groupS . s:classList . "\\)" . s:groupS . "\\.<anonymous>\\)*\t" - endif - else - if s:relaxedParents - let s:classList=s:groupS . s:groupS . s:groupS ."[^:\t]*\\)" . s:cutBack . "::\\)*\\)" . s:groupS . s:classList . "\\)" . s:groupS . "::<anonymous>\\)*" . s:groupS . "\t\\|$\\)" - else - let s:classList=s:groupS . "<anonymous>::\\)*" . s:groupS . s:classList . "\\)" . s:groupS . "::<anonymous>\\)*" . s:groupS . "\t\\|$\\)" - endif - endif - " Uncommenting the following line can be useful if you have hacked the script but breaks the popup in GTK. - " echo s:classList ."\n" -endfunction -function! s:JumpToLineInBlock(n) - if s:regexBlock=="" - call confirm("The current block is empty","&OK",1,"Error") - return - endif - let currLine=0 - let currPos=0 - let prevPos=0 - if (a:n>s:nLinesInBlock) || (a:n<1) - return - endif - while a:n>currLine - let prevPos=currPos - let currPos=match(s:regexBlock, "\n", currPos+1) - if currPos<0 - let currLine=a:n - let currPos=strlen(s:regexBlock) - else - let currLine=currLine+1 - endif - endwhile - let s:currInBlock=a:n - call s:DoTagLikeJump(strpart(s:regexBlock, prevPos, currPos-prevPos)) - normal! zt -endfunction - -function! s:PrevInBlock() - let s:currInBlock=s:currInBlock-1 - if s:currInBlock<=0 - let s:currInBlock=s:nLinesInBlock - endif - call s:JumpToLineInBlock(s:currInBlock) -endfunction -function! s:NextInBlock() - let s:currInBlock=s:currInBlock+1 - if s:currInBlock>s:nLinesInBlock - let s:currInBlock=1 - endif - call s:JumpToLineInBlock(s:currInBlock) -endfunction -function! s:BuildBlock(regex) - let s:regexBlock="" - if has("gui_running") || s:useWildMenu - silent! aunmenu cppcomplete.Block\ menu.menu\ built\ from\ regexp - endif - let s:nLinesInBlock=0 - let s:currInBlock=0 - if (a:regex=="") - echo "no string" - return - endif - if s:useBuffer - split - let s:regexBlock="" - call s:CheckHiddenLoaded() - let x=line(".") - execute ":call search('" . a:regex . "','W')" - while line(".")!=x - let x=line(".") - normal! "cyy$ - if @c[0]!="!" - let s:regexBlock=s:regexBlock . @c - endif - execute ":call search('" . a:regex . "','W')" - endwhile - quit - elseif s:useDJGPP - call s:SetGrepArg("'" . a:regex ."' cppcomplete.tags") - let s:regexBlock=system(s:grepPrg . " @" . s:grepTemp . " | " . s:grepPrg . " '^[^!]'") - else - let s:regexBlock=system(s:grepPrg . " '" . a:regex ."' cppcomplete.tags | " . s:grepPrg ." '^[^!]'") - endif - if s:regexBlock=="" - echo "could not build the block" - else - let currPos=0 - while currPos>=0 - let s:nLinesInBlock=s:nLinesInBlock+1 - let currPos=matchend(s:regexBlock,"\n",currPos) - endwhile - let s:nLinesInBlock=s:nLinesInBlock-1 - echo "a block with " . s:nLinesInBlock . " lines was built" - endif -endfunction -function! s:BuildBlockFromRegexp() - highlight BlockLiteral cterm=bold ctermbg=NONE gui=bold guibg=NONE - highlight BlockItalic cterm=italic ctermbg=NONE gui=italic guibg=NONE - echo "Build from regular expression\n" - echo "The format of cppcomplete.tags\n" - echon "tag_name<TAB>file_name<TAB>ex_cmd;<TAB>" - echohl BlockItalic - echon "kind" - echohl None - echon"<TAB>" - echohl BlockItalic - echon "visibility" - echohl None - echon "<TAB>" - echohl BlockItalic - echon "file" - echohl None - echon "<TAB>" - echohl BlockItalic - echon "access" - echohl None - echon "<TAB>" - echohl BlockItalic - echon "inherits\nkind " - echohl None - echohl BlockGroup - echon "c d e f g m n p s t u v" - echohl None - echon "\tfor Java is it " - echohl BlockGroup - echon "c f i m p" - echohl None - echohl BlockItalic - echon "\nvisibility " - echohl BlockGroup - echon "class: struct: union: and for Java also interface:" - echohl BlockItalic - echon "\nfile " - echohl BlockGroup - echon "file:" - echohl BlockItalic - echon "\naccess " - echohl BlockGroup - echon "access:" - echohl None - echon " followed by " - echohl BlockGroup - echon "public protected private friend default\n" - echohl BlockItalic - echon "inherits" - echohl BlockGroup - echon " inherits:" - echohl None - - let regex=input("\n>") - if regex!="" - call s:BuildBlock(regex) - else - - echo "no string" - endif -endfunction -function! s:EchoBlock() - echo s:regexBlock -endfunction -function! s:DoTagLikeJump(tagLine) - let fStart=matchend(a:tagLine, "\t") - let fEnd=match(a:tagLine, "\t", fStart) ... [truncated message content] |
From: <yan...@us...> - 2008-07-07 21:41:06
|
Revision: 882 http://assorted.svn.sourceforge.net/assorted/?rev=882&view=rev Author: yangzhang Date: 2008-07-07 14:41:16 -0700 (Mon, 07 Jul 2008) Log Message: ----------- removed tags file Removed Paths: ------------- configs/trunk/src/vim/doc/tags Deleted: configs/trunk/src/vim/doc/tags =================================================================== --- configs/trunk/src/vim/doc/tags 2008-07-07 21:39:06 UTC (rev 881) +++ configs/trunk/src/vim/doc/tags 2008-07-07 21:41:16 UTC (rev 882) @@ -1,190 +0,0 @@ -'Tlist_Auto_Highlight_Tag' taglist.txt /*'Tlist_Auto_Highlight_Tag'* -'Tlist_Auto_Open' taglist.txt /*'Tlist_Auto_Open'* -'Tlist_Auto_Update' taglist.txt /*'Tlist_Auto_Update'* -'Tlist_Close_On_Select' taglist.txt /*'Tlist_Close_On_Select'* -'Tlist_Compact_Format' taglist.txt /*'Tlist_Compact_Format'* -'Tlist_Ctags_Cmd' taglist.txt /*'Tlist_Ctags_Cmd'* -'Tlist_Display_Prototype' taglist.txt /*'Tlist_Display_Prototype'* -'Tlist_Display_Tag_Scope' taglist.txt /*'Tlist_Display_Tag_Scope'* -'Tlist_Enable_Fold_Column' taglist.txt /*'Tlist_Enable_Fold_Column'* -'Tlist_Exit_OnlyWindow' taglist.txt /*'Tlist_Exit_OnlyWindow'* -'Tlist_File_Fold_Auto_Close' taglist.txt /*'Tlist_File_Fold_Auto_Close'* -'Tlist_GainFocus_On_ToggleOpen' taglist.txt /*'Tlist_GainFocus_On_ToggleOpen'* -'Tlist_Highlight_Tag_On_BufEnter' taglist.txt /*'Tlist_Highlight_Tag_On_BufEnter'* -'Tlist_Inc_Winwidth' taglist.txt /*'Tlist_Inc_Winwidth'* -'Tlist_Max_Submenu_Items' taglist.txt /*'Tlist_Max_Submenu_Items'* -'Tlist_Max_Tag_Length' taglist.txt /*'Tlist_Max_Tag_Length'* -'Tlist_Process_File_Always' taglist.txt /*'Tlist_Process_File_Always'* -'Tlist_Show_Menu' taglist.txt /*'Tlist_Show_Menu'* -'Tlist_Show_One_File' taglist.txt /*'Tlist_Show_One_File'* -'Tlist_Sort_Type' taglist.txt /*'Tlist_Sort_Type'* -'Tlist_Use_Horiz_Window' taglist.txt /*'Tlist_Use_Horiz_Window'* -'Tlist_Use_Right_Window' taglist.txt /*'Tlist_Use_Right_Window'* -'Tlist_Use_SingleClick' taglist.txt /*'Tlist_Use_SingleClick'* -'Tlist_WinHeight' taglist.txt /*'Tlist_WinHeight'* -'Tlist_WinWidth' taglist.txt /*'Tlist_WinWidth'* -:MatchDebug matchit.txt /*:MatchDebug* -:TlistAddFiles taglist.txt /*:TlistAddFiles* -:TlistAddFilesRecursive taglist.txt /*:TlistAddFilesRecursive* -:TlistClose taglist.txt /*:TlistClose* -:TlistDebug taglist.txt /*:TlistDebug* -:TlistHighlightTag taglist.txt /*:TlistHighlightTag* -:TlistLock taglist.txt /*:TlistLock* -:TlistMessages taglist.txt /*:TlistMessages* -:TlistOpen taglist.txt /*:TlistOpen* -:TlistSessionLoad taglist.txt /*:TlistSessionLoad* -:TlistSessionSave taglist.txt /*:TlistSessionSave* -:TlistShowPrototype taglist.txt /*:TlistShowPrototype* -:TlistShowTag taglist.txt /*:TlistShowTag* -:TlistToggle taglist.txt /*:TlistToggle* -:TlistUndebug taglist.txt /*:TlistUndebug* -:TlistUnlock taglist.txt /*:TlistUnlock* -:TlistUpdate taglist.txt /*:TlistUpdate* -MatchError matchit.txt /*MatchError* -Tlist_Get_Tag_Prototype_By_Line() taglist.txt /*Tlist_Get_Tag_Prototype_By_Line()* -Tlist_Get_Tagname_By_Line() taglist.txt /*Tlist_Get_Tagname_By_Line()* -Tlist_Set_App() taglist.txt /*Tlist_Set_App()* -Tlist_Update_File_Tags() taglist.txt /*Tlist_Update_File_Tags()* -[% matchit.txt /*[%* -]% matchit.txt /*]%* -and haskell.txt /*and* -b:match_col matchit.txt /*b:match_col* -b:match_debug matchit.txt /*b:match_debug* -b:match_ignorecase matchit.txt /*b:match_ignorecase* -b:match_ini matchit.txt /*b:match_ini* -b:match_iniBR matchit.txt /*b:match_iniBR* -b:match_match matchit.txt /*b:match_match* -b:match_pat matchit.txt /*b:match_pat* -b:match_skip matchit.txt /*b:match_skip* -b:match_table matchit.txt /*b:match_table* -b:match_tail matchit.txt /*b:match_tail* -b:match_wholeBR matchit.txt /*b:match_wholeBR* -b:match_word matchit.txt /*b:match_word* -b:match_words matchit.txt /*b:match_words* -g% matchit.txt /*g%* -ghci.vim haskell.txt /*ghci.vim* -haskell-Intro haskell.txt /*haskell-Intro* -haskell-Overview haskell.txt /*haskell-Overview* -haskell.vim haskell.txt /*haskell.vim* -hugs.vim haskell.txt /*hugs.vim* -matchit matchit.txt /*matchit* -matchit-% matchit.txt /*matchit-%* -matchit-\1 matchit.txt /*matchit-\\1* -matchit-activate matchit.txt /*matchit-activate* -matchit-backref matchit.txt /*matchit-backref* -matchit-bugs matchit.txt /*matchit-bugs* -matchit-choose matchit.txt /*matchit-choose* -matchit-configure matchit.txt /*matchit-configure* -matchit-debug matchit.txt /*matchit-debug* -matchit-details matchit.txt /*matchit-details* -matchit-highlight matchit.txt /*matchit-highlight* -matchit-hl matchit.txt /*matchit-hl* -matchit-intro matchit.txt /*matchit-intro* -matchit-languages matchit.txt /*matchit-languages* -matchit-modes matchit.txt /*matchit-modes* -matchit-newlang matchit.txt /*matchit-newlang* -matchit-o_% matchit.txt /*matchit-o_%* -matchit-parse matchit.txt /*matchit-parse* -matchit-s:notend matchit.txt /*matchit-s:notend* -matchit-s:sol matchit.txt /*matchit-s:sol* -matchit-spaces matchit.txt /*matchit-spaces* -matchit-troubleshoot matchit.txt /*matchit-troubleshoot* -matchit-v_% matchit.txt /*matchit-v_%* -matchit.txt matchit.txt /*matchit.txt* -matchit.vim matchit.txt /*matchit.vim* -o_[% matchit.txt /*o_[%* -o_]% matchit.txt /*o_]%* -o_g% matchit.txt /*o_g%* -otl2html vo_readme.txt /*otl2html* -project project.txt /*project* -project-adding-mappings project.txt /*project-adding-mappings* -project-example project.txt /*project-example* -project-flags project.txt /*project-flags* -project-inheritance project.txt /*project-inheritance* -project-invoking project.txt /*project-invoking* -project-mappings project.txt /*project-mappings* -project-plugin project.txt /*project-plugin* -project-settings project.txt /*project-settings* -project-syntax project.txt /*project-syntax* -project-tips project.txt /*project-tips* -project.txt project.txt /*project.txt* -ps_color.txt ps_color.txt /*ps_color.txt* -ps_colour ps_color.txt /*ps_colour* -psc ps_color.txt /*psc* -psc-about-background ps_color.txt /*psc-about-background* -psc-change-background ps_color.txt /*psc-change-background* -psc-contents ps_color.txt /*psc-contents* -psc-cterm ps_color.txt /*psc-cterm* -psc-cterm-color-table ps_color.txt /*psc-cterm-color-table* -psc-cterm-incompatible ps_color.txt /*psc-cterm-incompatible* -psc-cterm-nt ps_color.txt /*psc-cterm-nt* -psc-cterm-others ps_color.txt /*psc-cterm-others* -psc-cterm-xterm ps_color.txt /*psc-cterm-xterm* -psc-faq ps_color.txt /*psc-faq* -psc-faq-ffothers ps_color.txt /*psc-faq-ffothers* -psc-features ps_color.txt /*psc-features* -psc-options ps_color.txt /*psc-options* -psc-overview ps_color.txt /*psc-overview* -psc-release-notes ps_color.txt /*psc-release-notes* -psc-tips ps_color.txt /*psc-tips* -psc-todo ps_color.txt /*psc-todo* -psc-usage ps_color.txt /*psc-usage* -psc_cterm_style ps_color.txt /*psc_cterm_style* -psc_cterm_transparent ps_color.txt /*psc_cterm_transparent* -psc_fontface ps_color.txt /*psc_fontface* -psc_inversed_todo ps_color.txt /*psc_inversed_todo* -psc_statement_different_from_type ps_color.txt /*psc_statement_different_from_type* -psc_style ps_color.txt /*psc_style* -psc_use_default_for_cterm ps_color.txt /*psc_use_default_for_cterm* -pscolor ps_color.txt /*pscolor* -taglist-commands taglist.txt /*taglist-commands* -taglist-debug taglist.txt /*taglist-debug* -taglist-extend taglist.txt /*taglist-extend* -taglist-faq taglist.txt /*taglist-faq* -taglist-functions taglist.txt /*taglist-functions* -taglist-install taglist.txt /*taglist-install* -taglist-internet taglist.txt /*taglist-internet* -taglist-intro taglist.txt /*taglist-intro* -taglist-keys taglist.txt /*taglist-keys* -taglist-license taglist.txt /*taglist-license* -taglist-menu taglist.txt /*taglist-menu* -taglist-options taglist.txt /*taglist-options* -taglist-requirements taglist.txt /*taglist-requirements* -taglist-session taglist.txt /*taglist-session* -taglist-todo taglist.txt /*taglist-todo* -taglist-using taglist.txt /*taglist-using* -taglist.txt taglist.txt /*taglist.txt* -v_[% matchit.txt /*v_[%* -v_]% matchit.txt /*v_]%* -v_a% matchit.txt /*v_a%* -v_g% matchit.txt /*v_g%* -vimoutliner vo_readme.txt /*vimoutliner* -vo vo_readme.txt /*vo* -vo-activities vo_readme.txt /*vo-activities* -vo-advanced vo_readme.txt /*vo-advanced* -vo-auto-install vo_readme.txt /*vo-auto-install* -vo-cautions vo_readme.txt /*vo-cautions* -vo-checkbox vo_readme.txt /*vo-checkbox* -vo-color vo_readme.txt /*vo-color* -vo-command vo_readme.txt /*vo-command* -vo-debian vo_readme.txt /*vo-debian* -vo-executable-lines vo_readme.txt /*vo-executable-lines* -vo-hoisting vo_readme.txt /*vo-hoisting* -vo-install vo_readme.txt /*vo-install* -vo-license vo_readme.txt /*vo-license* -vo-maketags vo_readme.txt /*vo-maketags* -vo-manual-install vo_readme.txt /*vo-manual-install* -vo-menu vo_readme.txt /*vo-menu* -vo-objects vo_readme.txt /*vo-objects* -vo-other-files vo_readme.txt /*vo-other-files* -vo-other-info vo_readme.txt /*vo-other-info* -vo-philosophy vo_readme.txt /*vo-philosophy* -vo-plugins vo_readme.txt /*vo-plugins* -vo-post-processors vo_readme.txt /*vo-post-processors* -vo-running vo_readme.txt /*vo-running* -vo-scripts vo_readme.txt /*vo-scripts* -vo-testing vo_readme.txt /*vo-testing* -vo-troubleshooting vo_readme.txt /*vo-troubleshooting* -vo-updating vo_readme.txt /*vo-updating* -vo-version vo_readme.txt /*vo-version* -vo_readme.txt vo_readme.txt /*vo_readme.txt* This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-07 21:39:02
|
Revision: 881 http://assorted.svn.sourceforge.net/assorted/?rev=881&view=rev Author: yangzhang Date: 2008-07-07 14:39:06 -0700 (Mon, 07 Jul 2008) Log Message: ----------- added sunrise-commander Modified Paths: -------------- configs/trunk/src/emacs/yang.el Added Paths: ----------- configs/trunk/src/emacs/sunrise-commander.el Added: configs/trunk/src/emacs/sunrise-commander.el =================================================================== --- configs/trunk/src/emacs/sunrise-commander.el (rev 0) +++ configs/trunk/src/emacs/sunrise-commander.el 2008-07-07 21:39:06 UTC (rev 881) @@ -0,0 +1,2251 @@ +;; sunrise-commander.el --- Two-pane file manager for Emacs based on Dired and +;; inspired by MC. + +;; Copyright (C) 2007 2008 José Alfredo Romero L. (j0s3l0) + +;; Author: José Alfredo Romero L. <jo...@po...> +;; Keywords: Sunrise Commander Emacs File Manager Midnight Norton Orthodox + +;; This program is free software: you can redistribute it and/or modify it under +;; the terms of the GNU General Public License as published by the Free Software +;; Foundation, either version 3 of the License, or (at your option) any later +;; version. +;; +;; This program is distributed in the hope that it will be useful, but WITHOUT +;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +;; FOR A PARTICULAR PURPOSE. See the GNU General Public License for more de- +;; tails. + +;; You should have received a copy of the GNU General Public License along with +;; this program. If not, see <http://www.gnu.org/licenses/>. + +;;; Commentary: + +;; Here is another two-pane mc emulation layer for emacs. It's built on top of +;; Dired and takes advantage of all its features, offering at the same time the +;; double pane interface I'd been missing so badly since I started using regu- +;; larly emacs (for everything!). I tried both Ilya Zakharevich's nc.el and +;; Kevin Burton's mc.el, but none of them was what I was looking for (though +;; mc.el was near the ideal). + +;; A lot of this code has been shamelessly copied from Kevin's mc.el and only +;; slightly modified. Another part of it - the code for recursive file copying +;; and renaming - was adapted from the dired extensions written by Kurt Nørmark +;; for LAML (http://www.cs.aau.dk/~normark/scheme/distribution/laml/). + +;; I have added to the mix several useful functions: + +;; * Sunrise is implemented as a derived major mode confined inside the pane +;; buffers, so its buffers and dired ones can live together without easymenu or +;; viper to avoid key binding collisions. + +;; * It automatically closes unused buffers and tries to never keep open more +;; than the one or two used to display the panes. + +;; * Each pane has its own history ring: press M-y / M-u for moving backwards / +;; forwards in the history of directories. + +;; * Press C-= for "smart" file comparison using ediff. It compares together the +;; first two files marked on each pane or, if no files have been marked, it as- +;; sumes that the second pane contains a file with the same name as the selected +;; one and tries to compare these two. You can also mark whole lists of files to +;; be compared and then just press C-= for comparing the next pair. + +;; * Press = for fast "smart" file comparison -- like above, but using regular +;; diff. + +;; * Press C-M-= for directory comparison (by date / size / contents of files). + +;; * Press C-c t to open a terminal into the current pane's directory. + +;; * Press M-t to swap the panes. + +;; * Press C-c C-s to change the layout of the panes (horizontal/vertical/top) + +;; * Press C-x C-q to put the current pane in Editable Dired mode (allows to +;; edit the pane as if it were a regular file -- press C-c C-c to commit your +;; changes to the filesystem). + +;; * Sunrise VIRTUAL mode integrates dired-virtual mode to Sunrise, allowing to +;; capture find and locate results in regular files and to use them later as if +;; they were directories with all Dired and Sunrise operations at your +;; fingertips. +;; The results of the following operations are displayed in VIRTUAL mode: +;; - find-dired-name (press C-c C-n), +;; - find-grep-name (press C-c C-g), +;; - find-dired (press C-c C-f), +;; - locate (press C-c C-l), +;; - list all recently visited files (press C-c C-r -- requires recentf), +;; - list all directories in active pane's history ring (press C-c C-d). + +;; * Supports AVFS (http://www.inf.bme.hu/~mszeredi/avfs/) for transparent navi- +;; gation inside compressed archives (*.zip, *.tgz, *.tar.bz2, *.deb, etc. etc.) +;; You need to have AVFS with coda or fuse installed and running on your system +;; for this to work, though. + +;; * Terminal integration and Command line expansion: integrates tightly with +;; eshell or term-mode to allow interaction between terminal emulators in line +;; mode (C-c C-j) and the panes: the most important navigation commands (up, +;; down, mark, unmark, go to parent dir) can be executed on the active pane +;; directly from the terminal by pressing the usual keys with Meta: <M-up>, +;; <M-down>, etc. Additionally, the following substitutions are automagically +;; performed in term-line-mode: +;; %f - expands to the currently selected file in the left pane +;; %F - expands to the currently selected file in the right pane +;; %m - expands to the list of all marked files in the left pane +;; %M - expands to the list of all marked files in the right pane +;; %d - expands to the current directory in the left pane +;; %D - expands to the current directory in the right pane + +;; * Passive navigation: the usual navigation keys (n, p, Return, U, ;) combined +;; with Meta allow to move across the passive pane without actually having to +;; switch to it. + +;; * Synchronized navigation: press C-c C-z to enable / disable synchronized +;; navigation. In this mode, the passive navigation keys (M-n, M-p, M-Return, +;; etc.) operate on both panes simultaneously. I've found this quite useful for +;; comparing hierarchically small to medium-sized directory trees (for large to +;; very large directory trees one needs something on the lines of diff -r +;; though). + +;; * etc. ;-) + +;; It doesn't even try to look like MC, so the help window is gone (you're in +;; emacs, so you know your bindings, right?). + +;; This is version 2 $Rev: 133 $ of the Sunrise Commander. + +;; It was written on GNU Emacs 23 on Linux, and tested on GNU Emacs 22 and 23 +;; for Linux and on EmacsW32 (version 22) for Windows. I have also received +;; feedback from a user reporting it works OK on the Mac (GNU Emacs 22.2 on Mac +;; OS X Leopard). I *am* aware that there are several functions (including, +;; alas, file and directory comparison) that simply will not work on GNU Emacs +;; 21, but unfortunately I do not have the time to port them back. I don't know +;; either if it will work at all on XEmacs (uses overlays), so try at your own +;; risk. All contributions and/or bug reports will be very welcome. + +;;; Installation and Usage: + +;; 1) Put this file somewhere in your emacs load-path. + +;; 2) Add a (require 'sunrise-commander) to your .emacs file. + +;; 3) If you want the function keys bound to the usual MC commands (F5 for copy, +;; F6 for rename, and so on) add: (sunrise-mc-keys) after the "require" line +;; (IMHO these bindings are not optimal for emacs, but I'm including them be- +;; cause some MC power users may have them too deeply embedded in their spinal +;; cord) + +;; 4) Choose some unused extension for files to be opened in Sunrise VIRTUAL +;; mode and add it to auto-mode-alist, e.g. if you want to name your virtual +;; directories like *.svrm just add to your .emacs file a line like the +;; following: +;; +;; (add-to-list 'auto-mode-alist '("\\.srvm\\'" . sr-virtual-mode)) + +;; 5) Evaluate the new lines, or reload your .emacs file, or restart emacs. + +;; 6) Type M-x sunrise to invoke the Sunrise Commander (or much better: bind the +;; function to your favorite key combination). The command sunrise-cd invokes +;; Sunrise and automatically selects the current file wherever it is in the +;; filesystem. Type h at any moment for information on available key bindings. + +;; 7) Type M-x customize-group <RET> sunrise <RET> to customize options, fonts +;; and colors (activate AVFS support here, too). + +;; 8) Enjoy :) + +;;; Code: + +(require 'dired) +(require 'dired-x) +(require 'font-lock) +(eval-when-compile (require 'cl)) +(eval-when-compile (require 'esh-mode)) +(eval-when-compile (require 'recentf)) +(eval-when-compile (require 'term)) + +(defcustom sr-terminal-program "eshell" + "The program to use for terminal emulation. If this value is set to + \"eshell\", the emacs shell will be used." + :group 'sunrise + :type 'string) + +(defcustom sr-listing-switches "-alp" + "Listing switches to use (instead of dired-listing-switches) for building + Sunrise buffers. Notice that buffers in VIRTUAL mode (such as the recent + directories and recent files listings) use sr-virtual-listing-switches instead + of this. + Most portable value: -alp + Recommended value on GNU systems: \ +--time-style=locale --group-directories-first -alDphgG" + :group 'sunrise + :type 'string) + +(defcustom sr-virtual-listing-switches "--time-style=long-iso --group-directories-first -aldpgG" + "Listing switches for building buffers in Sunrise VIRTUAL mode based on find + and locate results. Sorting support in sr-virtual buffers depend on the + correct format of their entries. + + NOTE: the default value for these switches may be incompatible with your + installment if you're using Sunrise in a non-GNU environment. If you are + getting error reports of the form ``Listing directory failed but `access-file' + worked'', then you may try changing this value to -alp (be aware, though, that + this will cripple sorting in all your VIRTUAL buffers), or much better install + GNU coreutils in your system and use gls as your ls program. For details on + how to do this please consult the GNU Emacs FAQ for MS Windows. + (Thanks Vagn Johansen for pointing out this issue)" + :group 'sunrise + :type 'string) + +(defcustom sr-avfs-root nil + "The root of the AVFS virtual filesystem to use for navigating compressed + archives. Setting this value activates AVFS support." + :group 'sunrise + :type '(choice + (const :tag "AVFS support disabled" nil) + (directory :tag "AVFS root directory"))) + +(defcustom sr-avfs-handlers-alist '(("\\.[jwesh]ar$" . "#uzip/") + ("\\.xpi$" . "#uzip/") + ("." . "#/")) + "List of AVFS handlers to manage specific file extensions." + :group 'sunrise + :type 'alist) + +(defcustom sr-md5-shell-command "md5sum %f | cut -d' ' -f1 2>/dev/null" + "Shell command to use for calculating MD5 sums for files when comparing + directories using the ``(c)ontents'' option. Use %f as a placeholder for the + name of the file." + :group 'sunrise + :type 'string) + +(defcustom sr-window-split-style 'horizontal + "The current window split configuration. May be 'horizontal, 'vertical or 'top" + :group 'sunrise + :type '(choice + (const horizontal) + (const vertical) + (const top))) + +(defcustom sr-windows-locked t + "Flag that indicates whether the vertical size of the panes should remain + constant during Sunrise operation." + :group 'sunrise + :type 'boolean) + +(defcustom sr-history-length 20 + "Number of entries to keep in each of the pane history rings." + :group 'sunrise + :type 'integer) + +(defcustom sr-start-hook nil + "List of functions to be called after the Sunrise panes are displayed" + :group 'sunrise + :type 'hook + :options '(auto-insert)) + +(defcustom sr-quit-hook nil + "List of functions to be called after the Sunrise panes are hidden" + :group 'sunrise + :type 'hook + :options '(auto-insert)) + +(defvar sr-restore-buffer nil + "Buffer to restore when sr quits.") + +(defvar sr-prior-window-configuration nil + "Window configuration before sr was started.") + +(defvar sr-running nil "True when sr commander mode is running.") + +(defvar sr-synchronized nil "True when synchronized navigation is on") + +(defvar sr-current-window-overlay nil + "Holds the current overlay which marks the current dired buffer.") + +(defvar sr-clex-hotchar-overlay nil + "Holds the overlay used to highlight the hot character (%) during CLEX + operations.") + +(defvar sr-left-directory "~/" + "Dired directory for the left window. See variable `dired-directory'.") + +(defvar sr-left-buffer nil + "Dired buffer for the left window.") + +(defvar sr-right-directory "~/" + "Dired directory for the right window. See variable `dired-directory'.") + +(defvar sr-right-buffer nil + "Dired buffer for the right window.") + +(defvar sr-this-directory "~/" + "Dired directory in the active pane. This isn't necessarily the same as + dired-directory") + +(defvar sr-other-directory "~/" + "Dired directory in the passive pane") + +(defvar sr-checkpoint-registry + (acons "~" (list sr-left-directory sr-right-directory) nil) + "Registry of currently defined checkpoints") + +(defvar sr-left-window nil + "The left window of dired.") + +(defvar sr-right-window nil + "The right window of dired.") + +(defvar sr-selected-window 'left + "The window to select when sr starts up.") + +(defvar sr-ediff-on nil + "Flag that indicates whether an ediff is being done by Sunrise") + +(defvar sr-clex-on nil + "Flag that indicates that a CLEX operation is taking place") + +(defvar sr-dired-directory "" + "Directory inside which sr-mode is currently active") + +(defvar sr-start-message + "Been coding all night? Enjoy the Sunrise! (or press q to quit)" + "Message to display when `sr' is started.") + +(defface sr-active-path-face + '((t (:background "#ace6ac" :foreground "yellow" :bold t :height 120))) + "Face of the directory path in the active pane" + :group 'sunrise) + +(defface sr-passive-path-face + '((t (:background "white" :foreground "lightgray" :bold t :height 120))) + "Face of the directory path in the passive pane" + :group 'sunrise) + +(defface sr-highlight-path-face + '((t (:background "yellow" :foreground "#ace6ac" :bold t :height 120))) + "Face of the directory path on mouse hover" + :group 'sunrise) + +(defface sr-clex-hotchar-face + '((t (:foreground "red" :bold t))) + "Face of the hot character (%) in CLEX mode. Indicates that a CLEX +substitution may be about to happen." + :group 'sunrise) + +;;; ============================================================================ +;;; This is the core of Sunrise: the main idea is to apply sr-mode only inside +;;; Sunrise buffers while keeping all of dired-mode untouched. + +(define-derived-mode sr-mode dired-mode "Sunrise Commander" + "Two-pane file manager for Emacs based on Dired and inspired by MC. The + following keybindings are available: + + / ............. go to directory + p, n .......... move cursor up/down + M-p, M-n ...... move cursor up/down in passive pane + U ............. go to parent directory + M-U ........... go to parent directory in passive pane + Tab ........... switch to other pane + C-Tab.......... switch to viewer window + C-c Tab ....... switch to viewer window (console compatible) + Return ........ visit selected file/directory + M-Return ...... visit selected file/directory in passive pane + C-c Return .... visit selected in passive pane (console compatible) + o,v ........... quick visit selected file (scroll with C-M-v, C-M-S-v) + b ............. visit selected file/directory in default browser + C-u o, C-u v .. kill quick-viewed buffer (restores normal scrolling) + + + ............. create new directory + C ............. copy marked (or current) files and directories + R ............. rename marked (or current) files and directories + S ............. soft-link selected file/directory to passive pane + Y ............. do relative soft-link of selected file in passive pane + H ............. hard-link selected file to passive pane + M-C ........... copy (using traditional dired-do-copy) + M-R ........... rename (using traditional dired-do-rename) + M-S............ soft-link (using traditional dired-do-symlink) + M-Y............ do relative soft-link (with traditional dired-do-relsymlink) + M-H............ hard-link selected file/directory to passive pane + D ............. delete marked (or current) files and directories + + M-a ........... move to beginning of current directory + M-e ........... move to end of current directory + M-y ........... go to previous directory in history + M-u ........... go to next directory in history + + g ............. refresh pane + s ............. change sorting order or files (name/size/time/extension) + C-o ........... show/hide hidden files (requires dired-omit-mode) + C-Backspace ... hide/show file attributes in pane + C-c Backspace . hide/show file attributes in pane (console compatible) + M-l ........... truncate/continue long lines in pane + C-c C-w ....... browse directory tree using w3m + + M-t ........... transpose panes + M-o ........... synchronize panes + C-c C-s ....... change panes layout (vertical/horizontal/top-only) + C-c C-z ....... enable/disable synchronized navigation + + C-= ........... smart compare files (ediff) + C-c = ......... smart compare files (console compatible) + = ............. fast smart compare files (plain diff) + C-M-= ......... compare directories + C-x = ......... compare directories (console compatible) + + C-c C-f ....... execute find-dired in Sunrise VIRTUAL mode + C-c C-n ....... execute find-name-dired in Sunrise VIRTUAL mode + C-c C-g ....... execute find-grep-dired in Sunrise VIRTUAL mode + C-c C-l ....... execute locate in Sunrise VIRTUAL mode + C-c C-r ....... browse list of recently visited files (requires recentf) + C-c C-c ....... [after find, locate or recent] dismiss virtual buffer + ; ............. follow file (go to same directory as selected file) + M-; ........... follow file in passive pane + + C-> ........... save named checkpoint (a.k.a. \"bookmark panes\") + C-c > ......... save named checkpoint (console compatible) + C-. ........ restore named checkpoint + C-c . ........ restore named checkpoint + + C-x C-q ....... put pane in Editable Dired mode (commit with C-c C-c) + @! ............ fast backup files (but not dirs!), each to [filename].bak + + C-c t ......... open terminal in current directory + q ............. quit Sunrise Commander, restore previous window setup + M-q ........... quit Sunrise Commander, don't restore previous windows + +Additionally, if you activate the mc-compatible keybindings (by invoking the +sunrise-mc-keys function) you'll get the following ones: + + F2 ............ go to directory + F3 ............ quick visit selected file + F4 ............ visit selected file + F5 ............ copy marked (or current) files and directories + F6 ............ rename marked (or current) files and directories + F7 ............ create new directory + F8 ............ delete marked (or current) files and directories + F10 ........... quit Sunrise Commander + Insert ........ mark file + C-PgUp ........ go to parent directory + +Any other dired keybinding (not overridden by any of the above) can be used in +Sunrise, like G for changing group, M for changing mode and so on. + +Some more bindings are provided for terminals in line mode, most useful after +opening a terminal in the viewer window (with C-c t): + + (these two are only for external shells - bash, ksh, etc. not for eshell) + C-c C-j ....... put terminal in line mode + C-c C-k ....... put terminal back in char mode + + M-<up>, M-P ... move cursor up in active pane + M-<down>, M-N . move cursor down in active pane + M-Return ...... visit selected file/directory in active pane + M-U ........... go to parent directory in active pane + M-M ........... mark selected file/directory in active pane + M-Backspace ... unmark previous file/directory in active pane + C-Tab ......... switch focus to active pane + +In a terminal in line mode the following substitutions are also performed +automatically: + + %f - expands to the currently selected file in the left pane + %F - expands to the currently selected file in the right pane + %m - expands to the list of all marked files in the left pane + %M - expands to the list of all marked files in the right pane + %d - expands to the current directory in the left pane + %D - expands to the current directory in the right pane + %% - inserts a single % sign. +" + :group 'sunrise + (set-keymap-parent sr-mode-map dired-mode-map) + + (make-local-variable 'dired-recursive-deletes) + (setq dired-recursive-deletes 'top) + + (make-local-variable 'truncate-partial-width-windows) + (setq truncate-partial-width-windows t) +) + +(define-derived-mode sr-virtual-mode dired-virtual-mode "Sunrise VIRTUAL" + "Sunrise Commander Virtual Mode. Useful for reusing find and locate results." + :group 'sunrise + (set-keymap-parent sr-virtual-mode-map sr-mode-map) + (sr-highlight) + (hl-line-mode 1) + (define-key sr-virtual-mode-map "g" nil) + (define-key sr-virtual-mode-map "\C-x\C-q" 'toggle-read-only) + (define-key sr-virtual-mode-map "\C-c\C-c" 'sr-virtual-dismiss)) + +(defun sr-virtual-dismiss () + "Restores normal view of pane in Sunrise VIRTUAL mode." + (interactive) + (if (equalp major-mode 'sr-virtual-mode) + (progn + (sr-unhide-attributes) + (sr-goto-dir dired-directory)))) + +(defmacro sr-within (dir form) + "Puts the given form in Sunrise context" + (list 'progn + (list 'setq 'sr-dired-directory + (list 'file-name-as-directory + (list 'abbreviate-file-name dir))) + (list 'ad-activate (list 'quote 'dired-find-buffer-nocreate)) + form + (list 'ad-deactivate (list 'quote 'dired-find-buffer-nocreate)) + (list 'setq 'sr-dired-directory ""))) + +(defun sr-dired-mode () + "Sets Sunrise mode in every Dired buffer opened in Sunrise (called in hook)" + (if (string= (expand-file-name sr-dired-directory) + (expand-file-name dired-directory)) + (let ((dired-listing-switches dired-listing-switches)) + (if (null (string-match "^/ftp:" dired-directory)) + (setq dired-listing-switches sr-listing-switches)) + (sr-mode) + (dired-unadvertise dired-directory)))) +(add-hook 'dired-before-readin-hook 'sr-dired-mode) + +;; This is a hack to avoid some dired mode quirks: +(defadvice dired-find-buffer-nocreate + (before sr-advice-findbuffer (dirname &optional mode)) + (if (string= sr-dired-directory dirname) + (setq mode 'sr-mode))) + +;; Handles panes opened from bookmarks in Sunrise: +(defadvice bookmark-jump + (around sr-advice-bookmark-jump (str)) + (if (memq major-mode '(sr-mode sr-virtual-mode)) + (progn + (setq sr-dired-directory (bookmark-get-filename str)) + ad-do-it + (setq sr-dired-directory "") + (hl-line-mode) + (sr-highlight) + (sr-keep-buffer)) + ad-do-it)) +(list 'ad-activate (quote 'bookmark-jump)) + +;; Tweaks the target directory guessing mechanism: +(defadvice dired-dwim-target-directory + (around sr-advice-dwim-target ()) + (if sr-running + (setq ad-return-value sr-other-directory) + ad-do-it)) +(ad-activate 'dired-dwim-target-directory) + +;;; ============================================================================ +;;; Sunrise Commander keybindings: + +(define-key sr-mode-map "\C-m" 'sr-advertised-find-file) +(define-key sr-mode-map "o" 'sr-quick-view) +(define-key sr-mode-map "v" 'sr-quick-view) +(define-key sr-mode-map "/" 'sr-goto-dir) +(define-key sr-mode-map "U" 'sr-dired-prev-subdir) +(define-key sr-mode-map "\M-y" 'sr-history-prev) +(define-key sr-mode-map "\M-u" 'sr-history-next) +(define-key sr-mode-map "\C-c>" 'sr-checkpoint-save) +(define-key sr-mode-map "\C-c." 'sr-checkpoint-restore) +(define-key sr-mode-map "\t" 'sr-change-window) +(define-key sr-mode-map "\C-c\t" 'sr-select-viewer-window) +(define-key sr-mode-map "\M-a" 'sr-beginning-of-buffer) +(define-key sr-mode-map "\M-e" 'sr-end-of-buffer) +(define-key sr-mode-map "\C-c\C-s" 'sr-split-toggle) +(define-key sr-mode-map "\M-t" 'sr-transpose-panes) +(define-key sr-mode-map "\M-o" 'sr-synchronize-panes) +(define-key sr-mode-map "\C-o" 'sr-omit-mode) +(define-key sr-mode-map "b" 'sr-browse-file) +(define-key sr-mode-map "\C-c\C-w" 'sr-browse-pane) +(define-key sr-mode-map "g" 'sr-revert-buffer) +(define-key sr-mode-map "\C-c\d" 'sr-toggle-attributes) +(define-key sr-mode-map "\M-l" 'sr-toggle-truncate-lines) +(define-key sr-mode-map "s" 'sr-interactive-sort) +(define-key sr-mode-map "\C-c\C-z" 'sr-sync) + +(define-key sr-mode-map "C" 'sr-do-copy) +(define-key sr-mode-map "R" 'sr-do-rename) +(define-key sr-mode-map "S" 'sr-do-symlink) +(define-key sr-mode-map "Y" 'sr-do-relsymlink) +(define-key sr-mode-map "H" 'sr-do-hardlink) +(define-key sr-mode-map "\M-C" 'dired-do-copy) +(define-key sr-mode-map "\M-R" 'dired-do-rename) +(define-key sr-mode-map "\M-S" 'dired-do-symlink) +(define-key sr-mode-map "\M-Y" 'dired-do-relsymlink) +(define-key sr-mode-map "\M-H" 'dired-do-hardlink) +(define-key sr-mode-map "\C-x\C-q" 'sr-editable-pane) +(define-key sr-mode-map "@" 'sr-fast-backup-files) + +(define-key sr-mode-map "=" 'sr-diff) +(define-key sr-mode-map "\C-c=" 'sr-ediff) +(define-key sr-mode-map "\C-x=" 'sr-compare-dirs) + +(define-key sr-mode-map "\C-c\C-f" 'sr-find) +(define-key sr-mode-map "\C-c\C-n" 'sr-find-name) +(define-key sr-mode-map "\C-c\C-g" 'sr-find-grep) +(define-key sr-mode-map "\C-c\C-l" 'sr-locate) +(define-key sr-mode-map "\C-c\C-r" 'sr-recent-files) +(define-key sr-mode-map "\C-c\C-d" 'sr-recent-directories) +(define-key sr-mode-map "\C-c\C-v" 'sr-pure-virtual) +(define-key sr-mode-map ";" 'sr-follow-file) +(define-key sr-mode-map "Q" 'sr-do-query-replace-regexp) +(define-key sr-mode-map "F" 'sr-do-find-marked-files) +(define-key sr-mode-map "\C-x\C-f" 'sr-find-file) + +(define-key sr-mode-map "\M-n" 'sr-next-line-other) +(define-key sr-mode-map [M-down] 'sr-next-line-other) +(define-key sr-mode-map [A-down] 'sr-next-line-other) +(define-key sr-mode-map "\M-p" 'sr-prev-line-other) +(define-key sr-mode-map [M-up] 'sr-prev-line-other) +(define-key sr-mode-map [A-up] 'sr-prev-line-other) +(define-key sr-mode-map "\M-\C-m" 'sr-advertised-find-file-other) +(define-key sr-mode-map "\C-c\C-m" 'sr-advertised-find-file-other) +(define-key sr-mode-map "\M-U" 'sr-prev-subdir-other) +(define-key sr-mode-map "\M-;" 'sr-follow-file-other) + +(define-key sr-mode-map "\C-ct" 'sr-term) +(define-key sr-mode-map "q" 'keyboard-escape-quit) +(define-key sr-mode-map "\M-q" (lambda () (interactive) (sr-quit t))) +(define-key sr-mode-map "h" 'sr-describe-mode) + +;;(define-key sr-mode-map [mouse-1] 'sr-advertised-find-file) +(define-key sr-mode-map [mouse-2] (lambda () + (interactive) + (call-interactively 'mouse-set-point) + (sr-advertised-find-file))) +(define-key sr-mode-map [follow-link] 'mouse-face) + +(if window-system + (progn + (define-key sr-mode-map [(control >)] 'sr-checkpoint-save) + (define-key sr-mode-map [(control .)] 'sr-checkpoint-restore) + (define-key sr-mode-map [(control tab)] 'sr-select-viewer-window) + (define-key sr-mode-map [(control backspace)] 'sr-toggle-attributes) + (define-key sr-mode-map [(control ?\=)] 'sr-ediff) + (define-key sr-mode-map [(control meta ?\=)] 'sr-compare-dirs))) + +(defun sunrise-mc-keys () + "Binds the function keys F2 to F10 the traditional MC way" + (interactive) + (define-key sr-mode-map [(f2)] 'sr-goto-dir) + (define-key sr-mode-map [(f3)] 'sr-quick-view) + (define-key sr-mode-map [(f4)] 'sr-advertised-find-file) + (define-key sr-mode-map [(f5)] 'sr-do-copy) + (define-key sr-mode-map [(f6)] 'sr-do-rename) + (define-key sr-mode-map [(f7)] 'dired-create-directory) + (define-key sr-mode-map [(f8)] 'dired-do-delete) + (define-key sr-mode-map [(f10)] 'keyboard-escape-quit) + (define-key sr-mode-map [(insert)] 'dired-mark) + (define-key sr-mode-map [(control prior)] 'sr-dired-prev-subdir)) + +;;; ============================================================================ +;;; Initialization and finalization functions: + +(defun sunrise (&optional left-directory right-directory filename) + "Starts the Sunrise Commander. If the param `left-directory' is given the left + window will display this directory (the same for `right-directory'). + Specifying nil for any of these values uses the default, ie. home." + (interactive) + (message "Starting Sunrise Commander...") + + (if (not sr-running) + (progn + (catch 'exit + + (if left-directory + (setq sr-left-directory left-directory)) + + (if right-directory + (setq sr-right-directory right-directory)) + + (setq sr-running t) + (setq sr-restore-buffer (current-buffer)) + (setq sr-prior-window-configuration (current-window-configuration)) + (sr-setup-windows) + (if filename + (sr-focus-filename (replace-regexp-in-string ".*/" "" filename))) + (message sr-start-message) + (recursive-edit)) + (sr-quit)) + (progn + (sr-quit) + (message "All life leaps out to greet the light...") + (exit-recursive-edit)))) + +(defun sunrise-cd () + "Run Sunrise but give it the current directory to use." + (interactive) + (if (not sr-running) + (let((target-directory default-directory) + (target-file (buffer-file-name))) + (if (equal sr-selected-window 'left) + (progn + (if (buffer-live-p sr-left-buffer) + (kill-buffer sr-left-buffer)) + (sunrise target-directory sr-right-directory target-file)) + (progn + (if (buffer-live-p sr-right-buffer) + (kill-buffer sr-right-buffer)) + (sunrise sr-left-directory target-directory target-file))))) + (progn + (sr-quit t) + (message "Hast thou a charm to stay the morning-star in his deep course?") + (exit-recursive-edit))) + +(defun sr-dired (directory) + "Visits the given directory (or file) in sr-mode" + (interactive + (list + (read-file-name "Change directory (file or pattern): " nil nil nil))) + + (if (and (file-exists-p directory) + (file-readable-p directory)) + (if (file-directory-p directory) + (sr-goto-dir directory) + (progn + (sr-quit) + (exit-recursive-edit))))) + +;;; ============================================================================ +;;; Window management functions: + +(eval-when-compile + (defun sr-symbol (name context) + "Helper function for macro sr-setup-pane." + (intern (concat "sr-" name "-" (symbol-name context))))) + +(defmacro sr-setup-pane (name) + "Helper macro for function sr-setup-windows." + (list 'let (list (list 'sr-selected-window (list 'intern name))) + (list 'setq (sr-symbol name 'window) (list 'selected-window)) + (list 'if (list 'buffer-live-p (sr-symbol name 'buffer)) + (list 'progn + (list 'switch-to-buffer (sr-symbol name 'buffer)) + (list 'setq (sr-symbol name 'directory) 'dired-directory)) + (list 'sr-dired (sr-symbol name 'directory))))) + +(defun sr-setup-windows() + "Setup the Sunrise window configuration (two windows in sr-mode.)" + + ;;get rid of all windows except one (not any of the panes!) + (sr-select-viewer-window) + (delete-other-windows) + + ;;now create the viewer window + (split-window (selected-window) (* 2 (/ (window-height) 3))) + + (cond + ((equal sr-window-split-style 'horizontal) (split-window-horizontally)) + ((equal sr-window-split-style 'vertical) (split-window-vertically)) + ((equal sr-window-split-style 'top) (split-window-vertically)) + (t (error "ERROR: Don't know how to split this window: %s" sr-window-split-style))) + + ;;setup sunrise on both panes + (sr-setup-pane "left") + (other-window 1) + (sr-setup-pane "right") + + ;;select the correct window + (sr-select-window sr-selected-window) + + (if (equal sr-window-split-style 'top) + (delete-window sr-right-window) + (sr-force-passive-highlight)) + (run-hooks 'sr-start-hook)) + +(defun sr-lock-window (frame) + "Resize the left Sunrise pane to have the \"right\" size." + (if (and sr-running + sr-windows-locked + (not sr-ediff-on) + (window-live-p sr-left-window)) + (save-selected-window + (select-window sr-left-window) + (let* ((my-style-factor (if (equal sr-window-split-style 'horizontal) 2 1)) + (my-pane-height (* my-style-factor (/ (frame-height) 3))) + (my-delta (- my-pane-height (window-height)))) + (enlarge-window my-delta))))) + +;; This keeps the size of the Sunrise panes constant: +(add-hook 'window-size-change-functions 'sr-lock-window) + +(defun sr-select-window (window) + "Select/highlight the given sr window (right or left)." + (hl-line-mode 0) + (if (eq window 'left) + (progn + (select-window sr-left-window) + (setq sr-selected-window 'left)) + (progn + (select-window sr-right-window) + (setq sr-selected-window 'right))) + (hl-line-mode 1) + (sr-highlight)) + +(defun sr-select-viewer-window () + "Tries to select a window that is not a sr pane" + (interactive) + (dotimes (times 2) + (if (memq (selected-window) (list sr-left-window sr-right-window)) + (other-window 1)))) + +(defun sr-highlight() + "Sets up the path line in the current buffer." + (if (memq major-mode '(sr-mode sr-virtual-mode)) + (save-excursion + (goto-char (point-min)) + (sr-hide-avfs-root) + (if window-system + (sr-graphical-highlight))))) + +(defun sr-graphical-highlight () + "Sets up the graphical path line in the current buffer (fancy fonts and + clickable path)" + + ;;update the last overlay + (if sr-current-window-overlay + (overlay-put sr-current-window-overlay 'face 'sr-passive-path-face)) + + (let (begin end) + ;;determine begining and end + (search-forward-regexp "\\S " nil t) + (setq begin (1- (point))) + (end-of-line) + (setq end (1- (point))) + + ;;setup overlay + (setq sr-current-window-overlay (make-overlay begin end)) + (overlay-put sr-current-window-overlay 'face 'sr-active-path-face) + (overlay-put sr-current-window-overlay 'window (selected-window)) + + ;;make path line clickable + (toggle-read-only -1) + (add-text-properties + begin + end + '(mouse-face sr-highlight-path-face + help-echo "mouse-2: move up") + nil) + (toggle-read-only 1))) + +(defun sr-hide-avfs-root () + "Hides the AVFS virtual filesystem root (if any) on the path line." + (if (not (null sr-avfs-root)) + (let ((next (search-forward (concat sr-avfs-root "/") nil t)) + (len (length sr-avfs-root)) + (overlay)) + (while (not (null next)) + (progn + (setq overlay (make-overlay (- next len) next)) + (overlay-put overlay 'invisible t) + (overlay-put overlay 'intangible t) + (setq next (search-forward sr-avfs-root nil t)))) + (goto-char (point-min))))) + +(defun sr-force-passive-highlight () + (if (equal sr-window-split-style 'top) + (sr-highlight) + (progn + (sr-change-window) + (sr-change-window)))) + +(defun sr-quit (&optional norestore) + "Quit Sunrise and restore emacs to previous operation." + (interactive) + (if sr-running + (progn + (setq sr-running nil) + (sr-save-directories) + + (if norestore + (progn + (sr-select-viewer-window) + (delete-other-windows)) + (progn + ;;restore previous window setup + (set-window-configuration sr-prior-window-configuration) + (if (buffer-live-p sr-restore-buffer) + (set-buffer sr-restore-buffer)))) + + ;;NOTE: never exit the recursive edit here. functions should do this + ;;themselves + (toggle-read-only -1) + (run-hooks 'sr-quit-hook)))) + +(defun sr-save-directories() + "Save the current directories in the sr buffer to use the next time sr starts + up." + ;;update directory variables.. + (if (window-live-p sr-left-window) + (progn + (set-buffer (window-buffer sr-left-window)) + (if (equal major-mode 'sr-mode) + (progn + (setq sr-left-directory dired-directory) + (setq sr-left-buffer (window-buffer sr-left-window)))) + (bury-buffer))) + + (if (window-live-p sr-right-window) + (progn + (set-buffer (window-buffer sr-right-window)) + (if (equal major-mode 'sr-mode) + (progn + (setq sr-right-directory dired-directory) + (setq sr-right-buffer (window-buffer sr-right-window)))) + (bury-buffer)))) + +;;; ============================================================================ +;;; File system navigation functions: + +(defun sr-advertised-find-file (&optional filename) + "Calls dired-advertised-find-file but also perform additional actions" + (interactive) + (save-excursion + (if (null filename) + (if (eq 1 (line-number-at-pos)) ;; <- Click or Enter on path line + (let* ((eol (save-excursion (end-of-line) (point))) + (slash (re-search-forward "/" eol t))) + (if slash + (setq filename (buffer-substring (+ 2 (point-min)) slash)) + (setq filename dired-directory))) + (setq filename (expand-file-name (dired-get-filename nil t))))) + (if filename + (if (file-directory-p filename) + (progn + (setq filename (file-name-as-directory filename)) + (if (string= filename (expand-file-name "../")) + (sr-dired-prev-subdir) + (sr-goto-dir filename))) + (sr-find-file filename))))) + +(defun sr-find-file (filename &optional wildcards) + "Determines the proper way of handling a file. If the file is a compressed + archive and AVFS has been activated, first tries to display it as a catalogue + in the VFS, otherwise just visits the file." + (interactive (find-file-read-args "Find file: " nil)) + (if (not (null sr-avfs-root)) + (let ((mode (assoc-default filename auto-mode-alist 'string-match))) + (if (or (eq 'archive-mode mode) + (eq 'tar-mode mode) + (and (listp mode) (eq 'jka-compr (second mode))) + (eq 'avfs-mode mode)) + (let ((vfile (sr-avfs-dir filename))) + (if vfile + (progn + (sr-goto-dir vfile) + (setq filename nil))))) + (if (eq 'sr-virtual-mode mode) + (progn + (find-file filename) + (sr-history-push filename) + (sr-keep-buffer) + (setq filename nil))))) + + (if (null filename) ;;the file is a virtual directory: + (sr-keep-buffer) + (progn ;;the file is a regular file: + (sr-quit) + (condition-case description + (find-file filename wildcards) + (error (message (second description)))) + (exit-recursive-edit)))) + +(defun sr-avfs-dir (filename) + "Returns the virtual path for accessing the given file through AVFS, or nil if + AVFS cannot manage this kind of file." + (let* ((handler (assoc-default filename sr-avfs-handlers-alist 'string-match)) + (vdir (concat sr-avfs-root filename handler))) + (if (file-directory-p vdir) vdir nil))) + +(defun sr-goto-dir (dir) + "Changes the current directory in the active pane to the given one" + (interactive "DChange directory (file or pattern): ") + (if (and (not (null sr-avfs-root)) + (null (posix-string-match "#" dir))) + (setq dir (replace-regexp-in-string sr-avfs-root "" dir))) + + ;; Detect spontaneous windows changes (using the mouse): + (if (not (string= sr-this-directory dired-directory)) + (setq sr-other-directory sr-this-directory)) + (if (eq (selected-window) sr-left-window) + (sr-select-window 'left) + (sr-select-window 'right)) + + (hl-line-mode 0) + (sr-within dir + (if (or (not dired-directory) + (string= sr-other-directory dired-directory)) + (dired dir) + (find-alternate-file dir))) + (setq sr-this-directory dired-directory) + (sr-keep-buffer) + (sr-history-push dired-directory) + (sr-highlight) + (sr-beginning-of-buffer) + (hl-line-mode 1)) + +(defun sr-dired-prev-subdir () + "Go to the previous subdirectory." + (interactive) + (if (not (string= dired-directory "/")) + (let ((here (sr-directory-name-proper (expand-file-name dired-directory)))) + (setq here (replace-regexp-in-string "#.*/?$" "" here)) + (sr-goto-dir (expand-file-name "../")) + (sr-focus-filename here)) + (error "ERROR: Already at root"))) + +(defun sr-follow-file (&optional target-path) + "Go to the same directory where the selected file is. Very useful inside + Sunrise VIRTUAL buffers." + (interactive) + (if (null target-path) + (setq target-path (dired-get-filename nil t))) + + (let ((target-dir (file-name-directory target-path)) + (target-symlink (file-symlink-p target-path)) + (target-file)) + + ;; if the target is a symlink and there's nothing more interesting to do + ;; then follow the symlink: + (if (and target-symlink + (string= target-dir (dired-current-directory)) + (not (eq major-mode 'sr-virtual-mode))) + (progn + (setq target-path target-symlink) + (setq target-dir (file-name-directory target-symlink)))) + + (setq target-file (file-name-nondirectory target-path)) + + (if target-dir ;; <-- nil in symlinks to other files in same directory: + (sr-goto-dir target-dir)) + (sr-focus-filename target-file))) + +(defun sr-history-push (element) + "Pushes a new path into the history ring of the current pane" + (unless (null element) + (let* ((hist (get sr-selected-window 'history)) + (len (length hist))) + (if (>= len sr-history-length) + (nbutlast hist (- len sr-history-length))) + (if (< 1 (length element)) + (setq element (replace-regexp-in-string "/?$" "" element))) + (setq hist (delete element hist)) + (push element hist) + (put sr-selected-window 'history hist)))) + +(defun sr-history-next () + "Changes the current directory to the next one (if any) in the history list of + the current pane" + (interactive) + (sr-history-move 'sr-history-unwind)) + +(defun sr-history-prev () + "Changes the current directory to the previous one (if any) in the history + list of the current pane" + (interactive) + (sr-history-move 'sr-history-wind)) + +(defun sr-history-move (fun) + "Moves the current pane backwards and forwards through its history of visited + directories, depending on the given direction function (wind or unwind)" + (let* ((hist (get sr-selected-window 'history)) + (hist (apply fun (list hist))) + (item (car hist))) + (if item + (progn + (put sr-selected-window 'history hist) + (cond ((file-directory-p item) (sr-goto-dir item)) + ((file-exists-p item) (sr-find-file item)) + (t (ignore))) + )))) + +(defmacro sr-pick-file (item hist pick-next) + "Helper macro for implementing sr-history-wind and sr-history-unwind. Executes + pick-next until item becomes a valid file or hist runs out of elements." + `(while (and (> (length ,hist) 0) + (or (null ,item) (not (file-exists-p ,item)))) + ,pick-next)) + +(defun sr-history-wind (hist) + "Rotates clockwise the elements in the given history ring, ie. takes the first + element and puts it at the end of the list. Additionally discards all elements + that did not represent valid files when the function was executed." + (let ((item) (head)) + (sr-pick-file item hist (setq item (pop hist))) + (setq head (car hist)) + (sr-pick-file head hist (progn (pop hist) (setq head (car hist)))) + (if item + (append hist (list item)) + hist))) + +(defun sr-history-unwind (hist) + "Rotates counter-clockwise the elements inthe given history ring, ie. takes + the last element and puts it at the beginning of the list. Additionally + discards all elements that did not represent valid files when the function was + executed. (WARNING: uses nbutlast, destroys its own input list)." + (let (item) + (sr-pick-file item hist (progn + (setq item (car (last hist))) + (setq hist (nbutlast hist)))) + (if item + (cons item hist) + hist))) + +(defun sr-checkpoint-save (name) + "Allows to give a name to the current directories in the Sunrise panes, so + they can be restored later." + (interactive "sCheckpoint name to save? ") + (let ((my-window (selected-window)) + (my-cell)) + (setq my-cell (assoc-string name sr-checkpoint-registry)) + (select-window sr-left-window) + (setq sr-left-directory dired-directory) + (select-window sr-right-window) + (setq sr-right-directory dired-directory) + (select-window my-window) + (if (null my-cell) + (setq sr-checkpoint-registry + (acons name + (list sr-left-directory sr-right-directory) + sr-checkpoint-registry)) + (setcdr my-cell (list sr-left-directory sr-right-directory))) + (message (concat "Checkpoint \"" name "\" saved")))) + +(defun sr-checkpoint-restore (name) + "Allows to restore a previously saved checkpoint." + (interactive "sCheckpoint name to restore? " ) + (let ((cp-list (assoc-string name sr-checkpoint-registry)) + (my-window)) + (if (null cp-list) + (error (concat "No such checkpoint: " name))) + (setq my-window (selected-window)) + (select-window sr-left-window) + (sr-goto-dir (second cp-list)) + (select-window sr-right-window) + (sr-goto-dir (third cp-list)) + (select-window my-window) + (sr-force-passive-highlight))) + +(defun sr-do-find-marked-files (&optional noselect) + "Sunrise replacement for dired-do-marked-files." + (interactive "P") + (unwind-protect + (let ((files (dired-get-marked-files))) + (if (null noselect) (sr-quit)) + (dired-simultaneous-find-file files noselect)) + (if (null noselect) (exit-recursive-edit)))) + +;;; ============================================================================ +;;; Graphical interface interaction functions: + +(defun sr-change-window() + "Change to the other sr buffer" + (interactive) + (if (not (equal sr-window-split-style 'top)) + (progn + (setq sr-this-directory sr-other-directory) + (setq sr-other-directory dired-directory) + (if (equal (selected-window) sr-right-window) + (sr-select-window 'left) + (sr-select-window 'right))))) + +(defun sr-beginning-of-buffer() + "Go to the first directory/file in dired." + (interactive) + (goto-char (point-min)) + (if (re-search-forward directory-listing-before-filename-regexp nil t) + (while (looking-at "\.\.?/?$") + (dired-next-line 1)))) + +(defun sr-end-of-buffer() + "Go to the last directory/file in dired." + (interactive) + (goto-char (point-max)) + (re-search-backward directory-listing-before-filename-regexp) + (dired-next-line 0)) + +(defun sr-focus-filename (filename) + "Tries to select the given file name in the current buffer." + (let ((expr filename)) + (if (file-directory-p filename) + (progn + (setq expr (replace-regexp-in-string "/$" "" expr)) + (setq expr (concat (regexp-quote expr) "\\(?:/\\|$\\)")))) + (setq expr (concat "[0-9] +" expr)) + (beginning-of-line) + (if (null (re-search-forward expr nil t)) + (if (null (re-search-backward expr nil t)) + (error (concat "ERROR: unable to find " filename + " in current directory"))))) + (beginning-of-line) + (re-search-forward directory-listing-before-filename-regexp nil t)) + +(defun sr-split-toggle() + "Changes sunrise windows layout from horizontal to vertical to top and so on." + (interactive) + (cond + ((equal sr-window-split-style 'horizontal) (sr-split-setup 'vertical)) + ((equal sr-window-split-style 'vertical) (sr-split-setup 'top)) + ((equal sr-window-split-style 'top) (sr-split-setup 'horizontal)) + (t (sr-split-setup 'horizontal)))) + +(defun sr-split-setup(split-type) + (setq sr-window-split-style split-type) + (if sr-running + (if (equal sr-window-split-style 'top) + (delete-window sr-right-window) + (sr-setup-windows)) + (message "Split is now %s." (symbol-name split-type)))) + +(defun sr-transpose-panes () + "Changes the order of the panes" + (interactive) + (if (not (equal dired-directory sr-other-directory)) + (let ((this dired-directory)) + (sr-dired sr-other-directory) + (sr-change-window) + (sr-dired this) + (sr-change-window)) + nil)) + +(defun sr-synchronize-panes () + "Changes the directory in the other pane to that in the current one" + (interactive) + (let ((target dired-directory)) + (sr-change-window) + (sr-goto-dir target) + (sr-change-window))) + +(defun sr-browse-pane () + "Browses the directory in the active pane." + (interactive) + (if (not (featurep 'browse-url)) + (error "ERROR: Feature browse-url not available!") + (let ((url (concat "file://" (expand-file-name dired-directory)))) + (message "Browsing directory %s " dired-directory) + (if (featurep 'w3m) + (eval '(w3m-goto-url url)) + (browse-url url))))) + +(defun sr-browse-file (&optional file) + "Displays the selected file in the default web browser" + (interactive) + (if (not (featurep 'browse-url)) + (error "ERROR: Feature browse-url not available!") + (progn + (if (null file) + (setq file (dired-get-filename))) + (if file + (progn + (message "Browsing \"%s\" in web browser" file) + (browse-url (concat "file://" file))))))) + +(defun sr-revert-buffer () + "Refreshes the current pane" + (interactive) + (revert-buffer) + (sr-force-passive-highlight)) + +(defun sr-omit-mode () + "Toggles dired-omit-mode" + (interactive) + (dired-omit-mode) + (sr-highlight)) + +(defun sr-quick-view (&optional arg) + "Opens the selected file on the viewer window without selecting it. Kills + any other buffer opened previously the same way. With optional argument + kills the last quick view buffer without opening a new one." + (interactive "P") + (if arg + (sr-kill-quick-view) + (let ((home (selected-window))) + (if (buffer-live-p other-window-scroll-buffer) + (kill-buffer other-window-scroll-buffer)) + (dired-find-file-other-window) + (sr-scrollable-viewer (current-buffer)) + (select-window home)))) + +(defun sr-kill-quick-view () + "Kills the last buffer opened using quick view (if any)." + (let ((buf other-window-scroll-buffer)) + (if (and (buffer-live-p buf) + (y-or-n-p (concat "Kill buffer " (buffer-name buf) " ? "))) + (kill-buffer buf)))) + +;; These clean up after a quick view: +(add-hook 'sr-quit-hook (lambda () (setq other-window-scroll-buffer nil))) +(add-hook 'kill-buffer-hook + (lambda () + (if (eq (current-buffer) other-window-scroll-buffer) + (setq other-window-scroll-buffer nil)))) + +(defun sr-hide-attributes () + "Hides the attributes of all files in the active pane." + (save-excursion + (sr-unhide-attributes) + (goto-char (point-min)) + (let ((next (re-search-forward directory-listing-before-filename-regexp nil t)) + (attr-list nil) + (overlay nil)) + (while (not (null next)) + (beginning-of-line) + (setq overlay (make-overlay (+ 2 (point)) (- next 1))) + (setq attr-list (cons overlay attr-list)) + (overlay-put overlay 'invisible t) + (overlay-put overlay 'intangible t) + (next-line) + (setq next (re-search-forward directory-listing-before-filename-regexp nil t))) + (put sr-selected-window 'hidden-attrs attr-list)))) + +(defun sr-unhide-attributes () + "Shows the (hidden) attributes of all files in the active pane." + (let ((attr-list (get sr-selected-window 'hidden-attrs))) + (if (not (null attr-list)) + (progn + (mapcar 'delete-overlay attr-list) + (put sr-selected-window 'hidden-attrs nil))))) +(add-hook 'dired-after-readin-hook 'sr-unhide-attributes) + +(defun sr-toggle-attributes () + "Hides/Shows the attributes of all files in the active pane." + (interactive) + (if (null (get sr-selected-window 'hidden-attrs)) + (sr-hide-attributes) + (sr-unhide-attributes))) + +(defun sr-toggle-truncate-lines () + "Enables/Disables truncation of long lines in the active pane." + (interactive) + (setq truncate-partial-width-windows (not truncate-partial-width-windows)) + (sr-revert-buffer) + (if truncate-partial-width-windows + (message "Sunrise: truncating long lines") + (message "Sunrise: continuing long lines"))) + +(defun sr-interactive-sort (order) + "Prompts for a new sorting order for the active pane and applies it." + (interactive "cSort by (n)ame, (s)ize, (t)ime or e(x)tension? ") + (if (>= order 97) + (setq order (- order 32))) + (cond ((eq order ?T) (sr-sort-order "TIME" "t")) + ((eq order ?S) (sr-sort-order "SIZE" "S")) + ((eq order ?X) (sr-sort-order "EXTENSION" "X")) + (t (sr-sort-order "NAME" "" )))) + +(defun sr-sort-order (label option) + "Changes the sorting order of the active pane by appending additional options + to dired-listing-switches and reverting the buffer." + (if (equalp major-mode 'sr-virtual-mode) + (sr-sort-virtual option) + (progn + (put sr-selected-window 'sorting-order label) + (let ((dired-listing-switches dired-listing-switches)) + (if (null (string-match "^/ftp:" dired-directory)) + (setq dired-listing-switches sr-listing-switches)) + (dired-sort-other (concat dired-listing-switches option) t)) + (sr-revert-buffer))) + (message (concat "Sunrise: sorting entries by " label))) + +(defun sr-sort-virtual (option) + "Manages sorting of buffers in Sunrise VIRTUAL mode. Since we cannot rely any + more on all files in the buffer existing somewhere in the filesystem, we use + the contents of the buffer itself for sorting its records, which must not only + contain all the necessary data, but also must be in a format that can be + easily sorted. See the variable sr-virtual-listing-switches for the exact + switches for ls that should be used." + (save-excursion + (goto-char (point-min)) + (re-search-forward directory-listing-before-filename-regexp nil t) + (beginning-of-line) + (let ((opt (string-to-char option)) + (beg (point)) + (end (point-max))) + (toggle-read-only -1) + (cond ((eq opt ?X) (sort-regexp-fields nil "^.*$" "[/.][^/.]+$" beg end)) + ((eq opt ?t) (sort-regexp-fields t "^.*$" "[0-9]\\{4\\}\\(-[0-9]\\{2\\}\\)\\{2\\} [0-2][0-9]:[0-5][0-9]" beg end)) + ((eq opt ?S) (sort-numeric-fields 3 beg end) (reverse-region beg end)) + (t (sort-regexp-fields nil "^.*$" "/[^/]*$" beg end))) + (toggle-read-only 1)))) + +;;; ============================================================================ +;;; Passive & synchronized navigation functions: + +(defmacro sr-in-other (form) + "Helper macro for passive & synchronized navigation." + (list 'progn + (list 'if 'sr-synchronized form) + (list 'sr-change-window) + (list 'condition-case 'description + form + (list 'error (list 'message (list 'second 'description)))) + (list 'sr-change-window))) + +(defun sr-sync () + "Toggles the Sunrise synchronized navigation feature." + (interactive) + (if sr-synchronized + (setq sr-synchronized nil) + (setq sr-synchronized t)) + (mapcar 'sr-mark-sync (list sr-left-buffer sr-right-buffer)) + (message (concat "Sync navigation is now " + (if sr-synchronized "ON" "OFF")))) + +(defun sr-mark-sync (&optional buffer) + "Changes the pretty name of the sr major mode to 'Sunrise SYNC-LOCK' when + operating in synchonized navigation mode." + (save-window-excursion + (if buffer + (switch-to-buffer buffer)) + (setq mode-name (concat "Sunrise " + (if sr-synchronized "SYNC-NAV" "Commander"))))) + +;; This advertises synchronized navigation in all new buffers: +(add-hook 'sr-mode-hook 'sr-mark-sync) + +(defun sr-next-line-other () + "Move the cursor down in the other pane" + (interactive) + (sr-in-other (dired-next-line 1))) + +(defun sr-prev-line-other () + "Move the cursor up in the other pane" + (interactive) + (sr-in-other (dired-next-line -1))) + +(defun sr-advertised-find-file-other () + "Open the file/directory selected in the other pane." + (interactive) + (if sr-synchronized + (let ((target (sr-directory-name-proper (dired-get-filename)))) + (sr-change-window) + (if (file-directory-p target) + (sr-goto-dir (expand-file-name target)) + (if (y-or-n-p "Unable to synchronize. Disable sync navigation? ") + (sr-sync))) + (sr-change-window) + (sr-advertised-find-file)) + (sr-in-other (sr-advertised-find-file)))) + +(defun sr-prev-subdir-other () + "Go to the previous subdirectory in the other pane." + (interactive) + (sr-in-other (sr-dired-prev-subdir))) + +(defun sr-follow-file-other () + "Go to the same directory where the selected file is, but in the other pane." + (interactive) + (let... [truncated message content] |
From: <yan...@us...> - 2008-07-07 21:37:57
|
Revision: 880 http://assorted.svn.sourceforge.net/assorted/?rev=880&view=rev Author: yangzhang Date: 2008-07-07 14:38:04 -0700 (Mon, 07 Jul 2008) Log Message: ----------- added last-chats Modified Paths: -------------- shell-tools/trunk/src/bash-commons/bashrc.bash Modified: shell-tools/trunk/src/bash-commons/bashrc.bash =================================================================== --- shell-tools/trunk/src/bash-commons/bashrc.bash 2008-07-07 21:37:58 UTC (rev 879) +++ shell-tools/trunk/src/bash-commons/bashrc.bash 2008-07-07 21:38:04 UTC (rev 880) @@ -584,6 +584,13 @@ return $status } +# purple chat logs from today +last-chats() { + find /home/yang/.purple/logs/ -mtime -1 | + fgrep -v .system | + fgrep "$( date +%Y-%m-%d )" +} + #function set_title() { # if [ $# -eq 0 ] ; then # eval set -- "$PWD" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-07 21:37:49
|
Revision: 879 http://assorted.svn.sourceforge.net/assorted/?rev=879&view=rev Author: yangzhang Date: 2008-07-07 14:37:58 -0700 (Mon, 07 Jul 2008) Log Message: ----------- added clear-ntfs-perms Modified Paths: -------------- shell-tools/trunk/src/bash-commons/common.bash Modified: shell-tools/trunk/src/bash-commons/common.bash =================================================================== --- shell-tools/trunk/src/bash-commons/common.bash 2008-07-07 21:37:48 UTC (rev 878) +++ shell-tools/trunk/src/bash-commons/common.bash 2008-07-07 21:37:58 UTC (rev 879) @@ -444,6 +444,21 @@ (( "$( find "$path" -perm u=rw | wc -l )" == 1 )) } +# Reading NTFS file systems (through ntfs-3g at least; don't know if this is +# inherent with NTFS in general) shows all files and directories as having +# completely set permissions (777). These stick if you move/copy the files. +# This resets the permissions. +# +# Note that this is not a panacea; there may well be files that you want to +# remain executable, or files/directories that you wish to leave +# group-/world-writeable. +clear-ntfs-perms() { + for dir in "${@:-.}" ; do + find "$dir" -type d -perm 777 -print0 | xargs -0r chmod 755 + find "$dir" -not -type d -perm 777 -print0 | xargs -0r chmod 644 + done +} + #if ! is_declared indent ; then # noindent #else This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yan...@us...> - 2008-07-07 21:37:39
|
Revision: 878 http://assorted.svn.sourceforge.net/assorted/?rev=878&view=rev Author: yangzhang Date: 2008-07-07 14:37:48 -0700 (Mon, 07 Jul 2008) Log Message: ----------- updated assorted to point to new config hostname Modified Paths: -------------- shell-tools/trunk/src/bash-commons/assorted.bash Modified: shell-tools/trunk/src/bash-commons/assorted.bash =================================================================== --- shell-tools/trunk/src/bash-commons/assorted.bash 2008-07-07 21:37:10 UTC (rev 877) +++ shell-tools/trunk/src/bash-commons/assorted.bash 2008-07-07 21:37:48 UTC (rev 878) @@ -23,7 +23,7 @@ root_site_dir="$( parent-dir named assorted )/assorted-site/trunk" || die 'could not find project root dir' : ${clean:=false} ${nodl:=false} ${webfiles:=} -prof=shell-sf +prof=sf base_web_dir=assorted/htdocs webdir=$base_web_dir/$project stagedir="$( mktemp -d )" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |