<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Unhandled Exceptions</title>
	
	<link>http://unhandled-exceptions.com/blog</link>
	<description>Miscellaneous musings on life, .NET development, and related things that don't really matter</description>
	<pubDate>Wed, 21 Jul 2010 11:27:23 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/unhandled-exceptions" /><feedburner:info uri="unhandled-exceptions" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Analyzing Spring .NET with NDepend3</title>
		<link>http://feedproxy.google.com/~r/unhandled-exceptions/~3/duGCPopUuAw/</link>
		<comments>http://unhandled-exceptions.com/blog/index.php/2010/07/21/analyzing-spring-net-with-ndepend3/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 11:27:23 +0000</pubDate>
		<dc:creator>sbohlen</dc:creator>
		
		<category><![CDATA[Software Development Resources]]></category>

		<category><![CDATA[NHibernate]]></category>

		<category><![CDATA[Process]]></category>

		<category><![CDATA[Unit Test]]></category>

		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2010/07/21/analyzing-spring-net-with-ndepend3/</guid>
		<description><![CDATA[I last took a close look at NDepend over 18 months ago back in December of 2008 in this blog post.&#160; At that time, I spent some time looking at some of its higher-level features and shared some of my impressions of the tool.&#160; Now, some time later I’ve returned to the tool and I [...]]]></description>
			<content:encoded><![CDATA[<p>I last took a close look at <a href="http://www.ndepend.com" target="_blank">NDepend</a> over 18 months ago back in December of 2008 in <a href="http://unhandled-exceptions.com/blog/index.php/2008/12/30/ndepend-2x-review-holy-crap-this-thing-is-freakin-awesome/" target="_blank">this blog post</a>.&#160; At that time, I spent some time looking at some of its higher-level features and shared some of my impressions of the tool.&#160; Now, some time later I’ve returned to the tool and I just have to say – “WOW, this thing just keeps getting better and better in ways I didn’t think possible!”</p>
<p>When I accepted <a href="http://unhandled-exceptions.com/blog/index.php/2010/07/16/next-stop-springsource/" target="_blank">my new position with SpringSource</a>, I realized that my need to rapidly become familiar with the Spring .NET codebase provided me with a perfect opportunity to leverage NDepend 3.&#160; In this blog post I’m going to try to help you get a better feel for some of the finer points of NDepend 3 while using it to explore and become familiar with the structure and design of the Spring .NET codebase.</p>
<h2>“Installing” NDepend</h2>
<p>One of the first things you realize when it comes time to install NDepend is that <strong>there is no installer</strong>!&#160; Instead, NDepend is one of the few .NET programs out there on the market that actually bought into the whole “XCopy Deploy” meme that .NET 1.0 was so vocal about (and has since been an idea mostly lost somewhere along the way with the growth of everything from third-party commercial installer tools to WIX to the official line from Redmond being “No .msi?&#160; No uninstaller?&#160; Then no Windows-logo-compatibility for you!”).</p>
<p>Instead of installing it, just download the ZIP file, extract it somewhere (anywhere!) and double-click the .exe to launch it.&#160; A breath of fresh air in re: simplicity of installation, but frankly this is probably more ‘safe’ in the context of this kind of application because its target market is software developers.&#160; The kind of things an installer would do (check for prerequisites like having the .NET framework installed, etc.) are likely things that its users would already know they would need. </p>
<h2>Launching NDepend for the first time</h2>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/image.png"><img style="border-right-width: 0px; margin: 0px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="left" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/image-thumb.png" width="244" height="204" /></a>Well, technically this is “Launching VisualNDepend for the first time”, but bear with me here for a second.</p>
<p>NDepend itself is really two different pieces of software (perhaps even more than two if you start to count its add-ins for things like Visual Studio and RedGate’s .NET Reflector, but more on that later).&#160; </p>
<p>One piece, the <em>NDepend</em> console application, is used to perform the analysis of your assemblies (and to persist the results of that analysis as an XML-based “report”) and the other part, <em>VisualNDepend</em>, can be thought of as a sort of ‘visual explorer’ for those XML-based “reports”.&#160; But since launching VisualNDepend is probably the first step most will take after completing the “install”, let’s start there.</p>
<p>The first thing you will notice about VisualNDepend’s ‘startup state’ is that its very well-designed to get new users up to speed and using the product with with a minimum of difficulty.&#160; This is something that lots of software could take a cue from: consider what are likely the obvious questions a new user to your product would be asking and provide some easy-to-access guidance for them to help the user along.</p>
<p>In the case of VisualNDepend, this is provided for in a simple “Getting Started” task box that offers both on-click access to the extremely comprehensive and well-authored integrated help system and also to several videos (hosted on Amazon’s S3) that introduce the core concepts and initial steps required to get up and running with the product:</p>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/image1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/image-thumb1.png" width="459" height="144" /></a></p>
<p>One of the (several) things that helps to distinguish this release of NDepend from its prior versions is the <em>extremely</em> high level of integration with Visual Studio that it provides.&#160; The start screen for NDepend makes installing this dirt-simple for the new user as well – simply invoke the installer process from the obvious button below:</p>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/image2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/image-thumb2.png" width="459" height="164" /></a></p>
<p>As you can see from the installation options dialog box, support is available for VS 2005, 2008, and 2010 and each offers a choice between <em>Full Integration</em> and <em>Light Integration</em>.</p>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/image3.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/image-thumb3.png" width="459" height="266" /></a> </p>
<p>Prior to NDepend 3, Visual Studio integration was mostly limited to navigating back and forth between classes and methods in Visual NDepend and related source code in Visual Studio.&#160; Beginning with this release however, the integration story with Visual Studio becomes much more compelling.&#160; <em>Light Integration</em> is still mostly about navigating in code between a running instance of VisualNDepend and a running instance of Visual Studio although you can actually also perform CQL queries from inside Visual Studio as well as a few other so-called light-weight tasks.&#160; Still, the<em> Full Integration</em> option is where I expect most software developers will want to operate as it offers <strong>nearly the entire set of capabilities of the VisualNDepend product from within the Visual Studio shell directly</strong>.</p>
<p>Astute readers will notice from the screenshot above that the authors of NDepend have even provided a hyperlink to an webpage with short video on getting started with Visual Studio integration.&#160; This is just another example of some of the really thoughtful nuances of NDepend that are designed to improve the ease-of-use of an otherwise potentially quite complicated product.</p>
<h2>Analyzing Dependencies in Spring .NET</h2>
<p>One of the all-time best uses for a static code analysis tool like NDepend is to use the program as an exploratory tool as you “wander” through an unfamiliar code-base.&#160; The graphs and other visualizations of the relationships between the components of the solution make the project much more comprehensible.</p>
<p>As an example, the following screenshot shows the dependency graph for the primary assemblies of Spring .NET:</p>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/image4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/image-thumb4.png" width="459" height="395" /></a> </p>
<p>This visualization makes it easy to see that the ‘foundation’ of Spring .NET is the <font face="Courier New">Spring.Core</font> project.&#160; <font face="Courier New">Spring.Aop</font>, <font face="Courier New">Spring.Web</font>, and <font face="Courier New">Spring.Services</font> all have a direct dependency on <font face="Courier New">Spring.Core </font>as does <font face="Courier New">Spring.Template.Velocity</font>.&#160; Because in this particular graph the area (size) of the boxes reflects relative number of lines of code in each project, we can see that of these immediate dependencies <font face="Courier New">Spring.Aop</font> and <font face="Courier New">Spring.Web</font> are the largest project with <font face="Courier New">Spring.Services</font> following closely behind but that <font face="Courier New">Spring.Template.Velocity </font>is a much smaller project than the others at this dependency level.</p>
<p><font face="Courier New">Spring.Data</font> and <font face="Courier New">Spring.Web.Extensions</font> follow on in the next tier of dependencies followed then by a plethora of smaller ‘subsystems’ in Spring .NET such as the support libraries for the various versions of NHibernate, Messaging support libraries, Scheduling, and more.</p>
<p>This is more or less what one would expect of a set of framework libraries, of course – common elements at the bottom, more powerful but still general abstractions built atop that core, followed closely by ever-more-specific functional libraries atop that.&#160; But a graph like this one – and the fact that its possible to just point NDepend at the Spring .NET assemblies and have it rapidly generate this visual is a tremendous help in starting to understand the dependency structures involved in the projects.</p>
<h2>Identifying Potential Pain Points in Spring .NET</h2>
<p>One of the things at which NDepend excels is in gathering and analyzing so-called ‘code metrics’.&#160; I mentioned CQL, the Code-Query-Language, supported by NDepend in my <a href="http://unhandled-exceptions.com/blog/index.php/2008/12/30/ndepend-2x-review-holy-crap-this-thing-is-freakin-awesome/" target="_blank">last post about v2.x</a> and its still present in v3 too of course.&#160; NDepend ships with a set of very useful pre-defined queries (and you can can create your own additional queries in CQL and save/retrieve them too).</p>
<p>Some of the most interesting (to me) to use when inspecting an unfamiliar codebase are those in the ‘code quality’ category.&#160; Here I’m selecting the 10 methods that have been found to have the highest <a href="http://en.wikipedia.org/wiki/Cyclomatic_complexity" target="_blank">cyclomatic complexity</a> (CC) metric.</p>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/image5.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/image-thumb5.png" width="459" height="273" /></a> </p>
<p>…and here we see the list of those 10 methods in Spring .NET having a CC of &gt; 20…</p>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/image6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/image-thumb6.png" width="459" height="550" /></a> </p>
<p>The one highlighted at the top is of particular concern to me as its got a near-unbelievable CC value of 124!&#160; This certainly makes this method stand out like the proverbial ‘sore thumb’, making it worthy of further investigation.&#160; Fortunately, NDepend makes such exploration amazingly easy – simply double-clicking on the method name in the CQL output window immediately opens the method’s source file in the code editor window for me.&#160; NDepend knows how to navigate the codebase to take me directly to where I want to go.</p>
<p>For fun, here’s this actual method from the <font face="Courier New">Spring.Expressions.Parser.<font color="#008080">ExpressionLexer</font></font> class…</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> mID(<span style="color: #0000ff">bool</span> _createToken) <span style="color: #008000">//throws RecognitionException, CharStreamException, TokenStreamException</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span> {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span>         <span style="color: #0000ff">int</span> _ttype; IToken _token=<span style="color: #0000ff">null</span>; <span style="color: #0000ff">int</span> _begin=text.Length;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span>         _ttype = ID;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span>         </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span>         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span>             <span style="color: #0000ff">switch</span> ( cached_LA1 )</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span>             {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span>             <span style="color: #0000ff">case</span> <span style="color: #006080">'a'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'b'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'c'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'d'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10">  10:</span>             <span style="color: #0000ff">case</span> <span style="color: #006080">'e'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'f'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'g'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'h'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11">  11:</span>             <span style="color: #0000ff">case</span> <span style="color: #006080">'i'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'j'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'k'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'l'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12">  12:</span>             <span style="color: #0000ff">case</span> <span style="color: #006080">'m'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'n'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'o'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'p'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum13">  13:</span>             <span style="color: #0000ff">case</span> <span style="color: #006080">'q'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'r'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'s'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'t'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum14">  14:</span>             <span style="color: #0000ff">case</span> <span style="color: #006080">'u'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'v'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'w'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'x'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum15">  15:</span>             <span style="color: #0000ff">case</span> <span style="color: #006080">'y'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'z'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum16">  16:</span>             {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum17">  17:</span>                 matchRange(<span style="color: #006080">'a'</span>,<span style="color: #006080">'z'</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum18">  18:</span>                 <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum19">  19:</span>             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum20">  20:</span>             <span style="color: #0000ff">case</span> <span style="color: #006080">'A'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'B'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'C'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'D'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum21">  21:</span>             <span style="color: #0000ff">case</span> <span style="color: #006080">'E'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'F'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'G'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'H'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum22">  22:</span>             <span style="color: #0000ff">case</span> <span style="color: #006080">'I'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'J'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'K'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'L'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum23">  23:</span>             <span style="color: #0000ff">case</span> <span style="color: #006080">'M'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'N'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'O'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'P'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum24">  24:</span>             <span style="color: #0000ff">case</span> <span style="color: #006080">'Q'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'R'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'S'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'T'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum25">  25:</span>             <span style="color: #0000ff">case</span> <span style="color: #006080">'U'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'V'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'W'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'X'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum26">  26:</span>             <span style="color: #0000ff">case</span> <span style="color: #006080">'Y'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'Z'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum27">  27:</span>             {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum28">  28:</span>                 matchRange(<span style="color: #006080">'A'</span>,<span style="color: #006080">'Z'</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum29">  29:</span>                 <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum30">  30:</span>             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum31">  31:</span>             <span style="color: #0000ff">case</span> <span style="color: #006080">'_'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum32">  32:</span>             {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum33">  33:</span>                 match(<span style="color: #006080">'_'</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum34">  34:</span>                 <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum35">  35:</span>             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum36">  36:</span>             <span style="color: #0000ff">default</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum37">  37:</span>             {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum38">  38:</span>                 <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> NoViableAltForCharException(cached_LA1, getFilename(), getLine(), getColumn());</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum39">  39:</span>             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum40">  40:</span>              }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum41">  41:</span>         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum42">  42:</span>         {    <span style="color: #008000">// ( ... )*</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum43">  43:</span>             <span style="color: #0000ff">for</span> (;;)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum44">  44:</span>             {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum45">  45:</span>                 <span style="color: #0000ff">switch</span> ( cached_LA1 )</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum46">  46:</span>                 {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum47">  47:</span>                 <span style="color: #0000ff">case</span> <span style="color: #006080">'a'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'b'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'c'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'d'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum48">  48:</span>                 <span style="color: #0000ff">case</span> <span style="color: #006080">'e'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'f'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'g'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'h'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum49">  49:</span>                 <span style="color: #0000ff">case</span> <span style="color: #006080">'i'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'j'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'k'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'l'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum50">  50:</span>                 <span style="color: #0000ff">case</span> <span style="color: #006080">'m'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'n'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'o'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'p'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum51">  51:</span>                 <span style="color: #0000ff">case</span> <span style="color: #006080">'q'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'r'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'s'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'t'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum52">  52:</span>                 <span style="color: #0000ff">case</span> <span style="color: #006080">'u'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'v'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'w'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'x'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum53">  53:</span>                 <span style="color: #0000ff">case</span> <span style="color: #006080">'y'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'z'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum54">  54:</span>                 {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum55">  55:</span>                     matchRange(<span style="color: #006080">'a'</span>,<span style="color: #006080">'z'</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum56">  56:</span>                     <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum57">  57:</span>                 }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum58">  58:</span>                 <span style="color: #0000ff">case</span> <span style="color: #006080">'A'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'B'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'C'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'D'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum59">  59:</span>                 <span style="color: #0000ff">case</span> <span style="color: #006080">'E'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'F'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'G'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'H'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum60">  60:</span>                 <span style="color: #0000ff">case</span> <span style="color: #006080">'I'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'J'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'K'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'L'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum61">  61:</span>                 <span style="color: #0000ff">case</span> <span style="color: #006080">'M'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'N'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'O'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'P'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum62">  62:</span>                 <span style="color: #0000ff">case</span> <span style="color: #006080">'Q'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'R'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'S'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'T'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum63">  63:</span>                 <span style="color: #0000ff">case</span> <span style="color: #006080">'U'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'V'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'W'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'X'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum64">  64:</span>                 <span style="color: #0000ff">case</span> <span style="color: #006080">'Y'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'Z'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum65">  65:</span>                 {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum66">  66:</span>                     matchRange(<span style="color: #006080">'A'</span>,<span style="color: #006080">'Z'</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum67">  67:</span>                     <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum68">  68:</span>                 }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum69">  69:</span>                 <span style="color: #0000ff">case</span> <span style="color: #006080">'_'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum70">  70:</span>                 {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum71">  71:</span>                     match(<span style="color: #006080">'_'</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum72">  72:</span>                     <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum73">  73:</span>                 }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum74">  74:</span>                 <span style="color: #0000ff">case</span> <span style="color: #006080">'0'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'1'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'2'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'3'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum75">  75:</span>                 <span style="color: #0000ff">case</span> <span style="color: #006080">'4'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'5'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'6'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'7'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum76">  76:</span>                 <span style="color: #0000ff">case</span> <span style="color: #006080">'8'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'9'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum77">  77:</span>                 {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum78">  78:</span>                     matchRange(<span style="color: #006080">'0'</span>,<span style="color: #006080">'9'</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum79">  79:</span>                     <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum80">  80:</span>                 }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum81">  81:</span>                 <span style="color: #0000ff">default</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum82">  82:</span>                 {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum83">  83:</span>                     <span style="color: #0000ff">goto</span> _loop166_breakloop;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum84">  84:</span>                 }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum85">  85:</span>                  }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum86">  86:</span>             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum87">  87:</span> _loop166_breakloop:            ;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum88">  88:</span>         }    <span style="color: #008000">// ( ... )*</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum89">  89:</span>         _ttype = testLiteralsTable(_ttype);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum90">  90:</span>         <span style="color: #0000ff">if</span> (_createToken &amp;&amp; (<span style="color: #0000ff">null</span> == _token) &amp;&amp; (_ttype != Token.SKIP))</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum91">  91:</span>         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum92">  92:</span>             _token = makeToken(_ttype);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum93">  93:</span>             _token.setText(text.ToString(_begin, text.Length-_begin));</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum94">  94:</span>         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum95">  95:</span>         returnToken_ = _token;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum96">  96:</span>     }</pre>
<p><!--CRLF--></div>
</div>
<p>As you can see, the seemingly-impossible-to-achieve CC value of 124 <img src='http://unhandled-exceptions.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> is largely due to the approach of having a switch condition for every letter of the alphabet (both uppercase and lowercase) and another for every digit from 0-9 in this single method.&#160; Although this does <em>technically</em> result in an absurdly high CC analysis metric for this method, a quick review of why this method has so high a CC value tells me that its really not as difficult to comprehend this method as a CC value of 124 would suggest at first-glance.</p>
<p>This is a <strong>big</strong> part of the value of having a tool like NDepend integrated so well right into the IDE in this manner: you can quickly investigate and validate such statistical outliers when they come to your attention to determine whether they are worth taking corrective action to address.</p>
<p>As a complete ‘aside’, you can also infer that this method was ported from <em>the Spring Framework for Java</em> since you can see how the checked exceptions syntax has been left intact from the port at the top of the method declaration (though obviously its been commented out since – as we all know and has been thoroughly debated by many – the C# language doesn’t have support for checked exceptions!).&#160; Personally I find it quite interesting that while the initial design decision not to include support for Checked Exception in C# is vigorously defended by the language’s author(s), in .NET 4 we’ve now got support for Code Contracts in a way that at least tries to solve the same kinds of troubles in the code that Checked Exceptions were intended to solve, but that’s probably a post for another day…</p>
<p>In addition to cyclomatic complexity being a possible indication of long-term maintenance concerns for the codebase, another great metric to look at is Source Lines of Code (SLOC) in each method.&#160; Fortunately, as seen in the following screenshot NDepend ships with a CQL query that covers that too…</p>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/image7.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/image-thumb7.png" width="459" height="222" /></a> </p>
<p>The names of the top ten longest methods in the Spring .NET code are shown the CQL results pane for further investigation:</p>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/image8.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/image-thumb8.png" width="459" height="550" /></a> </p>
<p>That method with the 153 lines is initially a candidate for further investigation – I sure wouldn’t want to have to read through a 153-line long method to try to understand what its doing before attempting to fix a bug or add additional functionality to it!&#160; Just as before, NDepend makes it simple to just double-click on the method in the CQL results pane and jump right to the code:</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff">public</span> IToken nextToken()            <span style="color: #008000">//throws TokenStreamException</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span>         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span>             IToken theRetToken = <span style="color: #0000ff">null</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span> tryAgain:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span>             <span style="color: #0000ff">for</span> (;;)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span>             {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span>                 IToken _token = <span style="color: #0000ff">null</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span>                 <span style="color: #0000ff">int</span> _ttype = Token.INVALID_TYPE;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span>                 resetText();</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10">  10:</span>                 <span style="color: #0000ff">try</span>     <span style="color: #008000">// for char stream error handling</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11">  11:</span>                 {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12">  12:</span>                     <span style="color: #0000ff">try</span>     <span style="color: #008000">// for lexical error handling</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum13">  13:</span>                     {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum14">  14:</span>                         <span style="color: #0000ff">switch</span> ( cached_LA1 )</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum15">  15:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum16">  16:</span>                         <span style="color: #0000ff">case</span> <span style="color: #006080">'\t'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'\n'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">'\r'</span>:  <span style="color: #0000ff">case</span> <span style="color: #006080">' '</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum17">  17:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum18">  18:</span>                             mWS(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum19">  19:</span>                             theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum20">  20:</span>                             <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum21">  21:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum22">  22:</span>                         <span style="color: #0000ff">case</span> <span style="color: #006080">'@'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum23">  23:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum24">  24:</span>                             mAT(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum25">  25:</span>                             theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum26">  26:</span>                             <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum27">  27:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum28">  28:</span>                         <span style="color: #0000ff">case</span> <span style="color: #006080">'`'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum29">  29:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum30">  30:</span>                             mBACKTICK(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum31">  31:</span>                             theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum32">  32:</span>                             <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum33">  33:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum34">  34:</span>                         <span style="color: #0000ff">case</span> <span style="color: #006080">'|'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum35">  35:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum36">  36:</span>                             mPIPE(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum37">  37:</span>                             theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum38">  38:</span>                             <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum39">  39:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum40">  40:</span>                         <span style="color: #0000ff">case</span> <span style="color: #006080">'#'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum41">  41:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum42">  42:</span>                             mPOUND(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum43">  43:</span>                             theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum44">  44:</span>                             <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum45">  45:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum46">  46:</span>                         <span style="color: #0000ff">case</span> <span style="color: #006080">'('</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum47">  47:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum48">  48:</span>                             mLPAREN(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum49">  49:</span>                             theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum50">  50:</span>                             <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum51">  51:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum52">  52:</span>                         <span style="color: #0000ff">case</span> <span style="color: #006080">')'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum53">  53:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum54">  54:</span>                             mRPAREN(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum55">  55:</span>                             theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum56">  56:</span>                             <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum57">  57:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum58">  58:</span>                         <span style="color: #0000ff">case</span> <span style="color: #006080">'['</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum59">  59:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum60">  60:</span>                             mLBRACKET(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum61">  61:</span>                             theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum62">  62:</span>                             <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum63">  63:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum64">  64:</span>                         <span style="color: #0000ff">case</span> <span style="color: #006080">']'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum65">  65:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum66">  66:</span>                             mRBRACKET(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum67">  67:</span>                             theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum68">  68:</span>                             <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum69">  69:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum70">  70:</span>                         <span style="color: #0000ff">case</span> <span style="color: #006080">'}'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum71">  71:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum72">  72:</span>                             mRCURLY(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum73">  73:</span>                             theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum74">  74:</span>                             <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum75">  75:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum76">  76:</span>                         <span style="color: #0000ff">case</span> <span style="color: #006080">','</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum77">  77:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum78">  78:</span>                             mCOMMA(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum79">  79:</span>                             theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum80">  80:</span>                             <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum81">  81:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum82">  82:</span>                         <span style="color: #0000ff">case</span> <span style="color: #006080">';'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum83">  83:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum84">  84:</span>                             mSEMI(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum85">  85:</span>                             theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum86">  86:</span>                             <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum87">  87:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum88">  88:</span>                         <span style="color: #0000ff">case</span> <span style="color: #006080">':'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum89">  89:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum90">  90:</span>                             mCOLON(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum91">  91:</span>                             theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum92">  92:</span>                             <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum93">  93:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum94">  94:</span>                         <span style="color: #0000ff">case</span> <span style="color: #006080">'+'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum95">  95:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum96">  96:</span>                             mPLUS(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum97">  97:</span>                             theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum98">  98:</span>                             <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum99">  99:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum100"> 100:</span>                         <span style="color: #0000ff">case</span> <span style="color: #006080">'-'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum101"> 101:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum102"> 102:</span>                             mMINUS(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum103"> 103:</span>                             theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum104"> 104:</span>                             <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum105"> 105:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum106"> 106:</span>                         <span style="color: #0000ff">case</span> <span style="color: #006080">'/'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum107"> 107:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum108"> 108:</span>                             mDIV(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum109"> 109:</span>                             theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum110"> 110:</span>                             <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum111"> 111:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum112"> 112:</span>                         <span style="color: #0000ff">case</span> <span style="color: #006080">'*'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum113"> 113:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum114"> 114:</span>                             mSTAR(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum115"> 115:</span>                             theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum116"> 116:</span>                             <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum117"> 117:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum118"> 118:</span>                         <span style="color: #0000ff">case</span> <span style="color: #006080">'%'</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum119"> 119:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum120"> 120:</span>                             mMOD(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum121"> 121:</span>                             theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum122"> 122:</span>                             <span style="color: #0000ff">break</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum123"> 123:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum124"> 124:</span>                         <span style="color: #0000ff">default</span>:</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum125"> 125:</span>                             <span style="color: #0000ff">if</span> ((cached_LA1==<span style="color: #006080">'?'</span>) &amp;&amp; (cached_LA2==<span style="color: #006080">'?'</span>))</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum126"> 126:</span>                             {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum127"> 127:</span>                                 mDEFAULT(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum128"> 128:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum129"> 129:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum130"> 130:</span>                             <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> ((cached_LA1==<span style="color: #006080">'='</span>) &amp;&amp; (cached_LA2==<span style="color: #006080">'='</span>)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum131"> 131:</span>                                 mEQUAL(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum132"> 132:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum133"> 133:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum134"> 134:</span>                             <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> ((cached_LA1==<span style="color: #006080">'!'</span>) &amp;&amp; (cached_LA2==<span style="color: #006080">'='</span>)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum135"> 135:</span>                                 mNOT_EQUAL(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum136"> 136:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum137"> 137:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum138"> 138:</span>                             <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> ((cached_LA1==<span style="color: #006080">'&lt;'</span>) &amp;&amp; (cached_LA2==<span style="color: #006080">'='</span>)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum139"> 139:</span>                                 mLESS_THAN_OR_EQUAL(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum140"> 140:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum141"> 141:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum142"> 142:</span>                             <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> ((cached_LA1==<span style="color: #006080">'&gt;'</span>) &amp;&amp; (cached_LA2==<span style="color: #006080">'='</span>)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum143"> 143:</span>                                 mGREATER_THAN_OR_EQUAL(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum144"> 144:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum145"> 145:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum146"> 146:</span>                             <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> ((cached_LA1==<span style="color: #006080">'!'</span>) &amp;&amp; (cached_LA2==<span style="color: #006080">'{'</span>)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum147"> 147:</span>                                 mPROJECT(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum148"> 148:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum149"> 149:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum150"> 150:</span>                             <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> ((cached_LA1==<span style="color: #006080">'?'</span>) &amp;&amp; (cached_LA2==<span style="color: #006080">'{'</span>)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum151"> 151:</span>                                 mSELECT(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum152"> 152:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum153"> 153:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum154"> 154:</span>                             <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> ((cached_LA1==<span style="color: #006080">'^'</span>) &amp;&amp; (cached_LA2==<span style="color: #006080">'{'</span>)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum155"> 155:</span>                                 mSELECT_FIRST(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum156"> 156:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum157"> 157:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum158"> 158:</span>                             <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> ((cached_LA1==<span style="color: #006080">'$'</span>) &amp;&amp; (cached_LA2==<span style="color: #006080">'{'</span>)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum159"> 159:</span>                                 mSELECT_LAST(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum160"> 160:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum161"> 161:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum162"> 162:</span>                             <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> ((cached_LA1==<span style="color: #006080">'T'</span>) &amp;&amp; (cached_LA2==<span style="color: #006080">'('</span>)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum163"> 163:</span>                                 mTYPE(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum164"> 164:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum165"> 165:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum166"> 166:</span>                             <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> ((cached_LA1==<span style="color: #006080">'{'</span>) &amp;&amp; (cached_LA2==<span style="color: #006080">'|'</span>)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum167"> 167:</span>                                 mLAMBDA(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum168"> 168:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum169"> 169:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum170"> 170:</span>                             <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> ((cached_LA1==<span style="color: #006080">'\\') &amp;&amp; (cached_LA2=='</span>.<span style="color: #006080">')) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum171"> 171:</span>                                 mDOT_ESCAPED(true);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum172"> 172:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum173"> 173:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum174"> 174:</span>                             else if ((cached_LA1=='</span>\<span style="color: #006080">''</span>) &amp;&amp; ((cached_LA2 &gt;= <span style="color: #006080">'\u0000'</span> &amp;&amp; cached_LA2 &lt;= <span style="color: #006080">'\ufffe'</span>))) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum175"> 175:</span>                                 mSTRING_LITERAL(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum176"> 176:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum177"> 177:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum178"> 178:</span>                             <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> ((cached_LA1==<span style="color: #006080">'0'</span>) &amp;&amp; (cached_LA2==<span style="color: #006080">'x'</span>)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum179"> 179:</span>                                 mHEXADECIMAL_INTEGER_LITERAL(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum180"> 180:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum181"> 181:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum182"> 182:</span>                             <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> ((cached_LA1==<span style="color: #006080">'\\') &amp;&amp; (true)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum183"> 183:</span>                                 mBACKSLASH(true);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum184"> 184:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum185"> 185:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum186"> 186:</span>                             else if ((cached_LA1=='</span>!<span style="color: #006080">') &amp;&amp; (true)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum187"> 187:</span>                                 mBANG(true);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum188"> 188:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum189"> 189:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum190"> 190:</span>                             else if ((cached_LA1=='</span>?<span style="color: #006080">') &amp;&amp; (true)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum191"> 191:</span>                                 mQMARK(true);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum192"> 192:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum193"> 193:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum194"> 194:</span>                             else if ((cached_LA1=='</span>$<span style="color: #006080">') &amp;&amp; (true)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum195"> 195:</span>                                 mDOLLAR(true);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum196"> 196:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum197"> 197:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum198"> 198:</span>                             else if ((cached_LA1=='</span>{<span style="color: #006080">') &amp;&amp; (true)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum199"> 199:</span>                                 mLCURLY(true);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum200"> 200:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum201"> 201:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum202"> 202:</span>                             else if ((cached_LA1=='</span>=<span style="color: #006080">') &amp;&amp; (true)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum203"> 203:</span>                                 mASSIGN(true);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum204"> 204:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum205"> 205:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum206"> 206:</span>                             else if ((cached_LA1=='</span>^<span style="color: #006080">') &amp;&amp; (true)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum207"> 207:</span>                                 mPOWER(true);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum208"> 208:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum209"> 209:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum210"> 210:</span>                             else if ((cached_LA1=='</span>&lt;<span style="color: #006080">') &amp;&amp; (true)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum211"> 211:</span>                                 mLESS_THAN(true);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum212"> 212:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum213"> 213:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum214"> 214:</span>                             else if ((cached_LA1=='</span>&gt;<span style="color: #006080">') &amp;&amp; (true)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum215"> 215:</span>                                 mGREATER_THAN(true);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum216"> 216:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum217"> 217:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum218"> 218:</span>                             else if ((cached_LA1=='</span>\<span style="color: #006080">''</span>) &amp;&amp; (<span style="color: #0000ff">true</span>)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum219"> 219:</span>                                 mQUOTE(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum220"> 220:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum221"> 221:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum222"> 222:</span>                             <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> ((tokenSet_0_.member(cached_LA1)) &amp;&amp; (<span style="color: #0000ff">true</span>)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum223"> 223:</span>                                 mID(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum224"> 224:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum225"> 225:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum226"> 226:</span>                             <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> ((tokenSet_1_.member(cached_LA1)) &amp;&amp; (<span style="color: #0000ff">true</span>)) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum227"> 227:</span>                                 mNUMERIC_LITERAL(<span style="color: #0000ff">true</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum228"> 228:</span>                                 theRetToken = returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum229"> 229:</span>                             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum230"> 230:</span>                         <span style="color: #0000ff">else</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum231"> 231:</span>                         {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum232"> 232:</span>                             <span style="color: #0000ff">if</span> (cached_LA1==EOF_CHAR) { uponEOF(); returnToken_ = makeToken(Token.EOF_TYPE); }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum233"> 233:</span>                 <span style="color: #0000ff">else</span> {<span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> NoViableAltForCharException(cached_LA1, getFilename(), getLine(), getColumn());}</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum234"> 234:</span>                         }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum235"> 235:</span>                         <span style="color: #0000ff">break</span>; }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum236"> 236:</span>                         <span style="color: #0000ff">if</span> ( <span style="color: #0000ff">null</span>==returnToken_ ) <span style="color: #0000ff">goto</span> tryAgain; <span style="color: #008000">// found SKIP token</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum237"> 237:</span>                         _ttype = returnToken_.Type;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum238"> 238:</span>                         returnToken_.Type = _ttype;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum239"> 239:</span>                         <span style="color: #0000ff">return</span> returnToken_;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum240"> 240:</span>                     }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum241"> 241:</span>                     <span style="color: #0000ff">catch</span> (RecognitionException e) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum242"> 242:</span>                             <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> TokenStreamRecognitionException(e);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum243"> 243:</span>                     }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum244"> 244:</span>                 }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum245"> 245:</span>                 <span style="color: #0000ff">catch</span> (CharStreamException cse) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum246"> 246:</span>                     <span style="color: #0000ff">if</span> ( cse <span style="color: #0000ff">is</span> CharStreamIOException ) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum247"> 247:</span>                         <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> TokenStreamIOException(((CharStreamIOException)cse).io);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum248"> 248:</span>                     }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum249"> 249:</span>                     <span style="color: #0000ff">else</span> {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum250"> 250:</span>                         <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> TokenStreamException(cse.Message);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum251"> 251:</span>                     }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum252"> 252:</span>                 }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum253"> 253:</span>             }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum254"> 254:</span>         }</pre>
<p><!--CRLF--></div>
</div>
</p>
</p>
<p>As a quick review of this longest single method in the entire Spring .NET codebase points out &#8212; similar to the method with the highest cyclomatic complexity &#8212; this longest method (153 lines!) is really only this long because of the sheer number of conditions (tokens, really) that it has to process.</p>
<h2>What Else is New in NDepend 3?</h2>
<p>There are two final somewhat related features that I really need to mention if you’re considering NDepend or any other structural analysis tooling.&#160; One of them is the ability to compare analysis from different versions of the same project (e.g., compare v1 to v1.1, etc.) in order to identify not just code analysis metrics for a single snapshot in time but also to begin to understand trends in these metrics over time.&#160; This is a tremendously powerful (and valuable) capability as it tells you not only where you project <em>is</em> but also whether its headed in the right direction or not on all of these very useful code metrics.</p>
<p>The second of these very important features is also extremely valuable: the ability to integrate code coverage reports from unit test runs into the analysis and visualizations.&#160; This feature permits you to review code coverage alongside the other code metrics as you are reviewing them.&#160; Find a method with a very high cyclomatic complexity?&#160; Well, one of the factors that will probably play into your decision of whether or not that method should be a real cause for concern or not will likely be understanding how well that highly-complex method is covered by unit tests – and this feature gives you the ability to integrate that intelligence right into the NDepend analysis and visualizations.</p>
<p>Look for more info on my experiences with both of these additional features in a future post.</p>
<h2>What About the VS2010 Ultimate Architect Tooling?</h2>
<p>Those of you familiar with the so-called “Architecture” tools included in the VS2010 Ultimate edition are probably wondering “why wouldn’t I just use the tooling provided there instead of a third-party tool?”&#160; This is a pretty good question (on the surface) but let’s explore some of the obvious and not-so-obvious answers to that question:</p>
<ul>
<li>The Architecture tools in VS2010 Ultimate Edition are only available for VS2010 and even then only in the ‘Ultimate Edition’ so if you aren’t yet on VS2010 you’re out of luck there.&#160; NDepend’s integrated VS tooling is available for VS2005 and VS2008 as well as VS2010.&#160; And even if (by chance) you’re still on VS2003 or VS2002 (the original VS.NET release), you can still use 100% of the NDepend functionality via the external VisualNDepend application and navigate between all the diagrams and the code in your IDE the same as if you were on a more recent Visual Studio instance. </li>
<li>The <a href="http://msdn.microsoft.com/en-us/subscriptions/buy.aspx" target="_blank">cost differential between an MSDN Ultimate subscription and an MSDN Premium subscription</a> is tremendous (over $5,000!).&#160; Granted, there are a <em>lot</em> of other benefits to MSDN Ultimate that go well beyond just getting access to the Architecture tools in VS2010, but if the Architecture tools are all you <em>really</em> want the only way to get access to them is to pay that $5,000 per seat premium to Microsoft for the Ultimate subscription.&#160; And that $5,000 differential gets worse of course (about $10,000 per seat) if you’re otherwise only looking at MSDN Professional subscriptions.&#160; <a href="http://ndepend.com/Purchase.aspx" target="_blank">The NDepend pricing model</a> (because its for *just* the Architecture-style tooling capabilities) is considerably more approachable (under $400 per seat) for the developer/team that just wants access to this singular set to tooling. </li>
<li>The Architecture tools in VS2010 Ultimate are *only* integrated into the IDE.&#160; This means that everyone needing to analyze, view, inspect, etc. the code using these tools needs a license of Visual Studio – and needs to know how to <em>use</em> Visual Studio.&#160; Since NDepend operates against the compiled binaries of your project, VisualNDepend can be launched by others involved in the project who may not be well-versed in the use of Visual Studio (or have licenses of Visual Studio allocated to them). </li>
<li>NDepend (from the console) has a strong Continuous Integration integration story (pardon the double use of ‘integration’ there!).&#160; You can simply display NDepend’s own HTML report output as part of your CI build reporting or you can apply one or more XSLT transforms to its XML output to easily customize what you display in CI reports.&#160; VS2010’s Architecture tools output .dgml diagrams that don’t benefit from this kind of an (easy) integration story. </li>
<li>NDepend’s idea of being able to provide ‘analysis diffs’ between one or more versions of your compiled binaries (to see changes, trends, etc. over time) isn’t really manifest anywhere in the VS2010 Architecture tooling (at least not yet!). </li>
<li>NDepend’s ability to ‘overlay’ unit test code-coverage reporting into its analysis and visual display of information is simply brilliant and also isn’t manifest anywhere in the VS2010 Architecture tooling.&#160; And since Microsoft doesn’t have any code-coverage tool of its own AFAIK, its probably unlikely that this capability would be coming soon to VS2010 Ultimate. </li>
</ul>
<h2>Conclusion</h2>
<p>If you’re serious about a static code analysis tool for .NET, you owe it to yourself to download the trial of NDepend 3 – its not only a tremendously valuable tool in your .NET development arsenal, but is also one of the more thoughtfully and professionally designed pieces of software I’ve had the pleasure to use in a long time!</p>
<img src="http://feeds.feedburner.com/~r/unhandled-exceptions/~4/duGCPopUuAw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://unhandled-exceptions.com/blog/index.php/2010/07/21/analyzing-spring-net-with-ndepend3/feed/</wfw:commentRss>
		<feedburner:origLink>http://unhandled-exceptions.com/blog/index.php/2010/07/21/analyzing-spring-net-with-ndepend3/</feedburner:origLink></item>
		<item>
		<title>Next Stop: SpringSource</title>
		<link>http://feedproxy.google.com/~r/unhandled-exceptions/~3/22U3gjqhs5Y/</link>
		<comments>http://unhandled-exceptions.com/blog/index.php/2010/07/16/next-stop-springsource/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 16:52:06 +0000</pubDate>
		<dc:creator>sbohlen</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[ALT.NET]]></category>

		<category><![CDATA[NHibernate]]></category>

		<category><![CDATA[People]]></category>

		<category><![CDATA[Process]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2010/07/16/next-stop-springsource/</guid>
		<description><![CDATA[
I’m very excited to be able to announce that as of this past Monday July 12th, 2010 I have officially begun work in my new position as a Senior Software Engineer with SpringSource.  This opportunity represents the next (interesting) step in my software development career and I’m looking very forward to the kinds of things [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://springsource.com/" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="spring09_logo" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/07/spring09-logo.png" border="0" alt="spring09_logo" width="244" height="54" align="left" /></a></p>
<p>I’m very excited to be able to announce that as of this past Monday July 12th, 2010 I have officially begun work in my new position as a Senior Software Engineer with SpringSource.  This opportunity represents the next (interesting) step in my software development career and I’m looking very forward to the kinds of things this position will permit me to focus upon as time progresses and I’m able to grow into the role.</p>
<h2>Plus ça change, plus c&#8217;est la même chose</h2>
<p><em>(for the French-challenged, that’s “The more things change the more they stay the same”)</em></p>
<p>In this new role, I will be ramping up to act as both the <strong>Technical Lead</strong> and the <strong>Community Evangelist</strong> for the <a href="http://www.springframework.net" target="_blank">Spring .NET Application Framework project</a>.</p>
<p>As <em>Technical Lead</em> for the project, my role is expected to primarily consist of a combination of technical management and software development tasks including…</p>
<ul>
<li>Designing, developing, testing, and documenting Spring .NET features</li>
<li>Coordinating development activities with external (non-SpringSource) committers</li>
<li>Managing the release process</li>
<li>Triaging and Fixing bugs</li>
</ul>
<p>As <em>Community Evangelist</em> for the project, my role is expected to focus on the following areas…</p>
<ul>
<li>Promoting the Spring.NET Framework to .NET developers in conferences, blogs, twitter, etc.</li>
<li>Interacting with users in the Spring.NET forums</li>
</ul>
<p>Those of you who know me well will probably recognize some significant similarity between this set of responsibilities and the kinds of things that I <em>already</em> do in connection with several <em>other</em> Open Source Software projects in the .NET ecosystem.  This is an important aspect of what makes me excited about this opportunity: in a weird – and entirely accidental &#8212; way my activities in the .NET OSS community have been a sort of ‘training’ for this very position (or certainly one very much like it!).</p>
<p>Any time you can get paid to do something you love to do anyway you’ve pretty much got a ‘win’ on your hands.  I already had some of that in re: designing and developing software for a living, but being able to now add to that the kinds of activities in the OSS world that I previously had to perform in my spare (off-hours) time has to be considered an even bigger ‘win’ for me – and hopefully for SpringSource and the Spring .NET user community at large!</p>
<h2>What a Long, Strange Trip its Been…</h2>
<p>“We now rejoin our intrepid hero where we last left him…”</p>
<p>Seriously though, this new position is the next step for me in a journey that really began innocently enough nearly two full years ago with the combination of two events: the recording and launch of my <a href="http://www.summerofnhibernate.com" target="_blank">Summer of NHibernate</a> screencast series in June of 2008 and my co-founding (with several others) of <a href="http://nyalt.net" target="_blank">the NYC ALT.NET User Group</a> in August of 2008.</p>
<p>The Summer of NHibernate screencasts inadvertently started me down a path of significantly increased visibility as a member of arguably one of the most highly visible OSS projects in the .NET ecosystem – certainly one with the most vocal contributors :)  This had the (turns out incredibly valuable) effect of increasing my ‘street cred’ in the .NET OSS community.  The number of people I meet at CodeCamps and other similar gatherings of .NET developers that approach me and offer “I just wanted to say thanks for that great video series – it enabled me to learn NH in a fraction of the time I would have needed otherwise!” is truly the best compliment I could ever ask for in return for that effort.</p>
<p>The co-founding of the NYC ALT.NET User Group turned out to be important for two reasons: 1) one of the other co-founders of the group whom I met through this process was Mark Pollack, the original author of the Spring .NET Framework (and now my co-worker here at SpringSource) and 2) the local Microsoft Developer and Platform Evangelism team’s involvement in helping to provide space and other logistics support for the user group began my introduction and involvement in the rest of the local NYC area .NET development community.</p>
<p>This series of relationships more recently resulted in my being Chairperson of the most-recent <a href="http://unhandled-exceptions.com/blog/index.php/2010/03/08/nyc-codecamp-winter-2010-thats-a-wrap/" target="_blank">NYC CodeCamp event</a> in March of this year – which in turn put me on a first-name basis with all kinds of speakers, presenters, attendees, and others in the local community and beyond.  And its though this series of ever-expanding professional relationships that much of my opportunity to do <a href="http://unhandled-exceptions.com/blog/index.php/community-cv/" target="_blank">a variety of other public speaking engagements</a> has progressed.</p>
<p>Looking back on all this, one might be tempted to conclude that it was all part of some grand plan to end up being offered an actual job that pays me to do all this that I already do on a volunteer basis, but that’s simply not the case.  This present opportunity for me is merely the result of some strange confluence of events all happening to coincide at about the same time – including but not limited to my interest in leaving my last position with <a href="http://www.guardian.co.uk/media/2010/jun/15/news-corp-skiff" target="_blank">Skiff as it was acquired by NewsCorp</a> and my not really being too excited about the opportunity to work for Rupert Murdock, et. al. in a journalism industry with a somewhat questionable future.</p>
<h2>The Essence of Spring .NET</h2>
<p>How do I see Spring .NET?  Well, there’s always the official brief of the Framework…</p>
<blockquote><p>Led and sustained by <a href="http://www.springsource.com/" target="_blank">SpringSource</a>, a division of <a href="http://www.vmware.com" target="_blank">VMware</a>, Spring .NET is an open source application framework that makes building  enterprise .NET applications easier.  </p>
<p>Providing components based on proven design patterns that can be integrated into all tiers of your application architecture, Spring helps increase development productivity and improve application quality and performance.</p></blockquote>
<p>…but from my perspective the important part of the Spring.NET Framework is found on the <a href="http://springframework.net/overview.html" target="_blank">overview page</a> of the project website:</p>
<blockquote><p>The design of Spring .NET is based on the Java version of the Spring Framework, which has shown real-world benefits and is used in thousands of enterprise applications world wide.  Spring .NET is not a quick port from the Java version, but rather a &#8217;spiritual port&#8217; based on following proven architectural and design patterns in that are not tied to a particular platform.</p></blockquote>
<h2>Why Should I Care About Spring .NET?</h2>
<p>Its a fact of history that Java preceded the .NET Framework’s development.  Because of this (and many other factors too of course), the Java developer community has in many ways had a sort of ‘head-start’ on the .NET developer community.</p>
<p>This isn’t a post about so-called ‘Java-envy’ from the perspective of a .NET developer – I’ve known (and worked with) enough poor-quality Java developers to know that there’s a significant amount of <a href="http://simple.wikipedia.org/wiki/Grass" target="_blank">grass-is-always-greener</a> going on when most .NET developers look to the Java community.  Having spent some time there, I can assure you that its not all ‘roses’ over there in Java-land – its got its own warts too <img src='http://unhandled-exceptions.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>But with their frameworks, platforms, and general approach to the practices of software development, the Java developer community has tread on ahead further down the path of evolution than that of the .NET ecosystem in many ways.  We can debate the veracity of some of their conclusions, but that they are battle-tested and the result of a lot of real-world stress-testing is beyond contention.  Some of the issues with which the .NET developer ecosystem is only just now starting to grapple in significant numbers, the broader Java community has long-since settled and addressed. </p>
<p>We in .NET often see the physical manifestation of this in the so called “<strong>N*</strong> projects” that began their lives as (often direct) ports of Java projects on the JVM into the C# language on the CLR (<strong>N</strong>Unit, <strong>N</strong>Hibernate, <strong>N</strong>Behave, <strong>N</strong>Spec, etc., etc., etc. – and, yes, Spring .NET too, despite the fact that its not named “<strong>N</strong>Spring” – thank God &lt;g&gt;).</p>
<p>Even though many of these began as ‘pure’ language-porting efforts, over time these frameworks began to grow and diverge from their &#8216;Java’ roots to express themselves more as .NET projects, adopting the memes of their new environment – often mostly in the form of .NET language syntax for their APIs (lambdas being the most visible recent example of this but also in more subtle ways) but also to add features and capabilities not found in their Java ‘parent’ projects that were more appropriate the .NET platform.</p>
<p>But at their core, most of these such projects still share significant commonalities with their Java roots – and that means that in important ways they are a kind of codification of the <em>results</em> of the early struggles that the Java community had with these same software development issues.  I see these frameworks, tools, and other artifacts as a kind of “trail of bread crumbs” marking where the Java community has been and the conclusions gleaned from some hard-learned lessons that they picked up along the way.</p>
<p>In the Java ecosystem, <a href="http://www.springsource.com/products/enterprise" target="_blank">the Spring Framework</a> is in many ways the defacto development stack on top of the core Java libraries on the JVM.  There are a good number of business and historical reasons why that is the case, but many of the reasons are also technical and architectural: the Java community has learned some painful lessons from many past missteps and much of the results of those lessons are to be found codified in the design of the Spring Framework for Java.</p>
<p>Borrowing heavily from the concepts and patterns in the Spring Framework for Java, Spring .NET is in many ways the best embodiment of the lessons learned by the Java community in the context of Enterprise Systems Development – and as such, one of the best ways for a .NET enterprise developer to acquire some of the benefit of those very same lessons (without having to relearn them for themselves in quite the same &#8212; usually painful &#8212; way!).</p>
<h2>What’s in the Future for Spring .NET?</h2>
<p>Its clear from history that not all of the challenges in the Enterprise Systems development space have been solved by “the Java guys” (or even by “the .NET guys”) by a long-shot.  There’s plenty more to solve, patterns to uncover, and areas to explore, both in Enterprise software development and elsewhere.</p>
<p>And its clear to me that the .NET ecosystem has a lot of valuable experiences to offer <em>other</em> software development communities in return.  We’re looking to the Spring .NET Framework project to be the vehicle by which such experiences and patterns are captured, codified, and made available to others for their easy and efficient consumption in subsequent software development projects – making it just as easy for developers to leverage the collective lessons-learned by others in their own software development projects.</p>
<h2>Want More Info?</h2>
<p>What is this drivel?  I want specifics, damn it! <img src='http://unhandled-exceptions.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>There will be much more to follow but as I’m just five days into the job (and still figuring out the shortest path from my desk to the coffee machine!) its a bit early for me to be publicly communicating a project roadmap, release milestones, or anything else ‘official-sounding’, but stay tuned for more coherent announcements, activity, and details about both short and long-term plans for Spring .NET.</p>
<p>You can watch my blog here for more info, but I would encourage you to visit the <a href="http://www.springframework.net">http://www.springframework.net</a> site itself for ‘official announcements’.</p>
<p>And for more up-to-the-minute micro-announcements and interesting Spring .NET news, follow our new <a href="http://twitter.com/springfornet" target="_blank">SpringForNet account on Twitter (@SpringForNet)</a>.</p>
<p>I’d love to hear from you about opinions, features, functions, focus, and more – let the conversation begin!</p>
<img src="http://feeds.feedburner.com/~r/unhandled-exceptions/~4/22U3gjqhs5Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://unhandled-exceptions.com/blog/index.php/2010/07/16/next-stop-springsource/feed/</wfw:commentRss>
		<feedburner:origLink>http://unhandled-exceptions.com/blog/index.php/2010/07/16/next-stop-springsource/</feedburner:origLink></item>
		<item>
		<title>DevsForWendy</title>
		<link>http://feedproxy.google.com/~r/unhandled-exceptions/~3/Ul6Hif5O6lg/</link>
		<comments>http://unhandled-exceptions.com/blog/index.php/2010/06/30/devsforwendy/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 16:26:33 +0000</pubDate>
		<dc:creator>sbohlen</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[NHibernate]]></category>

		<category><![CDATA[People]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2010/06/30/devsforwendy/</guid>
		<description><![CDATA[Who is Wendy Friedlander?

This is a post that’s a bit off-topic but I hope that you will find value in it all the same.  Let me take a moment to introduce you to Wendy Friedlander.
Wendy Friedlander is a software developer, loving mom and wife who turned into a cancer-survivor-in-training on 8/14/2009.
It was the weekend of [...]]]></description>
			<content:encoded><![CDATA[<h2>Who is Wendy Friedlander?</h2>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/06/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/06/image-thumb.png" border="0" alt="image" width="264" height="204" align="left" /></a></p>
<p>This is a post that’s a bit off-topic but I hope that you will find value in it all the same.  Let me take a moment to introduce you to <a href="http://wundasworld.blogspot.com/" target="_blank">Wendy Friedlander</a>.</p>
<p>Wendy Friedlander is a software developer, loving mom and wife who turned into a cancer-survivor-in-training on 8/14/2009.</p>
<p>It was the weekend of her daughter&#8217;s first birthday, when she found out she has a rare pediatric cancer called <a href="http://en.wikipedia.org/wiki/Rhabdomyosarcoma" target="_blank">aveolar rhabdomyosarcoma</a>. She had to immediately wean her daughter, Kaylee, and start a new life of being separated from Kaylee and her husband, Matt.</p>
<p>This has taken an emotional and financial toll on her family. She has had to stop working and Matt has had to switch to part-time work to care for Wendy and Kaylee. As you can imagine, the costs of childcare, mortgage, and medical expenses add up quickly.</p>
<p>This cancer has changed Wendy’s world. Rhabdo is a very aggressive form of cancer. The treatment consists of high dose chemotherapy and radiation. Receiving her treatment at <a href="http://www.mskcc.org/44" target="_blank">Sloan Kettering Memorial Cancer Center</a> separates her from her family most of the time.</p>
<p>Before becoming a cancer patient (and soon to be cancer survivor!), Wendy was a software developer consultant for her company, Agile Solutions LLC. She specialized in agile software development with a focus on pair programming and test driven development. Most of her expertise is in the rich client community, mostly WPF over the last few years.</p>
<p>After taking some time to recover from treatment and reconnect with her family, Wendy hopes to return to her coding ways.</p>
<p><strong>And we hope to welcome her back!</strong></p>
<h2>What Can *YOU* Do To Make a Difference?</h2>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/06/image1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/06/image-thumb1.png" border="0" alt="image" width="264" height="204" align="left" /></a></p>
<p>To help them financially and to show support for them emotionally, the NYC-area software development community is organizing a benefit dinner to help raise money for Wendy and her family.  This brilliant idea was started by <a href="http://girldeveloper.com/" target="_blank">Sara Chipps</a> and I have been contributing what effort I can to assist in helping out where needed.</p>
<p>This dinner will be held At 7pm on this coming Wednesday evening <strong>July 7th in New York City</strong> – the exact location is still awaiting confirmation (and may need to vary based on the number of RSVPs we receive).</p>
<p>The cost of this dinner is $75 per person and 100% of all proceeds go direct to Wendy and her family.  Its likely that the dinner will consist merely of the oh-so-common user-group fare of Pizza and Soda so you can rest assured that probably $65 or more of every $75 collected will go to benefit Wendy.</p>
<p>You can <a href="http://devsforwendy.com/buytickets.html" target="_blank">RSVP for the dinner here</a> – and the sooner the better so that we can begin to select a location capable of accommodating the right number of attendees.  Payment is accepted via most major credit cards, PayPal, and even electronic check if that suits you.</p>
<h2>Times are Hard, I can’t Quite Swing the $75</h2>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/06/image2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/06/image-thumb2.png" border="0" alt="image" width="264" height="204" align="left" /></a></p>
<p>If you don’t think you can handle the $75 per person cost of attending the dinner, cannot adjust your schedule in time to attend, or are simply too remote to attend the event, <strong>please consider strongly making a donation directly to Wendy and her family</strong>.</p>
<p><a href="http://devsforwendy.com/donate.html" target="_blank">Donations are accepted here</a> and may be made in <strong><em>ANY</em></strong> amount you feel comfortable contributing.  1$, 5$, $10, $50 or more – the wonderful thing about SCALE is that even the smallest of contributions when added together can often produce GIANT results.  If even 100 people each gave $10, that would be $1000 for Wendy and her family.</p>
<p>Think about it.  Really.  Please.</p>
<h2>A Very Special Guest Speaker :</h2>
<h1>Charles Petzold</h1>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/06/image3.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/06/image-thumb3.png" border="0" alt="image" width="264" height="214" align="left" /></a> We are very pleased to be able to announce that <a href="http://www.charlespetzold.com/" target="_blank">Charles Petzold</a> has graciously agreed to be our featured speaker at the event!  Author of <a href="http://www.charlespetzold.com/books.html" target="_blank">about a gazillion books</a> on Programming, Computers, .NET, and more, if you have never had the pleasure of watching him deliver a talk, you are in for a real treat!</p>
<p>Clever, entertaining, enthusiastic, <em>and</em> informative, Charles never fails to deliver a talk worth seeing on just about any topic.  For this event, Charles has promised to deliver a very special talk on a unique topic available only to paid attendees at this benefit dinner:</p>
<blockquote><p>The evening will include a unique presentation by Charles Petzold on an obscure (but interesting) chapter in the history of computing with appearances (in chronological order) by Cicero, Galileo, Kepler, Newton, Fourier, Charles Darwin, Lord Kelvin, Madame Curie, and Albert Einstein.</p></blockquote>
<p>The intent of this talk is actually to take a look at some of the history of computing in a different and historical light so as to appeal not only to the technology crowd but also to be broad enough to be of interest to spouses, life-partners, and significant-others that might also be interested in attending the event.</p>
<p>Seriously – think about buying an extra ticket and bringing your spouse or significant other to this event – despite the presence of pizza and soda, this evening will prove to be so much more than your typical geek-fest – we promise</p>
<h2>Also Starring Miguel Castro</h2>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/06/image4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/06/image-thumb4.png" border="0" alt="image" width="264" height="204" align="left" /></a></p>
<p>Venerable NYC-area (yes, and NJ-area too &lt;g&gt;) <a href="http://www.dotnetdude.com/" target="_blank">“.NET Dude” Miguel Castro</a> has also volunteered to speak at this benefit event!</p>
<p>Boisterous, annoying, flippant, and frequently insulting, if anyone has seen a Miguel Castro presentation before you can rest assured he has promised to deliver something very <em>un-Miguel</em> for this event so you needn’t worry too much!</p>
<p>I am of course kidding :)  Miguel actually <em>has</em> promised to deliver a talk just for this event that’s a little different from his usual fare, but I’m sure we can count on his usual personality still being front-and-center for us all to “enjoy” !</p>
<p>(Seriously – Miguel is actually a great speaker who never fails to deliver an excellent and thought-provoking talk on some of the more complex technologies in the MS universe so this is a great chance to see him in perfect form!)</p>
<h2>Free 30-day TEKPUB Subscriptions for EVERY Attendee!</h2>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/06/image5.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/06/image-thumb5.png" border="0" alt="image" width="264" height="204" align="left" /></a></p>
<p>To sweeten the pot for attendees <strong>even more</strong>, the great people behind the screencasting / developer education site <a href="http://www.tekpub.com" target="_blank">TekPub</a> have graciously committed to provide a free 30-day unlimited access subscription to all of their content for <strong>every attendee who purchases a ticket</strong> to the event.</p>
<p>With screencasts on topics ranging from NHibernate to Ruby on Rails to ASP.NET MVC to Entity Framework 4 and more, this 30-day TekPub subscription will permit you to ‘drink from their firehose of content’ as much as you can for 30 days!</p>
<p>To accommodate those that cannot attend, <strong>anyone making a donation of $75 or more will also qualify for this guaranteed subscription offer</strong>.</p>
<p>Further demonstrating their commitment to the developer community, TekPub has <strong>also</strong> contributed a single 1-year subscription to their site which  is to be raffled off at the event to one lucky attendee!</p>
<h2>More Cowbell, More SWAG!</h2>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/06/image6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/06/image-thumb6.png" border="0" alt="image" width="264" height="204" align="left" /></a></p>
<p>We also have commitments from several other vendors (including <a href="http://www.jetbrains.com" target="_blank">JetBrains</a>, <a href="http://www.devexpress.com" target="_blank">Developer Express</a>, and more!) to donate additional software licenses to raffle off to attendees!  All of this points to a whole host of reasons why you should make it a point to try to attend this event next Wednesday evening!</p>
<p>And if by chance you cannot attend due to schedule, finances, geography, or other constraints, <strong>please, please, please</strong> consider making even the smallest of monetary donations.  The economics of scale can easily turn the tiniest of efforts into a very effective campaign!</p>
<h2>Help Get the Word Out to all the Corners of the Internet!</h2>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/06/image7.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/06/image-thumb7.png" border="0" alt="image" width="231" height="264" align="left" /></a></p>
<p>Please do what you can to share info about Wendy, this event, and the donation link with your friends, acquaintances, connections, followers – heck, even share this with your ENEMIES!</p>
<p>Help get the word out so that we can all collectively do everything in our considerable power to help Wendy and her family through this difficult time.</p>
<p>If the word ‘community’ is to mean <em>anything</em>, then its in support of something like this that it can really show its ability to make a difference in a meaningful way.</p>
<p>Your contribution of money, time, effort, or just spreading the word is much appreciated by everyone!</p>
<img src="http://feeds.feedburner.com/~r/unhandled-exceptions/~4/Ul6Hif5O6lg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://unhandled-exceptions.com/blog/index.php/2010/06/30/devsforwendy/feed/</wfw:commentRss>
		<feedburner:origLink>http://unhandled-exceptions.com/blog/index.php/2010/06/30/devsforwendy/</feedburner:origLink></item>
		<item>
		<title>Plugins for DXCore/CodeRushXpress/CodeRush/Refactor! Pro 2010.1.4 RTM Available</title>
		<link>http://feedproxy.google.com/~r/unhandled-exceptions/~3/koIXtcP2tJY/</link>
		<comments>http://unhandled-exceptions.com/blog/index.php/2010/05/23/plugins-for-dxcorecoderushxpresscoderushrefactor-pro-201014-rtm-available/#comments</comments>
		<pubDate>Sun, 23 May 2010 20:44:49 +0000</pubDate>
		<dc:creator>sbohlen</dc:creator>
		
		<category><![CDATA[Software Development Resources]]></category>

		<category><![CDATA[SolutionOutliner]]></category>

		<category><![CDATA[CodeRush]]></category>

		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2010/05/23/plugins-for-dxcorecoderushxpresscoderushrefactor-pro-201014-rtm-available/</guid>
		<description><![CDATA[With the recent (finally!) release of the RTM of the various Visual Studio productivity tools from DevExpress, its now possible for me to provide binaries of most of my plugins recompiled to run against the latest version of the DXCore API.
Although all of these plugins are open source and thus its easy for anyone to [...]]]></description>
			<content:encoded><![CDATA[<p>With the recent (finally!) release of the RTM of the various Visual Studio productivity tools from DevExpress, its now possible for me to provide binaries of most of my plugins recompiled to run against the latest version of the DXCore API.</p>
<p>Although all of these plugins are open source and thus its easy for anyone to check them out compile them for themselves, as a convenience for others I am also providing compiled instances of them here for download as follows:</p>
<ol>
<li><a href="http://code.google.com/p/dxsourceoutliner/downloads/list" target="_blank">DX_SourceOutliner</a></li>
<li><a href="http://unhandled-exceptions.com/downloads/CR_ClassCleaner_2010.1.4.zip" target="_blank">CR_ClassCleaner</a></li>
<li><a href="http://unhandled-exceptions.com/downloads/Refactor_ClassCleaner_Menu_2010.1.4.zip" target="_blank">Refactor_ClassCleaner_Menu</a></li>
<li><a href="http://unhandled-exceptions.com/downloads/CR_DeclareClassInProject_2010.1.4.zip" target="_blank">CR_DeclareClassInProject</a></li>
<li><a href="http://unhandled-exceptions.com/downloads/Refactor_MoveTypeToFileInSpecificProject_2010.1.4.zip" target="_blank">Refactor_MoveTypeToFileInSpecificProject</a></li>
<li><a href="http://unhandled-exceptions.com/downloads/Refactor_UpdateNamespace_2010.1.4.zip" target="_blank">Refactor_UpdateNamespace</a></li>
</ol>
<p>Enjoy~!</p>
<img src="http://feeds.feedburner.com/~r/unhandled-exceptions/~4/koIXtcP2tJY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://unhandled-exceptions.com/blog/index.php/2010/05/23/plugins-for-dxcorecoderushxpresscoderushrefactor-pro-201014-rtm-available/feed/</wfw:commentRss>
		<feedburner:origLink>http://unhandled-exceptions.com/blog/index.php/2010/05/23/plugins-for-dxcorecoderushxpresscoderushrefactor-pro-201014-rtm-available/</feedburner:origLink></item>
		<item>
		<title>DXCore/CodeRush/Refactor!Pro Plugins updated for DXCore 10.1.3 RC2</title>
		<link>http://feedproxy.google.com/~r/unhandled-exceptions/~3/pMCdeuis_-E/</link>
		<comments>http://unhandled-exceptions.com/blog/index.php/2010/05/05/dxcorecoderushrefactorpro-plugins-updated-for-dxcore-1013-rc2/#comments</comments>
		<pubDate>Wed, 05 May 2010 11:16:46 +0000</pubDate>
		<dc:creator>sbohlen</dc:creator>
		
		<category><![CDATA[SolutionOutliner]]></category>

		<category><![CDATA[CodeRush]]></category>

		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2010/05/05/dxcorecoderushrefactorpro-plugins-updated-for-dxcore-1013-rc2/</guid>
		<description><![CDATA[I’ve really been trying to hold off on bothering to release updated binaries of several of my Visual Studio plugins until the next release of the underlying DexExpress platform (DXCore, etc.) reaches RTM.&#160; Just about every Beta, RC, etc. release invalidates the prior binaries of my plugins and requires a recompilation before they will work [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve really been trying to hold off on bothering to release updated binaries of several of my Visual Studio plugins until the next release of the underlying DexExpress platform (DXCore, etc.) reaches RTM.&#160; Just about every Beta, RC, etc. release invalidates the prior binaries of my plugins and requires a recompilation before they will work again and with a new pre-RTM release becoming available just about every 3-5 days, its more work than its worth to continue to build these and post them for download in keeping with that frequency.</p>
<p>That said, since DevExpress had promised a final RTM of DXCore/CodeRush/Refactor!Pro by the end of April (<a href="http://community.devexpress.com/blogs/ctodx/archive/2010/05/04/release-date-notes-for-v2010-1.aspx" target="_blank">and its already May 5th without an RTM</a>), I’m giving up on waiting and providing a single download containing DXCore 10.1.3 (what DevExpress calls ‘RC2’ of DXCore 10.1) –compatible builds of the following tools for anyone who cannot wait any longer:</p>
<ul>
<li><a href="http://dxsourceoutliner.googlecode.com" target="_blank">DX SourceOutliner</a></li>
<li>CR_ClassCleaner</li>
<li>Refactor_ClassCleaner_Menu (the extension to classlcleaner that adds it to the refactor pro context menu)</li>
</ul>
<p>You can download all of these in <a href="http://unhandled-exceptions.com/downloads/DXCore_10.1.3_RC2_Plugins.zip" target="_blank">a single ZIP file from here</a>.</p>
<p>Once the final RTM of DXCore/CodeRush/Refactor!Pro 10.1 is released, I will post updated versions of the same binaries once the platform is stable.</p>
<img src="http://feeds.feedburner.com/~r/unhandled-exceptions/~4/pMCdeuis_-E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://unhandled-exceptions.com/blog/index.php/2010/05/05/dxcorecoderushrefactorpro-plugins-updated-for-dxcore-1013-rc2/feed/</wfw:commentRss>
		<feedburner:origLink>http://unhandled-exceptions.com/blog/index.php/2010/05/05/dxcorecoderushrefactorpro-plugins-updated-for-dxcore-1013-rc2/</feedburner:origLink></item>
		<item>
		<title>Philadelphia CodeCamp: That’s a Wrap!</title>
		<link>http://feedproxy.google.com/~r/unhandled-exceptions/~3/ipM2TgfztPc/</link>
		<comments>http://unhandled-exceptions.com/blog/index.php/2010/04/12/philadelphia-codecamp-thats-a-wrap/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 21:13:18 +0000</pubDate>
		<dc:creator>sbohlen</dc:creator>
		
		<category><![CDATA[CodeCamp]]></category>

		<category><![CDATA[ALT.NET]]></category>

		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2010/04/12/philadelphia-codecamp-thats-a-wrap/</guid>
		<description><![CDATA[This past weekend I had the good fortune of having been invited back down to do a presentation for the Philadelphia Code Camp on 4/10/2010.&#160; I presented a brand new talk (of mine) entitled “Mocks and Fakes and Stubs, Oh my!&#160; Leveraing Mock Object Frameworks for Real-World Test-Driven Development Practices”.&#160; I’m guessing that if nothing [...]]]></description>
			<content:encoded><![CDATA[<p>This past weekend I had the good fortune of having been invited back down to do a presentation for the Philadelphia Code Camp on 4/10/2010.&#160; I presented a brand new talk (of mine) entitled “Mocks and Fakes and Stubs, Oh my!&#160; Leveraing Mock Object Frameworks for Real-World Test-Driven Development Practices”.&#160; I’m guessing that if nothing else I will have won the award for ‘longest session title’ for the event <img src='http://unhandled-exceptions.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>For more info on the event itself, check out Dani Diaz’s blog post over <a href="http://smallandmighty.net/blog/philly-code-camp-2010-1-is-in-the-books/" target="_blank">here</a>.</p>
<p>Mean time, if you’re here for my slides or my code, they are available for download at the following links:</p>
<ul>
<li><a href="http://unhandled-exceptions.com/downloads/Philly.NET_CodeCamp_ALT.NET_Track_Mocks_and_Fakes_and_Stubs_Oh_My_slides.zip" target="_blank">Slides</a></li>
<li><a href="http://unhandled-exceptions.com/downloads/Philly.NET_CodeCamp_ALT.NET_Track_Mocks_and_Fakes_and_Stubs_Oh_My_Initial_Code.zip" target="_blank">Initial Starting Code Sample</a></li>
<li><a href="http://unhandled-exceptions.com/downloads/Philly.NET_CodeCamp_ALT.NET_Track_Mocks_and_Fakes_and_Stubs_Oh_My_Final_Code.zip" target="_blank">Final Ending Code Sample</a></li>
</ul>
<p>If anyone here reading this was present for this session, I’d really appreciate any comments/feedback as this is the first time I’ve delivered this particular combination of the content and topic so I’m keenly interested in whether you thought it was well-conceived, targeted properly, or confusing and completely overwhelming.</p>
<p>(of course, if you’re here to get the code and the slides, its probably also the case that you thought the session was pretty good, so maybe this is too self-selecting a sample for which I could draw any useful conclusions!)</p>
<p>Happy coding, everyone~!</p>
<img src="http://feeds.feedburner.com/~r/unhandled-exceptions/~4/ipM2TgfztPc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://unhandled-exceptions.com/blog/index.php/2010/04/12/philadelphia-codecamp-thats-a-wrap/feed/</wfw:commentRss>
		<feedburner:origLink>http://unhandled-exceptions.com/blog/index.php/2010/04/12/philadelphia-codecamp-thats-a-wrap/</feedburner:origLink></item>
		<item>
		<title>My Community Megaphone Podcast Interview is Available!</title>
		<link>http://feedproxy.google.com/~r/unhandled-exceptions/~3/7mNPiIYP2k8/</link>
		<comments>http://unhandled-exceptions.com/blog/index.php/2010/03/25/my-community-megaphone-podcast-interview-is-available/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 21:32:56 +0000</pubDate>
		<dc:creator>sbohlen</dc:creator>
		
		<category><![CDATA[CodeCamp]]></category>

		<category><![CDATA[Software Development Process]]></category>

		<category><![CDATA[People]]></category>

		<category><![CDATA[Process]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2010/03/25/my-community-megaphone-podcast-interview-is-available/</guid>
		<description><![CDATA[In case you care (and if you’re reading this I’ll have to assume that either you’re terrible at using search engines to find relevant content on the Internet or else you’re here on purpose and so you probably DO care), my interview on the Community Megaphone Podcast is now published and can be downloaded from [...]]]></description>
			<content:encoded><![CDATA[<p>In case you care (and if you’re reading this I’ll have to assume that either you’re terrible at using search engines to find relevant content on the Internet or else you’re here on purpose and so you probably DO care), my interview on the Community Megaphone Podcast is now published and can be downloaded from their site <a href="http://www.communitymegaphonepodcast.com/Show/6/Stephen-Bohlen" target="_blank">here</a>.</p>
<h3>WTF is a Community Megaphone?</h3>
<p><a href="http://communitymegaphone.com/" target="_blank">Community Megaphone</a> is a site created by <a href="http://blogs.msdn.com/gduthie/" target="_blank">Andrew Duthie</a>, a MS Developer Evangelist for the mid-Atlantic region to help connect .NET developers with (community) events in their region (or elsewhere too, if they are interested).&#160; If you haven’t tried the site out, I strongly recommend it as a way to get connected to events in your own local software development community.</p>
<p>As an outgrowth of that effort, Andrew and <a href="http://geekswithblogs.net/danemorgridge/" target="_blank">Dane Morgridge</a> have teamed up to co-create <a href="http://www.communitymegaphonepodcast.com" target="_blank">The Community Megaphone Podcast</a> that focuses on discussions with people active in their local .NET developer communities.&#160; Although a relatively recent addition to the podcasting universe (they just published episode #6), by focusing on people and community rather than specific technologies per se, their content offers an interesting change from the more familiar “Today we’re interviewing one of the PMs on the Silverlight 9 team to talk about data-binding without writing a line of code…” type of podcast that already clogs the InterTubes in more-than-sufficient-number.</p>
<h3>Can’t be That Good: They Wanted to Talk to Me!</h3>
<p>Despite all that, they wanted to interview me for their latest episode anyway ;)&#160; In a somewhat rambling, conversational style discussion we covered some of my thoughts on getting started on contributing to Open Source Projects, some of the challenges to managing OSS work, some of the highlights of the recent NYC CodeCamp event (that I have also blogged about prior both <a href="http://unhandled-exceptions.com/blog/index.php/2010/03/08/nyc-codecamp-winter-2010-thats-a-wrap/" target="_blank">here</a> and <a href="http://unhandled-exceptions.com/blog/index.php/2010/03/13/nyc-codecamp-winter-2010-session-evaluation-process-results-and-conclusions/" target="_blank">here</a>), and some of my impressions of some of the announcements that came out of the MIX2010 conference that just recently concluded.</p>
<p>If you’ve got an hour to kill and nothing better to do, go over and have a listen <img src='http://unhandled-exceptions.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>As always, comments, feedback, constructive criticism (and more) are always welcome.</p>
<p>Happy Coding~!</p>
<img src="http://feeds.feedburner.com/~r/unhandled-exceptions/~4/7mNPiIYP2k8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://unhandled-exceptions.com/blog/index.php/2010/03/25/my-community-megaphone-podcast-interview-is-available/feed/</wfw:commentRss>
		<feedburner:origLink>http://unhandled-exceptions.com/blog/index.php/2010/03/25/my-community-megaphone-podcast-interview-is-available/</feedburner:origLink></item>
		<item>
		<title>How Do *YOU* Think About the Problem?</title>
		<link>http://feedproxy.google.com/~r/unhandled-exceptions/~3/SjHTxGQhgPg/</link>
		<comments>http://unhandled-exceptions.com/blog/index.php/2010/03/23/how-do-you-think-about-the-problem/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 01:06:47 +0000</pubDate>
		<dc:creator>sbohlen</dc:creator>
		
		<category><![CDATA[NHibernate]]></category>

		<category><![CDATA[Software Development Process]]></category>

		<category><![CDATA[O/RM]]></category>

		<category><![CDATA[People]]></category>

		<category><![CDATA[Process]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2010/03/23/how-do-you-think-about-the-problem/</guid>
		<description><![CDATA[Every day I have a bus commute in and out of Manhattan from Staten Island that takes anywhere from between 45 minutes on the low side to about an hour and a half on the high side (well, that’s not entirely accurate—I’ve had some commutes that have taken over three hours, but fortunately only when [...]]]></description>
			<content:encoded><![CDATA[<p>Every day I have a bus commute in and out of Manhattan from Staten Island that takes anywhere from between 45 minutes on the low side to about an hour and a half on the high side (well, that’s not entirely accurate—I’ve had some commutes that have taken over three hours, but fortunately only when there’s some kind of horrible auto accident that gums up the works pretty badly).</p>
<p>To make productive use of that time, I write code on my laptop, catch up on some reading, nap a bit sometimes (I’m getting old, you know!), and mostly listen to podcasts.  I also draft blog posts as I’m doing right now with this one :)  The other day I was listening to one of the many podcasts that I subscribe to in order to fill this 2-3 hours every day and I heard an interviewee say something that struck me as being both seemingly obvious and yet also profound:</p>
<blockquote><p>In order to work effectively [in software development], its important to select frameworks written by people who think about the problem in the same way as yourself.</p></blockquote>
<h3>Shared Values –&gt; No (nasty) Surprises</h3>
<p>On its face, this seems like pretty obvious advice to me.  If the author of a framework you select to build atop shares a similar ‘technology world-view’ and mental model of the problem-space as yourself, then its also likely that you will share a similar value-system re: what’s important in good software and what’s not, how to extend and grow software atop a framework, the best way to implement solutions, and more.  All of this commonality of value-system brings with it certain intangible advantages, probably chief among them being a feeling of sort of ‘being in the head’ of the framework authors – a feeling of having found a kindred software development ‘spirit’ in the framework’s author(s).</p>
<p>When this happens, you often find that the framework behaves “the way you reasonably expect it to” and rarely will its behavior significantly surprise you (except perhaps pleasantly!).  Methods and classes in the framework are found pretty much “right where you would expect them to be” because that’s similar to where you would have put them yourself had <em>you</em> written the framework code.  The framework is extensible in just the right places (and in just the right way!) that you need it to be because you and the author share a commonality of values leading to similar design decisions in software.</p>
<p>I’m obviously describing the ideal case where you find a framework that <em>perfectly</em> suits you.  In the real world this rarely if ever happens in quite this way because the only way to ensure this to be true would be for you to have written the framework yourself of course.  But I bet we can all relate to having worked with frameworks and technology that shared our value system more than others.  And we can all also acknowledge that there is a significantly reduced friction when working with those frameworks authored by those who share our underlying value system and increasing friction from using frameworks and technologies whose underpinnings tend to diverge from our values.</p>
<h3>Did I Ever Think My Choices Through This Way?</h3>
<p>This certainly makes a lot of good sense to me (and hopefully you as well), but I confess to never having really thought about it like that on a conscious level.  Certainly there have been those technologies and frameworks that I have used in my work that come closer to ‘fitting me like a glove’ than others, but I never really stopped to consider that it might be an underlying difference of world-view that was at the root of much of the friction I have experienced with some of these things at varying times in the past.</p>
<p>So I began to wonder to myself whether I was perhaps applying this decision-making process on a subconscious level.</p>
<h3>This Isn’t Another WebForms vs. MVC Post</h3>
<p>No, really.  Its not.  I don’t think the choice between ASP.NET WebForms and ASP.NET MVC comes down to “A is better than B” or “A is for people who know WTF they are doing and B is for idiots who can’t program their way out of a paper bag” or “A is for people who care about the quality of their work and B is for people who want to just get the job done fast and go home”, and I certainly don’t think it comes down to “A is a car and B is a motorcycle” as has been suggested by others in the past (an interesting if somewhat confusing metaphor IMO).</p>
<p>If we look at the choice between WebForms and MVC through the lens of which one best fits my ‘world view’, then it becomes easy to see why I would say “I will never again (willingly) build another WebForms application as long as I live.  Period.”  Its got nothing to do with the commonly-offered decision points like some or all of the following:</p>
<ul>
<li>Is the project something quick as a proof-of-concept vs. something that I (or anyone else) will be maintaining long-term?</li>
<li>Is it forms-over-data vs. something with a richer UX than just query-update-save (with an occasional delete sprinkled in there for fun)?</li>
<li>Is it a small departmental app vs. an enterprise or public-facing site that needs to scale?</li>
</ul>
<p>None of these ‘pivot-points’ are remotely useful to me in deciding which of these two frameworks to choose because <em>both</em> WebForms <em>and </em>MVC have perfectly capable and arguable reasons why they are the best answer to each of these potential decision-points, making these criteria useless to me as discriminators.</p>
<h3>WebForms Through Different Eyes</h3>
<p>But looking at WebForms through the eyes of thinking about the people behind it either sharing my value system or not makes it immediately obvious to me why I have never liked WebForms, always found the interminable Page-Postback-Lifecycle craziness opaque, dense, and impenetrable, and constantly struggled with it (even in later years when prevailing wisdom took hold and most reasonable people began to find ways to shoehorn WebForms into semi-manageable Model-View-Presenter patterns to alleviate at least <em>some</em> of the pain of the platform).  Put simply: ASP.NET WebForms is the brainchild of people who do not share a similar value-system/world-view as do I and this mismatch is at the core of why I always found that platform so frustrating to work on.</p>
<p>This isn’t a value-judgment about WebForms in any way.  No, really.  Its not.  Whatever I feel about the frustration that I have experienced in interacting with the WebForms platform over my career, the software engineer in me absolutely has to marvel at its technical implementation even as I try to keep myself as far away from it as possible for the foreseeable future.  Finding a way (any way!) to (semi-)effectively project the appearance of statefullness in an inherently stateless context (HTTP request/response) is an amazing technical feat (imperfect though it is in its implementation).</p>
<p>But at the same time, it doesn’t align with my mental model of the web at all.  And that inherent difference of world-view is at the core of my troubles with working with WebForms.  Yes, I can (and have!) <em>learned </em>the WebForms framework, but the underlying feeling of “something just ain’t right here” never goes away, no matter your knowledge of <em>how</em> something works.</p>
<h3>MVC For Me</h3>
<p>While there are probably all kinds of things I would do differently were I building the ASP.NET MVC Framework for myself, those technical differences don’t matter to me in the end.  Because in the spectrum that runs from ‘shared mental model of the problem and the way to build a solution’ on one end and ‘completely different set of values at the core’ on the other, MVC is much, much closer to aligning with my own mental model than WebForms could <em>ever</em> be.</p>
<p>This is fundamentally why I don’t care if the MVC Routing engine has been ported to WebForms so URLs needn’t any longer end in <em>.aspx</em> or reflect their folder paths on disk.  I don’t care if WebForms has introduced ‘deterministic client id values’ for DOM elements to make it easier to work with javascript libraries like JQuery and others.  None of these are remotely appealing to me because I think the underlying problems for me with WebForms still remain after all of these ‘bolt-ons’ are added to the platform: the friction between my own mental model of the problem (‘writing web applications’) and that of the authors of the WebForms platform are still just as front-and-center as they have always been.</p>
<p>Contrast that with the approach used to build the ASP.NET MVC framework and you see a preference for interface-based contracts between classes, extensibility hooks at many, many more locations (though still perhaps not all), an explicit INTENT that someone would wire an Inversion-of-Control Container into the MVC infrastructure, and all kinds of other things that just fit more closely with my own mental-model of the problem space and the value-system that I bring to engineering my own software solutions.  Again, ASP.NET MVC is hardly perfect, but its much closer to my value system than WebForms (even if implemented in an MVP pattern) could ever hope to be.</p>
<h3>This isn’t an Entity Framework vs NHibernate Post Either</h3>
<p>No, really.  Its not.  Honest.  But the reason I would choose ASP.NET MVC over WebForms is the same reason that I would choose NHibernate over the oft-maligned Entity Framework: one of those O/RMs matches my own mental-model of the problem space better than the other.  And just as with WebForms vs. MVC, this choice isn’t really made based on having performed the kind of feature-by-feature Pros and Cons comparison that Ben Franklin (and, later, others) typically champion as a way to make an informed, logical decision.  This choice transcends just about any feature or capability that Entity Framework might have to offer me at this time (or for the foreseeable future).</p>
<p>Notwithstanding some of the very valuable and powerful features coming to light in EF4 (really just v2 of course), EF was built by a team who seems to believe strongly in the following value system (admittedly reverse-engineered and inferred by me from the various design choices they have made along the way):</p>
<ul>
<li>applications exist primarily to manipulate data (CRUD is the purpose of much enterprise software systems and most business rules can be expressed as database constraints)</li>
<li>a consistent enterprise-wide data dictionary is the best way to solve enterprise-wide software challenges (e.g., with enough tooling, foresight, and upfront planning its possible for the enterprise to agree on the definition of “the one, true customer entity” that can be reused across the company in multiple software systems)</li>
<li>the best way to manifest that enterprise-wide agreement on data/entity concepts is in an abstract entity model that can be reused and projected across many different software projects and for many different purposes</li>
<li>the long-term value of enterprise software is in its data rather than its codification and enablement of business process, rules, and constraints that govern legitimate interaction with that data</li>
<li>data in a database retains its value long after the software that understood how to interpret that data and enforce consistency rules around it has been removed from the scene over time</li>
<li>the value of data is given primacy over the value of the software that interacts with it</li>
</ul>
<h3>Those Just Aren’t My Values</h3>
<p>Notice none of those above statements about EF are about any <em>specific </em>feature EF might have (or not).  Its not about whether it supports transparent vs. explicit lazy-loading.  Its not about whether Foreign Key values are exposed by the model or not.  Its not about whether (or how well) it supports POCO classes and persistence ignorance (let’s not mention the whole <span style="font-family: Courier New; color: #008080;">IPOCO</span> interface and the hilarity that ensued).</p>
<p>Instead, its about the mental model of the problem space that was in the heads of the software engineering team that built it.  When they were making high-order design decisions about the framework, what principles guided their decisions and trade-offs when they had to make them?  And the differences there are the root of the reasons that I have experienced such friction with trying to leverage EF in my work.  My perspective just comes from the far other side of the known universe from where the heads of the EF designers were when they built their ORM.</p>
<p>To be clear, those values listed above that I ascribe to the EF design team are entirely defensible and I know many software developers who share them.  But for the most part, they don’t reflect my view of the problem space (how to build enterprise software solutions that need to interact with data to do work) and so even with the many additional features in v4, EF doesn’t suit me well in re: solving the kinds of problems I face.  It’s not built by people who share my world-view or my value system or my mental model of the problem of building software solutions that must interact with a database.  EF just isn’t for me (or the kinds of problems with which I want to work).</p>
<p>Just as this mismatch between myself and WebForms doesn’t make WebForms a terrible technology, neither does this same mismatch make EF a terrible technology.  But also just as with WebForms not matching my view-of-the-world, neither does EF and that’s the real reason that I choose something like NHibernate over Entity Framework.  Its actually got much less to do with features, pedigree, support, or any other ‘technical’ aspect and more to do with how well it aligns with the way I think about software systems.</p>
<h3>But Don’t Features Matter?</h3>
<p>Of course they do.  Any framework that matches my mental model of the problem space but lacks necessary features obviously won’t cut it and needs to be eliminated from contention as choice.  But similarly, the framework that <em>does</em> have all the needed features but fails to match (well) my mental model needs to be strongly considered for elimination as a candidate as well (unless of course there is no other choice given other constraints within which you need to make your decisions – in which case I suggest you suck it up and get moving ‘cause crying about it isn’t going to help much).</p>
<p>Don’t underestimate the negative repercussions to productivity, sanity, and (eventually) profitability of selecting a framework that doesn’t match well your view of the world.  Compare features, but also compare what can only be called ‘the driving philosophy’ behind the software you are considering adopting.  Try to find something that both suits your view of the problem space <em>and</em> has the features you need to complete the job.  Otherwise, you’re going to find yourself getting increasingly frustrated as you become decreasingly productive and in that scenario nobody wins.  So choose wisely.</p>
<p>Happy Coding~!</p>
<img src="http://feeds.feedburner.com/~r/unhandled-exceptions/~4/SjHTxGQhgPg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://unhandled-exceptions.com/blog/index.php/2010/03/23/how-do-you-think-about-the-problem/feed/</wfw:commentRss>
		<feedburner:origLink>http://unhandled-exceptions.com/blog/index.php/2010/03/23/how-do-you-think-about-the-problem/</feedburner:origLink></item>
		<item>
		<title>NYC CodeCamp Winter 2010: Session Evaluation Process, Results, and Conclusions</title>
		<link>http://feedproxy.google.com/~r/unhandled-exceptions/~3/u1ituhVrFgo/</link>
		<comments>http://unhandled-exceptions.com/blog/index.php/2010/03/13/nyc-codecamp-winter-2010-session-evaluation-process-results-and-conclusions/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 18:19:56 +0000</pubDate>
		<dc:creator>sbohlen</dc:creator>
		
		<category><![CDATA[CodeCamp]]></category>

		<category><![CDATA[People]]></category>

		<category><![CDATA[Process]]></category>

		<category><![CDATA[Software Development]]></category>

		<category><![CDATA[Unit Test]]></category>

		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2010/03/13/nyc-codecamp-winter-2010-session-evaluation-process-results-and-conclusions/</guid>
		<description><![CDATA[Well, the event evaluation forms for last weekend’s NYC CodeCamp are IN and have been tallied.  And the winner is…
Just kidding.  There is no winner because this year we decided to do a few things differently than in years past:

Eval forms didn’t contain numeric scoring for pre-defined categories (e.g., “Speaker was knowledgable about their topic”, [...]]]></description>
			<content:encoded><![CDATA[<p>Well, the event evaluation forms for last weekend’s NYC CodeCamp are IN and have been tallied.  And the winner is…</p>
<p>Just kidding.  There is no winner because this year we decided to do a few things differently than in years past:</p>
<ul>
<li>Eval forms didn’t contain numeric scoring for pre-defined categories (e.g., “Speaker was knowledgable about their topic”, “Speaker was Professional”, “Session met my expectations”, etc.)</li>
<li>Eval forms weren’t anonymous</li>
<li>Completion of their Eval Form was a pre-requisite for each attendee’s participation in the <a href="http://en.wikipedia.org/wiki/Swag" target="_blank">SWAG</a> being raffled off in the Closing Session</li>
</ul>
<p>The decision to eliminate numeric rankings was driven by several motivators:</p>
<ul>
<li>numbers (by themselves) don’t represent information that a speaker can use to improve their presentation content and/or their presentation skills (e.g., if you get a ‘1’ instead of a ‘10’, that might tell you that you suck, but its not helpful at all in telling you how to <em>improve</em> for the next time)</li>
<li>Even if you provide ‘comment space’ in addition to number ranking scales for attendees to complete, only a VERY few will ever bother to provide comments since MOST will consider the ‘number’ speaks for them.  By completely eliminating the numeric scale entirely, the ONLY way for attendees to provide feedback was to write SOMETHING in the comment space, ensuring MOST would indeed write comments</li>
</ul>
<p>Since forms didn’t contain numeric rankings of pre-canned questions, there is no way to declare a ‘winner’ (most-highly-rated session, etc.).  Which is probably a good thing because IMO there’s no point in turning “best-speaker” into a competition and we had no ‘prize’ to give away for that anyway <img src='http://unhandled-exceptions.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>The Process</h3>
<p>Rather than individual forms being used for each session, each attendee was given a single form (the relevant portions of which are reproduced below) and asked to keep it with them as they moved from session to session throughout the day.</p>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/03/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/03/image-thumb.png" border="0" alt="image" width="244" height="134" /></a></p>
<p>Attendees would fill out the relevant info as they attended each of their desired sessions and return the completed form to the organizers right before the SWAG raffle at the Closing Session.</p>
<p>There was some question about how well this would work before we did it.  Some of the concerns were:</p>
<ul>
<li>Would attendees be comfortable completing a non-anonymous Eval Form that had their name + email address on it?</li>
<li>Would attendees take the time to write anything useful in the comments section since it takes so much more time to do that than simply circling a number from 1-10 in response to predefined questions?</li>
</ul>
<p>Gratifyingly, the answer to both of these seems to have proven to be a resounding YES.</p>
<h3>It Wasn’t Perfect, but it DID Work</h3>
<p>As you can see from some of these following less-than-detailed comments (sessions cropped in the interests of protecting the speakers) it didn’t work perfectly in every case…</p>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/03/image1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/03/image-thumb1.png" border="0" alt="image" width="244" height="167" /></a></p>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/03/image2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/03/image-thumb2.png" border="0" alt="image" width="244" height="171" /></a></p>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/03/image3.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/03/image-thumb3.png" border="0" alt="image" width="244" height="173" /></a></p>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/03/image4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/03/image-thumb4.png" border="0" alt="image" width="244" height="172" /></a></p>
<p>…but for the most part, the comments were both detailed and helpful for the speakers in re: the impressions of their sessions.  And yes, that last example where every comment was blank is from an actual <em>submitted</em> form – fortunately it was one-of-a-kind and all others were completed to a surprisingly high degree of detail.  If you’re the one who submitted the ‘blank’ form, shame on you for cheating the speakers out of valuable feedback from you!</p>
<p>Here’s an excerpt from just one of the comments received on one of the day’s sessions:</p>
<blockquote><p>Jumped around quite a bit.  Would be more effective if built a much simpler example and built it line-by-line by typing the code as going (forced to slow down).  Goal is to relay basic concepts and concept down to code.  Too fast to the point that large part of the audience seemed not to follow.  Speaker knowledge obvious – presentation weak.</p></blockquote>
<p>Now, whether that’s a widely-felt opinion about the session or not needs to be inferred by comparing all the <em>other</em> attendee comments about that session that were received and considering them in their totality of course, but that level of specificity and <em>actionable</em> feedback to the speaker is just not something you’re going to be able to get if the attendee were limited to a 1-10 scale! <img src='http://unhandled-exceptions.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Other Interesting Excerpts</h3>
<p>There were some other real gems in the comments too, of course.  Some of my favorites (again, specific session elided to protect the speakers)…</p>
<blockquote><p>Very good speaker.  Humorous.  Presentation could have used more attractive examples.  Exaggerates a bit.</p></blockquote>
<p>Not sure what was unattractive about the examples, but I’ll just leave it at that!</p>
<blockquote><p>Wow.  Nothing else can be said.  Seriously, wow.</p></blockquote>
<p>Sorry I missed that session!</p>
<blockquote><p>Sucked.  Left after 10 min.</p></blockquote>
<p>Apparently glad I missed that one!</p>
<blockquote><p>Great and informative session.  Info was immediately useful in day-to-day work.</p></blockquote>
<p>Probably one of the most complimentary things you could say about a session.  Immediately useful value!  WIN!</p>
<blockquote><p>Lots of code; in depth – may not be appropriate for absolute beginner (me) in the topic.  Speaker is passionate and tries to convey as much info as possible.</p></blockquote>
<p>That’s the kind of feedback that a speaker can act on: “If I was targeting noobs in the topic, I may have lost some people at one point.  I should evaluate whether I’m starting with simple enough basics or not…”</p>
<blockquote><p>Great content – well focused, deft handling of questions.  Sith Lords = Great Presentation.</p></blockquote>
<p>Love the reference to the Sith Lords in that one!</p>
<blockquote><p>Good info.  Presenter needs to tailor slide deck such that code examples are reached more quickly.  Too many questions generated by theory.  When running low on time he should be willing to hold questions.</p></blockquote>
<p>Again, <em>specific</em> feedback providing <em>actionable</em> intelligence to the speaker.  What went wrong, suggestions on how to perhaps deal with it in the future.  This kind of feedback is invaluable to a CodeCamp (or any other!) speaker when trying to improve their delivery!</p>
<blockquote><p>Funny and entertaining.  Would have preferred covered more data and less styling.</p></blockquote>
<p>Sounds like we have a budding comedian on our hands here… <img src='http://unhandled-exceptions.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<blockquote><p>Amazing.  He knows what he is talking about.</p></blockquote>
<p>Not 100% sure about what about that is amazing… <img src='http://unhandled-exceptions.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<blockquote><p>Boring subject, even worse presenter (not engaging whatsoever)</p></blockquote>
<p>Ouch.  Sounds like a mis-match between expectations and delivery in there somewhere :(  More work to do!</p>
<blockquote><p>Content is good.  The delivery is too detailed.  If using a simpler example, it would be better.</p></blockquote>
<p>Again, specific detailed commentary that a speaker can actually use to improve their delivery!  Great stuff!</p>
<h3>Patterns Observed in the Evaluation Feedback</h3>
<p>When reviewing the evaluation feedback in its entirety, there are a few things that come to light as repeating patterns in the data…</p>
<ul>
<li>some sessions have near-consistent feedback re: ‘generally positive’ or ‘generally negative&#8217;</li>
<li>some sessions have wildly-varying feedback re: ‘generally positive’ or ‘generally negative&#8217;</li>
</ul>
<h4><span style="text-decoration: underline;">Consistent POSITIVE or NEGATIVE Feedback</span></h4>
<p>For those with near-consistent positive or negative feedback across many attendees comments, I think its reasonable to take that on its face: each such session in question probably <em>was</em> generally either ‘good’ or ‘bad’ and the speaker should either be satisfied with their session or should probably consider rethinking their content, their delivery, or perhaps both depending on the comments.</p>
<p>This is where having detailed comments really shines in re: value for the speaker: if a speaker really wants to improve their presentations for the future, then they should have little doubt about where to focus their energies based on the detailed comments from attendees.</p>
<h4><span style="text-decoration: underline;">Wildly-Varying Feedback</span></h4>
<p>But another troubling theme that I think we have to acknowledge in the data is that of sessions where the feedback tended to vary wildly among attendees.  By way of illustration, here are four comments from four <em>different</em> attendees all about the <em>same</em> session…</p>
<blockquote><p>Interesting presentation, very knowledgeable presenter.</p>
<p>I did not like the way the material was presented.</p>
<p>Not useful.  Boring.</p>
<p>This presentation was AWESOME.  This is the kind of presentation that I will be reviewing as soon as I get home.  It was chock full of deep/rich content.  The presenter was smart, cool, and funny!  Wish this was taped!</p></blockquote>
<p>This wide disparity in feedback points to one probable underlying cause: a mismatch between some attendees’ <em>expectations</em> for the session and the session’s actual content/delivery by the speaker.</p>
<h3>Too Advanced?  Too Beginner?</h3>
<p>The preceding four comments are all from one of our more advanced sessions/topics of the day, but a similar pattern in disparity of feedback was observed with the comments from some of our more ‘beginner’ or ‘entry-level-introduction’ sessions too.  The one common thread identified from the parsing of feedback from such sessions strongly suggests that the disconnect is the result of insufficient indication in session abstracts as to their expected ‘level of difficulty’ (or expected prerequisite knowledge) for attendees.</p>
<p>This challenge is a recurring theme for CodeCamp events in that some people will attend session XYZ who already know the basics and are searching for more advanced info, tips and tricks, etc. while others will attend session XYZ with the mindset “I’ve always heard about this topic but know nothing –let me check it out!”</p>
<p>There’s no ‘silver bullet’ to this problem, but there are some concrete changes that we can make for future CodeCamp events to try to better ensure this mismatch isn’t so great and attendees end up in sessions that are either too boring for them or too overwhelming for them:</p>
<ol>
<li>Ask speakers to indicate 100, 200, 300 level for their talks (even though this is clearly subjective too, it would at least provide GUIDANCE to attendees about expected familiarity with the topic</li>
<li>Ask speakers to list out expected prerequisite knowledge for an attendee to get ‘value’ out of their session</li>
</ol>
<p>I routinely do #2 on all my session abstracts submitted to anywhere I am planning to speak and even though it sometimes makes event organizers ask “Would you mind trimming your abstract down to just a paragraph so we can post it now that its selected?”, I still feel its valuable to be able to define my own expectations for the skills my audience should have to get value out of a session I am delivering.</p>
<p>By way of an illustration, here is the relevant section from the abstract for the talk I just delivered at the NYC CodeCamp myself:</p>
<blockquote><p>Target Audience: .NET developers interested in learning how what sometimes seem to be abstract OO design principles can actually be applied to improve the structure and flexibility of their own code.  The ideal attendee will have several years of .NET (or other OO language) development experience on at least moderately complex systems so that they can recognize the pitfalls of OO design that the S.O.L.I.D. principles are attempting to address.</p></blockquote>
<p>And here it is again for my upcoming talk at the Philadelphia CodeCamp in April:</p>
<blockquote><p>The ideal attendee will have several years of object-oriented software development experience on the .NET platform. Familiarity with Interfaces, Classes, inheritance, and polymorphism are assumed. Exposure to common .NET 3.5 constructs such as lambda expressions, anonymous types and methods, and extension methods are required. Attendees should also have had some prior exposure to the mechanics of writing unit tests, although not necessarily in a Test-First/Test-Driven context. Familiarity with IoC containers and dependency injection techniques on the part of the attendee are helpful but not required.</p></blockquote>
<p>I think that if we are able to elicit this information from speakers in addition to simply a description of the content of their session, then it might be possible to mitigate some of the impedance mismatch that’s never entirely avoidable between sessions and attendees.</p>
<p>Let’s call that ‘Lesson-Learned’ and file it away for next time.</p>
<h3>Honorable Mention</h3>
<p>A couple of the evaluation forms deserve ‘Honorable Mention’ for a variety of interesting reasons.</p>
<p>Here’s one where the author’s handwriting looks suspiciously like MS Comic Sans and it stood out well in a stack of forms with terrible handwriting!  Kudos to this person for the high-legibility of their handwriting – it would have taken me perhaps 2+ hours to write that so clearly!</p>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/03/image5.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/03/image-thumb5.png" border="0" alt="image" width="244" height="173" /></a></p>
<p>Here’s a fun one where the author wanted to ensure that we understood their rating scale when tallying their results (10 –&gt; best!)</p>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/03/image6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/03/image-thumb6.png" border="0" alt="image" width="244" height="174" /></a></p>
<p>And lastly, here’s one that caught my eye as not only receiving ‘5-Stars’ but apparently earning them in a special pattern too!</p>
<p><a href="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/03/image7.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://unhandled-exceptions.com/blog/wp-content/uploads/2010/03/image-thumb7.png" border="0" alt="image" width="244" height="61" /></a></p>
<h3>General Comments</h3>
<p>We also got a considerable amount of ‘general comments’ on the overall event.  Happily they were universally positive.  Most of them contained comments like ‘well-organized’, ‘great event’, and ‘thanks to the organizers and the sponsors’ but in addition to those a couple caught my eye for whatever reason:</p>
<blockquote><p>CodeCamp made my day!</p></blockquote>
<p>…and…</p>
<blockquote><p>Overall it was a fun and informative day.  I’m looking forward to VS2010 now more than ever!  I’ll definitely be back next year and I’ll recommend CodeCamp to my friends and co-workers.</p></blockquote>
<p>Feedback like that makes all the hard work worthwhile, so to all those attendees who took the time to write detailed, informative, actionable comments on their forms I can 1000x assure you that every comment was read, evaluated, and internalized by both organizers and speakers alike!</p>
<p>Thanks so much for taking the time to offer thoughtful, useful input to everyone involved!</p>
<p>(except for you of course, blank-eval-form-submitter-guy/gal!)</p>
<img src="http://feeds.feedburner.com/~r/unhandled-exceptions/~4/u1ituhVrFgo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://unhandled-exceptions.com/blog/index.php/2010/03/13/nyc-codecamp-winter-2010-session-evaluation-process-results-and-conclusions/feed/</wfw:commentRss>
		<feedburner:origLink>http://unhandled-exceptions.com/blog/index.php/2010/03/13/nyc-codecamp-winter-2010-session-evaluation-process-results-and-conclusions/</feedburner:origLink></item>
		<item>
		<title>NYC CodeCamp 2010: Refactoring to a S.O.L.I.D. Foundation Session Content</title>
		<link>http://feedproxy.google.com/~r/unhandled-exceptions/~3/I-uvLbmolJ4/</link>
		<comments>http://unhandled-exceptions.com/blog/index.php/2010/03/13/nyc-codecamp-2010-refactoring-to-a-solid-foundation-session-content/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 15:25:17 +0000</pubDate>
		<dc:creator>sbohlen</dc:creator>
		
		<category><![CDATA[CodeCamp]]></category>

		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2010/03/13/nyc-codecamp-2010-refactoring-to-a-solid-foundation-session-content/</guid>
		<description><![CDATA[This is just a short quick post to provide links to the content for my own session from last weekend’s NYC CodeCamp event – in my zeal to get content from all the other speakers in order to post them on the main site for download, I forgot to do this quick blog post re: [...]]]></description>
			<content:encoded><![CDATA[<p>This is just a short quick post to provide links to the content for my own session from last weekend’s <a href="http://unhandled-exceptions.com/blog/index.php/2010/03/08/nyc-codecamp-winter-2010-thats-a-wrap/" target="_blank">NYC CodeCamp event</a> – in my zeal to get content from all the other speakers in order to post them <a href="http://nyc.codecamp.us/2010SessionMaterial.htm" target="_blank">on the main site for download</a>, I forgot to do this quick blog post re: materials from my own session!</p>
<p>While this same content of mine can also be found on the main NYC CodeCamp site (alongside nearly all the other speakers’ content), here’s a link to my own download of the content from my own session:</p>
<p><a href="http://unhandled-exceptions.com/downloads/NYC CodeCamp Winter 2010 - Refactoring to a SOLID Foundation.zip">http://unhandled-exceptions.com/downloads/NYC CodeCamp Winter 2010 - Refactoring to a SOLID Foundation.zip</a></p>
<h3>Putting it to Bed for a Bit</h3>
<p>This is the second time I’ve delivered this same presentation at a CodeCamp event – the first being at last Autumn’s Philadelphia CodeCamp as chronicled in <a href="http://unhandled-exceptions.com/blog/index.php/2009/10/17/phillynet-code-camp-thats-a-wrap/" target="_blank">this post here</a>.&#160; Although it was standing-room-only at both deliveries and I rec’d almost uniformly positive reviews/feedback from attendees at both CodeCamps, I’m deciding its time to (at least temporarily) retire this session from being my preferred session to deliver.</p>
<p>Its clear to me from the continued popularity of this session that there is a real thirst in the general .NET developer community for this content (when provided in an approachable, non-academic, real-world-problem-solving manner), but just to keep my own interests up I’m going to file this one away now as “just another talk I will have in my arsenal” rather than being necessarily my “preferred talk to deliver” any longer.</p>
<h3>Speaking at the next Philly .NET CodeCamp 4/10/2010</h3>
<p>At the upcoming Spring 2010 Philadelphia CodeCamp on 4/10/2010 I’ll be delivering my next talk, <a href="http://codecamp.phillydotnet.org/2010-1/Lists/Sessions/DispForm.aspx?ID=80" target="_blank">Mocks and Stubs and Fakes, Oh my!: Leveraging Mock Objects to Support Real-World TDD Practices</a>.&#160; For details on the whole event, see the main site <a href="http://codecamp.phillydotnet.org/2010-1/default.aspx" target="_blank">here</a> and if you’re in the area and want to attend, <a href="http://phillydotnet20100410.eventbrite.com/" target="_blank">RSVP here</a> (ASAP since space tends to fill up fast even though its a huge event).</p>
<p>Hope to see you there – it’s an event that promises to be a great time and never fails to deliver~!</p>
<img src="http://feeds.feedburner.com/~r/unhandled-exceptions/~4/I-uvLbmolJ4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://unhandled-exceptions.com/blog/index.php/2010/03/13/nyc-codecamp-2010-refactoring-to-a-solid-foundation-session-content/feed/</wfw:commentRss>
		<feedburner:origLink>http://unhandled-exceptions.com/blog/index.php/2010/03/13/nyc-codecamp-2010-refactoring-to-a-solid-foundation-session-content/</feedburner:origLink></item>
	</channel>
</rss>
