usac-kit 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1ccf42bb7e07b62beea8bb579aa95da01e07bc5a
4
+ data.tar.gz: cc16ebcbda1a29961d559d3d53c11c59694126ba
5
+ SHA512:
6
+ metadata.gz: 368ffc366d04a3704edeb100a484c37255a9a6dd85ad135425656770eb039bd972a703ea42e9c52040d2a2ee1411ef178bfd69fd6401b278463392d894c9b78d
7
+ data.tar.gz: 5b486a3a90f9c04afb5ff6b9642a436ab165517b6585dadfb8ef02ec5ac9e69e1a16b7b11e116f1001631f7277bd1b1c2bc309edb24f2eb361af17551cc171c1
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2017 Brian Cobb
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # Kit
2
+
3
+ Uniform and slim-fitting representation of USA Cycling race result tables.
4
+
5
+ ## Usage
6
+
7
+ ```ruby
8
+ client = Kit::Client.new
9
+ table = client.find(1917)
10
+ puts table.to_html
11
+ ```
data/lib/kit.rb ADDED
@@ -0,0 +1,6 @@
1
+ require "kit/client"
2
+ require "kit/table"
3
+ require "kit/version"
4
+
5
+ module Kit
6
+ end
data/lib/kit/client.rb ADDED
@@ -0,0 +1,45 @@
1
+ require 'addressable/template'
2
+ require 'http'
3
+ require 'kit/member'
4
+ require 'kit/table'
5
+
6
+ module Kit
7
+ class Client
8
+ # Creates a new +Client+
9
+ def initialize
10
+ @template = Addressable::Template.new(
11
+ 'https://legacy.usacycling.org/results/{?compid}'
12
+ )
13
+ end
14
+
15
+ # Builds a Table for the given license-holder
16
+ #
17
+ # @param license_number [Fixnum] a valid USAC License Number
18
+ #
19
+ # @return [Member] the member with the given license number
20
+ def find(license_number)
21
+ Kit::Member.from_table(table_for(license_number))
22
+ end
23
+
24
+ private
25
+
26
+ def table_for(license_number)
27
+ begin
28
+ license_number = Integer(license_number)
29
+ rescue ArgumentError
30
+ Kit::Table.new(BLANK_PAGE)
31
+ else
32
+ Kit::Table.new(raw(license_number))
33
+ end
34
+ end
35
+
36
+ def raw(license_number)
37
+ url = @template.expand(compid: Integer(license_number))
38
+
39
+ HTTP.get(url).to_s
40
+ end
41
+
42
+ BLANK_PAGE = '<!doctype html><html></html>'.freeze
43
+ private_constant :BLANK_PAGE
44
+ end
45
+ end
@@ -0,0 +1,36 @@
1
+ require 'date'
2
+
3
+ module Kit
4
+ # Parses dates as they appear in the results table
5
+ class DateParser
6
+ # Creates a new +DateParser+
7
+ def initialize
8
+ @date_format = '%m/%d/%Y'
9
+ end
10
+
11
+ # Returns the first date, if any, in the given +element+'s text
12
+ #
13
+ # @param element [#text] an element with text
14
+ #
15
+ # @return [Date] if the given +element+ contains a parseable date
16
+ # @return [nil] if the given +element+ contains no parseable dates
17
+ def parse(element)
18
+ part_with_date = element.text.split(' ').find do |date_string|
19
+ begin
20
+ string_to_date(date_string)
21
+ rescue ArgumentError
22
+ end
23
+ end
24
+
25
+ if part_with_date
26
+ string_to_date(part_with_date)
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def string_to_date(string)
33
+ Date.strptime(string, @date_format)
34
+ end
35
+ end
36
+ end
data/lib/kit/member.rb ADDED
@@ -0,0 +1,76 @@
1
+ require 'csv'
2
+ require 'kit/date_parser'
3
+ require 'kit/race'
4
+
5
+ module Kit
6
+ # An individual USA Cycling member
7
+ class Member
8
+ # Given an HTML table of races, return a +Member+ with that
9
+ # collection of races
10
+ #
11
+ # @param table [Kit::Table]
12
+ # @return [Kit::Member]
13
+ def self.from_table(table)
14
+ date_parser = DateParser.new
15
+ maybe_content = -> (element) { element.nil? ? nil : element.content }
16
+
17
+ races = table.map do |race_row, result_row|
18
+ [
19
+ result_row.css('td')[2].content,
20
+ [
21
+ race_row.css('a').first.content,
22
+ maybe_content.call(race_row.css('[title=age]').first)
23
+ ].compact.join(' '),
24
+ result_row.css('td')[0].content,
25
+ date_parser.parse(race_row),
26
+ result_row.css('td').last.content
27
+ ]
28
+ end.map do |args|
29
+ Kit::Race.new(*args)
30
+ end
31
+
32
+ new(races)
33
+ end
34
+
35
+ include Enumerable
36
+ extend Forwardable
37
+
38
+ attr_reader :races
39
+
40
+ def self.preserve_container_for(*enumerable_methods)
41
+ enumerable_methods.each do |method_name|
42
+ define_method(method_name) do |*args, &block|
43
+ Member.new(races.method(method_name).call(*args, &block))
44
+ end
45
+ end
46
+ end
47
+
48
+ private_class_method :preserve_container_for
49
+
50
+ def_delegator :@races, :each
51
+ preserve_container_for :sort_by, :reverse
52
+
53
+ # @param races [Array<Kit::Race>]
54
+ def initialize(races = [])
55
+ @races = races
56
+ end
57
+
58
+ # Returns a +Member+ with a collection of races limited to the
59
+ # given list of years.
60
+ #
61
+ # @param years [Array<Fixnum>] a list of one or more years (e.g. 2010)
62
+ # @return [Kit::Member]
63
+ def limited_to(years)
64
+ selected_races = years.reduce([]) do |races, year|
65
+ lower = Date.strptime("#{year}-01-01")
66
+ upper = Date.strptime("#{Integer(year) + 1}-01-01")
67
+
68
+ races | @races.select do |race|
69
+ race.date >= lower && race.date < upper
70
+ end
71
+ end
72
+
73
+ self.class.new(selected_races)
74
+ end
75
+ end
76
+ end
data/lib/kit/race.rb ADDED
@@ -0,0 +1,4 @@
1
+ module Kit
2
+ # Simple struct to contains discrete race data
3
+ Race = Struct.new(:member_name, :name, :result, :date, :team_name)
4
+ end
data/lib/kit/table.rb ADDED
@@ -0,0 +1,70 @@
1
+ require 'kit/date_parser'
2
+ require 'nokogiri'
3
+
4
+ module Kit
5
+ # Wraps the results table HTML. It iterates over each race-result
6
+ # pair, and exposes the table's column headings.
7
+ class Table
8
+ include Enumerable
9
+
10
+ # Creates a new +Table+
11
+ #
12
+ # @param html [String] the raw HTML which contains a results table
13
+ def initialize(html)
14
+ @html = Nokogiri::HTML(html)
15
+ @date_parser = DateParser.new
16
+ end
17
+
18
+ # Yields each race-result pair from the table
19
+ #
20
+ # @yieldparam race_row [Nokogiri::XML::Element] the row which has the race
21
+ # data
22
+ # @yieldparam result_row [Nokogiri::XML::Element] the row which has the
23
+ # result data
24
+ def each(&block)
25
+ race_rows.each { |race_row, result_row| block.call(race_row, result_row) }
26
+ end
27
+
28
+ # Returns a lightly-sanitized list of column headings
29
+ #
30
+ # @return [Array<String>]
31
+ def headings
32
+ headings_row.css('th').map { |th| th.text.scan(/\w|\s|#/).join }
33
+ end
34
+
35
+ # Returns an HTML document which only contains the table of race data
36
+ #
37
+ # @return [String]
38
+ def to_html
39
+ if race_rows.any?
40
+ content = headings_row.to_html + race_rows.flatten.map(&:to_html).join
41
+ else
42
+ content = nil
43
+ end
44
+
45
+ Nokogiri::HTML("<table>#{content}</table>").to_html
46
+ end
47
+
48
+ private
49
+
50
+ def race_rows
51
+ @_race_rows ||= @html.css('tr').select(&method(:has_date?)).map do |tr|
52
+ sibling = tr.next_sibling
53
+
54
+ until sibling.name == 'tr'
55
+ sibling = sibling.next_sibling
56
+ end
57
+
58
+ [tr, sibling]
59
+ end
60
+ end
61
+
62
+ def headings_row
63
+ @_headings_row ||= @html.css('th').first.parent
64
+ end
65
+
66
+ def has_date?(tr)
67
+ @date_parser.parse(tr)
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,3 @@
1
+ module Kit
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,37 @@
1
+ require 'kit'
2
+
3
+ describe Kit::Client do
4
+
5
+ it 'returns a table with some elements given a valid license number' do
6
+ client = Kit::Client.new
7
+
8
+ table = client.find(1917)
9
+
10
+ expect(table.count > 0).to eql(true)
11
+ end
12
+
13
+ it 'returns a table with no elements given a person who has not raced' do
14
+ client = Kit::Client.new
15
+
16
+ table = client.find(1918)
17
+
18
+ expect(table.none?).to eql(true)
19
+ end
20
+
21
+ it 'returns a table with no elements given a junk license number' do
22
+ client = Kit::Client.new
23
+
24
+ table = client.find('abcdef')
25
+
26
+ expect(table.none?).to eql(true)
27
+ end
28
+
29
+ it 'returns a table with no elements given a non-existent license number' do
30
+ client = Kit::Client.new
31
+
32
+ table = client.find('1111111111')
33
+
34
+ expect(table.none?).to eql(true)
35
+ end
36
+
37
+ end
@@ -0,0 +1,48 @@
1
+ require 'kit'
2
+
3
+ describe Kit::DateParser do
4
+ let(:row_class) { Struct.new(:text) }
5
+
6
+ it 'does not parse empty strings' do
7
+ row = row_class.new('')
8
+ parser = Kit::DateParser.new
9
+
10
+ expect(parser.parse(row)).to be_nil
11
+ end
12
+
13
+ it 'grabs the first date in a chunk of text' do
14
+ row = row_class.new('snarfle 01/01/2014 02/02/2014')
15
+ parser = Kit::DateParser.new
16
+
17
+ expect(parser.parse(row)).to eql(Date.strptime('01/01/2014', '%m/%d/%Y'))
18
+ end
19
+
20
+ it 'will not grab incorrectly formatted dates' do
21
+ row = row_class.new('snarfle 1-1-2014 2014-02-01')
22
+ parser = Kit::DateParser.new
23
+
24
+ expect(parser.parse(row)).to be_nil
25
+ end
26
+
27
+ it 'will skip bad formats' do
28
+ row = row_class.new('snarfle 02-02-2014 01/01/2014')
29
+ parser = Kit::DateParser.new
30
+
31
+ expect(parser.parse(row)).to eql(Date.strptime('01/01/2014', '%m/%d/%Y'))
32
+ end
33
+
34
+ it 'will not parse invalid dates with the correct format' do
35
+ row = row_class.new('snarfle 02/29/2014')
36
+ parser = Kit::DateParser.new
37
+
38
+ expect(parser.parse(row)).to be_nil
39
+ end
40
+
41
+ it 'seriously does not care if the whole thing is void of any date' do
42
+ row = row_class.new('snarfle dorfle farfle')
43
+ parser = Kit::DateParser.new
44
+
45
+ expect(parser.parse(row)).to be_nil
46
+ end
47
+
48
+ end
@@ -0,0 +1,722 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>The Official Website - USA Cycling</title>
6
+ <meta property="og:image" content="https://www.usacycling.org/images/USAC-logo.png" />
7
+ <link rel="alternate" type="application/rss+xml" title="RSS" href="http://www.usacycling.org/rss/headlines.rss" />
8
+ <link rel="image_src" type="image/png" href="https://www.usacycling.org/images/USAC-logo.png" />
9
+
10
+
11
+ <meta name="keywords" content="bicycle, cycling, bicycling, usa, olympic, USA Cycling, USCF, US Cycling, USAC, United States Cycling Federation, biker, BMX, MTB, cyclocross, Bike Racing, mountain bike, mountain biker, bike, biking, tour de france, world championships"/>
12
+ <meta name="description" content="USA Cycling is the official cycling organization recognized by the International Olympic Committee (IOC), the United States Olympic Committee (USOC) and the International Cycling Union (UCI), and is responsible for identifying, training, and selecting cyclists to represent the United States in international competition."/>
13
+ <meta http-equiv="pics-label" content='(pics-1.1 "http://www.icra.org/ratingsv02.html" comment "ICRAonline EN v2.0" l gen true for "http://www.usacycling.org" r (nz 1 vz 1 lz 1 oz 1 cz 1) "http://www.rsac.org/ratingsv01.html" l gen true for "http://www.usacycling.org" r (n 0 s 0 v 0 l 0))'/>
14
+ <link rel="alternate" type="application/rss+xml" title="USA Cycling News Headlines [RSS]" href="http://www.usacycling.org/rss/headlines.rss"/>
15
+ <link rel="alternate" type="application/rss+xml" title="USA Cycling Mountain News [RSS]" href="http://www.usacycling.org/rss/mtb.rss"/>
16
+ <link rel="alternate" type="application/rss+xml" title="USA Cycling Road News [RSS]" href="http://www.usacycling.org/rss/road.rss"/>
17
+ <link rel="alternate" type="application/rss+xml" title="USA Cycling Track News [RSS]" href="http://www.usacycling.org/rss/track.rss"/>
18
+ <link rel="alternate" type="application/rss+xml" title="USA Cycling Cyclo-cross News [RSS]" href="http://www.usacycling.org/rss/cyclocross.rss"/>
19
+ <link rel="alternate" type="application/rss+xml" title="USA Cycling Collegiate News [RSS]" href="http://www.usacycling.org/rss/collegiate.rss"/>
20
+ <link href="/css/reset-context-min.css" rel="stylesheet" type="text/css" />
21
+
22
+ <link rel="icon" href="/favicon.ico?" />
23
+ <link rel="stylesheet" type="text/css" href="/css/print.css" media="print" />
24
+ <link href="/css/2015/usacstyle.css" rel="stylesheet" type="text/css" media="screen" />
25
+ <link href="/css/2015/navigation.css" rel="stylesheet" type="text/css" media="screen" />
26
+ <link href="/css/2015/webkit.css" rel="stylesheet" type="text/css" />
27
+
28
+ <link href="/templates/default/style.css" rel="stylesheet" type="text/css" media="screen" />
29
+ <link rel="stylesheet" href="/css/widgets.css" media="screen"/>
30
+
31
+ <link rel="stylesheet" type="text/css" href="/css/2015/style.css"/>
32
+ <script src="//use.typekit.net/bac6kmi.js"></script>
33
+ <script>try{Typekit.load();}catch(e){}</script>
34
+
35
+ <link href="/css/2015/theme/jquery-ui.css" rel="stylesheet" type="text/css" />
36
+ <script type="text/javascript" src="/js/2015/jquery.js"></script>
37
+ <script type="text/javascript" src="/js/2015/jquery-ui.min.js"></script>
38
+
39
+ <script type="text/javascript" src="/js/jQuery.hoverIntent.js"></script>
40
+ <script type="text/javascript" src="/js/2015/header.js"></script>
41
+ <script type="text/javascript" src="/js/jquery.alphanumeric.pack.js"></script>
42
+
43
+ <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
44
+
45
+ <script type='text/javascript'>var memberLogin = false;</script>
46
+
47
+ <script type="text/javascript" src="/results/common.js"></script>
48
+
49
+
50
+ <script type="text/javascript">
51
+ $(function(){
52
+ $('input.address').alphanumeric({allow:" "});
53
+ $('input.alpha').alpha();
54
+ $('input.alphad').alpha({allow:"."});
55
+ $('input.alphanumeric').alphanumeric();
56
+ $('input.alphanumericdw').alphanumeric({allow:". "});
57
+ $('input.email').alphanumeric({allow:"@._-+"});
58
+ $('input.numeric').numeric();
59
+ $('input.moneyamt').numeric({allow:"."});
60
+ $('input.phone').numeric({allow:"()-. "});
61
+ $('input.zipcode').numeric({allow:"-"});
62
+ $('input.noquotes').alphanumeric({ichars:'"'});
63
+ });
64
+ </script>
65
+
66
+ <link href="/results/results.css" rel="stylesheet" type="text/css" media="screen" />
67
+
68
+ </head>
69
+ <body>
70
+ <!-- Google Tag Manager -->
71
+ <noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-5VTJMX"
72
+ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
73
+ <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
74
+ new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
75
+ j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
76
+ '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
77
+ })(window,document,'script','dataLayer','GTM-5VTJMX');</script>
78
+ <!-- End Google Tag Manager -->
79
+
80
+ <div id="wrapper">
81
+ <div id="genericDialog"></div>
82
+ <div id="spread">
83
+ <div id="header">
84
+ <div id='usaclogo'><a href='https://www.usacycling.org' title='USA Cycling Homepage'><img src='/images/USAC-logo.png' alt='USA Cycling Inc.' style="height:70px;"/></a></div>
85
+ <div id="navcontainer">
86
+ <div id="headerbottom">
87
+ <div id="navigation">
88
+ <ul id="topnav" >
89
+ <li style="color:#031e41; font-weight:bold; font-family:helvetica; font-size:10px;">GET INVOLVED
90
+ <div id='membership_sub' class='sub'>
91
+ <div class='subcontainer'>
92
+ <div class='table-row' >
93
+ <div id="membership" class='table-cell' >
94
+ <ul id="membership_menu">
95
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
96
+ <a href='https://register.usacycling.org/#!/c/race'>
97
+ <span class="menu_item">Race Membership</span>
98
+ </a>
99
+ </li>
100
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
101
+ <a href='https://register.usacycling.org/#!/c/ride'>
102
+ <span class="menu_item">Ride Membership</span>
103
+ </a>
104
+ </li>
105
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
106
+ <a href='http://www.usacycling.org/get-involved/support-role'>
107
+ <span class="menu_item">Officials & Coaches</span>
108
+ </a>
109
+ </li>
110
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
111
+ <a href='http://www.usacycling.org/get-involved/college'>
112
+ <span class="menu_item">Collegiate</span>
113
+ </a>
114
+ </li>
115
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
116
+ <a href='http://www.usacycling.org/get-involved/benefits/'>
117
+ <span class="menu_item">Member Benefits</span>
118
+ </a>
119
+ </li>
120
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
121
+ <a href=' http://legacy.usacycling.org/clubs/clubsearch.php'>
122
+ <span class="menu_item">Find A Club</span>
123
+ </a>
124
+ </li>
125
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
126
+ <a href=' https://register.usacycling.org/#!/events/merchandise/store'>
127
+ <span class="menu_item">Shop</span>
128
+ </a>
129
+ </li>
130
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
131
+ <a href='http://www.usacycling.org/get-involved/find-support/'>
132
+ <span class="menu_item">Get Started Racing</span>
133
+ </a>
134
+ </li>
135
+ </ul>
136
+ </div>
137
+ </div>
138
+ </div>
139
+ </div>
140
+ </li>
141
+ <li style="color:#031e41; font-weight:bold; font-family:helvetica; font-size:10px;">EVENT FINDER
142
+ <div id='event_sub' class='sub'>
143
+ <div class='subcontainer'>
144
+ <div class='table-row' >
145
+ <div id="events" class='table-cell' >
146
+ <ul id="events_menu" style="margin-top:30px;">
147
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
148
+ <a href='http://www.usacycling.org/events'>
149
+ <span class="menu_item">Search Events</span>
150
+ </a>
151
+ </li>
152
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
153
+ <a href='https://legacy.usacycling.org/events/rr.php'>
154
+ <span class="menu_item">Results &amp; Rankings</span>
155
+ </a>
156
+ </li>
157
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
158
+ <a href='https://legacy.usacycling.org/national-championships'>
159
+ <span class="menu_item">National Championships</span>
160
+ </a>
161
+ </li>
162
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
163
+ <a href='http://www.usacycling.org/find-event/national-calendars'>
164
+ <span class="menu_item">National Calendars</span>
165
+ </a>
166
+ </li>
167
+ </ul>
168
+ </div>
169
+ </div>
170
+ </div>
171
+ </div>
172
+ </li>
173
+ <li style="color:#031e41; font-weight:bold; font-family:helvetica; font-size:10px;">RACE DIRECTOR
174
+ <div id='rd_sub' class='sub'>
175
+ <div class='subcontainer'>
176
+ <div class='table-row' >
177
+ <div id="race_director" class='table-cell' >
178
+ <ul id="rd_menu" style="margin-top:30px;">
179
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
180
+ <a href='http://www.usacycling.org/run-an-event/why-usa-cycling'>
181
+ <span class="menu_item">Why USA Cycling</span>
182
+ </a>
183
+ </li>
184
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
185
+ <a href='http://www.usacycling.org/run-an-event/benefits-of-permitting'>
186
+ <span class="menu_item">Permitting</span>
187
+ </a>
188
+ </li>
189
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
190
+ <a href='http://www.usacycling.org/run-an-event/resources'>
191
+ <span class="menu_item">Resources</span>
192
+ </a>
193
+ </li>
194
+ </ul>
195
+ </div>
196
+ </div>
197
+ </div>
198
+ </div>
199
+ </li>
200
+ <li style="color:#031e41; font-weight:bold; font-family:helvetica; font-size:10px;">FOUNDATION
201
+ <div id='foundation_sub' class='sub'>
202
+ <div class='subcontainer'>
203
+ <div class='table-row' >
204
+ <div id="foundation" class='table-cell' >
205
+ <ul id="foundation_menu" style="margin-top:30px;">
206
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
207
+ <a href='http://www.usacycling.org/foundation/centers-of-excellence'>
208
+ <span class="menu_item">Centers of Excellence</span>
209
+ </a>
210
+ </li>
211
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
212
+ <a href='http://www.usacycling.org/foundation/travel-training'>
213
+ <span class="menu_item">Travel &amp; Training Grants</span>
214
+ </a>
215
+ </li>
216
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
217
+ <a href='http://www.usacycling.org/foundation/college-scholarships'>
218
+ <span class="menu_item">College Scholarships</span>
219
+ </a>
220
+ </li>
221
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
222
+ <a href='http://www.usacycling.org/foundation/donate'>
223
+ <span class="menu_item">Donate</span>
224
+ </a>
225
+ </li>
226
+ </ul>
227
+ </div>
228
+ </div>
229
+ </div>
230
+ </div>
231
+ </li>
232
+ <li style="color:#031e41; font-weight:bold; font-family:helvetica; font-size:10px;">TEAM USA
233
+ <div id='team_sub' class='sub' >
234
+ <div class='subcontainer' >
235
+ <div class='table-row' >
236
+ <div id="team" class='table-cell'>
237
+ <ul id="team_menu" style="margin-top:30px; background-color:#031e41; width:200px;">
238
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
239
+ <a href='http://www.usacycling.org/team/athlete-development'>
240
+ <span class="menu_item">Athlete Development</span>
241
+ </a>
242
+ </li>
243
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
244
+ <a href='http://www.usacycling.org/team/international-events'>
245
+ <span class="menu_item">International Events</span>
246
+ </a>
247
+ </li>
248
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
249
+ <a href='http://www.usacycling.org/team/bmx'>
250
+ <span class="menu_item">BMX</span>
251
+ </a>
252
+ </li>
253
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
254
+ <a href='http://www.usacycling.org/team/bmx-freestyle'>
255
+ <span class="menu_item">BMX Freestyle</span>
256
+ </a>
257
+ </li>
258
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
259
+ <a href='http://www.usacycling.org/team/cyclocross'>
260
+ <span class="menu_item">Cyclocross</span>
261
+ </a>
262
+ </li>
263
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
264
+ <a href='http://www.usacycling.org/team/mountain-bike'>
265
+ <span class="menu_item">Mountain Bike</span>
266
+ </a>
267
+ </li>
268
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
269
+ <a href='http://www.usacycling.org/team/road'>
270
+ <span class="menu_item">Road</span>
271
+ </a>
272
+ </li>
273
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
274
+ <a href='http://www.usacycling.org/team/track'>
275
+ <span class="menu_item">Track</span>
276
+ </a>
277
+ </li>
278
+ </ul>
279
+ </div>
280
+ </div>
281
+ </div>
282
+ </div>
283
+ </li>
284
+ <li style="color:#031e41; font-weight:bold; font-family:helvetica; font-size:10px;">RESOURCES
285
+ <div id='resources_sub' class='sub'>
286
+ <div class='subcontainer'>
287
+ <div class='table-row' >
288
+ <div id="resources" class='table-cell' >
289
+ <ul id="resources_menu" style="margin-top:30px; background-color:#031e41; width:200px;">
290
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
291
+ <a href='http://www.usacycling.org/resources/rulebook'>
292
+ <span class="menu_item">Rules &amp; Policies</span>
293
+ </a>
294
+ </li>
295
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
296
+ <a href='http://www.usacycling.org/resources/upgrades'>
297
+ <span class="menu_item">Upgrades</span>
298
+ </a>
299
+ </li>
300
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
301
+ <a href='http://www.usacycling.org/local-associations'>
302
+ <span class="menu_item">Local Associations</span>
303
+ </a>
304
+ </li>
305
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
306
+ <a href='https://legacy.usacycling.org/coaches/CoachWaiver.php?url=story.php?id=95'>
307
+ <span class="menu_item">Find A Coach</span>
308
+ </a>
309
+ </li>
310
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
311
+ <a href='http://www.usacycling.org/resources/insurance'>
312
+ <span class="menu_item">Insurance Information</span>
313
+ </a>
314
+ </li>
315
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
316
+ <a href='http://www.usacycling.org/resources/race-clean'>
317
+ <span class="menu_item">RaceClean</span>
318
+ </a>
319
+ </li>
320
+ <li style="height:30px;" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';">
321
+ <a href='http://www.usacycling.org/resources/safesport'>
322
+ <span class="menu_item">SafeSport</span>
323
+ </a>
324
+ </li>
325
+ </ul>
326
+ </div>
327
+ </div>
328
+ </div>
329
+ </div>
330
+ </li>
331
+ </ul>
332
+ </div>
333
+ <div style="float:right; height:40px; width:300px; text-align:right; vertical-align: middle;">
334
+ <div style="display:table-cell; text-align:center; vertical-align: middle; width:80px; height:30px; background-color:#031e41; color:#FFF; font-size:14px;">
335
+ <a href="http://www.usacycling.org/user-login">
336
+ <span style="color:#FFF;">LOG IN</span>
337
+ </a>
338
+ </div>
339
+ <div style="display:table-cell; width:50px; height:30px;"><a href="http://legacy.usacycling.org/sitesearch.php" border="0"><img src="/includes/images/search-icon.png"/></a></div>
340
+ </div>
341
+ </div>
342
+ </div>
343
+ </div><!-- End Header -->
344
+
345
+ <div id="mainContent"><div id="pageContent" class="whitepanel"><div id="pgcontent" class="onecol"><img src='/images/results-header.jpg' alt='USA Cycling Results and Rankings'/><div id='resultsmain'> <br><form id='filterform' method='GET' action='/results/index.php'>
346
+ <input type='hidden' name='compid' value='1917'>
347
+ <table border='0' cellspacing='0' align=center>
348
+ <tr><td colspan='8' align='center'><b>Race Results for Lance Armstrong<br></b><b>Racing Age 46 from Austin, TX</b><br><br></td></tr><tr><td colspan='8' align='center'><select name='view' onchange='this.form.submit()'><option value='' selected>All Events</option><option value='usac' >National Championships</option><option value='champ' >Other Championships</option></select></td></tr> <tr class="tablecolumnheading"><th>Place</th>
349
+ <th>Points&nbsp;&nbsp;</th>
350
+ <th>Name&nbsp;&nbsp;</th>
351
+ <th>USAC #&nbsp;&nbsp;</th>
352
+ <th>Time&nbsp;&nbsp;</th>
353
+ <th>Bib&nbsp;&nbsp;</th>
354
+ <th>Team</th></tr> <tr><td colspan='8'>&nbsp;</td></tr>
355
+ <tr bgcolor='F3F3F3'>
356
+ <td colspan='7' class='homearticlebody'>
357
+ <span class='homearticleheader'>07/31/2011 - <a href='?permit=2011-2624'>Leadville Qualifying Series-Crested Butte</a></span>
358
+ | <span title='discipline'>CM</span> </td></tr>
359
+ <tr class='homearticlebody'>
360
+ <td>DQ / 188</td><td>-</td>
361
+ <td>Lance Armstrong</td><td>1917</td>
362
+ <td>4:32:21.31</td><td></td>
363
+ <td></td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
364
+ <tr bgcolor='F3F3F3'>
365
+ <td colspan='7' class='homearticlebody'>
366
+ <span class='homearticleheader'>07/31/2011 - <a href='?permit=2011-2624'>Leadville Qualifying Series-Crested Butte</a></span>
367
+ | <span title='discipline'>CM</span> </td></tr>
368
+ <tr class='homearticlebody'>
369
+ <td>DQ / 169</td><td>-</td>
370
+ <td>LANCE ARMSTRONG</td><td>1917</td>
371
+ <td>4:32:21.31</td><td></td>
372
+ <td></td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
373
+ <tr bgcolor='F3F3F3'>
374
+ <td colspan='7' class='homearticlebody'>
375
+ <span class='homearticleheader'>05/18/2010 - <a href='?permit=2010-1531'>Amgen Tour of California</a></span>
376
+ | <span title='discipline'>Stage Race</span> </td></tr>
377
+ <tr class='homearticlebody'>
378
+ <td>DQ / 124</td><td>-</td>
379
+ <td>Lance Armstrong</td><td>1917</td>
380
+ <td></td><td></td>
381
+ <td></td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
382
+ <tr bgcolor='F3F3F3'>
383
+ <td colspan='7' class='homearticlebody'>
384
+ <span class='homearticleheader'>05/17/2010 - <a href='?permit=2010-1531'>Amgen Tour of California</a></span>
385
+ | <span title='discipline'>Stage Race</span> </td></tr>
386
+ <tr class='homearticlebody'>
387
+ <td>DQ / 125</td><td>-</td>
388
+ <td>Lance Armstrong</td><td>1917</td>
389
+ <td></td><td></td>
390
+ <td></td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
391
+ <tr bgcolor='F3F3F3'>
392
+ <td colspan='7' class='homearticlebody'>
393
+ <span class='homearticleheader'>05/16/2010 - <a href='?permit=2010-1531'>Amgen Tour of California</a></span>
394
+ | <span title='discipline'>Stage Race</span> </td></tr>
395
+ <tr class='homearticlebody'>
396
+ <td>DQ / 127</td><td>-</td>
397
+ <td>Lance Armstrong</td><td>1917</td>
398
+ <td></td><td></td>
399
+ <td></td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
400
+ <tr bgcolor='F3F3F3'>
401
+ <td colspan='7' class='homearticlebody'>
402
+ <span class='homearticleheader'>05/02/2010 - <a href='?permit=2010-1076'>SRAM Tour of the Gila</a></span>
403
+ | <span title='discipline'>STR</span> </td></tr>
404
+ <tr class='homearticlebody'>
405
+ <td>DQ / 107</td><td>-</td>
406
+ <td>Lance Armstrong</td><td>1917</td>
407
+ <td>13:53:58</td><td></td>
408
+ <td>Team Mellow Johnny's</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
409
+ <tr bgcolor='F3F3F3'>
410
+ <td colspan='7' class='homearticlebody'>
411
+ <span class='homearticleheader'>05/02/2010 - <a href='?permit=2010-1076'>SRAM Tour of the Gila</a></span>
412
+ | <span title='discipline'>RR</span> </td></tr>
413
+ <tr class='homearticlebody'>
414
+ <td>DQ / 107</td><td>-</td>
415
+ <td>Lance Armstrong</td><td>1917</td>
416
+ <td>4:28:57</td><td></td>
417
+ <td>Team Mellow Johnny's</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
418
+ <tr bgcolor='F3F3F3'>
419
+ <td colspan='7' class='homearticlebody'>
420
+ <span class='homearticleheader'>05/01/2010 - <a href='?permit=2010-1076'>SRAM Tour of the Gila</a></span>
421
+ | <span title='discipline'>CRIT</span> </td></tr>
422
+ <tr class='homearticlebody'>
423
+ <td>DQ / 157</td><td>-</td>
424
+ <td>Lance Armstrong</td><td>1917</td>
425
+ <td>1:33:20</td><td></td>
426
+ <td>Team Mellow Johnny's</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
427
+ <tr bgcolor='F3F3F3'>
428
+ <td colspan='7' class='homearticlebody'>
429
+ <span class='homearticleheader'>04/30/2010 - <a href='?permit=2010-1076'>SRAM Tour of the Gila</a></span>
430
+ | <span title='discipline'>ITT</span> </td></tr>
431
+ <tr class='homearticlebody'>
432
+ <td>DQ / 167</td><td>-</td>
433
+ <td>Lance Armstrong</td><td>1917</td>
434
+ <td>0:35:59</td><td></td>
435
+ <td>Team Mellow Johnny's</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
436
+ <tr bgcolor='F3F3F3'>
437
+ <td colspan='7' class='homearticlebody'>
438
+ <span class='homearticleheader'>04/29/2010 - <a href='?permit=2010-1076'>SRAM Tour of the Gila</a></span>
439
+ | <span title='discipline'>RR</span> </td></tr>
440
+ <tr class='homearticlebody'>
441
+ <td>DQ / 173</td><td>-</td>
442
+ <td>Lance Armstrong</td><td>1917</td>
443
+ <td>3:25:38</td><td></td>
444
+ <td>Team Mellow Johnny's</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
445
+ <tr bgcolor='F3F3F3'>
446
+ <td colspan='7' class='homearticlebody'>
447
+ <span class='homearticleheader'>04/28/2010 - <a href='?permit=2010-1076'>SRAM Tour of the Gila</a></span>
448
+ | <span title='discipline'>RR</span> </td></tr>
449
+ <tr class='homearticlebody'>
450
+ <td>22 / 178</td><td>-</td>
451
+ <td>Lance Armstrong</td><td>1917</td>
452
+ <td>3:50:04</td><td></td>
453
+ <td>Team Mellow Johnny's</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
454
+ <tr bgcolor='F3F3F3'>
455
+ <td colspan='7' class='homearticlebody'>
456
+ <span class='homearticleheader'>01/31/2010 - <a href='?permit=2010-76'>Miles of DisComfort</a></span>
457
+ | <span title='discipline'>CM</span> </td></tr>
458
+ <tr class='homearticlebody'>
459
+ <td>DQ / 19</td><td>-</td>
460
+ <td>Lance Armstrong</td><td>1917</td>
461
+ <td>4:28:2.00</td><td>1</td>
462
+ <td>Team RadioShack</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
463
+ <tr bgcolor='F3F3F3'>
464
+ <td colspan='7' class='homearticlebody'>
465
+ <span class='homearticleheader'>11/23/2009 - <a href='?permit=2009-2932'>2009 Mellow Johnnys Classic at Juan Pelotas Ranch</a></span>
466
+ | <span title='discipline'>XC</span> | <span title='age'>0-99</span> </td></tr>
467
+ <tr class='homearticlebody'>
468
+ <td>DQ / 53</td><td>-</td>
469
+ <td>Lance Armstrong</td><td>1917</td>
470
+ <td>DNF</td><td>7</td>
471
+ <td>Mellow Johnny's</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
472
+ <tr bgcolor='F3F3F3'>
473
+ <td colspan='7' class='homearticlebody'>
474
+ <span class='homearticleheader'>08/08/2009 - <a href='?permit=2009-2285'>Blast the Mass - MSC #5</a></span>
475
+ | <span title='discipline'>XC</span> | <span title='class'>Elite</span> </td></tr>
476
+ <tr class='homearticlebody'>
477
+ <td>DQ / 32</td><td>-</td>
478
+ <td>Lance Armstrong</td><td>1917</td>
479
+ <td>1:51:18</td><td>71</td>
480
+ <td>Mellow Johnny's / Livestrong</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
481
+ <tr bgcolor='F3F3F3'>
482
+ <td colspan='7' class='homearticlebody'>
483
+ <span class='homearticleheader'>06/21/2009 - <a href='?permit=2009-1514'>Nevada City Bicycle Classic-49th Annual</a></span>
484
+ | <span title='discipline'>CRIT</span> </td></tr>
485
+ <tr class='homearticlebody'>
486
+ <td>DQ / 106</td><td>-</td>
487
+ <td>Lance Armstrong</td><td>1917</td>
488
+ <td>01:28:20.00</td><td>2</td>
489
+ <td>Uci Pt: Astana</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
490
+ <tr bgcolor='F3F3F3'>
491
+ <td colspan='7' class='homearticlebody'>
492
+ <span class='homearticleheader'>05/03/2009 - <a href='?permit=2009-709'>Tour of the Gila</a></span>
493
+ | <span title='discipline'>GC</span> </td></tr>
494
+ <tr class='homearticlebody'>
495
+ <td>DQ / 104</td><td>-</td>
496
+ <td>Lance Armstrong</td><td>1917</td>
497
+ <td></td><td></td>
498
+ <td>Mellow Johnny's</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
499
+ <tr bgcolor='F3F3F3'>
500
+ <td colspan='7' class='homearticlebody'>
501
+ <span class='homearticleheader'>05/02/2009 - <a href='?permit=2009-709'>Tour of the Gila</a></span>
502
+ | <span title='discipline'>CRIT</span> </td></tr>
503
+ <tr class='homearticlebody'>
504
+ <td>DQ / 146</td><td>-</td>
505
+ <td>Lance Armstrong</td><td>1917</td>
506
+ <td>1:35:56</td><td></td>
507
+ <td>Mellow Johnny's</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
508
+ <tr bgcolor='F3F3F3'>
509
+ <td colspan='7' class='homearticlebody'>
510
+ <span class='homearticleheader'>05/01/2009 - <a href='?permit=2009-709'>Tour of the Gila</a></span>
511
+ | <span title='discipline'>ITT</span> </td></tr>
512
+ <tr class='homearticlebody'>
513
+ <td>DQ / 147</td><td>-</td>
514
+ <td>Lance Armstrong</td><td>1917</td>
515
+ <td>0:34:22</td><td></td>
516
+ <td>Mellow Johnny's</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
517
+ <tr bgcolor='F3F3F3'>
518
+ <td colspan='7' class='homearticlebody'>
519
+ <span class='homearticleheader'>04/30/2009 - <a href='?permit=2009-709'>Tour of the Gila</a></span>
520
+ | <span title='discipline'>RR</span> </td></tr>
521
+ <tr class='homearticlebody'>
522
+ <td>DQ / 143</td><td>-</td>
523
+ <td>Lance Armstrong</td><td>1917</td>
524
+ <td>3:12:19</td><td></td>
525
+ <td>Mellow Johnny's</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
526
+ <tr bgcolor='F3F3F3'>
527
+ <td colspan='7' class='homearticlebody'>
528
+ <span class='homearticleheader'>02/21/2009 - <a href='?permit=2009-250'>Amgen Tour of California</a></span>
529
+ | <span title='discipline'>STR</span> </td></tr>
530
+ <tr class='homearticlebody'>
531
+ <td>DQ / 97</td><td>-</td>
532
+ <td>Lance Armstrong</td><td>1917</td>
533
+ <td>27:40:48</td><td></td>
534
+ <td>Astana</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
535
+ <tr bgcolor='F3F3F3'>
536
+ <td colspan='7' class='homearticlebody'>
537
+ <span class='homearticleheader'>02/21/2009 - <a href='?permit=2009-250'>Amgen Tour of California</a></span>
538
+ | <span title='discipline'>RR</span> | <span title='class'>Stage 7</span> </td></tr>
539
+ <tr class='homearticlebody'>
540
+ <td>DQ / 97</td><td>-</td>
541
+ <td>Lance Armstrong</td><td>1917</td>
542
+ <td>3:27:02</td><td></td>
543
+ <td>Astana</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
544
+ <tr bgcolor='F3F3F3'>
545
+ <td colspan='7' class='homearticlebody'>
546
+ <span class='homearticleheader'>02/20/2009 - <a href='?permit=2009-250'>Amgen Tour of California</a></span>
547
+ | <span title='discipline'>TT</span> | <span title='class'>Stage 6</span> </td></tr>
548
+ <tr class='homearticlebody'>
549
+ <td>DQ / 106</td><td>-</td>
550
+ <td>Lance Armstrong</td><td>1917</td>
551
+ <td>31:56.5</td><td></td>
552
+ <td>Astana</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
553
+ <tr bgcolor='F3F3F3'>
554
+ <td colspan='7' class='homearticlebody'>
555
+ <span class='homearticleheader'>02/20/2009 - <a href='?permit=2009-250'>Amgen Tour of California</a></span>
556
+ | <span title='discipline'>STR</span> </td></tr>
557
+ <tr class='homearticlebody'>
558
+ <td>DQ / 106</td><td>-</td>
559
+ <td>Lance Armstrong</td><td>1917</td>
560
+ <td>24:13:46</td><td></td>
561
+ <td>Astana</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
562
+ <tr bgcolor='F3F3F3'>
563
+ <td colspan='7' class='homearticlebody'>
564
+ <span class='homearticleheader'>02/19/2009 - <a href='?permit=2009-250'>Amgen Tour of California</a></span>
565
+ | <span title='discipline'>STR</span> </td></tr>
566
+ <tr class='homearticlebody'>
567
+ <td>DQ / 108</td><td>-</td>
568
+ <td>Lance Armstrong</td><td>1917</td>
569
+ <td>23:41:50</td><td></td>
570
+ <td>Astana</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
571
+ <tr bgcolor='F3F3F3'>
572
+ <td colspan='7' class='homearticlebody'>
573
+ <span class='homearticleheader'>02/19/2009 - <a href='?permit=2009-250'>Amgen Tour of California</a></span>
574
+ | <span title='discipline'>RR</span> | <span title='class'>Stage 5</span> </td></tr>
575
+ <tr class='homearticlebody'>
576
+ <td>DQ / 108</td><td>-</td>
577
+ <td>Lance Armstrong</td><td>1917</td>
578
+ <td>5:07:28</td><td></td>
579
+ <td>Astana</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
580
+ <tr bgcolor='F3F3F3'>
581
+ <td colspan='7' class='homearticlebody'>
582
+ <span class='homearticleheader'>02/18/2009 - <a href='?permit=2009-250'>Amgen Tour of California</a></span>
583
+ | <span title='discipline'>STR</span> </td></tr>
584
+ <tr class='homearticlebody'>
585
+ <td>DQ / 108</td><td>-</td>
586
+ <td>Lance Armstrong</td><td>1917</td>
587
+ <td>18:34:22</td><td></td>
588
+ <td>Astana</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
589
+ <tr bgcolor='F3F3F3'>
590
+ <td colspan='7' class='homearticlebody'>
591
+ <span class='homearticleheader'>02/18/2009 - <a href='?permit=2009-250'>Amgen Tour of California</a></span>
592
+ | <span title='discipline'>RR</span> | <span title='class'>Stage 4</span> </td></tr>
593
+ <tr class='homearticlebody'>
594
+ <td>DQ / 108</td><td>-</td>
595
+ <td>Lance Armstrong</td><td>1917</td>
596
+ <td>4:42:38</td><td></td>
597
+ <td>Astana</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
598
+ <tr bgcolor='F3F3F3'>
599
+ <td colspan='7' class='homearticlebody'>
600
+ <span class='homearticleheader'>02/17/2009 - <a href='?permit=2009-250'>Amgen Tour of California</a></span>
601
+ | <span title='discipline'>RR</span> | <span title='class'>Stage 3</span> </td></tr>
602
+ <tr class='homearticlebody'>
603
+ <td>DQ / 119</td><td>-</td>
604
+ <td>Lance Armstrong</td><td>1917</td>
605
+ <td>4:28:12</td><td></td>
606
+ <td>Astana</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
607
+ <tr bgcolor='F3F3F3'>
608
+ <td colspan='7' class='homearticlebody'>
609
+ <span class='homearticleheader'>02/17/2009 - <a href='?permit=2009-250'>Amgen Tour of California</a></span>
610
+ | <span title='discipline'>STR</span> </td></tr>
611
+ <tr class='homearticlebody'>
612
+ <td>DQ / 119</td><td>-</td>
613
+ <td>Lance Armstrong</td><td>1917</td>
614
+ <td>13:51:44</td><td></td>
615
+ <td>Astana</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
616
+ <tr bgcolor='F3F3F3'>
617
+ <td colspan='7' class='homearticlebody'>
618
+ <span class='homearticleheader'>02/16/2009 - <a href='?permit=2009-250'>Amgen Tour of California</a></span>
619
+ | <span title='discipline'>STR</span> </td></tr>
620
+ <tr class='homearticlebody'>
621
+ <td>DQ / 128</td><td>-</td>
622
+ <td>Lance Armstrong</td><td>1917</td>
623
+ <td>9:23:32</td><td></td>
624
+ <td>Astana</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
625
+ <tr bgcolor='F3F3F3'>
626
+ <td colspan='7' class='homearticlebody'>
627
+ <span class='homearticleheader'>02/16/2009 - <a href='?permit=2009-250'>Amgen Tour of California</a></span>
628
+ | <span title='discipline'>RR</span> | <span title='class'>Stage 2</span> </td></tr>
629
+ <tr class='homearticlebody'>
630
+ <td>DQ / 128</td><td>-</td>
631
+ <td>Lance Armstrong</td><td>1917</td>
632
+ <td>5:06:41</td><td></td>
633
+ <td>Astana</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
634
+ <tr bgcolor='F3F3F3'>
635
+ <td colspan='7' class='homearticlebody'>
636
+ <span class='homearticleheader'>02/15/2009 - <a href='?permit=2009-250'>Amgen Tour of California</a></span>
637
+ | <span title='discipline'>RR</span> | <span title='class'>Stage 1</span> </td></tr>
638
+ <tr class='homearticlebody'>
639
+ <td>DQ / 134</td><td>-</td>
640
+ <td>Lance Armstrong</td><td>1917</td>
641
+ <td>4:12:14</td><td></td>
642
+ <td>Astana</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
643
+ <tr bgcolor='F3F3F3'>
644
+ <td colspan='7' class='homearticlebody'>
645
+ <span class='homearticleheader'>02/15/2009 - <a href='?permit=2009-250'>Amgen Tour of California</a></span>
646
+ | <span title='discipline'>STR</span> </td></tr>
647
+ <tr class='homearticlebody'>
648
+ <td>DQ / 134</td><td>-</td>
649
+ <td>Lance Armstrong</td><td>1917</td>
650
+ <td></td><td></td>
651
+ <td>Astana</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
652
+ <tr bgcolor='F3F3F3'>
653
+ <td colspan='7' class='homearticlebody'>
654
+ <span class='homearticleheader'>11/10/2008 - <a href='?permit=2008-2216'>Sun and Ski Sports Presents the Rocky Hill Roundup</a></span>
655
+ | <span title='discipline'>XC</span> </td></tr>
656
+ <tr class='homearticlebody'>
657
+ <td>DQ / 24</td><td>-</td>
658
+ <td>Lance Armstrong</td><td>1917</td>
659
+ <td>1:52:2.00</td><td>7</td>
660
+ <td>Mellow Johnny's</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
661
+ <tr bgcolor='F3F3F3'>
662
+ <td colspan='7' class='homearticlebody'>
663
+ <span class='homearticleheader'>09/24/2008 - <a href='?permit=2008-2350'>Cross Vegas</a></span>
664
+ | <span title='discipline'>CX</span> | <span title='class'>Uci</span> </td></tr>
665
+ <tr class='homearticlebody'>
666
+ <td>DQ / 69</td><td>-</td>
667
+ <td>Lance Armstrong</td><td>1917</td>
668
+ <td>01:05:17</td><td>38</td>
669
+ <td>Unattached</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
670
+ <tr bgcolor='F3F3F3'>
671
+ <td colspan='7' class='homearticlebody'>
672
+ <span class='homearticleheader'>01/26/2008 - <a href='?permit=2008-129'>2008 Miles of Discomfort</a></span>
673
+ | <span title='discipline'>Marathon</span> | <span title='age'>1-02</span> </td></tr>
674
+ <tr class='homearticlebody'>
675
+ <td>DQ / 22</td><td>-</td>
676
+ <td>Lance Armstrong</td><td>1917</td>
677
+ <td></td><td>7</td>
678
+ <td>Mellow Johnny's</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
679
+ <tr bgcolor='F3F3F3'>
680
+ <td colspan='7' class='homearticlebody'>
681
+ <span class='homearticleheader'>04/10/2005 - <a href='?permit=2005-39'>Garrett Lemire Memorial Grand Prix</a></span>
682
+ | <span title='discipline'>CRIT</span> </td></tr>
683
+ <tr class='homearticlebody'>
684
+ <td>DQ / 48</td><td>-</td>
685
+ <td>Lance Armstrong</td><td>1917</td>
686
+ <td></td><td>120</td>
687
+ <td>Discovery</td></tr> <tr><td colspan='8'>&nbsp;</td></tr>
688
+ <tr bgcolor='F3F3F3'>
689
+ <td colspan='7' class='homearticlebody'>
690
+ <span class='homearticleheader'>02/24/2002 - <a href='?permit=2002-286'>Ronde Van Pace Bend</a></span>
691
+ | <span title='discipline'>RR</span> </td></tr>
692
+ <tr class='homearticlebody'>
693
+ <td>DQ / 77</td><td>-</td>
694
+ <td>Lance Armstrong</td><td>1917</td>
695
+ <td></td><td></td>
696
+ <td>US Postal Service</td></tr><tr><td class='homearticlebody' colspan='8'><br><center><a href='mailto:rankings@usacycling.org?subject=Please Update Results for Lance Armstrong (%231917)&body=This is the correct information that should be listed for the rider.%0D%0A%0D%0AEvent name:%0D%0AEvent date:%0D%0ARace info%2Fcategory:%0D%0APlace being updated:%0D%0AComments:'><b>Report missing or incorrect license numbers</a></b><br><br></center></td></tr></table></form></div><!-- end body -->
697
+ <div id='footer'>
698
+ <div style="display:inline-block; width:100%; height:300px; background-color:#031e41; border-top:5px solid #990000; text-align:center; vertical-align: middle;">
699
+ <div style="font-size:14px; font-weight:bold; color:#FFF; margin-top:50px; ">
700
+ <div style="width:50%; margin:0px auto;">
701
+ <div style="display:table-cell; padding-right:20px; text-align:center; vertical-align: middle;"><a href="https://imm.usacycling.org/about-us"><span style="color:#fff;">ABOUT</span></a></div>
702
+ <div style="display:table-cell; padding-right:20px; text-align:center; vertical-align: middle;"><a href="https://imm.usacycling.org/about-us/contact-us"><span style="color:#fff;">CONTACT US</span></a></div>
703
+ <div style="display:table-cell; padding-right:20px; text-align:center; vertical-align: middle;"><a href="https://register.usacycling.org/#!/events/merchandise/store"><span style="color:#fff;">SHOP NOW</span></a></div>
704
+ <div style="display:table-cell; padding-right:20px; text-align:center; vertical-align: middle;"><a href="https://www.strava.com/clubs/129377"><span style="color:#fff;">STRAVA</span></a></div>
705
+ <div style="display:table-cell; padding-right:20px; text-align:center; vertical-align: middle;"><a href="https://www.facebook.com/usacycling"><span style="color:#fff;">FACEBOOK</span></a></div>
706
+ <div style="display:table-cell; padding-right:20px; text-align:center; vertical-align: middle;"><a href="https://twitter.com/usacycling"><span style="color:#fff;">TWITTER</span></a></div>
707
+ <div style="display:table-cell; text-align:center; vertical-align: middle;"><a href="https://www.instagram.com/usacycling/"><span style="color:#fff;">INSTAGRAM</span></a></div>
708
+ </div><br/><br/><br/>
709
+ <img src="https://imm.usacycling.org/images/USACycling_Logo.png"/>
710
+ </div>
711
+ </div>
712
+ <table width="100%">
713
+ <tr>
714
+ <td>
715
+ Copyright &copy; 2017 by USA Cycling, Incorporated. All rights reserved. &nbsp; | &nbsp; <a href="/media/">Media</a> &nbsp; | &nbsp; <a href="/sitemap.htm">Site Map</a> &nbsp; | &nbsp; <a href='javascript:void(0)' onclick='genericDialog("/ajax/ajax.feedback.php?rurl=https://legacy.usacycling.org:443/results/index.php?compid=1917","Send Feedback",550,500);' />Feedback</a> &nbsp; | &nbsp; <a href='/rss/'>RSS Feeds</a> &nbsp; | &nbsp; <a href='/usa-cycling-staff-contacts-directory.htm'>Contact Us</a>
716
+ </td>
717
+ </tr>
718
+ </table>
719
+ </div>
720
+
721
+ </body>
722
+ </html>