<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<title>My ramblings</title>
	<subtitle>adventures with technology</subtitle>
	<link rel="self" type="application/atom+xml" href="/feed.xml"/>
  <link rel="alternate" type="text/html" href="/"/>
  
	<updated>2026-01-04T00:00:00+00:00</updated>
	
	<id>/feed.xml</id>
	<entry xml:lang="en">
		<title>How I’m writing web apps with Nim in 2026</title>
		<published>2026-01-04T00:00:00+00:00</published>
		<updated>2026-01-04T00:00:00+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/nim-web-2026/"/>
		<id>/posts/nim-web-2026/</id>
    
		<content type="html" xml:base="/posts/nim-web-2026/">&lt;p&gt;A few things have changed in the Nim webdev community &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arhamjain.com&#x2F;posts&#x2F;nim-webdev&#x2F;&quot;&gt;since I last wrote in 2021&lt;&#x2F;a&gt;. The main update is that Jester is effectively in maintenance mode, and has some issues with the latest version of Nim. All of the other libraries&#x2F;frameworks are still being actively developed (or are stable on the latest versions of Nim), which is a healthy sign.&lt;&#x2F;p&gt;
&lt;p&gt;If you’re someone who would much rather browse through code, I have a small sample app using this stack that &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ajusa&#x2F;simple-twitter&#x2F;tree&#x2F;4b462b3e3c3dcedc61899337ec9ab150c55bfc5d&quot;&gt;can be found here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;web-server&quot;&gt;Web server&lt;a class=&quot;zola-anchor&quot; href=&quot;#web-server&quot; aria-label=&quot;Anchor link for: web-server&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Since Jester is gone, I’ve switched to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;guzba&#x2F;mummy&quot;&gt;mummy&lt;&#x2F;a&gt;. It uses threads (instead of async&#x2F;await), which leads to simpler code and even easier debugging due to stack traces. The author of mummy &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;forum.nim-lang.org&#x2F;t&#x2F;9902&quot;&gt;wrote a post on the Nim forum&lt;&#x2F;a&gt; that I recommend reading through on how he’s using it in production. It’s remarkably fast and stable - I’ve been running it on my web server uninterrupted for several months, and there have been absolutely no memory leaks or crashes in that time. I also used it to build &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;sakura.arhamjain.com&quot;&gt;sakura.arhamjain.com&lt;&#x2F;a&gt;, which saw traffic spikes during Sakura-Con (in Seattle), and never had any issues with scaling.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;nim&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; mummy, mummy&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;routers&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;proc&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; indexHandler&lt;&#x2F;span&gt;&lt;span&gt;(request&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; Request&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;  var&lt;&#x2F;span&gt;&lt;span&gt; headers&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; HttpHeaders&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  headers[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Content-Type&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;] &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;text&#x2F;plain&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  request&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;respond&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;200&lt;&#x2F;span&gt;&lt;span&gt;, headers, &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Hello, World\!&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;var&lt;&#x2F;span&gt;&lt;span&gt; router&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; Router&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;router&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, indexHandler)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; server &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; newServer&lt;&#x2F;span&gt;&lt;span&gt;(router)  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Serving on http:&#x2F;&#x2F;localhost:8080&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;server&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;serve&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt;Port&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;8080&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;For routing, I wrote my &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ajusa&#x2F;rody&quot;&gt;own (very small) library,&lt;&#x2F;a&gt; inspired by Roda instead of using the router that Mummy ships with. I find that specifying a routing tree is more natural for resource based URL schemes, and it makes it easy to add hooks and middleware without introducing callbacks&#x2F;registration.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;nim&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; mummy, rody&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; handler &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; route&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  headers[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Content-Type&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;] &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;text&#x2F;html&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;    at &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;   &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      get&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        resp “&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;hello &lt;&#x2F;span&gt;&lt;span&gt;world”&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Serving on http:&#x2F;&#x2F;localhost:8080&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;newServer&lt;&#x2F;span&gt;&lt;span&gt;(handler)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;serve&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt;Port&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;8080&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;orm&quot;&gt;ORM&lt;a class=&quot;zola-anchor&quot; href=&quot;#orm&quot; aria-label=&quot;Anchor link for: orm&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;I’ve switched from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;moigagoo&#x2F;norm&quot;&gt;Norm&lt;&#x2F;a&gt; to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;treeform&#x2F;debby&quot;&gt;debby&lt;&#x2F;a&gt;. This isn’t because of any issues with Norm, it’s mostly because I like using libraries written by treeform and guzba - if a Nim library ends in “y”, there’s a 90% chance one of them wrote it. Debby is much more hands off compared to Norm - it can generate tables and query them, but it doesn’t handle joins or most complicated SQL syntax. Instead, it specializes in mapping the results of a SQL query to a Nim object in a typesafe way.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;nim&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; debby&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;sqlite&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; db &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; openDatabase&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;cars.db&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;type&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; Car&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; object&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  id&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt; int&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  make&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt; string&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  model&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt; string&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  year&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt; int&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;db&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;createTable&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt;Car&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;var&lt;&#x2F;span&gt;&lt;span&gt; car &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; Car&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  make&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Chevrolet&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  model&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Camaro Z28&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  year&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 1970&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;db&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;insert&lt;&#x2F;span&gt;&lt;span&gt;(car)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;car &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; db&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt;Car&lt;&#x2F;span&gt;&lt;span&gt;, car&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;id)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;car&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;year &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 1971&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;db&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;update&lt;&#x2F;span&gt;&lt;span&gt;(car)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;db&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;delete&lt;&#x2F;span&gt;&lt;span&gt;(car)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It handles the common cases succinctly, and avoids any magic, making it more difficult to accidentally end up with performance issues. It also means that you’re never waiting on an ORM to add support for some arcane feature or syntax - just write SQL directly. I’m also using SQLite for my apps, I don’t have nearly enough traffic to worry about scaling past that.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ui&quot;&gt;UI&lt;a class=&quot;zola-anchor&quot; href=&quot;#ui&quot; aria-label=&quot;Anchor link for: ui&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;I’ve switched from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;htmx.org&#x2F;&quot;&gt;HTMX&lt;&#x2F;a&gt; to &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;unpoly.com&quot;&gt;Unpoly&lt;&#x2F;a&gt;. HTMX is a fantastic library and I deeply respect the work that the authors have put into it. I used HTMX for several years and was pretty happy with it (when compared to traditional SPA frameworks and NPM). Both libraries are prioritizing HTML of the wire, but the key difference is that Unpoly is more “use-case” focused, while HTMX is more focused on “building-blocks”.&lt;&#x2F;p&gt;
&lt;p&gt;For example, Unpoly’s doc will walk you through how to handle form validation, dependent form fields, and other common journeys. HTMX is much more hands off by comparison - they give you the building blocks (hx-get, hx-post) and leave it to the developer to decide how to handle form validation.&lt;&#x2F;p&gt;
&lt;p&gt;Unpoly is more opinionated, but the opinions are designed for classic (2000-2010) web development. For example, Unpoly only issues GET and POST requests, making progressive enhancement (in case the user is not using JS) much easier to keep.&lt;&#x2F;p&gt;
&lt;p&gt;Here’s a list of magical Unpoly features I’ve found useful that would require more thinking and potentially Javascript to replicate with HTMX:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Automatic progress bars if a request is taking too long&lt;&#x2F;li&gt;
&lt;li&gt;Adding a class to a nav item if the URL matches the address bar&lt;&#x2F;li&gt;
&lt;li&gt;Placeholder loading (showing a UI skeleton while a request works)&lt;&#x2F;li&gt;
&lt;li&gt;First class form validation&lt;&#x2F;li&gt;
&lt;li&gt;Automatic caching for GET requests&lt;&#x2F;li&gt;
&lt;li&gt;Modal dialogs and drawers&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;It’s also much more &quot;enterprisey&quot; - the author takes backwards compatibility and migrations seriously, even providing a polyfill for new versions to maintain existing behavior.&lt;&#x2F;p&gt;
&lt;p&gt;Unpoly isn’t perfect. For starters, it’s a much larger package than HTMX - 60kb gzipped vs 16kb gzipped. You do get a lot more functionality, but it’s definitely larger than I would like. The API surface is also massive compared to HTMX - probably over 100 attributes, though many attributes are for configuring sub parameters and reused between different features.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;templating&quot;&gt;Templating&lt;a class=&quot;zola-anchor&quot; href=&quot;#templating&quot; aria-label=&quot;Anchor link for: templating&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;For templating, I use source code filters. Source code filters are actually a very old way of doing string templating in Nim that&#x27;s built into the language. Here&#x27;s a quick example:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;html&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#? stdtmpl(toString = &amp;quot;safe&amp;quot;)  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#proc createGamePage(count: int): string  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;p&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;You have played the game $count   &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#if $count == 1:  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;time  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#else  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;times  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#end  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;p&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Source code filters are turned into Nim code directly by the compiler, which means that they’re just a bunch of string allocations. This ends up being quite fast at runtime, and during compile time as no macros are used to process the code.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Nim is a slower moving language than most others with a smaller ecosystem, which has both upsides and downsides. Other than Jester, I didn’t &lt;em&gt;need&lt;&#x2F;em&gt; to change any part of this stack. Generally I’ll rewrite a small app every time I’m evaluating a different library to see whether the tradeoffs are worth it. I’ve used the stack above for over a year now and it’s been incredibly quick to develop while having fantastic performance.&lt;&#x2F;p&gt;
&lt;p&gt;I’ve used all of the above in a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ajusa&#x2F;simple-twitter&#x2F;tree&#x2F;4b462b3e3c3dcedc61899337ec9ab150c55bfc5d&quot;&gt;small toy app&lt;&#x2F;a&gt; (mentioned at the start), in case the code makes it easier to understand what’s going on. I hope this post was helpful!&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>My productivity system</title>
		<published>2026-01-01T00:00:00+00:00</published>
		<updated>2026-01-01T00:00:00+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/productivity/"/>
		<id>/posts/productivity/</id>
    
		<content type="html" xml:base="/posts/productivity/">&lt;p&gt;I&#x27;m writing this because I often get comments from friends and family about how I manage to stay on top of things.&lt;&#x2F;p&gt;
&lt;p&gt;As a child, my parents helped me a lot with keeping track of things. Once I got to high school I struggled with classes, nearly falling out from the honors program my freshman year. The reason was silly in hindsight - I kept forgetting to turn in or do homework assignments.&lt;&#x2F;p&gt;
&lt;p&gt;Since then, I’ve been evolving a simple system to keep that scenario from ever happening again.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-system&quot;&gt;The system&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-system&quot; aria-label=&quot;Anchor link for: the-system&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;First, most types of work can be broken down into two things: tasks and projects. Tasks are &lt;em&gt;simple&lt;&#x2F;em&gt; things you need to do on or by a certain date. Examples would be grocery shopping, wishing someone happy birthday, cleaning, etc.&lt;&#x2F;p&gt;
&lt;p&gt;Tasks also handle capturing new information quickly. I default to creating a task with the bare minimum as early as possible, so that I can follow up and figure out whether the task needs to be moved to a different day, completed, or turned into a project. If someone texts me saying what time they’re free to grab lunch, I immediately write it down as a task. If someone tells me about a cool movie, I write it down as a task for today, with the intention that I’ll look into it later and decide whether I want to watch it.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;projects&quot;&gt;Projects&lt;a class=&quot;zola-anchor&quot; href=&quot;#projects&quot; aria-label=&quot;Anchor link for: projects&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Projects are more open ended, take longer, and don&#x27;t always have a date attached. Examples of projects would be learning graphic design, setting up automatic backup on my laptop, planning a trip to New York, etc. It&#x27;s key to separate the two - I kept them mixed for a few years, which led to me procrastinating on everything due to perceived difficulty of projects.&lt;&#x2F;p&gt;
&lt;p&gt;Projects should always have a list of items attached to them as the next step. A good default next step is &quot;research to figure out next steps&quot;.  Separating “planning” from “doing” helps me fight procrastination - any task that mixes both has a higher perceived difficulty.&lt;&#x2F;p&gt;
&lt;p&gt;I also recommend organizing projects into 3 categories - WIP, TODO, and BACKLOG. WIP projects are projects that you are currently working on - it should be bounded (less than 5 for me) to focus your time and energy. TODO is a list of projects you feel you need to do at some point. BACKLOG is a list of projects that you may want to do, or that are very low priority. The reason backlog projects exist (instead of being deleted) is because priorities change, and sometimes a backlog item becomes more urgent, and a TODO project needs to be moved to the backlog.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;in-practice&quot;&gt;In practice&lt;a class=&quot;zola-anchor&quot; href=&quot;#in-practice&quot; aria-label=&quot;Anchor link for: in-practice&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;I remember trying a bunch of different todo list applications to try and keep my academics straight. RememberTheMilk, Any.do, Todoist, Google Keep, the list goes on and on. I eventually happened upon TickTick (the same company used to publish a frontend to Google Tasks that I used). I’ve used the free version for over 10 years at this point.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s a screenshot of what TickTick looks like for me right now. You can see my daily tasks, my project categories, and a few additional things.&lt;br &#x2F;&gt;
&lt;img src=&quot;data:image&#x2F;png;base64,iVBORw0KGgoAAAANSUhEUgAAA&#x2F;sAAAMDCAYAAAD9uQVOAAAgAElEQVR4XuydB2AU1bfGTwKEEBJ6771J79JBkC7NBqggTUFUOohYEBsqIghSRFCaIEjvTar0Kr333kuAkIQ33+E&#x2F;eUtI2d3sJlu+8x5&#x2F;k907M&#x2F;f+7uxmvnPOPdcnX758j8VFLWnSpHLr1i0X7R27RQLOJZA4cWIJDQ117kV4dhIgARIgARIgARIgARIgAY8gkCxZMrl&#x2F;&#x2F;37EWHwo9j1iXjkIDyRAse+Bk8ohkQAJkAAJkAAJkAAJkICTCFDsOwksT0sCjiZAse9oojwfCZAACZAACZAACZAACXguAYp9z51bjszDCFDse9iEcjgkQAIkQAIkQAIkQAIk4EQCFPtOhMtTk4AjCVDsO5Imz0UCJEACJEACJEACJEACnk2AYt+z55ej8yACFPseNJkcCgmQAAmQAAmQAAmQAAk4mQDFvpMB8&#x2F;Qk4CgCFPuOIsnzkAAJkAAJkAAJkAAJkIDnE6DY9&#x2F;w55gg9hADFvodMJIdBAiRAAiRAAiRAAiRAAvFAgGI&#x2F;HiDzEiTgCAIU+46gyHOQAAmQAAmQAAmQAAmQgHcQoNj3jnnmKD2AAMW+B0wih0ACJEACJEACJEACJEAC8UQgwcV+UFCQVKlSRTJlyiRnz56VdevWyYMHD6IcftKkSeXWrVvxhIaXIQHXIkCx71rzwd6QAAmQAAmQAAmQAAmQgCsTSFCxX6pUKXn55ZclSZIkEYwg9CdNmiRHjhx5hhvFvivfSuybswlQ7DubMM9PAiRAAiRAAiRAAiRAAp5DwCliPzQ0VMLCwuTx48dKytfXVxIlSqT&#x2F;TEuVKpX069dPIGDCw8OlRIkSsnv3bm378OFD+eqrryQ4OPgp0hT7nnPjcSS2E6DYt50ZjyABEiABEiABEiABEiABbyXgULF&#x2F;&#x2F;&#x2F;59uXz5sjx69Ogpnj4+Pir0kbKfOnVqFfR169aV5s2bS+nSpWXXrl1StWplWbNmrVQoXUDWbtwjf&#x2F;wxSbZv306x7613Jsf9DAGKfd4UJEACJEACJEACJEACJEAC1hJwiNhHJP&#x2F;SpUtSrlw5GT9+vKRPn15Wr14tLVu21Oh8hgwZpHz58nLhwgUV9ojqt23bVipXrqwR&#x2F;Ty5somEGVF849&#x2F;+gyfk0InLMnfuXNmwYQPFvrUzyXYeT4Bi3+OnmAMkARIgARIgARIgARIgAYcRiLPYRzQfIh7Re0TiixQpEpGu&#x2F;&#x2F;nnn6sTYOjQoeLv769p&#x2F;WvXrpVmzZoZkfyq0q5dO0mbJpVUe75ohNhfsu6o3H8QKhMmTJADBw5Q7DtsqnkidydAse&#x2F;uM8j+kwAJkAAJkAAJkAAJkED8EYiT2A8JCZEzZ85ob&#x2F;PlyyeHDh2K6Pn6dWsNB4CvZM+RQ7Jly6ap+zCk+Pfp00d+&#x2F;fVXGT58uKRJk+aZ0V69elWGDBmi6&#x2F;4tjWv24+&#x2F;G4JVcjwDFvuvNCXtEAiRAAiRAAiRAAiRAAq5KIE5iH0Ifgh9R&#x2F;UKFCsnevXsjxtmw3otSoeLz8tgovtfv4wHi5+en7ZDy37VrVxX72G7vhx9+EHTCNGytN2zYMLl79+4zzCj2XfU2Yr&#x2F;igwDFfnxQ5jVIgARIgARIgARIgARIwDMI2C32r1+&#x2F;LvhnGoTI&#x2F;v37JXfu3JrGf+fObRk2&#x2F;BfZtHGDTJkySVKmTKWR+lmzZul6faT&#x2F;w9CBChUqSIoUKVTgnzt37pmIvnkNin3PuOk4CvsIUOzbx41HkQAJkAAJkAAJkAAJkIA3ErBL7GPt&#x2F;alTpzRKbxqi9i+99JKMGTNGUqVILo+v&#x2F;C5jRw6U46evyakrgXLxbhG5eu2aHD9+XLfas7R06dJp0b7YjGI&#x2F;NkJ835MJeKvYz5o1q9SuXVundurUqc&#x2F;s9uHJc86xkQAJkAAJkAAJkAAJxA8BaE1zC3lcEfoUWefmdvLx0wvHXsUusf&#x2F;gwQM5e&#x2F;bsUz2B2E+SJInkzZtH3u38nrQr850kCT8nvj6PJXG6AjJy6dsyddoc2bdvv0bwLQU&#x2F;1vMjIwDniMko9h07+TybexFwlNjHdpeVKlWyevDr1q2T3bt3R9t+1apVkj9&#x2F;&#x2F;mjf37FjhzRp0sTq60VuWKtWLWMrzj&#x2F;0ZRQAvXPnjt3n4oEkQAIkQAIkQAIkQAIkEJlAQECAdO7cWbZt22ZsB79G68p169ZNvv32W91dzl3NLrGP6vsYtKWXo1ixYjJq1C9Stmw5SZzYKMZ3a5U82tvA4JJMklY4LGGJ0hvtxcgIOGGs0x9iZACMVXFvngNF&#x2F;FCxPyHEPoRP9erVo3U23Lt3T6ZPny4XL15013lmvz2AgKPEflBQkOTKlctqIidPnoxRYFPsW42SDUmABEiABEiABEiABFyMAJago6Zc5syZZeXKlbJ8+XJB5vmHH36oYh9a0F3NZrEPcY5UfFOkA063bh8qjKxZsykHX6MK&#x2F;2MJl9DDXUT8UkminF8aQjqRvofUiEuXLsrGjRvlvfe6Cirv41ypU6eWtGnTJojYr1at2lNFAqPqBLYQ3LVrl7vOM&#x2F;vtAQQcJfYdjaJ48eIRn58vvvhCo+&#x2F;I&#x2F;IE3FIZMnn379tl9WTjiJk+erMczsm83Rh5IAiRAAiRAAiRAAiQQBQHUk0PWObLIoXMh+KFLzci+14h9FNiDODfTaBGZf+edd2TAgP6SIUMmI6Kf+Em03vg&#x2F;&#x2F;L+E3TSUf6CIT2LFivcAMjw8zBADZ+TAgYPSrFlzefjwob6PiGPGjBmjvQmdkcYPIVGqVCktKhiToaDgX3&#x2F;9peO3xrDTwHPPPac3i2nIIOjQoYO0a9dOGjZsaGRBlJWBAwdaczq2IQH9fFnWyYgPJNhSE593OLussRkzZkjFihXlyJEjgvR70&#x2F;DZh1OtU6dOUqZMGXXwbd++XcaOHStr166NaIddO95++21tFxgYKCtWrJC5c+fKb7&#x2F;9pm1MsQ8vJb576tSpo9t+gg22&#x2F;vzll19kwYIF6nxAGhYKf3755ZdaSwSGzzmWJWTPnl3++ecfeeutt6wZFtuQAAmQAAmQAAmQAAl4KIEMGTJo4fnWrVtrsXg8f3pdZB9b7CF9&#x2F;9GjRzrNeHivVOl5+fvvmRIQEKgP5ubr+O+TyD&#x2F;+PVmHb7keH+9dv35Vbt++LYsXL5H33&#x2F;9AnQBokzdv3mhvI2eI&#x2F;Tx58sS6fMAcz+XLl+WaUWTQGsPWgigqBmFj7lpAsW8NOddsg3uzcOHC6oyCSDQNDioITqT7mE4wfDmUL19e72lksKCwhyPMUWIfghf1NaIzON8wXjijGjdubHzG&#x2F;7Y6qyU6sQ8ecJY92anjjn4&#x2F;gB2u0759e1m2bJl2p2PHjvLpp5&#x2F;qz6gNAgNHrKOCWUb2UQsAr8MRBycBhD0ckvicnT9&#x2F;XkaMGKG1AnA9LDPCe0jPwpygH&#x2F;3795dJkyY5Ymp4DhIgARIgARIgARIgATcngAg&#x2F;xL6z0vihl&#x2F;GcumXLFrl50wiKG4YAFGpfIRhl6mxsaQ8HxIYNG6Ldpc5a1Fan8Z85cyYiAm+efPr0aSpm8+R5ItBjK7D35Dgj7m&#x2F;4ADCY06dP6kP6889X1ofz+Bb7gIsoYkzCxxIkUjggIJCWHJNBUKCwA0Qh&#x2F;osK4jCKfWtvS9dqh&#x2F;uyZs2amtWBlB5T7EP4Fy1aVO&#x2F;bzZs3q6jEBwq7UiAaDUFZo0YNWbRokUOqeDpK7GMsVatWjRYy7tfkyZNLy5YtZfz48XL48GGrJyQqsQ8mWAIDYY5Ml+7du6uAHzdunGYBHDt2TPnCAbB69Wp1+OELENkvcDIi+o&#x2F;sG5il2IejDg5DfB7hCFy8eLF+YULAQ8jXq1dP4HTDeTFe7CBSuXJlmTZtml6&#x2F;ZMmScuPGDavHxoYkQAIkQAIkQAIkQAKeS8DZYv&#x2F;99983lr1n1cLXf&#x2F;75p4LEUnjLWgF4Xh4wYIDqi6FDhwqCzXExq8U+on14QEYaMS4K0bNhwzrjAT65ZMuWXR+orRP7ZtRfjFT+0&#x2F;ow&#x2F;&#x2F;XX38icOXN1ewNU5o&#x2F;OHB3Z7927t+zdu1f++++&#x2F;WBmiX3AMzJkzJ8bK5DhRs2bNDAfG80bBwlHy1VdfSatWrSj2YyXs2g3wQYFTCM4tU+zjnsA&#x2F;CHpT7ONzgeUbZmo6UtfXr1&#x2F;&#x2F;zHaT9ozWUWIfQh41MqIzpOzjWriPUcgPX0YnTpywqstRif2CBQtqOhTsgw8+kNmzZ+vPyIiAMwHfAfBogvH+&#x2F;fuVKYqkwGECQ1YAsgtglmIfDoAqVaqo5xOOFYj79OnTqzcWS2VQ8BMeUbzfpUsXmT9&#x2F;vvz888&#x2F;StGlT&#x2F;RzjC5dGAiRAAiRAAiRAAiRAAiDgbLGP513oBkTxDx48GKEPEcnHsymywaGn69evr8+0KBBvZrraO0NWi33zAhD1p0+f1kjcuHFjjYiav9GZDFYLfZzHLO6HQn337t01xNAG6dfvo4ilANENxtFiH8XEICJi2lbM7AvAf&#x2F;zxxyokIOyiM7SbOXOmpiYjOomf4VSAWGJk397b1DWOQ5q4pdg3e4XlGqbYR7QfHjukmMMQuUaqjuVWk&#x2F;aOxlFi35brN2rUSFCNH04xaywqsQ9RPm&#x2F;ePD38zTff1Og9DMsizPR9pNnDk2l+thCJx3VhiODDwQInAMQ+Mmz69euna&#x2F;ZhyArCFyG44wsNjgU45mDvvfeetsWXKuoA4LOObCI44PAajQRIgARIgARIgARIgARAoE2bNlGu2Uew26wx526kbBb7GOCVK1ekQYP6Mnjwt8bDdYCxD2HaGCPykaGYWQCXL18yUp9vG0Jin67bh5iPydxB7GMPc0QuzUJqEP&#x2F;w1PTo0YNi390+HZH6a43YhxcOBeOwLhyGyPO&#x2F;&#x2F;&#x2F;7rtmLf1imLSuzDWwknGcyMsONnZD1MmTJFnX8Q9FjDv2fPHm3XvHlz2bp1q&#x2F;6MzAAcj88SxL4ZsceXF1L8Bw0apO3wuUOdAUuxDw8qtgaE9erVy9j28we9XokSJZjCb+vksj0JkAAJkAAJkAAJeDABiH3sKGVZjR9ZoQgwTZw4UZeEupvZJfZR6AprYydPnmhEyZIaRcsy2ZXGf&#x2F;HiBQkOvmesa18r33zzbazs3EHsI20fa7tRjAyGFGJUCEdaPyP7sU6xSzewRuwjRb5BgwaaMQJxitRyV1uz70zIUYl9ROyRno9Ue3wuevbsqV1AhXywwrKBcuXK6XcIKugjOwKiH8X14DQbPHhwxFIYiH04BZCej0yHd999VxYuXKg1BjZt2qRLgSzFPq6J17E7BtKl4HiYNWuWro+ikQAJkAAJkAAJkAAJkIBJIHJkH8+sWG6KHaSw25MjMnXjm7ZdYh+dhKBdv36tVsDOli2H9tvWNfunT58yKgyGyrffDjZSe9fEWsTMHcQ+ooiISpoVFsHl999&#x2F;18J+SB&#x2F;m1nvxfYs77nrWiH1cDenpiPAj7RyFLVGAzhHmqDR+FKlDlX1rDZkpEMzWWHTV+LH+H0VGwASCHqlQWOKAMcFj+t133+npUZDETM&#x2F;H9n34UkXU3yyiCbGPYyD2IfpRMRXLJHAu1EvAZ8xS7OOc2ALwjz&#x2F;+0PPDeYDxI&#x2F;WfRgIkQAIkQAIkQAIkQAImASw3RWQfy0fTpEmjS7HxnAmhb1bKdzdadot9bCc2cOBnUrduXcmdO48x7me32IsKBqJ3+BcS8tB4UD+r0b5XXnlNtycz1&#x2F;JHB9HRYv+zzz7TqCDER2wGkYIK30uXLo1IL47qGFQah6ixNKzzRgQT6&#x2F;fB66efftKiY0j3Niv1x3Z9vk8CjhL7ziQZndiHI7Bz584aoUfFUXyeUOgTn4nvv&#x2F;8+oksQ8MiEqVChgop61LrA53TChAmavm8W6MNafDjO8EUcHBysyybgaPvmm2+eEfu4FpYEIMsGdQCqV6&#x2F;ulp5ZZ84bz00CJEACJEACJEAC3k4AGaLY0tnchrpAgQJiBp&#x2F;clY3dYt&#x2F;X10f8k&#x2F;oZ4neZJPFLZjx0o7p32P84PKmo&#x2F;0T+Y7M983&#x2F;DjR98jQwAXyN197Ih+IONrbHGGpUG&#x2F;7bq4dvRYh8p1qiIaK3BGQEhgmgtjQTim4A7iP34ZmLN9eBowBaYuXPn1vVWKLRJIwESIAESIAESIAESIAFPJ2C32M+SNlRqlbojdaull0J5M0tAYBrx9c8vPmnqSaKUVVXgm2n9KvZDb0v4tYUSfnudPA45b0Tj7svN4ED58ddNsnJ7gDwK8zEi+zHjdrTYR&#x2F;+yZcum2QXWGCp+Y31xbBkI1pyLbUjAVgIU+7YSe9K+ZcuWxlKhb9WhiNoZFy9etO9EPIoESIAESIAESIAESIAE3IiAzWI&#x2F;VWC4fNruqtQqflf8khrq3AjWG&#x2F;X6nthjxPJ9xCfZc5I4&#x2F;zDxTVnNeC1UQs98J+HnfjZ+vGq8&#x2F;T9FbzRFa98kIjduJZLR81LLpKUpY0TnaLHvRvPErpKAprWbuzwQR+wEUH0fmTuovA&#x2F;7888&#x2F;pU+fPrEfyBYkQAIkQAIkQAIkQAIk4AEEbBL7RiBcur16Q9q+eF2MLH6o+yfiHj8bP6qMh4j3QaQ8QBKXPy2P7x+QRzsri6&#x2F;xkrFaXxtpexyihxuvhvtI4mTGHtyfZ5Xth&#x2F;2jxUqx7wF3HIdgNwGKfdvQDRs2TFAYEGuvdu7cKR07djS2+rxj20nYmgRIgARIgARIgARIgATclIBNYh9j7NzspnRufO1&#x2F;6&#x2F;GfROmRDm+m4PsY4v1RqI+EhCWWVdd+k5RJL0utjL2N9flGFN8XxfmeOAcs24eF+Ypf8sdS9d1cctWI8kdnFPtuepex2w4hQLFvG0YU5jOXEiGFn8tvbOPH1iRAAiRAAiRAAiRAAu5NwGaxn8xI3W&#x2F;f6Ka0rXtDAgPCJdxI4Q83IvMQ+Vj6Hm6I+a2HA+SzX9PIkbO++lrdciHS542rkj19qBHFfxyR9o&#x2F;3jFp9cuqin&#x2F;QeZeytfSxpjDQp9t37ZmPv40aAYj9u&#x2F;Hg0CZAACZAACZAACZAACXgTAZvFvgknbcpwKVfwvuTI+EgCkoZJqBGdv3Izsfx3IqkcOOX3TLE9OAlK538oBbI&#x2F;lBQBYZryf&#x2F;NOItlxNJnsP+lnOAxix06xHzsjtvBcAhT7nju3HBkJkAAJkAAJkAAJkAAJOJqA3WLf0R2x5nwU+9ZQYhtPJUCx76kzy3GRAAmQAAmQAAmQAAmQgOMJUOw7ninPSAJOIUCx7xSsPCkJkAAJkAAJkAAJkAAJeCQBin2PnFYOyhMJUOx74qxyTCRAAiRAAiRAAiRAAiTgHAIU+87hyrOSgMMJUOw7HClPSAIkQAIkQAIkQAIkQAIeS8AjxT622&#x2F;Lz8xN&#x2F;f39jN4Dot&#x2F;Lz2FnlwNyCALaDCzH2pHzw4IFRoDL2CpUU+24xrewkCZAACZAACZAACZAACbgEAY8U+ylSpBAIIxoJuAMB7P9++&#x2F;ZtY0tKYx&#x2F;LGIxi3x1mk30kARIgARIgARIgARIgAdcgALEfGBgY0RmffPnyYVc8lzRrqvEHBQVJkiRJXLL&#x2F;7BQJREcAkf1bt24ZW1ZG&#x2F;&#x2F;Gj2Of9QwIkQAIkQAIkQAIkQAIkYC0Bj4rs+&#x2F;r6SsqUKQVp&#x2F;DQScDcC9+7dk4cPH0bbbYp9d5tR9pcESIAESIAESIAESIAEEo6AR4l9rM+H2KeRgDsSgNCH4I&#x2F;OKPbdcVbZZxIgARIgARIgARIgARJIGAIU+wnDnVclgWcIUOzzpiABEiABEiABEiABEiABEnAUAYp9R5HkeUggjgQo9uMIkIeTAAmQAAmQAAmQAAmQAAlEEKDY581AAi5CgGLfRSaC3SABEiABEiABEiABEiABDyBAse8Bk8gheAaB+BT7KGKJGhf4RyMBEiABEiABEiABEiABEkh4AtiZC9txx7Ylt7U9pdi3lhTbkYCTCcSX2MeuFdye0smTydOTAAmQAAmQAAmQAAmQgJ0EIPofPXoU47bc1pza68V+njx5JGfOnIJK5zHZ&#x2F;fv3ZceOHRIcHGwNV7YhAZsJxJfY9&#x2F;Pz4&#x2F;aUNs8ODyABEiABEiABEiABEiCB+CMAwR8SEhKnC3q12M+ePbu0atVKbty4oZ6TmCwgIEAAa9SoUTFujxan2eDBXk0gPsQ+nFpM3ffq24yDJwESIAESIAESIAEScBMC0Kjh4eF299arxX7nzp1l7969smHDhlgBIu35&#x2F;fffl4ULF8qBAweibZ80adJn3sMExeZMMA8qU6aMDBo0SBo3buywtRqxDo4NXIJAfIh9RvVdYqrZCRIgARIgARIgARIgARKIlUBoaGicNKFXi&#x2F;1+&#x2F;fqpCAdEaywoKEgWLVqk6fzR2U8&#x2F;&#x2F;aRvVatWTdvdvXtXTpw4IcOGDbPmEkKxbxUml22UJk0aKVGixFP9W7NmjVUeOYp9l51WdowESIAESIAESIAESIAE4p0Axb4FcqQnp0yZ0upJgNjfuHGjnDx50qpjXnnlFVm1alWMYt88Ec771ltvyZEjR&#x2F;QlVD9v0KCBZMmSRY4fP67nwToMWObMmaVevXry4MEDuXz5svTs2VMj+8gIgPiHeERFxhUrVsj58+elQ4cO8tdff8nNmzf1+Lx58wpqDyxfvtyqcbCR8wggTR5LPmAohFeuXDmdN3OuY7oyxb7z5oVnJgESIAESIAESIAESIAF3I0CxbzFj9oj9+fPny759+yLOAoFWtGhRXde8c+fOp+6H7t27C6K0MUX2oxL7EIAjR47Utf5wAtSqVUuj&#x2F;T&#x2F;88IOkT59ehfu0adM0C6BJkyYqFiH24SD48ccf1TEAQV+pUiV5+eWXZcCAAbr8YPbs2Xq5MWPGyMyZMyn2XezTmy1bNnXkbN261aqeUexbhYmNSIAESIAESIAESIAESMArCCS42E+bNq18++23UrVqVauA3759W9577z2rBZDlSbEe&#x2F;tatW9FexxFiv06dOhp9x9rmX3&#x2F;91SFiP3&#x2F;+&#x2F;DJjxgwV66jmnzp1ahXmzZs3l8qVK0vt2rWlffv2eq2GDRsqn6jW7M+dO1ezBRAlhnMAmQLgj3PVr19fLl26ZNUcsFH8EKhSpYps2bLF6iqaFPvxMy+8CgmQAAmQAAmQAAmQAAm4A4EEFfuIXP7999+Cdcq2GMQqiuOtXLnSlsMkPsQ+Ivu5c+fW6Htksd+jRw9ZvXq1zZH9UqVKaRT&#x2F;hRde0PHCKYEIPwR+zZo1Nd3bXOuPtO+BAweq2Mfrr7&#x2F;+uqaCY+zFihWTRo0aqcNjzpw5GuFHFgAKB7Zu3dqqVHGbgLOx3QTghMHSCmuj+rgQxb7duHkgCZAACZAACZAACZAACXgcgQQV+xDsEMD2GCrgt23b1qZD40Pso0NImXek2C9cuLBMnjxZKlasqAUBkydPrk4DbPuHQn6I&#x2F;KN+AAy&#x2F;42eI&#x2F;U8++USwC8C4ceM0I+C3337TyP7169fVUeDv7y+ZMmXSFP7du3fbxJKNnUsA84hdG65cuWL1hdxB7OPeRT+tLWpp9eDZkARIgARIgARIgARIgARI4CkCCSr2IUrN9HNb5+XMmTMqqG2x+BL7OXPmVNE9adKkp7pnb2QfAmnevHny1VdfaX0AFN1DNL5p06ZaHwDLIDp16qQiqkuXLlK6dGkV+0OHDpW1a9fKkiVLNEo8duxYTd2H2AeLUaNGaRo&#x2F;1vnTXIcAHDRYsoH6DraYO4j9fPnyaWHIq1ev2jK0WNti2QyKUOJfZMN7+KKLyx6jkc+Jehj4DKEopisZ+oXx4l6gkQAJkAAJkAAJkAAJeDcBin2L+bd1zf67776r4nvdunVP3UV44EYKvaXwgID78MMPdeu9&#x2F;fv3x3rXRa7GD2ExePBgFfKbN2&#x2F;WFHw80ONaEIaDBg1SEQ9B361bNxX7WCYBRwCi93gdmQFI8Uc72Pfff6&#x2F;9RPV+musQwJzin63i1F3EPpaR2JKxgPsYmSnmfRvVTGXNmlULVEZVkyNHjhy6S0VkYY4lLCEhIXZlGeC7Ast1jh49GuONkypVKu2TNbspmCfCeeEMwbHghC07UYgTht00zF00orow+pUrVy45duyYQ25oZA2hGCicNBgrMzIcgpUnIQESIAESIAESIIF4IeDyYh9p63369FGR&#x2F;Pnnn0vLli0VzOnTpyPWsFtLytGRfYgI9Ofs2bOxFlHDAzui6IimQ5S4gsEBgEr827dvd4XusA9xJOCJYh9OMmSlwPlx6NChaEWzPWIfGTgoSmlPdN4asY9dNCCSDx8+bJPjBmIfzgmIffQPTsMMGTIIzgexH5PjAP3CuLA9pyPMFPlYSoRtQCn2HUGV5yABEiABEiABEiCB+CHgUmIf+9UjgoW0dRiibohmIx0e0enff&#x2F;9dH&#x2F;xdReyjH9garWDBgrr+PSa7ceOGbsWHMSW0oVAf+vziiy9q+j&#x2F;NMwi4otiH+IRQNw1CFjtqXLt2LeI1ZDBEl8WA7wOcIzAwULB0x0xPx2vZs2fXzBRTgCKCjn9IY0c2gPkdApF88eLFp0R9unTpVEBD6ON4OOxSpEjxVLFQ04kHJx3eM7MtTp06pdc1I&#x2F;s4v+k4sHTkoQ8pU6bUrARzzDgXXoPhuhDvkQW0mYkAByE4gQ044DoXLlxQHrg2tuJMliyZ&#x2F;o5MAHzHmO&#x2F;dv39flxmgnzgGbWE4D8YChwEcqXgPhvNhXPh+Qh&#x2F;xHQzeYAzHKkQ&#x2F;IvxRLZPwjE8PR0ECJEACJEACJEACnkfAZcQ+HuKxFh1po3&#x2F;++acWlkOaOYrK4eEYW8XhgdM0V4jsu+PtAMEyceJETYn+8ssvbUqndsfxelOfXVHsFyhQQMV3TAaReu7cuSibwLkH0Y1zQPya4hTiGiIaae4QuIUKFdJ2EPsQrjgn0t3xPYI+IK09cgQfhTRxXfN1nMcUsxC5eB1iu0iRIhqdt3TUmaIaAhjnQb&#x2F;u3Lnz1BggttEXM7IPYY4Ue&#x2F;yO6+B7DQ4HRMwtDaIe71suBYos9hFpx7Uh4uFohIMA5zVZmOOFaMdWoLgG+oN2SMeH2M+YMWOEMwBLGuCcgOC3bIO+4I8EOMI5QCMBEiABEiABEiABEnAfAi4j9vHw2aFDBy0oh4fnkiVLyqxZs&#x2F;SBGCn85ppVEy0eSrG&#x2F;vC3m6DR+W67NtiTgbAKuKPatifxT3yEAACAASURBVOzjsx9VxBgiFoLUjKRDtEO0ItINAW4p4CH+Ie4huJG1gpR&#x2F;M1sADgNE0GMT+5bzg8i&#x2F;mRGAJQIQzTiHGbk3xT76DcdZVLUCIot9bDGKDAU4KmGmIwJ9jS09PrLYh+MTx5lmjjmq5QXghrR+M5PBsvYBnCQHDx7U00Dko39wgEQ1Hmffvzw&#x2F;CZAACZAACZAACZCAYwm4jNjHsPCA+fHHH8vSpUt1lBD9WFeOh9DI5grV+B07FTwbCcSNgCuK&#x2F;cgjgki1tkAfouBmlBvnQXQfa9iREg+xD+FvpvUjKg2hDzEOcQsBa65tj25tvmVkHxkv+J6BeEcEH5FuOAeQ&#x2F;g&#x2F;D76lTp9YoOoQzou4Q2BDOyDjAa5EdFlGJfZwHGQgwjA3nQEQ+tqh5ZLGPvuM402IS+8iWwhIpiH1kQyDrwTRkCGCLRxgyADBGOFdcpa5I3D4RPJoESIAESIAESIAEvJuAS4l9TAUeRrFFHR5IUUkeabBRGdP4vfvG5eifJeBJYh8RaohUywrwiK5D9EK44j1T+EOoQ+BDmMORgJ&#x2F;x&#x2F;QCxDlGO33FM5Mg+Iv44Bt85EOHIIkBqPAzRfIh3U+ybtOE4QPE8OATw3YTsAjga8Dv6Y2kQ+7iGmWWA&#x2F;qOtmZ2A3+FgsMxCiO6+tkXsmw4EM&#x2F;3e7AOi9sgugKMUjhCzaCjYYIkBli4gewEc4LywZQcBfh5JgARIgARIgARIgARcj4DLiX1rETGyby0ptvMWAp4k9iFEUUgu8lp+iHxEnmEQsYjmIx0ewhRp&#x2F;BD7ELUQrvgZkXi8hzX1kcU+ItkQ+TgH1ubjfPgvHA0Q4ihyh5oAyEYwI914HWLdskAf+oJ+wTFguW7fdDRgXT1eR&#x2F;&#x2F;gLMDrmCuMEU4JXCcmw&#x2F;hQoBT9QlYAxhNbZB&#x2F;nw3XBEGNCAT8YsiVgyCTAe3BuwFGBMUL042c4FuCoMDMQvOXzw3GSAAmQAAmQAAmQgKcRSFCx37dvX12nb485Y80+HsKx3RWNBNyRAERjTMLRLLYWl7Ehld6yur6t54LARB9jS1tHX6Oq0m&#x2F;5OsQv&#x2F;lm2M9fpo51lgTu8HjlSjXGgnSl+zfOZNQTwPqL75rnM181rWBatM88Tee09+mAuRTDT&#x2F;HGceW5rqtub&#x2F;UI&#x2F;cX5cP3LBvMh9QV9xnFl135wnc8yW10cf0dacE7yH87nCziG23l9sTwIkQAIkQAIkQAIk8P8EElTst2nTRgYMGGDXfKxZs8ZmR0FsBfrwkAuxHxcxY9dgeBAJOIAAItkxiUdXEPsOGCZPQQIkQAIkQAIkQAIkQAIkYAWBBBX7ENZTpkzRNbW2GNJx27ZtK9u3b7flME1Nja3KNCJaSAOm4LcJLRsnMIHYovroHsV+Ak8SL08CJEACJEACJEACJEAC8UggQcU+xok1sz179tSCWNYYRM3gwYOfKZxlzbHWiH2ch4LfGpps4woEkKaNz0Tk9ehR9Y1i3xVmjH0gARIgARIgARIgARIggfghkOBiP36G+eQq1op9tEVkH2tZaSTgygSiWoseXX8p9l15Jtk3EiABEiABEiABEiABEnAsAYp9x&#x2F;Lk2UjAZQlQ7Lvs1LBjJEACJEACJEACJEACJOBwAhT7DkfKE5KAaxKg2HfNeWGvSIAESIAESIAESIAESMAZBCj2nUGV5yQBFyTgCLGPc2CbNhoJkAAJkAAJkAAJkAAJkIBrE8DWyua20fb0NFmyZE9t7e2TL1++x&#x2F;acKD6OsWXNfnz0h9cggfgk4Aixj1oWfn5+8dltXosESIAESIAESIAESIAESMAOAiEhIYKC3vYaxb695HgcCcQzAUeIfXSZ0f14njhejgRIgARIgARIgARIgARsJBDXFH5cjmLfRuhsTgIJRcBRYt8U&#x2F;NitApF+GgmQAAmQAAmQAAmQAAmQgGsQQCQ&#x2F;LCxM&#x2F;8XVKPbjSpDHk0A8EXCk2I+nLvMyJEACJEACJEACJEACJEACCUSAYj+BwPOyJGArAYp9W4mxPQmQAAmQAAmQAAmQAAl4LwGKfe+de47czQhQ7LvZhLG7JEACJEACJEACJEACJJCABLxe7KdIkUKCgoIE65djMhRIuHLliuC&#x2F;NBJICAIU+wlBndckARIgARIgARIgARIgAfck4NViPyAgQPr06SP+&#x2F;v6xzh4KJVy7dk1++uknCv5YabGBMwhQ7DuDKs9JAiRAAiRAAiRAAiRAAp5JwKvF&#x2F;rvvvitXr16VFStWyKNHj2Kc4ZQpU8o777wjf&#x2F;75pxw8eNAz7waOyqUJUOy79PSwcyRAAiRAAiRAAiRAAiTgUgS8Wux&#x2F;8cUXKvbv3r1r1aTkyZNH5s2bJ1u2bIm2fZMmTWTw4MHSoEEDOX78uLZLnjy5OggqVKgg58+ft+palo2aNm0q69at08wCS6tVq5Z8&#x2F;PHHES9BDKZOnVpKliwp4eHhEa83btxYvvzyS702MhQePnwoEydOlDlz5ujvNPsJJEqUSHLlyiVnzpyRkJCQiPnOnDmzbpdx8eJFuX&#x2F;&#x2F;vv0XsDiSYt8hGHkSEiABEiABEiABEiABEvAKAl4v9nfv3m2VAMd+5HXr1pWFCxfGKvYHDBigN0&#x2F;VqlXlwYMHz4h91AfIkiWLLh+4efOmOhz8&#x2F;Pwka9ascuLECT02VapUgsmBgJw7d6589NFHcu7cuQgHQlR3J&#x2F;qHbIXmzZs&#x2F;JeIh9itVqqTngOHaf&#x2F;31lwwfPlz&#x2F;C0ubNq1eEwanAARq7ty55dSpUxGOg8DAQEmTJo32I1OmTBH9u3DhQqyZEZ74aYL4hgMnXbp0smrVKrlz547OI&#x2F;ivXbtWkiZNKkWKFJFFixY5xKlCse+JdxHHRAIkQAIkQAIkQAIkQALOIeD1Yv&#x2F;vv&#x2F;8WCP7YDGIfUfTly5fL5s2bo22OyH6jRo0EwnjWrFkyY8aMZ8Q+BDkEODIEkAHQrVs3&#x2F;XnJkiXyySefyLZt2&#x2F;TnH3&#x2F;8UW7fvi0TJkyQUaNGqciePn16tNdGtP7XX3&#x2F;VLABLiyz28d4LL7yg18V7MAhSjAvZC3A6vPjii&#x2F;Ldd9&#x2F;J+vXrNQMABmfBrVu39P3nnntO21euXFn69esne&#x2F;fujQ2hx70PMY8PUNmyZZUFxD6yOMAU84R7pmHDhrJgwQKKfY+bfQ6IBEiABEiABEiABEiABFybAMX+&#x2F;8R+3rx5VbShOv&#x2F;WrVv158mTJ2tU20zPRsR+2bJlsUb2Ifi7d+8uixcvljfffFNTuc00fkRnp06dKkjNR2V&#x2F;iOp27dqp6EeUGA4FiPuaNWuqGEcbCGlE7SH2o7OiRYsKliW0aNHiGWEZldjHOBGNxjhhSZIk0eg8bggIfJwH0fuhQ4dqhgLS1VevXi01atRQB8Zvv&#x2F;2mGQc0kdq1a0eIffDAvZQzZ05N4z9w4IBcvnzZIZgY2XcIRp6EBEiABEiABEiABEiABLyCAMW+RWQfIi1btmyyZs0aFdqnT59W4fbzzz9rOr61Yh9C&#x2F;u2335Y2bdqogO&#x2F;du3eE2C9cuLCMGDFCdu7cGXGDXbp0SXr16qXicNCgQdKsWTOpUqWKpvjDYhP7iCAjqg&#x2F;nAhwJkS0qsY90&#x2F;KVLl0q5cuW0Of4LgYodCtAXiH2k5yPjoH79+hrxhwPjpZdeiojmoybBtGnTVOha1gjwik+OxSAtxT7S+OEcOXnypDqOsFRj06ZNjOx7203B8ZIACZAACZAACZAACZBAAhOg2LcQ+&#x2F;ny5dMUdYj9rl27ypgxY1S0oygfBDmi7tZE9k2xj7mFCEcEHFv2QfjjGojAo7heZIGM6PrMmTMlKChIevToIbt27bJK7CN1HGvE4SCIqhhcVGIf2Qdt27ZVxwLGBbGPZQM3btyQ33&#x2F;&#x2F;XV5&#x2F;&#x2F;XU5cuSIOj2uXLkicFKgngAi+qZhPOPHj9c6AZGXDiTwfR2vl7cU+xkyZFCnCbJDYKiVALHvCGcII&#x2F;vxOq28GAmQAAmQAAmQAAmQAAm4NQGK&#x2F;WjEfpcuXXT9OwQxxDoErz1iH5kB2K4P1dkhjlH5H5FwiGxzC7+MGTOqM+Gzzz7TdPrRo0fL&#x2F;PnzNcUf10X7Vq1aybFjx6K82YYNGybbt29Xx0JUFlnsFypUSJcoDBw4UNeTw7mBjALUI8AWgxCniOBD7KP2wKRJk7TwHKL9yHDAWnVU9IfBcXH48GE9n7eapdiHo6ZevXrqfMFclipVimv2vfXG4LhJgARIgARIgARIgARIIAEJeLXY79u3r65P37Bhg04BquRDoEHIQrSh4BrEL4rkYc06CtRBhJsR96jmDRFzy8g+2iA7AKLY3HqvTJkyEcIeEV8UCUQ&#x2F;sD4eoh7Xg7MBqfM9e&#x2F;ZU8YhrQ1R37Njxqcti2QGOrVixotYGiE7sf&#x2F;XVVxHvX79+XcaNGycrVqzQ5ijW17lzZ43qoxI&#x2F;fkefIfbBBJkNiOq&#x2F;&#x2F;&#x2F;772h6OAYhYcMIx&#x2F;fv3d9i69AT8LNh9aWSDYF0+ah7AcO+gQj&#x2F;mFs6a4OBgu89teSAj+w7ByJOQAAmQAAmQAAmQAAmQgFcQiLPYh7ApWLCgRnutMQggCEdEsm3d4x3XQDV4RxnEN4Q0RC8i7jEZRDUENdbbo+&#x2F;eYqgHgIJ8f&#x2F;zxhzo6aAlHgGI&#x2F;4djzyiRAAiRAAiRAAiRAAiTgbgTiJPZTp06tVeLtsR07dmik2hZztNjHtVHFHmnYcFrEZGfOnFHRe+&#x2F;ePVu67NZtUVwOc4zIPuoBmKn7bj0oN+48xb4bTx67TgIkQAIkQAIkQAIkQALxTCBOYh+R8dy5c9vVZaz9Nvdvt&#x2F;YEzhD71l7bG9uhsj&#x2F;qCSB9f&#x2F;&#x2F;+&#x2F;d6IwKXGTLHvUtPBzpAACZAACZAACZAACZCASxOIk9jHWmUUcLPXENm3JZWfYt9e0jzOEwhQ7HvCLHIMJEACJEACJEACJEACJBA&#x2F;BOIk9lFoDluN2WtYK28WNbPmHBT71lBiG08lQLHvqTPLcZEACZAACZAACZAACZCA4wnESexXq1ZNsmTJYnevUIWeYt9ufDzQywhQ7HvZhHO4JEACJEACJEACJEACJBAHAg4T+9iC7ebNm5IrVy5BBXdsRYaCbtmzZ9fuXbhwQVP2LZ0DFPtxmDke6nUEKPa9bso5YBIgARIgARIgARIgARKwm0CcxH7VqlUF6&#x2F;Zhy5cvl2vXrsnzzz8vOXPmlMWLF+s2eY0aNdJ1&#x2F;SjGFxoaKi+&#x2F;&#x2F;HJEZyn27Z43HuiFBBJS7GPXis8&#x2F;&#x2F;1yKFy8uYWFhsnr1annvvfcEW2k6yjp06CCzZ8&#x2F;W7xFLw3fM2rVr5Z133tFtMuPL4LREAVIsV8J14dCkkQAJkAAJkAAJkAAJkIC7EIiT2LdM40dU&#x2F;8qVK5IvXz6N7OPnO3fuSJ48eZTFuXPnVBiYkX68RrHvLrcJ++kKBBwp9rHLwt27dyO2kkQ9DHxWDxw48MxQU6RIoWIbYrdt27aSJEkSFcFw8OELpECBAvpffMaxRSXOVbZsWTl48KAKd5w3ffr0snXrVt3q8vr165IuXTo9z9GjR9UpWLhwYXUIfvzxx&#x2F;Lff&#x2F;9pP5AlhH6GhITIzJkzI8Q+toPE9wwyhY4dO6bHQ5Dj+sgggsMRDonNmzfr8Xnz5tXdJPLnz6&#x2F;XK1iwoI4d&#x2F;YMDMjpDnzHOTJkyybp16yj2XeFDwD6QAAmQAAmQAAmQAAlYTcBhYt&#x2F;qK1o0nDVrlj7IW2ss0GctKbbzRAKOFPsQ8PXr15e5c+dq3YwGDRqooIXTLrLhvdGjR0uxYsVUWFsaHHYQ9hDPOOcrr7wiZ8+elY0bN0rnzp1lwYIF8uWXX0qzZs2kVKlSgs88Mn&#x2F;QFk7Bbdu2Sfv27fV1CPjjx4&#x2F;LmjVrZMiQIbJ9+3Z1HEC4+&#x2F;r6Srt27VS0&#x2F;&#x2F;vvvyr08frVq1elcuXKmmmA&#x2F;g8bNkzPCStZsqT06tVLmjZtKq1bt1ZnAvqPTCOwRKbCb7&#x2F;9Fuut0rhxY1m&#x2F;fj3Ffqyk2IAESIAESIAESIAESMCVCMRJ7Fum8eNBGw&#x2F;e5cqVk2zZssnKlSs1sl+7du1ot+djZN+VbgX2xdUJOFLsY6wQ3MjOgXDesWOHRsWjspYtW8qgQYM0+m5ZUDNt2rQqyD&#x2F;44ANdtoNIOqL3aBuT2Mc1XnrpJenTp48KeGQGINqOVPlatWrJkSNHVIi&#x2F;9dZb+n2CLACcv1OnTpIjRw4V8Og3HAC4Ptoi+l6vXj19b8KECZpR8Nlnn8nQoUNl7NixsmHDBpk&#x2F;f7589NFHMmXKFP1+2rVrl&#x2F;To0SPWaafYjxURG5AACZAACZAACZAACbgggTiJfcs0&#x2F;sOHD8ulS5c0mhYUFCR79+7VKFqFChU0ihaVUey74B3BLrksAUeLfQw0VapU4u&#x2F;vLxcvXox23DVr1pSJEydqdN6MmqMxUtyR3v&#x2F;qq6&#x2F;Kpk2bVFAjlb579+4q9rGmf968efLTTz9JnTp1IiL7EOJt2rTRiD7S9pHmH1ns&#x2F;&#x2F;zzzyr8kfaPdHqcG5kCRYoUEaztRzQ&#x2F;ODhY0&#x2F;Ih7v&#x2F;44w&#x2F;ty5gxY3RMyZMn12VDDRs2lBIlSmgqP8Q+ft+zZ48sWrRInQoffvhhrPNNsR8rIjYgARIgARIgARIgARJwQQJxEvuVKlXSSJs9hgdxrMO1pcAX0&#x2F;jtIc1jPIWAM8S+NWzgDFi6dKnupNG7d29Nn8f69x9&#x2F;&#x2F;FHFP7J68FkeP368pvvjvzt37tRjxo0bp&#x2F;&#x2F;8&#x2F;PwixD4ygLD231LsY209sgIg&#x2F;uEoxPcKBD+i81jbj9fRHst+IOy7deumToD+&#x2F;ftLixYt9HpI&#x2F;4ejERkA6OtXX32lqfdwSsIJCbGPpQs4P8W+NTPPNiRAAiRAAiRAAiRAAu5MIE5iHwW0KlasaNf4sTZ3y5YtNh1LsW8TLjb2MAIJJfaBESn&#x2F;AwcO1FR5rM&#x2F;&#x2F;&#x2F;fffZeTIkSr6sU4ekfNJkybJ4MGDNdW&#x2F;SpUqMmLECI30T5s2Tfr16xej2Mc1cL4XXnhBC3cOGDBAvvnmG2nSpImep0uXLhqFR&#x2F;o92uA6WH6AJQOoOwBDyn7dunXlueeek4CAAC3yB4dDx44dKfY97LPA4ZAACZAACZAACZAACcROIE5iH2tmsd4WhbsSJUoU+9WMFnhAP3XqlEbiHj58aNUxZiOKfZtwsbGHEUhIse9hKDkcEiABEiABEiABEiABEvB4AnES+yYdVNXGGllrDALfssiXNcdQ7NtCiW09lQDFvqfOLMdFAiRAAiRAAiRAAiRAAo4n4BCx7&#x2F;huRX1GRvbjizSv44oEKPZdcVbYJxIgARIgARIgARIgARJwTQIU+645L+wVCTxDgGKfNwUJkAAJkAAJkAAJkAAJkIC1BCj2rSXFdiSQwAQo9hN4Anh5EiABEiABEiABEiABEnAjAhT7bjRZ7Kp3E6DY9+755+hJgARIgARIgARIgARIwBYCFPu20GJbEkhAAhT7CQiflyYBEiABEiABEiABEiABNyNAse9mE8buei8Bin3vnXuOnARIgARIgARIgARIgARsJUCxbxDLkyePNGvWTNKlSyfYRtDSsFXg8ePHZerUqXZvGWjrpLA9CURFgGKf9wUJkAAJkAAJkAAJkAAJkIC1BLxe7GM7v&#x2F;fff1&#x2F;27dsnS5YskcePHz&#x2F;FLjAwUN544w25c+eOCv7I70cGXadOHQkICJCwsDBZtmyZhISERDsXON&#x2F;06dNl7ty51s4X23kxAYp9L558Dp0ESIAESIAESIAESIAEbCTg9WK&#x2F;VatWkjJlShk1alS06LJkySJdunSRn376Sa5evRoj4lKlSsnkyZPl1Vdflf3798foHKDYt&#x2F;FudbHmuC+qV6+ujh3YP&#x2F;&#x2F;8I1euXInoZbly5XT+t23b5pCeU+w7BCNPQgIkQAIkQAIkQAIkQAJeQcCrxX6aNGmkR48eMm7cODl58mSME16lShWpUaOGfP&#x2F;994LU&#x2F;ugMUf3169dL6dKltQmcBMgaaNSokeTNm1dmzZqlzgAYxP6KFSsEohDC8YcffpB169ZFnPrdd9+VBg0a6DKCTz75RLMLPvjgA&#x2F;3vhAkTtN3IkSNl2LBhcvjwYa+4YV1pkLlz55YUKVKoUwcWGhoa4dzJkSOHFCpUSK5fv06x70qTxr6QAAmQAAmQAAmQAAmQgJcQ8FqxnyRJEunVq5eKfKTbm&#x2F;bgwQO5d++e&#x2F;hoUFCR+fn76M9L9O3XqpG3&#x2F;&#x2F;fffaG+PyGJ&#x2F;4MCBUrFiRRk8eLCm9Pfv31&#x2F;F+dKlS1Xso&#x2F;3QoUPF19dXvvjiC+nbt69s2rRJswjQl5kzZwpEJYT&#x2F;yy+&#x2F;LP7+&#x2F;tqHF198UaPK9erVk7feestLblfXGibEPKL6R44ceapjiMBjzs+fPy9wKDGy71rzxt6QAAmQAAmQAAmQAAmQgDcQ8Fqxnzp1ahXWkQ2R2O+++07gDEA03RT7ZruDBw&#x2F;K77&#x2F;&#x2F;bpPYh6Dv3bu3HvPhhx&#x2F;qsgEIe4j9VatWaWYBbMCAAYIaAd9++61s2LBBo&#x2F;qnTp1SR8DixYtl+PDhsnDhQqldu7a0bt1aMmXKJG3atJHLly97w73qcmNEpgYcMSjqCEfOjh07JDg4WJ0wW7duFdxjGTJkoNh3uZljh0iABEiABEiABEiABEjA8wl4rdhPmzatRvaHDBkSsQ4fEVlE4iHC79+&#x2F;Lx06dJARI0ZohBYGEVegQAH59ddfbRL7Fy9ejKgJ0LlzZ8mcObN8+umnep0ZM2bI7Nmz9XyI0D&#x2F;&#x2F;&#x2F;PP6HsQ+lgLcvXtX3xszZoy+NnHiRHVEYH34&#x2F;PnzNWOAlvAEsAwDqfsXLlzQ7As4abJmzao7PGzfvl1T&#x2F;ONqXLMfV4I8ngRIgARIgARIgARIgAS8hwDFvoXYx7RDbL&#x2F;00ksSHh6u6+sRrTUr8Nsr9iEAR48erXdVZLEPAY9197DPPvtMlwsgso+lAo0bN5YTJ05oZH&#x2F;58uXy448&#x2F;amQf50DEuEyZMpoNsGfPHu+5Y110pNmyZdNMCywLSZUqlfYSDiUsBdm5c6dcu3Ytzj1PaLFfOVd+eb1kJckYlEKwQeVdo3bFvP07ZPZexxQgjDMgnoAESIAESIAESIAESIAESCCCgNeKfaRY9+nTR9fLR06DR2QWhjXzloZ18ojgxpTGnzNnTo24Ywu+S5cuaaZATGI&#x2F;efLkEVF&#x2F;CPdu3bppJBhr+5EBgMh&#x2F;&#x2F;vz5pWXLlrpmH9dHRgAcDyVKlJB+&#x2F;fpJ&#x2F;fr1eUsnAIGCBQtq5B7OoESJEsmuXbu0eKJpiPR7Qhp&#x2F;7QJFpU&#x2F;txpIvXUbxeRwuYYYjDGNOnMhXxDeRXLl9S37ZsFImbVuv79FIgARIgARIgARIgARIgAQSnoDXin2kwkPsHzp0SEVabIao6uuvv67p82vWrIm2+c8&#x2F;&#x2F;yzp06fXNdyoxN+iRQutyA4HAAxZAyjaBocBBD1ef+ONN&#x2F;QYRP+3bNkScW5cDw6Gc+fO6S4At2&#x2F;f1rX&#x2F;qPa&#x2F;ceNGbde9e3ftP&#x2F;pF82wCCRHZ71LlBelTq5E8Cn0khs43IvqPRUIMJ5h&#x2F;wBPYRr0CQ&#x2F;lLYiP7ZO7+XdJ&#x2F;&#x2F;nQJfhTi2RPB0ZEACZAACZAACZAACZCAGxDwWrGPuYF4QoV9RGBjM6T1r1y5UgvqmWn9sR3D90nAkQTiW+xXylVAJr&#x2F;xju44YKwlkTvHjsi1lUsl+5vtxMdYbiJhj41I&#x2F;2Px9UuinwlfQ&#x2F;iP3bxGBq944tiikQAJkAAJkAAJkAAJkAAJJBwBrxb7Jnak7aOiekwGwYNoPY0EEopAfIr9jEEp5d&#x2F;un0s4Cgsan43HSN03Bn5187+SLE1aCcxXQPwaVJPQsxclfM8R8TEyZeTebfENCJJWk0bK5lPHnsGEXSiQvYLslLNnz0a8j1oV2J3CEU40LKfANVD34tixJ33AZxuZMShu6Yj6FliaA6dfTBk+uC7mCztt4PsF3x8o1DlnzhzNzHHEWBPqPuR1SYAESIAESIAESIAE3IMAxb57zBN7SQIqHh1R1d8alC8XLyffN2kpoYjqG1F7RPYf+xqi&#x2F;1GY3D18UFK&#x2F;0kQeXr4qPqfOSJLzp8XnxhV5nCxQHhcpI8uO7JMuMyY8cxnUN0BBSixVefPNNyPenzlzprz66qtaFNMRVqNGDd1JA7tb4JzFihXT4pdYFuMIfmPHjlXRvmjRohi7i6VCe&#x2F;fu1R0zsDsDanC89tprWvTz888&#x2F;p+B3xGTzHCRAAiRAAiRAAiTgQAJZy&#x2F;8gvokDJFnqovLwzjEj8HVfrh4aK&#x2F;evxbzs2z9lQcle+Rc5sugFB&#x2F;Ym7qdyuNhHZA2RLOxPb+4&#x2F;jm3sNBU4joZK9bdu3YrjWXg4CbgngfgU+&#x2F;Pb95BCGTMZoIyMlwDj89zkBQkLvi+PT56TsL1GJL9YAXm884CRyn9FHiVKJuEhfpLo4X1JkiKV3Hr0UMp+PyBKsf&#x2F;dd98JimNiy0tEuGGWYh87GiBy&#x2F;txzz8mRI0fkk08+kdy5c0u7du3k7bffVocHClgOGzZMxo8frzsgoF5FpUqV5MaNG3o+fActWbJEswU2b96sO1u0b99edu&#x2F;eLWXLltWtLVOkSCFLly7VfiBjp0KFCtKzZ0&#x2F;dLhGFNbt27apbbmIHjD&#x2F;++ENrY+D7B4UycV7sjoGdF77++mtBUc6bN2&#x2F;qz5s2bYoYtyn2X3nllacyClavXq19WLt2rRQtWlQ+&#x2F;vhjyZ49u24B+s4772hBTrxmFt7EmNEWY6SRAAmQAAmQAAmQAAk4n0DWcoPlyv6REnLvtF4ssX86SRKQRcLDHkjInRNG1usjfU5OmiKPUa86QHwSJ5Os5b5RsQ9ngV&#x2F;y7OKTKKk8undWQkNuin&#x2F;KwvLg5n7jGGPpq76fQx7cOuj0gThU7COCVqhQIRX52C4OhnRVRNeOHz&#x2F;+1DZ29oyMYt8eajzGUwjEp9jfN+Bb8Qs3ovlGUP9xeJiEGkH3JIbYDXkQLH55c0qYIYSTZN0jj+4EiH+24xJ6rLxIcGqjsY9+&#x2F;vN93StKsY&#x2F;dL7766itZsGCBlC9fXotXWor9SZMmacr9gQMHtDhl69atVYRD7OL7JU+ePNoeKfG1atWSypUra3v81zI1vmLFilogEyn9iOrXq1dPhfy0adN0pwxE+CG4UfQSM4JA8wAAIABJREFUx8NpgJ8fPXqkUXc4FeGYgFMB12nQoIFeE++jLXZdwHkR4d+6das6GPA9Z7nUJzqx&#x2F;8033+hOH3BqYHtGnBMO0Y4dO2r0H&#x2F;2CAwPXDA4O1u1A0RY8aCRAAiRAAiRAAiRAAs4nYCn2kwTmkFzVJsrlvUMkecbKRrQ&#x2F;WC7u&#x2F;EJSZm8kqfO1lutHJkq6Qh0lkV9KFftBWWqLX2BOCbl7QjKX&#x2F;tx4rbZkrzRSzm3qLmGhdyVlziaSPH1FOb&#x2F;tI6cPxCFiPzAwUGrWrCnYRi4mwwPttm3btLq8PUaxbw81HuMpBOJV7H86WJKE+Rr+Sh8JPnVSbm7fIskLF5NUZTIY&#x2F;shQI50&#x2F;mxFCN9L679w3PJ63Jamxw4SPv1G0794DdRAU+CZqsT98+HAV8BDi2JYQgtkU+&#x2F;h879y5UyP3MIhlRM2rVaum3xtI9S9durTkypVLmjdvrv8Q&#x2F;UY77IIR2RD5R1tE1q9du6bHQ0hj3T4cAxDt+E5q1KhRxKFwVEDcQ1j37dtXxT6WHUyZMuWZ8zdp0kQj&#x2F;oj+L1y48JnspejE&#x2F;kcffaQiv1ev&#x2F;2ekDpJ8+fSa5hIEOE6xYwf6jH7CKUEjARIgARIgARIgARJwPgFLsQ&#x2F;B&#x2F;vD2Ubl+dLJeOPcLf8vptW9LvvrL5cTKFsaz8FkJSFdGspb&#x2F;7pk0&#x2F;jy1Z8nZzT2MzIAMkiJbfcNJMNAQ&#x2F;iPkws5BEnr&#x2F;ktMHEmexj4dWRMqsNUS&#x2F;sG7XHsFPsW8tZbbzRALxKfb39PtG&#x2F;H0SySMj2n1u5p+SueVbEpD7moQa2+o9vpwDyf3iW7aoyJlLctNIx39w&#x2F;Jikf7ut+F6+oZH9&#x2F;F9FLfYhypEKj0g40uiRpt+tWzd9DVtSQjRbrudHBB5ZQYjQ4z0I7AEDBuhxSNXHGvgePXrI5cuXoxTjSN&#x2F;HdpcwLAXA8SgQaNrDhw91PT1ENpYO3L17V7fBPHHihG7NCbE&#x2F;ffp0XQoQ2TBOZCe0atVK8ubNKxDx&#x2F;&#x2F;33X0Sz6MT+L7&#x2F;8IkePHhU4PtB3pPLjugEBAeowQJ+RwbB48WIpU6aMzJgxQ9q2bavLC2gkQAIkQAIkQAIkQALOJ2Ap9rNWGCJ3zq2Q22cX64Vz1Zgi57f2k7x1lxjivoaEPrgi&#x2F;qkKq4hHZD99ka6GuE8vj8NCJGWOxnJyTWtD2F+W&#x2F;I3WyYkVzSVTqU&#x2F;klOEsiA+Lk9jHwY0bN45I2UeHkZJ65coVuXDhgkajsmTJIhkzZtQHWcuK93iQtXX9PcV+fNwSvIarEohPsT&#x2F;+1Y5S1ai4jwr8j&#x2F;2N+hv3gyVZxXkSvMn4vBvC1MhDl7DA1JL0pVryaMl6ubZzq&#x2F;gaa9&#x2F;TVKkm52&#x2F;fkurDBz2DEQX6TLGPNxGlR+QaKe0opodoOyL4LVq00PXwMDgFIICRyo7vmuLFi2skHiIYBfewBh9ZRVEZUvexBr5Zs2b6NiL2SIfHf&#x2F;E9BQNTLDky18TDGdmmTRsV&#x2F;rGJfRxnFhVECj7W1KOugGmRxT6+&#x2F;7CUYPbs2eogwPcfHJ8YE74r0S9kPUDsoy2cGSNGjNDMBPChkQAJkAAJkAAJkAAJxA8BS7GfKverktyI3F&#x2F;YNUgSJU5uFOIbLcdXNJOc1f6QqwfHyP3ruyUoax3J8Nz7Kvbz1J4tJ1a9Ij6+SY2f58iZf981MgOOScbifcQvRV4JvrRRrh35PV4GEiexjwduFJMyDdtpoSCW+SBtvo4HdkS+8HBv2pkzZ&#x2F;RB1xaj2LeFFtt6GoH4FPtV8xSQKW91lQcPHwhq5BsJ+xKe6qQkupFTfK9elMchDyU8g5HKX7KQyJ7DWq0&#x2F;3BDr&#x2F;n5JZer2f+XjRTOewR9Z7KMB1scjko&#x2F;vEQhnRLAR7UbaPLKGMGb8DvGL9P6VK1dqZB6&#x2F;I9p+8ODBpwS25UUji318D2ErPKT2w9kIQY&#x2F;zYUs+OBmwXR&#x2F;aQHDjvLGJfWQXoH8o5IdjxowZ81S6vyn2sa4fxQNLliypzgkU&#x2F;4OQx1aE+A5EDQM4OiDy4eSA4wBWokQJmTx5smCN&#x2F;9SpUz3tduZ4SIAESIAESIAESMBlCTxVoM&#x2F;HV9LkaSXpinSWR8GXjKh+bxXvvkkCJUflMZLEKMZ34&#x2F;g0SZ27xZPIfuGukjrv63L&#x2F;xn9G8b5kctFwEqC9j29iKdhkmxxZWF3CQuKn6LzdYh9RLayZxcMuDFGqFStWqNDHQ33hwoX1wRkPwqiqjYdZFNjCAzYMv8+fP18LUFlrFPvWkmI7TyQQn2I&#x2F;wNhNY13XAZIqIHlE9Bpr8X1CHojvqSMSboh6yZHviSPAEN6atWM0CDV+rzniK7l459kvMHx+4SC0TIlHZf6qVavqdwG+E3AefEdAkKPYHQr1wTEIQ+Qb6fX4B8NxENHY3i4qQ7E7rINft25dxNvYJaRcuXK6ZADfWagRgGJ7cEYWLFhQv482btyohUZRvR8OytOnT2ul&#x2F;MiGrCVE5fFdiDaR+4HXUVMA8wZHBq6D8Vim4yNdH9fCdVHoDz+bNQuwqwlewzIpFAekkQAJkAAJkAAJkAAJuC8BFO1LW6C9XNjxabwNwm6xjwfp6tWrR3QUQh8PxHgAxkO4Zco+1sQi4g&#x2F;xjzWzpoMA+00fPmxEBa00in0rQbGZRxKIT7EPgLnSpJf5HXtIssRJnlS6N4R4+N3bxlodY91+Yj&#x2F;xTR6onM3Pup8harvPmSKz9mzzSP7xPajatWtrvYEPPvggvi&#x2F;N65EACZAACZAACZAACTiIgI9RByt90e4SmKGynN3S09i677iDzhz7aewW+0hHRdTMtLlz5+raW4h5RKQi27Jly3SbrRo1amgVbNixY8c0cmWtUexbS4rtPJFAfIt9MKyYM6+MbdlJAowoNdbvozCfafgdhor9jw2h&#x2F;+mC6fLnjo2eiD5ex4ToPuoGoDYBtt8zMxvitRO8GAmQAAmQAAmQAAmQgNsTsFvsoygWCu+Z9vfff+sWWGbl68hk1hsVu7Gmv1SpUpouC0PEHymz1hrFvrWk2M4TCSSE2AfHVMkC5JM6TaVZsdKS2EiDx1IdRPr9jFT+sNBHsuPsKekyc4JcvnNbHQK0uBGAsxRLoVCh&#x2F;+bNm3E7GY8mARIgARIgARIgARLwWgJ2i30Um0IEyrQFCxbow2nDhg0lKCjoGaAoSIUHV6xhRWEqGIpg7dq1y2r4FPtWo2JDDySQUGLfRJkpKKUUz5JdUib11wh&#x2F;sLEt3oHL5+XY1We3vfNA&#x2F;BwSCZAACZAACZAACZAACbgVAbvFPiplo3CUaWvWrNHt9vA6UvUR5YehMBX2lMb6fESsmjZtGnGMGe23lhjFvrWk2M4TCSS02PdEphwTCZAACZAACZAACZAACXgqAbvFPoCgGj+qW8MePnwoiO4jxRcFu1DxGhF+VJY2U1FR2bpAgQLaHpW2Z82aZRNXin2bcLGxhxGg2PewCeVwSIAESIAESIAESIAESMCJBOIk9osWLSr4Zxq2wUKEH4X6IhsK+mF7K7NyN7a8OnTokE1Do9i3CRcbexgBin0Pm1AOhwRIgARIgARIgARIgAScSCBOYh&#x2F;iA4X6kLpvGiL2x48fl9u3b0uosaYX0f0cOXJErNNHO1TlX716tUb3bTGKfVtosa2nEaDY97QZ5XhIgARIgARIgARIgARIwHkE4iT20a2AgAAV&#x2F;FEV5Yuq20jpX7lypab722oU+7YSY3tPIkCx70mzybGQAAmQAAmQAAmQAAmQgHMJxFnsm91DUT5sxWem6UfuNrbqOnfunKAon71GsW8vOR7nCQQo9j1hFjkGEiABEiABEiABEiABEogfAg4T++iumbKfPXt2SZEihe7FjXT+s2fPyqlTp+TevXv6mr1GsW8vOR7nCQTcWezDCYjdOGgkQAIkQAIkQAIkQAIkQAJPCGBZe1hYmNNwOFTsO62X&#x2F;zuxM8Q+CgyieGBMQgQOChQfXLJkiTovaCSQEATcWeyDl7lzR0Kw4zVJgARIgARIgARIgARIwNUIoMYdtqp3lnm12E+ePLn07dtXjh49KteuXYuWsa+vr+TKlUvQfsiQIXbVG3DWBPK83kPA3cW+98wUR0oCJEACJEACJEACJEACCU&#x2F;Aq8V+uXLlpEyZMjJ69OhYZwJLFPr06SMjRoyQS5cuxdrerF0Ql2ULsV6EDbyKAMW+V003B0sCJEACJEACJEACJEACcSLg1WK&#x2F;SpUqUrBgQfntt98ESwRq1679TIHB8+fPy44dOyQwMFDF&#x2F;pgxY7TQYHSGc3799dfaBksDsOvAq6++GqdJ4sEkAAIU+7wPSIAESIAESIAESIAESIAErCVAsf8&#x2F;sY8U&#x2F;VatWkmiRImeYnfs2DFZvny51WL&#x2F;l19+kf&#x2F;++09GjRql58HWhMHBwZIhQwYpVaqULF26VF&#x2F;H+uXGjRvL33&#x2F;&#x2F;LdmyZZPUqVNL+vTppUCBArJ3717ZvHmzvp8mTRrdweDgwYN63MsvvyyrVq2Spk2bysOHD2XBggWCgoiVKlWSixcvyqJFiwRrP5BZULFiRSlevLg6HBYuXKgZCRgnjl29erXUq1dPDhw4IDlz5pQ&#x2F;&#x2F;&#x2F;xTz4&#x2F;xv&#x2F;nmm7Js2TKBo4PmOgQo9l1nLtgTEiABEiABEiABEiABEnB1Al4t9qtWraqR&#x2F;XHjxsU6T9ZG9r&#x2F;88ksV24juo7qiaSVKlJCOHTtK165d9SXsVjBhwgRp0aKFVK5cWT799FPZvn27Cna0O3z4sOzatUsLNrRu3VrboEjg2rVrtUjgrFmzpFatWirU8fqcOXP0XFu2bJGBAwdKkiRJ5Ndff1XnAgQ&#x2F;&#x2F;jVq1EgdCitWrJA9e&#x2F;ao0IfjAJkN1atXlytXrkjKlCllzZo1Uq1aNRYjjPWuiN8GFPvxy5tXIwESIAESIAESIAESIAF3JuDVYt8yjR&#x2F;iGOLftPv378umTZsitgq0VuwjdR&#x2F;iGVH8zz&#x2F;&#x2F;XP766y89ZWxi&#x2F;8cff9RIPNb4f&#x2F;HFF+oogOMAhih827Zt5eTJk7J161Zp3ry5nDlzRoX+&#x2F;PnzpWTJkuoUwDKEbt26aUYAzoPovlkzAJkCderU0aUFyBRo1qyZ7Nu3T9vMnTtXHQM4FzIHihUrJp999pk739ce2XeKfY+cVg6KBEiABEiABEiABEiABJxCgGL&#x2F;f2n8SLdv166drouGXb16VaZOnRqxFYK1Yh&#x2F;HIhU+X758ula&#x2F;dOnSGnGHgI4pst+mTRvp1KmTXrtnz55y6tQpmTlzpv4+b948+fDDD+XEiRMq1OGkgCFKj4g+ov4w&#x2F;Pfjjz+Whg0bamQfDgIUIEQ9gueff14qVKigywdwDvTr7t27ehy2Hnz33Xf1+uvWrZP27dtHLBtwyl3Hk9pFgGLfLmw8iARIgARIgARIgARIgAS8koBXi31b0viRdt+7d29di2&#x2F;LWnasle&#x2F;Vq5c6AJDCD1ENK1q0qKbbm2n8LVu2jEjxh9hHrQAI+chiH2n8SLE3xf7s2bMjxL+l2EchwevXr+sSBdQMQPQekX1T7CMbAK+bhnR&#x2F;RPPHjh2rGQaW73nlJ8MFB02x74KTwi6RAAmQAAmQAAmQAAmQgIsS8Gqxb5nGH9P8QCC&#x2F;&#x2F;vrrWghvyJAh8uDBg2ibI13&#x2F;5s2bmoafNWtWQcG+mjVransUvUNxPBTMw3lSpUrlNLEPJwCWE&#x2F;zzzz9a9G&#x2F;69OmCrQajE&#x2F;uoGVCkSBFN7R80aJCL3q7e3S2Kfe+ef46eBEiABEiABEiABEiABGwh4NViv3z58prOPnr06BiZIR0eFfOxrj62iDfS7V977TUtwIcCe4iWI0oPwzIBpPLfunVLo&#x2F;19+&#x2F;bVyveIyDs6sl+4cGEZOnSoFtwbPny4vPLKK&#x2F;L2229HK&#x2F;bhEFi8eLFmHKBeAc31CFDsu96csEckQAIkQAIkQAIkQAIk4KoEvFrsBwUFaWr+hg0bok3NRzQcghmV8xGx91RD6n6&#x2F;fv0084DmmgQo9l1zXtgrEiABEiABEiABEiABEnBFAl4t9jEhzz33nCDCjwJ8URlS9v&#x2F;++29d&#x2F;+6JhuJ9hQoVkv79+8uMGTMiigJ64ljdfUwU++4+g+w&#x2F;CZAACZAACZAACZAACcQfAa8X+&#x2F;GH2jWvlCVLFpk0aZL88ccfMnHiRNfsJHulBCj2eSOQAAmQAAmQAAmQAAmQAAlYS4Bi31pSbEcCCUyAYj+BJ4CXJwESIAESIAESIAESIAE3IkCx70aTxa56NwGKfe+ef46eBEiABEiABEiABEiABGwhQLFvCy22JYEEJECxn4DweWkSIAESIAESIAESIAEScDMCFPtuNmHsrvcSoNj33rnnyEmABEiABEiABEiABEjAVgIU+7YSY3sSSCACCSX2e&#x2F;bsKQ0aNNBRjx49WndtiMqSJEkiS5YskU8&#x2F;&#x2F;VS3s3SW+fr6SvXq1WXfvn1y+fJlZ12G5yUBEiABEiABEiABEiABtybgFLGPkyZPnlzwUI6t6+7cuSOPHz+OMyhsE3fr1q04n4cnIAF3JOBIsY&#x2F;P0sOHDyMw+Pj4SMqUKeXmzZvPoMH2lNitITQ0VF599VU5ffp0lPj8&#x2F;Pzk2LFj0qFDB1m6dKnTEOfJk0fy588v&#x2F;&#x2F;33n5w&#x2F;f95p1+GJSYAESIAESIAESIAESMCdCThM7EPYZ86cWQoXLizp0qV7iklwcLAcOnRITp48+ZTAsBUcxb6txNjekwg4UuwXLFhQ0qRJI1u2bJHw8HApVKiQpE2bViPyUTnmELG&#x2F;f&#x2F;++NGvWTN577z1p1aqVHDlyRCpVqiRr166VLl26KGqI&#x2F;Tlz5kjt2rXl+PHj8u6776ogf+2116R79+4SEBAg8+bN0+j&#x2F;yJEjBY4EZA306dNHXnrpJWnUqJGcOnUq2mlLlSqVlC5dWu7duydnzpyh2PekG5xjIQESIAESIAESIAEScCgBh4h9RAWrVq0q2LM9JsMDOkTDo0eP7BoExb5d2HiQhxBwpNgHEtMxh8yboKAgWbduXbSkIov93r17yxtvvCH4Ahk&#x2F;fry0adNG1q9fr2J&#x2F;6tSpMnjwYD0fUv5nz54t8+fPV+G&#x2F;Z88edShA6A8ZMkQ2bdok165dkyJFimhGwLJly6LtA75nqlSpotcpW7asnDt3jmLfQ+5tDoMESIAESIAESIAESMDxBOIs9hHRr1mzpqRPn&#x2F;6p3iFFGBH91KlTP&#x2F;U6XoNwCAkJsXk0FPs2I+MBHkTA0WIf4hkR&#x2F;cDAQNm+fbtG+KOzyGIfwvz555+XRIkSycGDB6VXr14q6iH2IeoXL16sYv&#x2F;o0aMyZcoUGTVqlK6zP3v2rCxcuFCdC9WqVZO2bdvKoEGD5Pr16yrgY3IEIqIPxwDOUaZMGblw4YL+7IglQh50m3AoJEACJEACJEACJEACJKAE4iz2c+fOLRUqVHgG5z&#x2F;&#x2F;&#x2F;KMP8C1atHjmPTykI&#x2F;XX1od0in3etd5MwNFi32QJ0R&#x2F;bZxFr8FF&#x2F;o0mTJprG365dO6lcubLg2MOHDz8l9ocPHy5jxoyRNWvWyIoVK+Svv&#x2F;6SmTNnaio&#x2F;HANwAuAf0vqR0o9xFShQQFq2bKlR++gM0X84JmAZMmTQVP7du3fr9wyNBEiABEiABEiABEiABEjgaQJxEvt4SMfDP6pwR7aVK1dqFA4FvaKyVatW2VxJm2Kft683E3CW2I+N6QcffCBI24d17dpVsmXLFqPYv3jxoopxFPvr1KmT7NixQyP7WOoDw1p7OAH79+8vdevWlRdeeEGGDh2qywrwuzXivVy5ckzjj23i+D4JkAAJkAAJkAAJkIBXE4iT2MdDP9bQRmWxif39+&#x2F;fr+l1bjGLfFlps62kEEkrsexpHjocESIAESIAESIAESIAEvIFAnMQ+0mqLFy8erdi&#x2F;evWqlC9fXt+HY8AyA+DSpUuCVH9bjGLfFlps62kEKPY9bUY5HhIgARIgARIgARIgARJwHoE4iX0IfQj+qCxymj622CpWrFhEU6T4ouiXLUaxbwsttvU0AhT7njajHA8JkAAJkAAJkAAJkAAJOI9AnMQ+9uouVapUlL2DmMc+22bhL1T9Tp48eURbRvadN6k8s2cSoNj3zHnlqEiABEiABEiABEiABEjAGQTiJPbTpk0rderUsatfO3fulEOHDtl0LCP7NuFiYw8jQLHvYRPK4ZAACZAACZAACZAACZCAEwnESeyjX6iwnTVrVpu6iGj&#x2F;&#x2F;PnzJTg42KbjKPZtwsXGHkaAYt&#x2F;DJpTDIQESIAESIAESIAESIAEnEoiz2Me+1w0aNBBfX1+rugmhv3HjRjl9+rRV7S0bUezbjIwHeBABin0PmkwOhQRIgARIgARIgARIgAScTCDOYh&#x2F;9Q2S&#x2F;cuXKVgn+c+fOyfr16yPW8tsyPop9W2ixracRoNj3tBnleEiABEiABEiABEiABEjAeQQcIvbRvRIlSkjhwoVj7Only5d1uz2zaJ+tw6LYt5UY23sSAYp9T5pNjoUESIAESIAESIAESIAEnEvAYWIf3Yy8vZ5l18+ePStbtmyRkJAQu0dEsW83Oh7oAQQo9j1gEjkEEiABEiABEiABEiABEognAg4V++hznjx5pEyZMpIoUSIdAqL4J06ckB07dkhoaGichhWb2Pfx8RF&#x2F;f&#x2F;84XYMHk0BCEQgLC4vRGUaxn1Azw+uSAAmQAAmQAAmQAAmQgPsRcLjYBwKI8rJlywpOfuDAAcE6fUdYbGLfEdfgOUjAVQlQ7LvqzLBfJEACJEACJEACJEACJOB6BJwi9p01TIp9Z5Hled2BAMW+O8wS+0gCJEACJEACJEACJEACrkGAYt815oG9IIFYCVDsx4qIDUiABEiABEiABEiABEiABP5HgGKftwIJuAkBin03mSh2kwRIgARIgARIgARIgARcgADFvgtMArtAAtYQoNi3hhLbkAAJkAAJkAAJkAAJkAAJgADFPu8DEnATAhT7bjJR7CYJkAAJkAAJkAAJkAAJuAABin0XmAR2gQSsIZAQYj9FihSSO3duSZIkSYxdxLaaR44ckXv37lkzFLYhARIgARIgARIgARIgARJwMgGKfScD5ulJwFEE4lvs+&#x2F;j4SNOmTeXOnTsSEhIS4zDQt3Tp0sn8+fPl&#x2F;v37jhoyz0MCJEACJEACJEACJEACJGAnAYp9O8HxMBKIbwIJIfZff&#x2F;11+fPPP2MdKvoGx8D69evl4sWLz7SH4yB58uQa+X&#x2F;8+LG+HxAQIGFhYfLw4UP9HW3wWkzZAb6+vnq8eY5YO2ZlgyJFikjPnj2lffv2UqdOHXnhhRekX79+Tx1dsWJF6dGjh7z66qtWnjXhmyVKlEgZw2rVqiUvvfSSdOvWzWkda9OmjeTKlUsGDhzotGvwxCRAAiRAAiRAAt5JIFu2bILnMTx3RraTJ0&#x2F;K5s2bo31GxHMmDFu5p06dWi5cuOAVECn2vWKaOUhPIBDfYh&#x2F;CGsJ22rRpseKDqGzWrJls2LAhyi9PfLHCEfDWW2&#x2F;JgQMHBOdevny57N+&#x2F;X95&#x2F;&#x2F;309PwT3d999J40aNYr2ei1atJCjR4&#x2F;K7t27Y+2TLQ2CgoKkRIkS2sfoxD4yF9DHtWvX2nLqBG37ySefyKBBgyj2E3QWeHESIAESIAES8CwCWOZZqVIlHdSWLVvk+vXrUQ6wZMmScvr06Wjft5UKAhebNm2KUtAXKlRIbt68KSdOnHjqtHjmfP755yVNmjT6uhmAwnPo1atXn+6CTyLJVX2i+CZO&#x2F;tTrl&#x2F;YMlnuXN8bYXb&#x2F;AnJKxeF85828XW4fl1PYU+07Fy5OTgOMIuLPYxxfrjBkzZPr06fpfPz8&#x2F;mTt3roSHh0vjxo31v4isp0yZUj799FMpXLiwVK9eXSP9+FL&#x2F;999&#x2F;pUyZMvL111&#x2F;LwYMHNXtg5MiRcvfuXaldu7YUK1ZM4NHFOVE&#x2F;AF&#x2F;qDx48EIh4eIBHjRqlyxFMg9Nh8eLF6szYsWOHnDlzRqpVqyZTp059SuzDSdG5c2ftN74sa9SoIePHj39mUkuVKqX9vX37tsycOVP&#x2F;oLz44osybtw4HRvsnXfeUcfJrVu39BpwLuAP0oIFCzS7AefAH8u8efMK&#x2F;mChBgL+aG3dujXijxOi8j&#x2F;&#x2F;&#x2F;LOO0TQwQ8Q+Y8aMOpZVq1aJv7+&#x2F;fPjhh+o4WbRokTooMBawBqOyZcvqtbHswlyiUaBAAe0zfscY0BfUaujQoYNMmTJFWrdurY6a1atXPzV+sK5cubKeD7xz5sypkX3MHTIkMBb8MZ01a5bAKdSpUycZNmxYxHIPZAOsW7dOjh8&#x2F;7rgPC89EAiRAAiRAAiTgVAJ4VsPzS0x&#x2F;v6tUqSKHDx+Wy5cvO6QvEPsILJUuXVoDR6aZzyB4Dc8qpuHZB89ceA19QLYjXkMWIgJHGTJkeCYjFaJdfHwlY7Fecv3oFHl0&#x2F;4KE3r8k4aHBMY7BP2VByV75Fzmy6AWHjNVRJ6HYdxRJnocEnEzAncU+0EDU4Q8D0uMhKosXLy558uTRZQIQexCDEyZMUPELQY0vc9gHH3ygQhxfyBD7S5Ys0T8cSNWCWK9fv76KU&#x2F;wX4r979+7y3nvvqfiG4N+4caNMnDjxqeUBuN5&#x2F;&#x2F;&#x2F;2nDoJly5ZpOljv3r3ltddeixD7n332mYpWiF5kHEDof&#x2F;TRR1K3bt2nZhqe7f79+8ukSZMkf&#x2F;78KuJxfTgT8EcONQyyZMmiv6MtlgpAbM+ePVtF+rFjx+TLL79UMV2+fHkJDAxUcY7xDxkyRJdHYNkCnBYQ3vhnGvqN6549e1adAm+88YasWLFCRo8eLciCwDIMnAPjzJcvn3zzzTfKGuw6duyowh9OE2QtQNBjLpDaBscE+gp+cLbg&#x2F;OgThD5+Nw1MINx&#x2F;+OEHHSOcCfCUgxucF23bttXf0Q+cA0x37typnMEfY8Uf2wYNGsihQ4ec&#x2F;Ani6UmABEiABEiABBxFAM88CBCcOnVKn+8g&#x2F;CGi8Wyyb98+OXfunD4H4VkiVapUKs63bdumz1UISpQrV04DA3h2w+tog2cVBHiQOYDnRDyzWBrEPoIaCBqZ9ujRI31OKliwoF7DUuyjP7gGMkmjMgQl&#x2F;vnnn4jAjGWbrOUGy5X9IyXk3mnxTeQv6Z&#x2F;7UJKnLy9hhui&#x2F;sn9dS&#x2F;IRAAAgAElEQVS4BF&#x2F;ZKkkCskiWct8ZvoHE8uDmfgnKXF3FfkC6cpKu0DuSyC+F3Luy2Wg&#x2F;QvLWniPHVzSV8LCHxnkqSIaiPeTEP685ajqiPQ&#x2F;FvtMR8wIk4BgC7i72sWYfQr5mzZoabe7bt68gvQuR4S5duqgAhViM7P1FdPzHH3&#x2F;UL2pE6OEIMKPda9askVatWilgCEcIVghpiG38gWnZsmWU8CFY+&#x2F;TpE5GSj2MsxT7+mCAajT8cEL74IxKV2EfGAsYEcY2oOgx96NWrl4pt&#x2F;JHCWF955ZUI8Y3X3nzzTcEfJxiOhzCG2Ed&#x2F;zWUMiKpjfO3atdNshpUrV8qAAQPUeWEavNVwHkBMwyDU4VSAYwB&#x2F;eDEmHA&#x2F;DmOAIAWMYMiW6du0qb7&#x2F;9tmYLwEmAP7awv&#x2F;76S4&#x2F;dtWuXcq9QoYJcunTpGZaYD&#x2F;zRRbYGDM4Y&#x2F;LGPvGYfjho4cho2bKhjx5o7OB6ee+45zXaAg8TMgHDMp4VnIQESIAESIAEScCYBS7GPZY6ImMOhD6GOZ7158+Zp5h&#x2F;EPZ4lINCrVq2qzzN4fkH6P7IdEXDAc8bChQv1uRDR96JFi8qcOXOeKfpspvHjWQbZgjCIday&#x2F;j0rs4zwIeMChEJXh+WvPnj0R9Y0s21iK&#x2F;XSFO0tiv9RycffX2iTvi4vk2LIGkscQ8Oe39pUHtw4ZQr+WZCr18TOR&#x2F;bwvLpDTGzpJYMaqEhZyS26fXSIZS&#x2F;Q3lgVskLsX1jhzivTcFPtOR8wLkIBjCLi72AeFpUuXqshGVBseXfxB+P3331XgQiQj0g2vLKLZiNTDy4u0dmQFIBJsKfaRKo9oM4S2afAewzkAsQ&#x2F;hi4h5VAaxj2iyucYsstjHOnf88YFgN+sDRCX28YcG0W78sxTDiJij7+gv&#x2F;rD99ttvGkHfvn27&#x2F;lEZO3bsU93Ce3BaQBQPHTo04j30A+dF1gP6jD9K165di3gfjgik32MJhGloF53Yb968uQp8GP5IY8kExDccLRD7lsVq8EcaDg+cDxkHYBvZ0Abnw3o8GBwL2bNnV7GfKVMmdZTA6QDHBf7YgDnuY8wbvOlwiuzdu1fvBxoJkAAJkAAJkID7EIgs9hGswXMDovb16tVTsY8sQdRaMos3IzsSGZXIzMSzEp4t8HzQpEkTzdKE4RkQQR1kDEQ2iH2IeyxhNA3LNOEgiErsI+sQz4t41ohseB5BpikyRqMKOFiK&#x2F;WwVh8rtM4vl9rlleppc1SfJ+e2fSN66C+XIwhoS+uCK+KcqJNkrjVSxj5T+1HlbSWL&#x2F;DJI8QwU5seoVXQaQu9YM4&#x2F;2aktM4&#x2F;uRqIyD1v6LVzpx1in1n0uW5ScCBBDxB7H&#x2F;&#x2F;&#x2F;fdaGAWpWfjCR8Qc68bxBY8vIwh3rMGHQwBC8MqVK5pCj3+RxT48yPAKwxscWYhC7MORgOhxVAYBi+vDowyLLPYhWseMGSPoL0Qp1uJHJfbhmMAfLaTKI6Juacg0QKQcIh4Rb&#x2F;zhg8HrjT8uGJulIbKPP0iIspuWOXNmGTFihDoN8D6i8JYGzzYKI5rRezBE5gDGg7XyyJ4wj4lcjd9S7IP&#x2F;5MmT1YtuaUh9QyZBVIzRDksIMGfmkgvsVoB1+xD7yGjAsgDzjzJYQuzDEM3He5hneP9j29rRgR8jnooESIAESIAESMABBCKLfQh6M0XfUuwjkIAliwiQ4FkEy&#x2F;uQ6YfsRUTcERzBsxYCGzhn+vTpNeACEW7u2GR2F8ejmLIp7PE6nAKocRSV2MezMzIKEHRAIATPYDC8hmDS+fPntUZSVGYp9jMW&#x2F;z&#x2F;2zgM+qipt428IKRJKgFBD7x0E6UhXULpUlSbr0hQBO9gAK65YEUQFhaUqHQHpvfcqvXcICQkkIY3vPi87+SYhZTKZmWRmnrPLL3Hm3HPP&#x2F;Z+bmfuct70tsfdD5Nbxh8aaUk8tknPrXjDE&#x2F;t9yfv2L6uqfLeAJCawzVsU+3r+88y2JvnfZEPiz5dL2YXI&#x2F;7KyUbDZLwq6sk6yPGbkC9o2xwSqkPgTFfuqM2IMEMgUBVxD72MlFhni4o2NHFw2x40jahn&#x2F;4EEYfiFUIZCSdgyg0WfZhqccXCRLmYQf5008&#x2F;VXE5duxY9QiAWIbATq&#x2F;YN5Xegys7doXxE2EBScXsI2keQhHee+89TZyHPAT4AsMu85gxY&#x2F;TLBF8ko0aN0uudMGGCbk4g1h1ffPBAgMU&#x2F;KbGP&#x2F;hDhGAvjI+7dvGHDA5sMmB++TJF4EPFpAwcOlLx586p7PeLmsesNrwDz0nvmYh+W+2+&#x2F;&#x2F;VYt8dgAwRct5ozrSUnsY126dOmivBGmAQ8FXDvEPjYdkEMA58ZPbK7gyx0NDwHgFh4ert4Tti6lmCn+YDkJEiABEiABEnBRAngmRTggNuthNcczRXJiH33xjIIQPrjUQ&#x2F;jj2QdJ9iC2YdjAGHgmwPMIwgMDAwPV2xHhhObPCBD7prDJxGhh5ECeACRdTtwQNohkziaPTjyb4DnnkWz8Zgeai31Pn7xSzLDah15ZI4&#x2F;5VzKE+2mNw89RqJnkLddPwq6uNSz49cUnp&#x2F;HMZ4j9Eo2nStCpaeLp4y8Fqrwp5zb0lPuhp433yxrif46c39hXIm4fdMjdQbHvEMw8CQmkn4AriH180CNWCx&#x2F;Ipg9vfABj9xYf+rB2QzTCko0vEVj98aGOZCuw7MNFHO7+sDhDOMKlHR4AEMrY&#x2F;YWQRky&#x2F;rcQ+dn7xpQPXepwrKbEPTwUIVljRYc2fN2+eusfDJQyubIhTw&#x2F;um3WQIfIhzCGDMGV4BqAKQnNjH69gIQcLBpBq+EDE&#x2F;eEvAQg+hbcoHgMSBcNPHZghc7ZMT+xgXX6BIoIcNFljjcT2piX1ssEC0Y8MG3hJwx8emAuaAeDxs2GCjAhUNkJcB&#x2F;dDADN4A8NhI7E2Q&#x2F;r8UjkACJEACJEACJGBPAvgeN2XDN3eBNz3b4VkH3&#x2F;&#x2F;og9dMP8374jWMg&#x2F;fxOn5HM42B9xO718N9H3l+zBP0ma4TVQFSqgyA8EJTOIElbJB070FcLGb0v2cXI0eA8Rpc7x&#x2F;EIe&#x2F;S&#x2F;17P4oUnG+M&#x2F;jb5G6b4HcVHGtZj6PqzI9CAOVZQe9kcIwLkNvSyZgk36UOzbBCMHIQH7E3C02MeHLqy2sJQHBweneIGmeqsQ7XClYrMdAZTQwxcUNhpcpWETBB4JCGcwbUy4yrXxOkiABEiABEiABEggIQEP8clVRvJXek1CLiyWsMurHAaIYt9hqHkiEkgfAUeLfcwW2VXhho5zp9Swe4sap7C+s9mGQLFixTQkAKUKkXEfrmnO3iDykbAPoQVw3YPHARsJkAAJkAAJkAAJuDIBWPrzV31D4&#x2F;bvnJtvOAfAY8AxjWLfMZx5FhJIN4GMEPvpnjQHsJoA3Pzhdg8XffNye1YPmAkORIgAwixwPRD6tOpngkXhFEiABEiABEiABFyWAMW+yy4tL8zVCFDsu9qK8npIgARIgARIgARIgARIwH4EbCr2kTURiRQSZzZExmi8h0yMSPhkbcM4plJZ1o5hyXFI&#x2F;oVs2UnVXLTkePYhAXsQoNi3B1WOSQIkQAIkQAIkQAIkQAKuScBmYh8CGS6nEMmLFy9OIJSRlRlloJCV+uBB68sM2FrsI+kVyjCgRJSpTjcyPzZu3FhOnDihMaVJNbiiouwXy0W55h9FZr0qiv3MujKcFwmQAAmQAAmQAAmQAAlkPgLpEvsQxqiriFJLaWnXr1+XrVu3atmptDRHiH3MBxsXqBsJLwSUdkD5CAh7vIYEUw0aNJAdO3bof+MaMC&#x2F;0gScAXqNHQFpWlX0tJUCxbykp9iMBEiABEiABEiABEiABEkiX2EdWZdQ6tKbBpX&#x2F;Dhg1pOtQRYh&#x2F;lxlq2bKl1vREyULt2bQkPD1eRD4GP7OR58uSRe&#x2F;fuye3btyU0NFTKly8vd+&#x2F;e1Rrbe&#x2F;bs0dfYSMDWBCj2bU2U45EACZAACZAACZAACZCA6xJIl9hv0qSJFCpUyCo6sJTPmzcvTTH8jhb7cO2vUaOGnDlzRstewYqPcISaNWvK2rVrBeXGSpYsKSVKlNA+2MBAdmm691t1S&#x2F;CgVAhQ7PMWIQESIAESIAESIAESIAESsJRAusR+s2bNBPHrSTWTi3uOHDmSncuiRYskIiLC0rmqu7wtE&#x2F;QlFbNvbtm&#x2F;dOmSFC9eXDc04Nq&#x2F;a9cudes3F&#x2F;sIZYDYx1iY3+7duyUsLMzia2JHErCUAMW+paTYjwRIgARIgARIgARIgARIwG5iHzH5cHNv06aNQEAn1TKL2IdAN+UPwOaDyY0foh1x+7DgN2rUSI4fP65CHq79+&#x2F;btU1d+uPebkvvVrVs3xcR+vN1IID0EnF3sJ&#x2F;c5kB4mPJYESIAESIAESIAESIAEnJWAvT3C0yX2mzZtqhZt84YJQxCvWrVKXdqrVasmiO1P6kE&#x2F;s4h98&#x2F;mvWbNGWrRooTH7EP6I0YfICg4OlsOHD6vwr1y5sno0IFs&#x2F;4vPLlCmj14eSg8eOHUtTaIKz3pict+MJOLPYx9+Hn5+f46HxjCRAAiRAAiRAAiRAAiSQSQnAaJye0vSpXZZNxf7Fixdl586dKvLNG1zdS5cuLbVq1UrwekaL&#x2F;dTg8H0SyEwEbCH2MQb+6PGTlvbMtLqcCwmQAAmQAAmQAAmQAAk8JIDqbtgEQKL49FR6S5fYTxyzD0v4unXrHslGD1Hx5JNPSuHChSn2eQeTgJUE0iv2cTxyaFDkW7kAPIwESIAESIAESIAESIAEHEgAXuXwmrdW8KdL7Cflxo8SdMuWLUswoSeeeEJd3RM3WvYdeKfwVE5PID1iHwI&#x2F;d+7cTs+AF0ACJEACJEACJEACJEAC7kQAXvPWJoBPl9hPKhs&#x2F;YtiXL1+eoPwc4t4Ru0+x7063Ja&#x2F;V1gTSI&#x2F;a9vLzUqs9GAiRAAiRAAiRAAiRAAiTgPARg1Q8JCbFqwnYR+3DlL1eunCbkOnHihCbxq1KlCsW+VUvEg0jgIYH0iH2UhWSCPN5JJEACJEACJEACJEACJOB8BFDlzppmc7GflknQjT8ttNjX3QlQ7Lv7HcDrJwESIAESIAESIAEScEcCGSL2UXu+SJEiVvFGib65c+dqKTtLG6yTd+7csbQ7+5GASxGg2Hep5eTFkAAJkAAJkAAJkAAJkIBFBDJE7OfPn1+aN29u0QQTd0LNevxLS6PYTwst9nU1AhT7rraivB4SIAESIAESIAESIAESSJ1Ahoh9TAsZvosXLy6+vr6pz9LogQQD169flwsXLiRI4mfJwRT7llBiH1clQLHvqivL6yIBEiABEiABEiABEiCB5AlkmNh35KJQ7DuSNs+V2QhkhNg3ZfHPkiVLijiwiYdKHDExMZkNG+dDAiRAAiRAAiRAAiRAAk5NgGLfqZePkyeB1Ak4Wux7eHjIU089JTlz5kx9ckaPqKgoWbZsGQW&#x2F;RbTYiQRIgARIgARIgARIgAQsI0Cxbxkn9iIBpyWQEWK&#x2F;U6dO8tdff6mQT6nBA+DZZ5+VLVu2yK1bt2zKGLlBBg8eLKNGjUowbqFChaRz584yfvx4m56Pg5EACZAACZAACZAACbgmATyzohwdPFKdqVHsO9Nqca4kYAUBR4t9uO536NBBFixYkOpsPT09Vezv2LFDbty4kWL&#x2F;xo0by9dffy2tWrWSoKCgVMcuVqyYTJgwQdq2bZugLyqBtG&#x2F;fXt9jIwESIAESIAESIAESyLwEsmXLplXcUJHt5MmTyU4UxpyrV6&#x2F;a7ELgqYpnyTx58uiYeGYtXLiwrF27Vu7evZvoPB7iV7SrSBbvBK&#x2F;fv7lRYsIvpDinLF7+4puvsYRfWWyzuZsPRLFvF6wclAQyDwFXEfvfffedJujcs2ePrF+&#x2F;Ph5wYGCgfujCko&#x2F;Y&#x2F;0uXLkl0dLR+QJvEPjYgSpYsKVeuXNEviwIFCsj58+czzyJxJiRAAiRAAiRAAiRAAkkSqFGjhj7rnTp1KllC9erVk+3bt9uEIIR9w4YN9ZwXL17U50rkgKtQoYJs3rxZYOWPjIw0O5eHePvXEPHwlOzFe0n4teUSd&#x2F;+WxNw7LXFRwSnOKWv2MpK72li5ubWzTeaeeBCKfbtg5aAkkHkIuILYh1AfO3as9O3bVyZNmiS9evWKBzxv3jy5f&#x2F;++7N+&#x2F;X3MFrFq1Sr788ssEYr9169YycOBA6dGjh5QpU0beeeedBGNkntXiTEiABEiABEiABEiABMwJVKtWTcLCwuTs2bPSrFkzOXfunJQvX17u3bunAh9ivG7duvr6448&#x2F;LiEhIeo1CgOPt7e3PPHEE5IrVy45fvy4nDlzRkV7RESEGn6KFi0q+fLlk71798afEl4CBQsWlH379iVYCFj7MWbTpk1l48aNWi0ucfOv9IGEnZ0isRGX9a3HCreTHKUGGML&#x2F;vNw5+pHEGpsAHlm8xL&#x2F;Kp5I1ezkJvzxfsgV2ULHvlaO85Cw3XDwfKyJhp36QyBvrJG&#x2F;tqRK0q7c8iIs23q8gOcu&#x2F;KUG7X7b4BqHYtxgVO5KAcxJwBbE&#x2F;ZMgQiY2NlZ9++kn+&#x2F;PNP+fDDD+XIkSO6IPiQh4jHBzxiqRYtWiRPP&#x2F;20iv0ff&#x2F;xRxo0bp5sEQ4cOlTt37kiVKlUo9p3zVuasSYAESIAESIAE3JCASezjWQ+GHXh64nd4deLZDyK+QYMGcvPmTbXEw90eYn3r1q0qzP&#x2F;55x+Nta9cubKWcsc&#x2F;hIfi&#x2F;Vq1aunGgHmeKWwGXL58WTcYkmrVq1eXw4cP67NpSmL&#x2F;sULPik&#x2F;AkxJ24hvJ4pNXcpZ5TYL2DpLcVT6RyKCtEnV7lzxW8Fl5LLC9in1Pn3xGvICvPIi5J3lrTZKgPQMkW5HntF9UyAHJXvJf6jEQfmWRxXcBxb7FqNiRBJyTgCuI&#x2F;fnz56vFHrH6iNnHB+w333yjC7JmzRpp0aJF&#x2F;OKY&#x2F;htiH5sDcLVCCAASBqJR7DvnfcxZkwAJkAAJkAAJuCeBxGJ&#x2F;165dEhwcrHH0cPFHiGf9+vVl27ZtCsjX11dF&#x2F;ooVK&#x2F;TnunXr9HXE&#x2F;1eqVEl2796tln4IfvyeONYfOQLw&#x2F;AhPgsQNoaGNGjVSd&#x2F;7ULPv+lcdI5K2NEnl9tQ6Tt9ZPEnJklOSrP1dubO2owh3WfP+qn&#x2F;1P7AeIV86q4pHVT4V98IHhIg9iDS+AT+TWrpck7+M&#x2F;StC+V&#x2F;U1SxvFvqWkkuiHmwD&#x2F;kmtw88AuUVK7Puk4LQ8lgTQRcHaxD9ert956Sz9UTQ27usj4j78tlO1Dkj9TMxf78AKASz8s&#x2F;y+++KL+PVLsp+n2YWcSIAESIAESIAESyFACicU+LPHw1kws9rEJgPxN2bNn15j7lStXSvPmzTWpHnRZ7ty5pXjx4hr6Wbp0afUMwDhHjx5NcH2mzPvh4eFSp04d3RBAg9BHOCjeT+zibxrA3I0&#x2F;V4V3JTrsmOGqv&#x2F;Ch2K89RYL3vyH5G8yXmzt6SGzkdUPcVzLE&#x2F;Mcq9gPqzjDc9380jvlH8tT43tgY+EAT&#x2F;OVvuEjCTk8Qnzx1dbMgLY1iPy20zPpiobt3756i2Ed3AJ44caLGkrCRQEYQcGaxj9io3377TWbPni1&#x2F;&#x2F;&#x2F;13PD5Y9fHf2LFNSeybEvQNGjRIRf6rr76qLlyM2c+IO5HnJAESIAESIAESIIG0E4D1Hi71iLeHwSc5se&#x2F;n5ycHDhxQIY&#x2F;+CPmE0QjGIbjl43cci4YxYfGHmEdIwLVr1x6ZGNz1ofmwgYCGMU+fPq1hBNg8SKqZi&#x2F;2s2YpJ7urjJPT4V+Kdp7Z4eueVkKOjJVvRbuKTu6aEX5onfsV6ime2Iv8T+9Pl9v6hguPyVP&#x2F;GsOb3NWL9zxl9a4t&#x2F;5dES8s&#x2F;Hcj&#x2F;oofeCpY1i31JSZv2wqwOxgF0hxHQcPHhQY0GwO9SxY0eZMmWK3hSmGuJwM4FYYSOBjCDgzGIf7lZLlixRK755XVNY8rt06SL9+vWzSOxjh&#x2F;fXX3&#x2F;Vf&#x2F;gwp9jPiDuR5yQBEiABEiABEiCBtBGASz6qKKEhoR7i8W&#x2F;duqXemjAKoTQewjzxE0n3AgIC9D2UdIYgh25DAj5k04cVH&#x2F;&#x2F;y5s2ryf2QUR8x&#x2F;zly5EiyBDSOLVu2rOYEsLR5+1c3LPMnDU&#x2F;7cD0Eyfa8c1WRuNh7Ruz9buP1CCNrfxa10mfxyql9s&#x2F;oV12R8WbOXFi8jaV9c1G15IHESHfqPEb&#x2F;&#x2F;sMxfQN3pcmtnX8OF&#x2F;+HGg6WNYt9SUmb94DIyZswYzQ7eu3dvTRAG9w7Ed0B8fP755&#x2F;GWfGQR79+&#x2F;v4wcOTLZHSAMjUyQ2GGCsDE1iDTUK1++fLnAjSSlhpsYSSnYSCAxAUeLfXzw4r5FeTx86KbU8AFrymhq7YcRV5wESIAESIAESIAESIAEXI+Ah2Txzm0k8XvG2CSINMIB5qX5Eq19vsYzuvlzvIfh4pC0L0Oap2T7A0w7ObYa2ST2v&#x2F;jiC+nTp4+KfVj3kfURWb&#x2F;NxT7iQuBCPGLEiBTFPsTR999&#x2F;r5sCM2bM0KnCFeXYsWNaSgL1wVNqyDr+yiuv2OoSOY6DCUAgI6EcYpLgFQIXpNTW3NIpOlrsY17IiIpdWFxXSg07rvgQ2rBhg6WXw34kQAIkQAIkQAIkQAIk4PoEjBJ9+er9YWTi3yehxz7X8ntpbRT7aSVm9DcX+7Dso8Y3hD7iOJDZ0VzsQ8ANHjzYIrH&#x2F;0ksvaTxxkyZNVOglFvv4b5QcgyBEbUdsNkAsjR49WpOPXbp0SWNZ4F0A95RRo0ZJqVKldPNg5syZeqWoPTl8+HDx9&#x2F;fXhGfYYIALC1vGEoCbOVzTFyxYoAIZpeOWLl2a4gaRpTPOCLGPa8AmG9yfUhP7uP+Si3uy9BrZjwRIgARIgARIgARIgARIICEBin0r7ghzsd+rVy+NEUFt79q1a6srv7WW&#x2F;bZt28rq1aulWbNm6g2AeGWTZR+xKX&#x2F;88YeKwUOHDmlyCrj99+zZU2NX8DoyjmPjAbUjp02bJlOnTtX45GHDhmkdSfw3BD7EPtwyypUrp2Oakk5YgYKH2IgA8ju0b99eE4Xgd2z6IHOoLVpGiH1bzJtjkAAJkAAJkAAJkAAJkAAJWE+AYt8KduZiH4IcQhxZHmHFRPbHU6dOxVsq02LZR3K&#x2F;l19+WYX7pEmTNObZJPYDAwPl66+&#x2F;1vhmnAvJKpBNEnUe4VGAUIJ69erp1cAz4KOPPtJkZGiw5iMnAEIOMCZKkUFUhoSEWHH1PMReBAoVKiS1atXS4bEpY6v1odi314pxXBIgARIgARIgARIgARLIvAQo9q1YG3OxD6GdUktLzD7EPlz5YamH2z0svSgZgZj9qlWrqoUert4ml2dYfjt37izI9m8u9mHt79q1q6A8makh8yTqQebMmVN++OEHFZVw8583bx5dqK24B2x9CNalRYsWsnjxYvH29tbfndmN39Z8OB4JkAAJkAAJkAAJkAAJkEDaCFDsp42X9ra32Mc5Xn&#x2F;9dUEmf2wAQOyjjARqhsNqD8s+PAp27dql1nxsOGzbtk3q16+v80MfJPpr1apVkleHeGpY+hH3j5CBs2fPWkGBh9iSAMo2oo4nwi3QGjdurNb9uLi4dJ+Glv10I+QAJEACJEACJEACJEACJOB0BCj2rVgyR4h9JGyDdR8u+BD7iMOH2D99+rS677du3Vo9AJCMD+J&#x2F;xYoV8vvvv2uSPlj5kZQPNSGR5Rzu4XAJRx8k8oO4R4I+hAUgazri+tkylgDi9OvUqRMfDoKcCvDEsEVLj9iHlwHuRTYSIAESIAESIAESIAESIAHnIQBvcHiAW9PcvvQeYuK&#x2F;++47CQoKSpFfpUqVpFu3bpoxP6WM47DK4x8EuKkhSdu7776r7vs4D+L0Bw4cKFWqVFEhOHHixHjLb&#x2F;Xq1bX0HjYDxo4dKzly5JD+&#x2F;ftrorerV69qcj689+qrrwr63rx5U2P6T548ac368xgnIpAesY+NLVSYYCMBEiABEiABEiABEiABEnAeAjAII5TbmmZTsQ+3ciS3Q7m40NBQzShvy1JcKAFm7YUmBQfzhWiGi3VKYhnXhAR68+fPl71791rDmceQQLoJpEfs4+T4Y8c&#x2F;NhIgARIgARIgARIgARIgAecggFDv6OhoqyZrE7EP0VyzZk0tV2cuJlAKDm7ne&#x2F;bssdr1wPyqbC32TQIISe7gIp9cA1xsBhw9etSmmxdWrRgPclsC6RX7FPxue+vwwkmABEiABEiABEiABJyQwN27dyUqKsrqmadb7Pv5+WkiOWQhT6khCR3cz9PT7CH20zMfHksCjiRgC7GP+cKlH7kFsEnHRgIkQAIkQAIkQAIkQAIkkLkIwPMcBuf0JvlOl9iHYHj66ac1rhwNLvvYfYD7PoQJMs0jMZipbdmyRS5evGg1SYp9q9HxQBcgYCux7wIoeAkkQAIkQAIkQAIkQAIkQAKpEEiX2EfNeCSOMwl9lBi7cuWKin5YDSH0mzdvHp8YDBsBf&#x2F;31l9WLQrFvNToe6AIEKPZdYBF5CSRAAiRAAiRAAiRAAiTgIALpEvtt27aNL+eF0nDIFp+4QaCgHzLQo6EmPDYErGkU+9ZQ4zGuQoBi31VWktdBAiRAAiRAAiRAAiRAAvYnYLXYR6x+u3btdIZIxLdgwQKtLZ5UK1eunCbwQ0P9eHgAWNMo9q2hxmNchQDFvqusJK+DBEiABEiABEiABEiABOxPwGqxnz9&#x2F;fnXRRwsODpYVK1YkO1vU937mmWf0fWTn&#x2F;&#x2F;vvv626Mop9q7DxIBchQLHvIgvJyyABEiABEiABEiABEiABBxCwWuznzp1bWrVqpVOMjIyUhQsXJjvdggULStOmTfX9GzduyNq1a626NIp9q7DxIBchQLHvIgvJyyABEiABEiABEiABEiABBxCwWuwjAV+nTp3is+0j8R4S8CVu6NeiRQsJCAjQt&#x2F;bv3y&#x2F;Hjh2z6tIo9q3CxoNchADFvossJC+DBEiABEiABEiABEiABBxAwGqxj7nVq1dPSpQoodO8du2abNu2TcvumRqEfqlSpeSJJ57Q7PyoFbhkyRKJioqy6tIo9q3CxoNchADFvossJC+DBEiABEiABNZ&#x2F;4pcAACAASURBVEiABEiABBxAIF1iH678LVu2FE9PT50q3PkPHTqkrvoQ5lWqVBG48Js3vP&#x2F;PP&#x2F;9IXFxcmi+PYj&#x2F;NyHiACxGg2HehxeSlkAAJkAAJkAAJkAAJkICdCaRL7GNuRYsWlYYNG6ZpmtgMQKm+5LL3JzcYxX6aMLOzixHICLGfL18+9cwxlc5MDim8dbZu3arJOtlIgARIgARIgARIgARIgAQynkC6xT4uAYIALv0ox5e4wYK&#x2F;b98+yZEjh6AEn6khK&#x2F;+mTZvk3r17FlOg2LcYFTu6IAFHi32E3nTu3FlOnDiRZD4Oc8T426xWrZosW7ZMwsLCXJA+L4kESIAESIAESIAESIAEnIuATcS+6ZILFSokgYGB8W79EPRXrlyJf&#x2F;gvX768VK9eXbJkyaKHnD59Wnbt2mUxMYp9i1GxowsScLTYx99p9+7dZdasWanSxNw6duwomzdv1vwdjmpNmjSRHTt2aAhR48aN9XfzvCFpnQc+ny5cuEAPhbSCY38SIAESIAESIAESsDOBbNmyCcq&#x2F;m7Sk+elCQ0Pl1q1bqc4Ax3p7e+uzozs0m4p9S4DBCwAP5QC9Z88eOXPmjCWHaR+KfYtRsaMLEsgIsd+tWzeZPXt2qjSRtwPVObZs2SJXr15Nsj8qcsDL57vvvpOvvvoqvg+O3bt3r4SHh0v9+vVTPZd5hz&#x2F;++EOGDBki169fl&#x2F;nz5+vvly9flq5du8qqVasEG44pNXxhIPfI8ePHtdu4ceNk3rx5GpLARgIkQAIkQAIkQAIk8CgB6DhTiCdEc3K52KDdkKDdmlxtSXFHhTc8ZyY1XsmSJdWInJTgxyaBqTIchH7VqlVl6dKlSSaNz&#x2F;pYAfEw&#x2F;mfeYqNCJC425c0BjyxZxdM7t8RE3sxUt4zDxT6uHjcHXIRxczx48MBiIBT7FqNiRxck4ApiH0Iaf&#x2F;etWrWKX6GyZcvKtGnTJCIiQpo3b56mlTMX+yY++Llu3Tp54YUX5OLFiymON2DAALXkL1++XPth4wFfIGn5XErThNmZBEiABEiABEiABJycAJ6XHn&#x2F;8cfWmPHr0aLJ52Bo1aqThoMjXZouG58T169eLv7+&#x2F;aklTQ1h48eLF9bXEJd5r164tOXPm1GdCbDx4eXlpEnmI&#x2F;Ue8QY3j&#x2F;Ut2M4zS3uJfvIOEXd0osVHBcvfaBom6eyHFS&#x2F;DNVV6KNpwgJ5e1sMWl2myMDBH71s6eYt9acjzOFQi4gtj&#x2F;+uuv1XVq2LBh8e7+Q4cOVS+fTz&#x2F;9VOCWjw&#x2F;qV155RfAFgQ9h7Mb269dPw4Hw&#x2F;qhRo+Ts2bP6xVKsWDHp3bu3WvZhye&#x2F;Ro4f07NlTBg8erElA8QUDL4IRI0boLm5MTIxWCOnbt6+6gWE+2AFGuNHYsWPl&#x2F;fffl8mTJ6unQY0aNeSzzz7T93PlyqX5CCZNmqS30uLFizVkAaFJhQsXlgMHDsi7777rCrcZr4EESIAESIAESIAEUiUAYw0SNJ8&#x2F;f16freBGX6ZMGTWY4PkLz3B4loMlHmIb&#x2F;33y5EkV3HjWgyUe3pVBQUFy7tw5yZs3r+Z4w+94v2LFirqRYN4g9jdu3KjHmov9mzdvxrv3o+qbqeFZD8LePDE8NirwLAojE+YHr9SkjDyBtcfKzaM&#x2F;StS9hyI&#x2F;W4CxaVCklWG5vyHBp2dLbHSoMQdPyV2mp3hlKyyRwUckf5WhKva9sgVKrmLtJKtvgNy5uNR475Dkq&#x2F;Sa3DzynXGuWH3fv3hHufnPj6lyTm8Hiv30EuTxJOAgAq4g9r&#x2F;&#x2F;&#x2F;nuZOXOmPPPMMyro8QG0aNEitfTjgxghPhDwCxcu1LKecO1&#x2F;+eWXVWxjM2D16tUycuRI2blzp&#x2F;aDBb9BgwYJxD6+bCDEu3TpEm&#x2F;Zz5Mnj9y+fVu&#x2F;GODu&#x2F;&#x2F;PPP6s1&#x2F;6OPPtKxTJb9H3&#x2F;8MV7sL1myRD7&#x2F;&#x2F;HN16ceXD8R++&#x2F;btNZ5&#x2F;5cqV8tdffwmuB65sSDaK9&#x2F;CFxUYCJEACJEACJEACrk7AXOxXqlRJK7TBWALRjmc0GGFQsQ3i+uDBg&#x2F;o+rOow8MBYgg0AhHOXKlVKn&#x2F;eOHDkizZo1k&#x2F;3796uBBhsGifNAmcQ+jjfF7WMMWPZNr5mL&#x2F;cqVK6tBJ7lqUbD6Y85JVYgzF&#x2F;vZ8tWVAtXelmv7PxZf&#x2F;0ril7++XNo2RPJVHiqeXjnlzoWFkqdsX8mWt4aK&#x2F;cfyVBNPnzwSE35NijaaJKdXtjWOf0eCjv9qeAickzxlehvv+xvi&#x2F;3u73yYU+3ZHzBOQgG0IuILY&#x2F;+GHH2T48OEqoGvVqqVCHbH+EPQQzE8++aQKfrj1mydOgeV84MCBsmLFCqlTp048ULhgwepvbtlPSuxjBxeeQWCI8x8+fFgQApCc2McXBwS9+bk+&#x2F;vhj3WFGwkK8hxAAeBigYQNjzJgxj7iO2WblOQoJkAAJkAAJkAAJZC4CicU+BDWs+BCXMOLACxLPeXhWQj4lNLyOZznkhIJRBdZ1VHNr166d&#x2F;Pnnn5I9e3Y1CMHlHhb3xA1if+3atQms+iarfFJiv3Tp0upRcOnSpSTh4bkT50kqB4C52A+s8x&#x2F;DlX+TIeoX6zglm80xxP6rUubZdXJyeQuJibguvrmrSNH636nYh8XfwxNh61mkeJNpcnnnm8ZRnobgf0subP638dpUubDpZXkQF233RaXYtztinoAEbEPAVcQ+Yul&#x2F;&#x2F;&#x2F;13ta7jd7jGY8fXJPbxQf7aa69Jr1694sFhxxW5PmBdR5lPU4MHAER3SmIfu8gQ5&#x2F;gH97EOHTroF0xKYh&#x2F;91qxZ84jYx+vYiMBYmLspCQzFvm3ucY5CAiRAAiRAAiTgHAQSi31Y4eFFiee11q1bWyX24cmJ50C45cPjMymxv23bNu0DjwG03bt3q&#x2F;U+KbGPUFCMiU0IhGfCa8DUsBEAbwPkAEiqJRT7X&#x2F;5P7C&#x2F;5n9ifLZe2D5Myz6z+f7FvWPyLNvhBxX6xRr8Y&#x2F;TfK&#x2F;dBTUqjmKLm4dbBh0b8o5dtv199h2cdPRzSKfUdQ5jlIwAYEXEXsP&#x2F;&#x2F;884IPWLjl44MamfPRTGIf7lwQ04jPx04wXO9NH1T4QO7fv79mz0dlD8RtNW3a9BGxj9cRl49+GAex&#x2F;IMGDdLzIUkgxDnE&#x2F;ttvv61fAP&#x2F;97391DuZu&#x2F;NhIGD16tFYQwK4zvAgwd&#x2F;Sn2LfBDc0hSIAESIAESIAEnJYAYuphNYc3JNz4kxP7uEAYdRDXj8R6CJ&#x2F;EsXiuRZJkJNaDYQbPW&#x2F;DuxE+43+O9xBZ5k2U&#x2F;KWg4BjkEYJhJ3PAeQgOwGYGGHE7IBQXPURyTmtj3K9BA8lUYKFf3fSw+OUsbSfy6qGW+4OMfavb9sMsrjde6Ss7Ap1Tsl2q5SM5t6Kkx+yWazpDzG3oZwv+05DaS&#x2F;+Uu84Lhzv+b4SWwyCFr79ZiHyLixRdfjC&#x2F;FkBpxuI3gZmUjgYwgkJnFPubWsWNHjZVPHF9lYoWSJ3Djh2CG6IYgh+iGwDYX+&#x2F;i7RKI8xG2dPn1aY7&#x2F;QB5b2Nm3ayHvvvafxXhD7cM2He7+5ZR8f5N9++60mb8EGwsSJEzUHAOLysbuLLxrME2IfmWSRkA9zQUnAN998Mz5mH+8hgR9c&#x2F;kuUKCE7duyQTz75ROdKsZ8RfwE8JwmQAAmQAAmQQGYgAHd7xLujQZwj&#x2F;h5u&#x2F;BDQCJ1EqCaemyDqYaUvV66cuuwfOnRIxTWe9fBagQIF9H3E2SPOH8+HphDJunXraik9cxd7WOfxXGienM&#x2F;EAzH88AZ4JMO+0QGbCfAMxXOhpS1vuX6GIF8SX0ove4GGkrv0ixJtuOzfPDpeYu8HCcrt5a&#x2F;yunj5FZNQo2&#x2F;2wk3lyq4RRiK&#x2F;1pLLSMB3&#x2F;84JESMhX&#x2F;DZPyQ6&#x2F;GFp6rJtNsnpv59KtZSfpfNMrZ9bi33AgQBB8i1LGnaYkkrgYH4sbjSTWwlexw2a2jGm43HjsuSXJSvhnn0cLfZxP3bu3Fl3SCGmU2rIpooPYCStwwc9GwmQAAmQAAmQAAmQAAmQQLzSMzL61xS&#x2F;Ao00K7+jmtuLfVuDRjwwSoMhARliVrBrBSskSo2l1pAADFZGlJxgsy+BwoFe8u8BBY3NnqyyetUdWbzwtrHRYt05scEDt6Pt27drUjnsOKLMB1yEYBW+c+eOdQMnOsrRYh+nx44rrgW7tCk1lFHBtSZn1bcJAA5CAiRAAiRAAiRAAiRAAk5GwCOLl5RsPkdio+4asf5DjZ&#x2F;BDrsCin0bo4bYR+Ku7t2768hwGUatbrioIPM3rKWwgMKVBFZ8hAagtATKjKHMFzJUwoNgypQpejwSXMAdGe4t6AtPAbjKIGslXJKRrRLJxtgsJ1Dj8Wzy8+TSCQ5Yvy5U3nv3glH7M22KH+uJtUSCD8R0Y31Qgg3rCHEOFyQklbOFx0ZGiH3LqbInCZAACZAACZAACZAACZBAZiLg9mK&#x2F;cOHCGvdrSYNgv3v3bopdE4t9dC5TpowK9WrVqqmLM7J5QxhCILZt21atwhCF48aN09hkWPZhJUZ8MNyjcSzKi82ZM0dmzJih8caoFQ6hj4QYiG9ms5zAL1NKS&#x2F;Ua2R45oG&#x2F;PU0ZptQjLBzJ6FilSRC35WEvUfEfIBsQ+NmBg8UdJDwh&#x2F;iv00YWVnEiABEiABEiABEiABEiCBdBJwa7EPq+yQIUMEgt+ShoRee&#x2F;fuTbPYhxhEqYeGDRuq1d48Nh8xzsgajhJeEIWvvPKKnDp1Ss+xatUq6d27t&#x2F;6OMb766it57rnn5MiRI2rxR6ZxtrQT2Lm3apIHvTHsvGzaGGrxgPjjQf1QbMYgcRzE&#x2F;r179zRz+7PPPqsu&#x2F;UgKB3d+WzRa9m1BkWOQAAmQAAmQAAmQAAmQgHsQcGuxb48lTsqyX6hQIS0zAev9jRs3NBs5rPmAX716dXXhRwI0c7GPDQhkEJ81a1b8NENCQuS3337TzJbICwBRiVrlixcvtseluOyYv&#x2F;5e2vCySMKy3+u0HD0SbvF1Y&#x2F;MGWUXDw8N18wUZQGHZR1mQLVu2CGp7Yq2QRZ6WfYuxsiMJkAAJkAAJkAAJkAAJkIANCFDs2wCi+RBJif1WrVrJF198oWL&#x2F;1Vdf1Zh91BiHSz9i8&#x2F;v06RMv9vE+sp9DKEI8QlAmV&#x2F;8RJS9g7UfGdHgGsFlGoGYtP&#x2F;npl1IJOm&#x2F;dEiZvv3HeYG15zD5i9U2VFwIDA3UNkVsBdeIRhoHWqFEjTdZoXjbEslk+2ouWfWvJ8TgSIAESIAESIAESIAEScD8Cbi&#x2F;2IaDMS+WldAtAdKdmoYXYh1v+4MGDNUEbanUjyz6S9sH9Hkn4EGuPuH3U7kYcPizBEIoLFiyQ6dOna81viPe5c+eqUEQtcmRDx2Kh9mSFChXUQwDhAKgnPnz4cLl8+bL73b3puOLAIt7yypCH2fhXrrgj8&#x2F;4MsjobP9bB5MYPUf&#x2F;UU0&#x2F;JsWPHdP3hoUHLfjoWioeSAAmQAAmQAAmQAAmQAAlYRcCtxT5EGkQ5yotZ0pBUb8eOHSl2hdj&#x2F;&#x2F;vvvjazu0Wq5Rxw3rPoQ52iwAE+YMEGFPsrswcUfgh1iH5b68ePH6+9du3ZVsYiNAngGBAcH6+&#x2F;r16&#x2F;XDYOnn35a4NaPhH7mrv6WXAf72J6Al5eXxuZjMwiJ+UwbSHDrt4VVHzOmZd&#x2F;268YRSYAESIAESIAESIAESMBVCbi12MeiQnRnz57dovVFcr3QUMsTuFk0KDuRgIUEKPYtBMVuJEACJEACJEACJEACJEAC6hkeEfH&#x2F;1cY8jDJxlgctOxggSuTduXPHwWfl6UggcxCg2M8c68BZkAAJkAAJkAAJkAAJkIAzEKDYd4ZV4hxJwCDgzGIfITP4sGEjARIgARIgARIgARIgARJ4SAA54WxVpjspphT7vNNIwEkIOLPYdxLEnCYJkAAJkAAJkAAJkAAJuAwBin2XWUpeiKsToNh39RXm9ZEACZAACZAACZAACZCA7QhQ7NuOJUciAbsSoNi3K14OTgIkQAIkQAIkQAIkQAIuRYBi36WWkxfjygQo9l15dXltJEACJEACJEACJEACJGBbAhT7tuXJ0UjAbgQo9u2GlgOTAAmQAAmQAAmQAAmQgMsRoNh3uSXlBbkqAYp9V11ZXhcJkAAJkAAJkAAJkAAJ2J4Axb7tmXJEErALAYp9u2DloCRAAiRAAiRAAiRAAiTgkgQo9l1yWXlRrkiAYt8VV5XXRAIkQAIkQAIkQAIkQAL2IUCxbx+uHJUEbE6AYt&#x2F;mSDkgCZAACZAACZAACZAACbgsAYp9l11aXpirEcgIsZ8jRw4pUaKEeHl5pYgzJiZGTp8+Lffu3XM17LweEiABEiABEiABEiABEnBKAhT7TrlsnLQ7EnC02Pfw8JAOHTpIeHi4REdHp4jc09NT8uTJI4sXL5bIyEh3XB5eMwmQAAmQAAmQAAmQAAlkKgIU+5lqOTgZEkieQEaI&#x2F;R49esisWbNSXRbMrWPHjrJ582a5du1aqv2t7YANCJwrtc0Ha8dP73HwgICXw4MHD9I7FI8nARIgARIgARIgARIwI4DnQPxLrsXFxVnEC2O4y7Maxb5FtwQ7kUDGE3C02M+SJYt069ZNZs+enerFw7LfqVMn2bJli1y9evWR&#x2F;tmyZZPJkyeLj49PgvfOnTsnr7&#x2F;+eqrjmzrUrl1bxo8fLw0bNlRRndZWtmxZDTew9MvAfPwaNWrI&#x2F;v37Uzzl2rVr5d1335WdO3emdWrsTwIkQAIkQAIkQAIkkAKB+vXrJyvSc+XKJdu2bZPQ0NBHRsAzLd5Hw7NopUqVZMOGDRIbG+vyvCn2XX6JeYGuQsCZxT7m3qhRI8GmQL9+&#x2F;WTfvn367+7du7Jjxw6Llyg9Yh+7uFOnTpV&#x2F;&#x2F;etfafYM8PX11U0PeC+k1Cj2LV5KdiQBEiABEiABEnBSAhCQJsPLrl27ks3ZhGe&#x2F;EydOyI0bN2xypc2bN5d169YJjEjmLSoqSkqXLq0bAcePH0&#x2F;wXsmSJQXGHuSVgrjHM2mhQoVkxYoVj24MeGSRwk98Jlk8H5PH8lSX+6EnJS4mXIJOTJGI2wdSvAbfXOWlaMMJcnJZC5tcq60Godi3FUmOQwJ2JuDMYt8czX&#x2F;+8x9ZuXKlrFq1Sl8ODAyUzz77TIoVK6ZW9w8&#x2F;&#x2F;FCuXLmiO6+DBw9WjwF8OH&#x2F;88ccSFhYmkyZN0twAjRs3lpCQEBk5cqQcO3YsAf3ixYvLBx98IKVKlZKIiAi1tuMLYvjw4XL+&#x2F;Hm5dOmSvPzyy7J+&#x2F;Xp577339P2lS5eq18CwYcPk6aef1twD33&#x2F;&#x2F;vaxevVpfb926tVy8eFHnjvk++eSTeiySGG7cuFFGjBghEPtz5szRcxUoUECv8auvvpL79+&#x2F;b+e7g8CRAAiRAAiRAAiTgOAIQ0BDZeK6C+MbvJus5ns&#x2F;w7Aaxf&#x2F;bsWX0P&#x2F;43XTd6VOXPm1Gc9PCPBGg&#x2F;DCsIh8ayHhlxQt2&#x2F;fTnBBeL7aunWrNGjQQA1IpoYNBRwPC&#x2F;4&#x2F;&#x2F;&#x2F;wT&#x2F;3ru3Ln1eXHZsmXxhh6cw8&#x2F;PT+dSq1Yt2bt3b5LeAoG1x8rNoz9K1L0LOl7Wx&#x2F;KLt18xiYuNkPt3TsqDuCgxYgrEN2d5yeLlZ&#x2F;yaVQrX&#x2F;kzFfpasfuKTo6R4ePpK1N3zEnM&#x2F;yNg8qPZww8DYkHj4vvGMGnzI7gtGsW93xDwBCdiGgKuKfQj3l156SYKDg6VNmzby6quvyjPPPKMiHpUA+vfvrwCxW&#x2F;vEE0+ohb1Zs2Yq2J966ikV3nXq1EngijVv3jz573&#x2F;&#x2F;q5sCprgsHI8P9Lp16+oHPr4UsPsLMT9gwAANC+jcubOe8+uvvxZ8QSAsAV8S3t7eOh6+ZNDKlCkjc+fO1V1tJDBEw5cXxD6+9OA9gGOw2435w62MjQRIgARIgARIgARchYC52IdbfLly5eTAgQMSEBCgYhoGFYh9GEXweoUKFeT69ety5MgRtaxXq1ZNjh49qq&#x2F;j5+XLl9WwAkNJlSpVdAMAGwXmDc9hGDdv3rzxsftBQUH6DFi+vCG6E4l9zAteBbdu3UoSO54J8ayWVHinudj3zl5cSjSdLtcOfC7ZCz4pD2Kj5OrejyRXsfaSu&#x2F;TzcvvEbxJQcbB4eudQsZ+jcEtjY6Co3A87bWwAfC4nlzaTog3Gy+Udr0ts9F3xL95RsuWrI1d2j7T77UCxb3fEPAEJ2IaAK4p9WODXrFmjLv1o+EDKnz+&#x2F;imiIaVjUTR4AeB9u&#x2F;D&#x2F;99JO+D8s7vlgg7CH2YcE3NSQWhICHZX7BggXxr+M86Auxj3MhBh&#x2F;&#x2F;fefOHe2zfPlyFf2migKPP&#x2F;64Wvmx6zx9+nTdZEBDKEKTJk2kT58+CRYXYv+TTz5R0Y&#x2F;266+&#x2F;qqXf&#x2F;BpsczdwFBIgARIgARIgARLIOAKJxT6MH8jFBCs&#x2F;np1gcIEFHl6RMIRAiLds2VI9JOG1iZ9wrYeFv1WrVvo8B69IWNvhCYDnw8Qx9RD7iLXPly9fvNiH9R&#x2F;PaUmJfTwnwoKfXBgBcgAgnDQ1sV+o5miJvHNCgk&#x2F;PUOAlW8yTC5v6SZnWq+TMmuck+t4lyRZQUwLr&#x2F;OcRN&#x2F;5SLefLJUPkZ&#x2F;UJMDYH2ukmQdEGE+TqvlESE2Gb8IaU7gKK&#x2F;Yz7G+GZSSBNBFxR7FeuXFmmTJkiPXv2jGcBsY0vC7hcffTRRwmS3SWO2YeFHWI+sdjHYPACeOGFF&#x2F;QnrOtw9U8s9pFID7u6Jus8&#x2F;huu&#x2F;uZfCviCwpeKudgfMmSI7kS&#x2F;8sorj4h98wR92JjAlxfFfppudXYmARIgARIgARLI5AQSi31UY4LwhuckLPQmsY8QTVPyZoh6iHwkgMb7MNRgc6B9+&#x2F;Zq5IFXJLw74ZZ&#x2F;6NCjLu4Q+6j8BK8AbB6goS8EfVJiH2EFeIY7deqUho3Ce8DUsLFQvXp1fUZLKjO&#x2F;uWU&#x2F;sO44Cbu8WkIvLdfDSzSdIVd2vSulW&#x2F;1tiPumEhN5U3z9K6r1Hpb9fJWHSlZvf3X59y&#x2F;eSc5t6CnREdelXNvNcnZNZylY4305v&#x2F;Elh6wwxb5DMPMkJJB+Aq4o9vEhvGnTJrWYww0LDbFUsLxPmzZNY+FhHUeDOz6Eu3k2&#x2F;uTEPuK4TLvBXbt2lapVq2ougD179gh2cbFjjA+&#x2F;xGL&#x2F;hx9+0FiviRMn6ge&#x2F;qbxLwYIF1UIPl360du3aqedA27Zt4+eG&#x2F;okT9FHsp&#x2F;++5wgkQAIkQAIkQAKZjwDENSzqMNDAXT45sQ&#x2F;r&#x2F;eHDh9WdH+75eLarV6+eWvxhXIFLPzYO8AyFZzS47tesWVO2b98e&#x2F;2xounqIfZP3ZGIiMMIklaAP&#x2F;ZC8D2PCgIOGXAEINcBcTAafxOOZi33&#x2F;El3EL39dubbvYyM+P4cUrf+DWvSLPfmb3D75m0QE7ZMcgU9LvkqDVeyXarlAzq7tZsTs+xi&#x2F;L5SLWwYYyf5OS&#x2F;6qb4hvrgpy9&#x2F;pm47ipDllUtxb72BHq3r37I+XAkiMPV19zl2CHrBBPQgL&#x2F;I+CKYh+Xht3dTz&#x2F;9VC3niMHChz4EOj608feGnV+Id7ht4YvEErGPsfAlgn+w6r&#x2F;99tu6k4zyf9g1Rgz9b7&#x2F;99ojYh6hHlld8+CNJIGLN8BmBfAJw88IYcP2fP3++&#x2F;kODtwBc0N544w2Kff61kgAJkAAJkAAJuDwBf39&#x2F;td6jwd0e1vPkxD6s6ShfDFENAw9+QoPBW7NIkSJq9Yewh+A3hVjifYyPjPnmrvwwuuCZMClLPBL64TkNlZ4SN3gPtGjRQv7++299C8fDdT+lUswJEvQZBqfcJXtI&#x2F;irDJDr8quGWP0yiws4ZifaySbFGv4h39pJy+9Q0yV2q60PLfoXBkqdcH03Ih8R91w58qmLfw8NTynfcY8TwN5bYqEdLBNrjxnFrsQ+rHR7m8fBvSYOLCCyDGdUgWuBqcuHCBY0LhhUSgoTNPQg4Wuzj7wOiG9ZviN2UGsQu4ujxIYq&#x2F;k5QarOxI0GJylccHOoQ93Ktg0YerFZLvoeE1vIeG5HpocLmC8McHdfbs2dUNH8lazL8M8OWBLw0ww98IrPX4QMc84fKPLwIkZGnatOkjx8KtC+fE5wK+gJA0BsdiEwJzxwYCxsMXB2L6MQfsaiPZHzL0Y&#x2F;faxAvv40vOViVn3ONO51WSAAmQAAmQAAmQwKME8FyHjQaTC795DzzbJWelRz9T5v+M5Oqdo4TkLdvXiNsf5bBpuLXYtwflDh06yJdffqmCwNR69+5tE1H+2muv6Y4VYl8gdpDBPHEtSXtck6uNmdXLR+o99bxUrdtafLPlkIunDsjahT&#x2F;J7esPS2tk1uZosQ8OcLdCfVKcO6UGoQ3XKGRbZSMBEiABEiABEiABEiABEnhIABb9&#x2F;NXeEr+AOnJp5+vqFeCoRrGfCmlY97B7ZMrOndrCQOwjKRhcf80brKTIMg4rIKyXsFzCWgjrIHaoEPOC+GXEtcAKCHdiLA4shCYrYeHChfV3JDAziX3MCxsLJjcUxJ&#x2F;AjcV8syG1Obvb+zUbd5LmnQY9ctnj3+sskeEPa3tmxpYRYj8zcuCcSIAESIAESIAESIAESIAEUifg1mIfAhwuvXDrSNzgrg&#x2F;hPWzYMBXhSBJmnsExObTJiX2AXrRokYp0JCODazTqiCOM4Mcff4x3A3722Wc1lhhlJ5AjAC7KmCME&#x2F;owZMzReeffu3fFiH&#x2F;W8EX9syiWA2GS4sKAfW9IEBo2ZI345cj&#x2F;y5p8T35HzJx6WgMuMjWI&#x2F;M64K50QCJEACJEACJEACJEACmZOAW4t9WOwRk5xUzD5igGF9R2w8EkEgFhmvpdYg9rFBgGzeaCgpsWTJEv3dlCEcscRwx0ftR4h5xN4j3hkifdCgQYIa4ahDCQ+A7777Ts+N+t9JiX1sREDYo44lrgebCUhAkVLMSmrX4Orvv&#x2F;nNyiQvccGvH8rpI9sz7eVT7GfapeHESIAESIAESIAESIAESCDTEXBrsW&#x2F;JakCEw80egts8AVhyx0Lso8SXaWMgNDRURo8ereXEIMjhyh8QECCoxY2SFSglhkzkKCWB8bt06aLZJ19++WU9xYgRI9TqP2vWrCTFPjYkYOmHR0DRokV13DZt2iSZrDWntQAAIABJREFUpdKS63WHPv8aMUVy5y&#x2F;yyKXO&#x2F;uF1uXTmcKZFQLGfaZeGEyMBEiABEiABEiABEiCBTEeAYj+ZJYGVvFixYirGAQkZtg8dOqTu9Cm1pNz4YdFH6QiMAes84vbhqo+M3xh&#x2F;zJgxaslH3D3EPtz8X3nlFYvEPhL0DR06VGP5S5UqpYkAf&#x2F;7550x3o2WmCVWo2Uza9hqRYEoR90Ll5zE9JToqMjNNNcFcKPYz7dJwYiRAAiRAAiRAAiRAAiSQ6Qi4vdhHOa3EmcZhLUcWciTaQ1y&#x2F;qZ04cUKmTJmSZrEPzwBsFMBLAGXzYOGfPXu2uvHbQuxjEWfOnKnXgZrlCB1gS56Ah7GRU6J8LSNJ32DJnitAjuxaJZuWTpb7EfcyNTaK&#x2F;Uy9PJwcCZAACZAACZAACZAACWQqAm4t9mFx&#x2F;+CDD8TX1zfBoiBOHnH1cI03bxDRcMlPqSVl2YeXwJAhQ6R+&#x2F;fpqgUeJsgEDBkjFihVtIvaxIbFw4UJNIDh48OBMdYNxMrYjQLFvO5YciQRIgARIgARIgARIgARcnYBbi31XWVyIfcT0z5kzJz4rv6tcG6&#x2F;j&#x2F;wlQ7PNuIAESIAESIAESIAESIAESsJQAxb6lpDJpP5QNzJkzpyxbtkyefPJJiYzMvDHnmRSh00yLYt9plooTJQESIAESIAESIAESIIEMJ0Cxn+FLkL4JTJ8+XQoXLiyvvfaaJgBkc10Cziz24X2CDxs2EiABEiABEiABEiABEiCBhwTu379vUcU3a3lR7FtLjseRgIMJOLPYdzAqno4ESIAESIAESIAESIAE3J4Axb7b3wIE4CwEKPadZaU4TxIgARIgARIgARIgARLIeAIU+xm&#x2F;BpwBCVhEgGLfIkzsRAIkQAIkQAIkQAIkQAIkYBCg2OdtQAJOQoBi30kWitMkARIgARIgARIgARIggUxAgGI&#x2F;EywCp0AClhCg2LeEEvuQAAmQAAmQAAmQAAmQAAmAAMU+7wMScBICFPtOslCcJgmQAAmQAAmQAAmQAAlkAgIU+5lgETgFErCEAMW+JZTYhwRIgARIgARIgARIgARIAAQo9nkfkICTEKDYd5KF4jRJgARIgARIgARIgARIIBMQoNjPBIvAKZCAJQQo9i2hxD4kQAIkQAIkQAIkQAIkQAIgQLHP+4AEnIQAxb6TLBSnSQIkQAIkQAIkQAIkQAKZgADFfiZYBE6BBCwhQLFvCSX2IQESIAESIAESIAESIAESAAGKfd4HJOAkBCj2nWShOE0SIAESIAESIAESIAESyAQEKPYzwSJwCiRgCQGKfUsosQ8JkAAJkAAJkAAJkAAJkAAIUOzzPiABJyFAse8kC8VpkgAJkAAJkAAJkAAJkEAmIECxnwkWgVMgAUsIUOxbQol9SIAESIAESIAESIAESIAEQIBin&#x2F;cBCTgJAYp9J1koTpMESIAESIAESIAESIAEMgEBiv1MsAicAglYQoBi3xJK7EMCJEACJEACJEACJEACJAACFPu8D0jASQhklNj39PSUggULSlBQkERGRiqtwMBAuXfvnoSEhCRJL0uWLFKoUKEEx6Cjh4eHNG&#x2F;eXA4dOiQ3btywmDyO8&#x2F;HxEYwbExMjUVFRFh&#x2F;LjiRAAiRAAiRAAiRAAiTgjgQo9t1x1XnNTkkgo8R+kSJFZNu2bfLSSy&#x2F;J6tWrld2ZM2dkzpw5MmLEiCRZBgQEyPbt22XQoEGyatWq+D7YOMB&#x2F;T5w4Uf7880&#x2F;p06ePbiSMHTs2xTWpV6+exMbGyp07d6R8+fKycuVKuX&#x2F;&#x2F;vlOuIydNAiRAAiRAAiRAAiRAAo4gQLHvCMo8BwnYgIAtxX7p0qUlIiJCrly5ojPLlSuXVKlSRbZu3SoPHjxIMNvUxH7ZsmXl2Weflbx588revXtl4cKFYhL7n332mVr4r127JtOmTVOr&#x2F;Oeff66bBjg3RH9cXJzs2LFD0Dc0NDRJUubXXrFiRbl9+7Zcv37dBlQ5BAmQAAmQAAmQAAmQAAm4JgGKfddcV16VCxKwpdjHH36TJk3k4MGD6ppfp04d2bRpk7rmJ24msf&#x2F;rr7&#x2F;KkSNH9O2vvvpKZs2apZb9Tp06SevWrdXq3q1bNxk8eLDs3LlTLfsXLlyQc+fOScuWLeXNN9+UuXPnyvnz5+Wbb76Rs2fPypgxY+Tq1auyfv16+eGHHyQsLCzFlYMbf+PGjXX88PBwF1xlXhIJkAAJkAAJkAAJkAAJ2IYAxb5tOHIUErA7AVuKfUwWLvVt2rQRjLtixYokhT76mcT+3bt342Pl8+TJI9OnT1exjw8ReAb4+&#x2F;vLzJkz1b1&#x2F;8uTJKvaHDx8uS5YskV27dsnFixelS5cu8WL&#x2F;66+&#x2F;lnXr1ul7b7&#x2F;9tkX8ypUrp+eB2GcjARIgARIgARIgARIgARJIngDFPu8OEnASArYW+7hsb29vFf1w6U+upeTG&#x2F;8UXX8iaNWvk0qVLKuqHDRsmM2bMEHgBmIv93bt3q9jv3Lmz1WK&#x2F;cuXK4uvrq6ECiUMNnGQJOU0SIAESIAESIAESIAEScBgBin2HoeaJSCB9BOwh9i2ZUUpiHzH3mzdvVpd+iPmhQ4eqVd8k9uGqf+DAAXXvHzlypFr+TW78sOzPmzdPChQoIH&#x2F;&#x2F;&#x2F;bdMmDBBY&#x2F;GTaojTz5cvnxw9elRj&#x2F;KOjo1N1+bfk2tiHBEiABEiABEiABEiABFyVAMW+q64sr8vlCGSU2EeyPcTof&#x2F;vtt7J&#x2F;&#x2F;37lCjGPGP+pU6eqkEdMPiz5OXLkkMuXL2u2&#x2F;HHjxqkVvkaNGnLy5En5&#x2F;vvvNUHflClTNIkf&#x2F;tWsWVMz8iOz&#x2F;ieffJJkgj7E6Tdo0EDDDUwtODhYNxHYSIAESIAESIAESIAESIAEkiZAsc87gwSchEBGiX0nwcNpkgAJkAAJkAAJkAAJkAAJmBGg2OftQAJOQoBi30kWitMkARIgARIgARIgARIggUxAgGI&#x2F;EywCp0AClhCg2LeEEvuQAAmQAAmQAAmQAAmQAAmAAMU+7wMScBICFPtOslCcJgmQAAmQAAmQAAmQAAlkAgIU+5lgETgFErCEAMW+JZTYhwRIgARIgARIgARIgARIAATcVuyjvniVKlUeuQtQ2isyMpJ3BwlkOgIU+5luSTghEiABEiABEiABEiABEsi0BNxW7Ht5eUnJkiUFPwsXLizXr19XkX&#x2F;u3DmJiorKtAvGibkvAYp99117XjkJkAAJkAAJkAAJkAAJpJWA24p9Eyg&#x2F;Pz+t4Y164EFBQZInTx4pV66c+Pr6yt27d+XQoUNaAzwwMFDKly8vqO8dFxenmwS7d+&#x2F;WDYOiRYvKgwcP5OLFi7pZwEYC9iBAsW8PqhyTBEiABEiABEiABEiABFyTAMV+IrEPke&#x2F;j46PWfWwCnD59Wm7evKm&#x2F;Q8hfuXJF6tatK6GhoSr2W7RoIceOHVPPAE9PT90YYCMBexCg2LcHVY5JAiRAAiRAAiRAAiRAAq5JgGI&#x2F;kdjPly+fFCpUSCCsYOW&#x2F;cOGC3L59W2rUqCEbN27UTYDHH39chT3EPqz9RYoUkbCwMDlx4oSEhIS45p3Cq8pwAhT7Gb4EnAAJkAAJkAAJkAAJkAAJOA0Biv1EYr9JkyZy69YtuXz5stSqVUtd82&#x2F;cuCG1a9dWV3+48cOyHx0drWIf7vz4V7VqVf25efNmp1l8TtS5CFDsO9d6cbYkQAIkQAIkQAIkQAIkkJEEKPYTif369eurVT8iIkIQz3&#x2F;16lU5deqU1KlTR7Jnz64i38PDQ+P5IfabNWsmMTExKvTh4g+XfjYSsAcBin17UOWYJEACJEACJEACJEACJOCaBNxe7EO4Q6hDsCPxHtzz8Q+&#x2F;mxrey5Ili24C4HUIf2Tuh6Ufx2IMJOhDP&#x2F;xkIwF7EKDYtwdVjkkCJEACJEACJEACJEACrknA7cW+JcsKQV+zZk0JDw9XwZ83b17Zv3+&#x2F;uvuzkYCjCFDsO4o0z0MCJEACJEACJEACJEACzk+AYt+CNYRVH6X34NYPyz1K9FHoWwCOXWxKgGLfpjg5GAmQAAmQAAmQAAmQAAm4NAGKfZdeXl6cKxGg2Hel1eS1kAAJkAAJkAAJkAAJkIB9CVDs25cvRycBmxGg2LcZSg5EAiRAAiRAAiRAAiRAAi5PgGLf5ZeYF+gqBDJC7NerV0+KFy+uuSpSarGxsVqmcvv27YLf2UiABEiABEiABEiABEiABDKWAMV+xvLn2UnAYgKOFvuoMtG9e3dZunSphIWFpThPX19f6dChg6xZs8au+SwaNmwoe&#x2F;bs0WoYzZs3l82bN0tUVJTFDO3VEZsi+&#x2F;btk&#x2F;v379vrFByXBEiABEiABEiABEiABNJEgGI&#x2F;TbjYmQQyjoCjxT4SU3br1k1mz56d6kWjXGWnTp1ky5YtcvXq1Uf6Z8uWTXbs2CEtWrSQGzduaLnKhQsX6mufffaZ9s+RI4esXLlS6tevn+z5&#x2F;vzzTxkyZIhcu3ZN1q1bp+cMCQlJsj&#x2F;m1LhxYxkzZoyWyPz999&#x2F;ll19+Uc8Db29v+eijj6RNmzZaWWPYsGHJjpPqxRsd5s2bJ8OHD5cLFy5Y0j3JPs8++6xs2LBB7t27Z&#x2F;UYPJAESIAESIAESIAESMB6Ap4+ucXD+J95i42+Kw&#x2F;iUjYueXh4Shav7BIbdcf6k9vhSIp9O0DlkCRgDwLOLPYhvFevXi2ffPKJWv9xLRDrN2&#x2F;elOeee05xde3aVa31gwYNsonY9&#x2F;f3l8GDB8vUqVO1isbYsWNl48aNKvi&#x2F;&#x2F;fZb9UDA79hcgOj&#x2F;97&#x2F;&#x2F;bfWyYTMhOjra6uPhGWHaDGGlD6sx8kASIAESIAESIAESSBeB3KVfFA9Pb&#x2F;Ev2k7uXt8kMVEhcvfKWom6ez7FcX1zlZeiDSfIyWUt0nV+Wx9MsW9rohyPBOxEwJnFPpCMHj1a7ty5I19&#x2F;&#x2F;bWULFlS3njjDcmfP79axC9fviw&#x2F;&#x2F;&#x2F;yz7Ny5UyZPnizjx4+XnDlzCkRwTEyM9O3bV13kk7Lsw6V&#x2F;7ty5evzixYuTpT906FApWLCgjBgxQjZt2iTPP&#x2F;+8XLp0SftjE6Bz5866+WBqrVq1kl69ekl4eLjkzp1b5zJp0iQNbciVK5d6KLz88svafdmyZdKnTx89ftWqVbJ161YpVqyYBAQEyJkzZ+T111&#x2F;X69m2bZt6G+BYfPiiHzY5nnrqKXnnnXf02EOHDsn333+vXgs9evTQkAV4RgwYMEBu374tH3zwgVSoUEE9FHx8fKRnz57p2miw0+3KYUmABEiABEiABEjAaQkE1h4rN4&#x2F;+KFH3HnptZguoKTkKt5SYyJsSfHauxEWHGZ6qnuJfqod4PVZQ7oeekPxVhqnY98pWWHIWeVay+uaR0EsrJDLkiARUGCS3&#x2F;plgGKBi9f1cRdvKreM&#x2F;250Pxb7dEfMEJGAbAs4u9qtUqaJCFWIZVnZY+KtXr66iFRsAa9eulddee00OHz6sohyu+nD3hwDu16+fusgnFvsQup9++qkeO23atGRBw7MAFn5sIiCJIOL+a9WqFd8fIQUIJ8Bmg7nYHzdunDRo0EBCQ0N1jk888YS0bGl80BsbEJhXly5dJDg4+BGxv3z5cu2Ptn79er0uJDBMTuzDmg&#x2F;LPnIS4PfChQurS3+jRo10g6Rjx46aEwEbFMhTgHAIbH4g1CIuLs42NxhHIQESIAESIAESIAESUALmYj9bvtpSsPpIubbvY&#x2F;HNU8UQ&#x2F;k&#x2F;IpW2vSb5KrxqCPp+EnJsvecu9JI&#x2F;lqapi&#x2F;7G8NSSrT16JDr8qxRpOlFMr2xjHj5BbxyYZHgIXJE+ZXvr+jSPf2p02xb7dEfMEJGAbAs4u9kEBQhtCFYK+SZMmUqRIERk5cqS0a9dO30OiO7jc41pN&#x2F;z7&#x2F;&#x2F;HO12sPinVjswzIOqzvc9VNqH3&#x2F;8sYpixOmj7dq1S2rXrh1&#x2F;yPz58wXCHjkHzMU+5oZ5osHNP2&#x2F;evPLFF1&#x2F;of0+YMEE3D44ePfqI2H&#x2F;&#x2F;&#x2F;fdVvKNhzuh38OBBi8U+NhiQK8E8NADzL1u2rHzzzTfKCZ4K2LRg9QPb&#x2F;H1xFBIgARIgARIgARIwETAX+4F1&#x2F;qMu&#x2F;XfOP&#x2F;QgLdl8jlzc+qqUfXadnFzeQmIirotv7ipStP53D934PbIY&#x2F;&#x2F;fS2P8SzWbK5Z1vGa95SoGqb8iFzQOkeOOpxs9&#x2F;p5oHwBarQbFvC4ocgwQcQMAVxP5vv&#x2F;2moh4J8apVq6aWe8Tuv&#x2F;XWW9K+fXt599131cV&#x2F;5syZ6poP935YsyGekxL7sJTD3b1Zs2bqCZC4YXyED0AoY9PAlC0fQhz5AUzJ8FasWKGJ&#x2F;06cOJFA7GMTARZ1k9jHByZc7FMT+3Dbx3xTEvt+fn7qxo&#x2F;wgcSWfVj0ETIASz82P0wNVn7cBxD9L730ktSoUUNzHty9e9cBdyBPQQIkQAIkQAIkQALuQeARsX9to9y5sEQvvkSz2XJ5xzAp03q1IfabG2L&#x2F;hvj6V5KiDX5QsV+04U8SfmO73A87IwVrvG9sDAwywgEuSfl22+TilkGSp1xf&#x2F;emIRrHvCMo8BwnYgIAriH0Iaoh6xMjD2o4GSznc9uGGD3d8xOeXLl1aXf5xzX&#x2F;&#x2F;&#x2F;bfG9Scl9iH0n3zySRW+iK83z2QPF&#x2F;c333xT8uTJI6NGjdLYd1ObM2eOng9lBQsVKiQzZszQuHlzKzli9m0p9lGaDxsduP5Tp07pNSN3wDPPPCPXr1+XvXv36rVg0wIbHghzgBfE2bNndVMEMf8Q++bJAMEGGyG7d++2wR3GIUiABEiABEiABEiABEDAXOz7FWgkAeVflmv7Pxbv7CUlT+nn5fymf0mhmqMl2hDxoVdWS+6SXYw4&#x2F;dYq9ku1XCTnNryorvolms6U8xt7GzH9pyV3qeeNf90k6ORUw0tgoUNAU+w7BDNPQgLpJ+AKYh9x8ihTV6dOHU1ShwbrNVzWIXTPnTsnlStXVqs2XkOSO4jxL7&#x2F;8MlmxHxYWpkn94CZvipPHuEh8B2s+RLSpQVTD&#x2F;b1q1ara9+TJk5o3AOX5EGdv3mwt9rHBgeuAyEcYAVjAHR+VACD+f&#x2F;31V038hw0AeA&#x2F;0799fevfuLUeOHNHwAVQz+Omnn3SDAkn&#x2F;kIcgX758uslhvpGR&#x2F;juNI5AACZAACZAACZCAexMIKN9fQgxBHhP58Hk1e8EnjVj7PhIdcU1uHvnGeD3IcNXPKgWqvS3efsWNvoskR2Bzw+L&#x2F;ppF8r43kKvGc3L9zXCQuVm6fmWXE71&#x2F;Rccq13Synlrc0Xv5&#x2F;I5Q9SVPs25MuxyYBGxJwtNiHNRnZ4GEFTy0JHOaGJHIQtCYRn9ylY1xz13T0S&#x2F;wa&#x2F;tvUzPua90vqmKTGTTyPxOPh&#x2F;cTHmY5Jaq5JvZeWeZmuDedM7rpN80mKQ3JsbHircSgSIAESIAESIAESIAEbE3gsb3XJUai53Dj8jY1HTn44in2HoeaJSCB9BBwt9jFbuJh7e3tLVFRUipPH3OA2D6szMtWzkQAJkAAJkAAJkAAJkAAJIF+fl+HOP8Ow5t+Xy9uHSsz92w7DQrFvoM6RI4dmvaYrrMPuO57ICgIZIfYRH44ycPiZUoPAR816Cn0rFpaHkAAJkAAJkAAJkAAJkIAdCLi12Ic7bJ8+faRChQqKFq7KISEhmgEcia+CgoLsgJxDkoB1BDJC7Fs3Ux5FAiRAAiRAAiRAAiRAAiSQ0QTcWuxnz55dM1mb6mYDRrZs2QRlr0qUKCFfffVVguzeGb1YPL97E6DYd+&#x2F;159WTAAmQAAmQAAmQAAmQQFoIuLXYh&#x2F;v+e++9JyNHjhRfX18V+EePHtVyX08&#x2F;&#x2F;bTUrl1bfvnlF7ly5WH2RFs11PdGBnFk5GYjAUsJUOxbSor9SIAESIAESIAESIAESIAE3FrsQzyh1jfKbkGAo&#x2F;TX2LFjJTg4WMtadejQQSpWrKj1uC9evGizu6V169bqMYASW2yOJ+Dh4ynZe1WUbE+XEI8cRvK5gzcldMIBiTkfmu7JIDQE5dBQQg3x69goun&#x2F;&#x2F;frrHxQAU+zbByEFIgARIgARIgARIgARIwC0IuLXYh6AfNWqU1ttGqauyZcvKnj17EpQZQ63u8uXLy8SJEy2K4S9evLicP39eb57AwECJjY2Va9eu6X&#x2F;DcwBlyQAdQvDOnTtaQ&#x2F;z27dv6E2IO74eGpl90usXda+VF+nUuKzkHVX&#x2F;k6OvPLZa40JSzzqd2SniLoG778ePHJSAgQHA&#x2F;IP+DLRrFvi0ocgwSIAESIAESIAESIAEScA8Cbi&#x2F;24cY&#x2F;derUeIGeeNlRTqxt27by+OOPy7hx4+Tu3bsp3hlbtmyRhg0bahmy5cuXa&#x2F;&#x2F;OnTvrMXjvhRde0HrkN2&#x2F;elJkzZ8q3334refPm1X4IJShXrpw0adKEWc3t+PdX4M+2kiW37yNnuP32Rrm&#x2F;94bNzuzj4yOtWrWSJUuWJFvHPS0no9hPCy32JQESIAESIAESIAESIAH3JuDWYh8u1xDfBQsWlMmTJ2sm&#x2F;qQayo61b99eihQpIt99912Kd8z8+fM16d&#x2F;p06dl4cKFaqUfOHCgxuhD&#x2F;CMXwGuvvZZA7MPK&#x2F;9Zbb6kgRLJAhBEgnIDNPgQKre6S5MDBH2yRyG1X031SPz8&#x2F;qVmzptanP3z4sFy&#x2F;fj3dY2IAin2bYOQgJEACJEACJEACJEACJOAWBNxa7GOFYYHv2bOnFChQQH766ScV5Uk1uNlDpH&#x2F;00UcSFZW8qzfeh1jfsWOHNG3aVOuTw60fr6HEHzL8Dx06NIHYX7dunSxatEhP26VLF92AeO6559ziBsyIi8z3WyvJWjTHI6cOGr5eog7dSveUcE+h0gPc+BEasnLlSlr2002VA5AACZAACZAACZAACZAACaSFgNuLfZPg79evnxQrVkzFeOKYeQi3V199VS5duiTTp09PkS&#x2F;ctnv37q1x&#x2F;7DSYxOhf&#x2F;&#x2F;+Kvo&#x2F;&#x2F;&#x2F;xz2b179yNiH6+Zxu3Ro4d6EUDws9mHgG+zopL7vboJBo+7c19uvLhcHkTG2PSk8ORYvXp1gjwQ1p7AmS378KKBxwMbCZAACZAACZAACZAACZDAQwKRkZF2Dd+m2P&#x2F;fnQYxDlGeM2dOGT9+fLyFH3HXEPrR0dGapA8&#x2F;U2pI0AZLLuLw69atqwu4fv16DRWoV6+eXL169RGxjyRuiOvHBsHcuXNl1qxZMm&#x2F;ePP4N2ItAFg&#x2F;xqZVfcr3yuGQJeEwiVp6T0F8Py4PwlNfWkulg3WHRhydH4cKFdd1XrFhBy74BDx4PbCRAAiRAAiRAAiRAAiRAAg8JIIwb&#x2F;+zVKPbNyEKM9O3bVwX&#x2F;77&#x2F;&#x2F;riXT&#x2F;v3vf0tERISW37O0hNoff&#x2F;yh8dUQ8Fg8bBLUr19fatWqpdn5E7vxI1lf5cqVJX&#x2F;+&#x2F;LJ161YNFbDnotvrZuK4oh4cCPnAT9wviNdPbYPIUm7ObNm39BrZjwRIgARIgARIgARIgARIwDYEKPYTcUQ5vueff14qVqwocD0+c+aMutjDQm+Phmz8S5culVWrVtljeI7pQgQo9l1oMXkpJEACJEACJEACJEACJGBnAhT7yQBGnD4s&#x2F;faueU+xb+c73IWGp9h3ocXkpZAACZAACZAACZAACZCAnQlQ7NsZcGrDU+ynRojvmwhQ7PNeIAESIAESIAESIAESIAESsJQAxb6lpNiPBDKYAMV+Bi8AT08CJEACJEACJEACJEACTkSAYt+JFotTdW8CFPvuvf68ehIgARIgARIgARIgARJICwGK&#x2F;bTQYl8SyEACFPsZCJ+nJgESIAESIAESIAESIAEnI0Cx72QLxum6LwGKffdde145CZAACZAACZAACZAACaSVAMV+WomxPwlkEAGK&#x2F;QwCz9OSAAmQAAmQAAmQAAmQgBMSoNh3wkXjlN2TQEaI&#x2F;XLlykm1atXEx8cnRejR0dGyb98+OXXqlDx48MA9F4hXTQIkQAIkQAIkQAIkQAKZiADFfiZaDE6FBFIi4Gix7+HhId27d5fVq1fLrVu3UlwcPz8&#x2F;adeunaxcuVJu377NhSQBEiABEiABEiABEiABEshgAhT7GbwAPD0JWErA0WI&#x2F;S5Ys0q1bN5k9e3aqU&#x2F;T09JROnTrJ5s2b5dq1a0n2z5Url0yaNCnBe999951s27Yt1fHZgQRIgARIgARIgARIgARIIG0EKPbTxou9SSDDCDiD2N+yZYtcvXo1SUYBAQGyePFiGTVqVPz7Bw8eTHZzIMNA88QkQAIkQAIkQAIkQAJuSSCwzn8kS9Zs8ljuqnI&#x2F;9JTExUbIreO&#x2F;SETQ&#x2F;hR5+OYqL0UbTpCTy1pkKm4U+5lqOTgZEkiegCuI&#x2F;enTp0vr1q0TXCQ+hIYPHy6tWrWSiIgI+fnnn2XBggUa+58zZ0558803pWXLlvreiBEjxN&#x2F;fX5o1a6a&#x2F;o5UqVUpGjx4tvXr10vwC2EzAxsL169fl9ddfl4sXL&#x2F;K2IgESIAESIAESIAESIAGLCQTWHis3j&#x2F;4oUfcu6DFZfQPEK1thQ&#x2F;xHSlTYWXkQF2286iE+OUtJFs9s4pH1MQms&#x2F;bmKfWwWePsVFQ9PH4m+d0liokLEN1dFiQw5ahzz4H&#x2F;vF5PIO8csno+1HSn2rSXH40jAwQRcVey&#x2F;8sorUqNGDcFPLy8vWb58ufTr10+T&#x2F;X322WeCD6l3331XaSMRIIR&#x2F;cmJ&#x2F;0aJF8uKLL8r9+&#x2F;d1LGwQMGGgg29Uno4ESIAESIAESIAEnJyAudj3yl5MSjSeJjcOjxO&#x2F;Ag0lLiZcru0bI7mKtpXcZV6U2yenSUCFf4undy4V+zkKtxTv7MUl6u5ZKVRzlPFaSyna4Ee5vH24xMbclVzFO4hfvnpyZfdDw5U9G8W+PelybBKwIQFXEPs7d+5Ui7upIQHgtGnTpH379hIaGqovP&#x2F;fcc&#x2F;Lkk0+qtR9hAU8&#x2F;&#x2F;bTcu3cv&#x2F;hj8d3JiH5b8hg0byjfffKPHUujb8AbkUCRAAiRAAiRAAiTgJgTMxT4EO1z6b5+arldfssU8ubDxJSnzzCo5u6azYf2&#x2F;JNkCaklgnS8fceMv1XK+XNrxuuEZkF9yFnnG2CQYbQj&#x2F;8XJ138cSE&#x2F;H&#x2F;z8T2wkqxby+yHJcEbEzAFcR+Um78O3bskPr254qWAAAgAElEQVT160tcXJwSa9KkiQwYMEBeeOEF2bVrl9SuXTsBycRiv2LFijJy5Eh140eiQFj+kVgwe&#x2F;bsMnToUOYEsPF9yOFIgARIgARIgARIwNUJmIv9wLrjJOzyagm9tFwvu0TTGXJl17tSutXfhrhvKjGRN8XXv6KKeFj281V61RD3+eRBbJTkKtZOzm140RD2N6Rs201ydvVzUvDxD+S8sVngiEax7wjKPAcJ2ICAq4p9ZOifNWuWrF+&#x2F;XlDu78MPP5QbN27IxIkTZcmSJRqDv2fPHiWI92G579mzpwwcOFBfg8jHBgB+ooKAadPg008&#x2F;lZs3b8q3335rA&#x2F;ocggRIgARIgARIgARIwF0ImIt9&#x2F;5LdxM+w3F&#x2F;d&#x2F;7F4ZvUzEvH9JGdWd5LijafKrWOTJOL2AckR+JTkrzxExX6plgvk7Nqu4pHFx&#x2F;h9oVzcOtDwDDgtBaq9Ld45S0v49W0SdPJ3h6Ck2HcIZp6EBNJPwFXFftmyZTVOf8qUKZIvXz618jdt2lQiIyPlmWeeka+++kpmzpwpBQsWVPG&#x2F;b98+2bBhg4wdO1ZiYmI01h&#x2F;x&#x2F;b1795bJkyfr72FhYfLSSy&#x2F;Jyy+&#x2F;rP3ZSIAESIAESIAESIAESMBSAgkS9HlkkTylXpCASoMkOvy6YdV&#x2F;S8V7Fq&#x2F;sUqzhJPEykvEFn5ktuUt2fmjZr&#x2F;iq5C7dQyKCDxnJ+x6Ta8YmAfp7ZMkq5TvslpNLm0hs1B1Lp5KufhT76cLHg0nAcQQyQuwjpn727Nmpxr5jbh07dpRNmzYliMk3p+Pj46NCHhb8xK1o0aJSuXJlFe8Q50FBQfFdypcvL2XKlNGke4j5R2x&#x2F;6dKlpVy5cpqAb+&#x2F;evQJXfoQDYOMAr8fGxqroxz82EiABEiABEiABEiABEshoAkjal7fcv+Tq3g8dNhWKfYeh5olIIH0EHC324TLfrl07Fdd37qS8++jn56eW97&#x2F;++kst8mwkQAIkQAIkQAIkQAIkQAIIQ&#x2F;WUfFWGS&#x2F;b8DeXSzjeM0n1nHIaFYt9ADRGFOF9TrK&#x2F;D6PNEJJAGAo4W+5iar6+vWtzxM6UWFRUlBw4cEPxkIwESIAESIAESIAESIAESyHgCbi&#x2F;227ZtK9WqVVM3ZdTwvn37tly8eFFWr16dqutyxi8fZ+BOBDJC7LsTX14rCZAACZAACZAACZAACbgSAbcW+7j4999&#x2F;X5YtW6Zr6u3trf8Q84us3j&#x2F;99JPGCbORQGYgQLGfGVaBcyABEiABEiABEiABEiAB5yDg1mLf399f3nnnHa3RDSGF&#x2F;0apLrgso4wX&#x2F;htlwRCz7OjWuHFjadWqlbz33ntpPjVqjWNh7969m+ZjeUDmJUCxn3nXhjMjARIgARIgARIgARIggcxGwK3FPsTTxx9&#x2F;LKNHj9ZSX&#x2F;j3xRdfSEhIiHh5ecnQoUN1vcaPH+&#x2F;wpGPwLMBmA8IK0tpQrgweCWvXrk3roW7R38Mon5E3X015vPYYyZatkJw9&#x2F;YccOfitxMZE2OT6ixUrJjVq1IjPLH&#x2F;16lWbjEuxbxOMHIQESIAESIAESIAESIAE3IKAW4t9WMAh9P&#x2F;zn&#x2F;9Irly5NHZ&#x2F;xYoVGruPBsGPOt0oGfbDDz9oOa&#x2F;U2gsvvKCx&#x2F;igX9sQTT8i8efPkt99+08PgRbB161Zp0KCBbix06dJFkMUc1nuUEkMNcXgSoKFEGf59&#x2F;fXX+t&#x2F;NmzeXgQMHqpfBBx98ICYBmT9&#x2F;fvnwww8FpcvWrVun9cenTZumVv179+5JmzZtGIqQaNECi7WWug2&#x2F;TfBqhFEzc+XS1ukW&#x2F;FhPMF+4cKGRedNDnnrqKVm6dKlN8j9Q7Kf218f3SYAESIAESIAESIAESIAETATcXuwjZv&#x2F;XX3+Vy5cvJ3lXANDzzz8vOXPm1Bj+1MqKDRkyRHr06CGffvqpBAcHy+uvvy4bN27UzYJvvvlGKlWqJHPmzJFz585pXXDTZgDqgffs2VPrhiOsACIR&#x2F;95++22pWbOmehlMnDhR8uXLp94HcPOH9f+PP&#x2F;7Q+SOpIKoJHDx4UH755RfdOMD4GBebD2z&#x2F;T+CpZ&#x2F;+SHLnKPIJkw+oXJejmnnShwgZR+&#x2F;btdeMF4rxKlSr6uy3WgGI&#x2F;XUvDg0mABEiABEiABEiABEjArQi4tdiH5RXWcgj4mTNnJmsBB6R&#x2F;&#x2F;etfKt5nzJiR4g0CsQ+Lfp8+fbQf4u6HDRsmcK2H2Me5RowYoe+hhnnXrl2ld+&#x2F;e+t+wCsP1vm7dugnEPs65e&#x2F;duuXLlivbD8S+++KJUrVpVOnXqJN27d08wp8mTJ+s86caf9FJ17H7I2CjxeuTNrRsGyLUrG9L9AVCoUCGpVauWjrN582YNC7FFo9i3BUWOQQIkQAIkQAIkQAIkQALuQcCtxT6WGK78sL6Hh4er5RzW8aRaQECAvPHGG+r2n5J1H2K&#x2F;RIkS2hcNll3E&#x2F;MNtH2L&#x2F;2LFj8a76AwYMkLJly8qbb74Zf8pt27ap+765ZX&#x2F;Pnj0aanD9+vX4fhD&#x2F;&#x2F;fr1k5IlS+pmgnmj2E&#x2F;5j7dB44lSMLDZI53WLO8gd0KOp+svHx4gLVq0kMWLF2tlh5YtW8pff&#x2F;1Fy366qPJgEiABEiABEiABEiABEiCBtBJwe7EPYBBo&#x2F;fv3VxH&#x2F;888&#x2F;S1RUVAKOsKj27dvXSOaWTd3xU3LJhtivV6+eWt7RWrduLXgNcdyJxT5EITwGEOePhrwBa9asUc8Ac7EPr4M&#x2F;&#x2F;&#x2F;xTFixYkGBeCC+AZb9bt24JXodbP46hZT&#x2F;pP4fsOUrK022XJ3jzn8M&#x2F;yjHj34MHSW&#x2F;2WPqHhRwKZcqU0dwMaAi3gHU&#x2F;uU0kS8dFP2e27MOLBlUu2EiABEiABEiABEiABEiABB4SgO60JC+ctbwo9v9HDkIblvYbN27I7Nmz4633EFhwky9SpIhMmDBBwsLCUmQNYY&#x2F;Y+3HjxklQUJAMHz5c5s6dK7&#x2F;&#x2F;&#x2F;vsjYh9jz5o1S1avXi1HjhxRd&#x2F;5r165pwj1zsY&#x2F;EgbDWY7Pg1q1bUq5cOfnvf&#x2F;+rCQQRsw+X&#x2F;UuXLmm5PSSGGzx4sCYbxOu7du1KNc+AtTePMx&#x2F;n45P7&#x2F;9q7CzCryn2P43&#x2F;gEpcuAUFSQBEBkQYBKWn7HPt4zCMGiB3HOHgt7A7swBalJFRCQpAQKZFQkBLpjmG483uvmzsMM8zes3Ot9V3Pw6POrHjfz3&#x2F;j8&#x2F;zWG9uOPqZzhmEJ27Rxrq1fNyOjO9HvbaCaaBmGNnnUngr6VoRZs2bFhMrLYT8mANwEAQQQQAABBBBAAAEEwhYg7GeiUpjSRngK1Ar8esuiUfeKFSu6Kf7hfG+9wn716tVdaNcUfk3hVtjX0adPH1uxYoXbnT10lClTxq677jo3nV8j8QrxGgXOHPZ1rjbp08sAvZSYPn26vfHGGy5IaiRZyxAqV67svkkgtKfAgAEDXLu1nCCcdof9ieHEpAkQ9pNGz4MRQAABBBBAAAEEEPCcAGE&#x2F;S8kUqBSQixcv7kZm09LS3Hr5cAOzwr6+Bk+76EdzZA370dyLa&#x2F;0hQNj3Rx3pBQIIIIAAAggggAACiRAg7GejrLX5+t57hf2lS5eGHfR1q2jDvgKd1uKfeeaZ7uvzNP2fAwEJEPb5HCCAAAIIIIAAAggggEC4AoT9cKXCPE+b82mqvabU5+XQtwPo6wD17QBaj79jx4683IZrfChA2PdhUekSAggggAACCCCAAAJxEiDsxwmW2yIQawHCfqxFuR8CCCCAAAIIIIAAAv4VIOz7t7b0zGcChH2fFZTuIIAAAggggAACCCAQRwHCfhxxuTUCsRQg7MdSk3shgAACCCCAAAIIIOBvAcK+v+tL73wkQNj3UTHpCgIIIIAAAggggAACcRYg7McZmNsjECsBwn6sJLkPAggggAACCCCAAAL+FyDs+7&#x2F;G9NAnAoR9nxSSbiCAAAIIIIAAAgggkAABwn4CkHkEArEQIOzHQpF7IIAAAggggAACCCAQDAHCfjDqTC99IEDY90ER6QICCCCAAAIIIIAAAgkSIOwnCJrHIBCtAGE&#x2F;WkGuRwABBBBAAAEEEEAgOAKE&#x2F;eDUmp56XICw7&#x2F;EC0nwEEEAAAQQQQAABBBIoQNhPIDaPQiAaAcJ+NHpciwACCCCAAAIIIIBAsAQI+8GqN731sABh38PFo+kIIIAAAggggAACCCRYgLCfYHAeh0BeBQj7eZXjOgQQQAABBBBAAAEEgidA2A9ezemxRwUI+x4tHM1GAAEEEEAAAQQQQCAJAoT9JKDzSATyIkDYz4sa1yCAAAIIIIAAAgggEEwBwn4w606vPShA2Pdg0WgyAggggAACCCCAAAJJEiDsJwmexyIQqQBhP1IxzkcAAQQQQAABBBBAILgChP3g1p6ee0yAsO+xgtFcBBBAAAEEEEAAAQSSKBD4sN+wYUOrW7eupaWl2c6dO92fjRs32sKFC+3AgQNJLA2PRuBQAcI+nwgEEEAAAQQQQAABBBAIVyDQYb9QoUJ2zz332O+&#x2F;&#x2F;+68ChQoYPnz57cyZcrYihUr7P3337f9+&#x2F;eHa8l5CMRVgLAfV15ujgACCCCAAAIIIICArwQCHfbLli1rt9xyi911112HFLVEiRLu5+vWrbOXXnrJ0tPTwy76DTfcYFWrVrXbbrst7GtyOvGTTz6xRx991GbMmHHwlMKFC7tZB+3atbOVK1dG&#x2F;Qxu4B0Bwr53akVLEUAAAQQQQAABBBBItkCgw37BggXtgQcesHvvvdeaNGlip5xyigv327dvd6P7ffv2tV9&#x2F;&#x2F;dXee++9sAM&#x2F;YT&#x2F;ZH+nwnl+5cmX717&#x2F;+ZeXLl7evv&#x2F;7avvjii5gt29BLpBNPPNH27dtnCxYssC1btoTXqFzOIuzHhJGbIIAAAggggAACCCAQCIFAh31N2x8wYIA98sgjVqdOHRf4Bw8ebDt27HDFL1mypAuEq1evtg8++CCswK+wX6NGDRs&#x2F;frwb4Z89e7ZNnTrV3U&#x2F;LBjQirz0C9EJBAXPr1q0Hn9WjRw8rXbq0LV682L799lv7+OOPD47sN2rUyGrWrGlfffXVISP7RYoUMV1XqVIl++WXX1xwDR1HHXWU9ezZ0y1PGD58uHuZ8dlnnwXig32kTjZu3NjefvvtQ06R2+233+4CejSH&#x2F;kKdfvrpNnr0aFM4b9GihY0cOTImLxII+9FUhmsRQAABBBBAAAEEEAiWQODDvkb1X3zxRfvjjz+yrXypUqXsmmuucVP633nnnVzX8CvsX3LJJTZq1Cj3kuDSSy91swcU+PQS4O6777YxY8ZYr169bMOGDXbTTTe5lwoTJkywyZMnu6CvZ+olRGga&#x2F;5o1a1zwVzsU6EPT+PXzZ555xlREvVxQyPz555&#x2F;dPgQKhrpeMxN0zw4dOrjZCl26dAnWJzyb3r711lt28sknH&#x2F;abCy64wObPnx+Vj16+qA5Dhw51+z&#x2F;o5Y6Cfyw2eyTsR1UaLkYAAQQQQAABBBBAIFACgQ77CmNam79o0SL78ssvcyy8Rttvvvlm++6771xQP9KhsN+yZUu76KKL3Gm9e&#x2F;e2q6++2v1TR758+Vzw0z8nTZpkbdq0sdNOO829FLj44osPCYUK64MGDbLHH3&#x2F;c&#x2F;va3v7l2Zl6zX7FiRfc7BXkdekkwceJEF2Q7duxoV1xxhZ1&#x2F;&#x2F;vnud82bN3czGPTzoB9z5sxx&#x2F;lkP1U4vXaI9ihcvbt26dbPdu3e7oB&#x2F;tbIFQewj70VaG6xFAAAEEEEAAAQQQCI5AoMO+ynz00Ue7UKwR3SFDhuRY+erVq7sp&#x2F;ffff7&#x2F;t3bs3x&#x2F;MUGDXdXiP2OjT9&#x2F;umnn3aBXC8N9KwTTjjBjbzrn82aNbMbb7zRdu3aZa+88soh91XYr1ChghUtWtTatm3rwmPmsK9lB5pFcO655x68Ti8kTj31VNdWzSQIbRSoZ3&#x2F;++eeE&#x2F;Qypd99919Ul63HhhRfavHnzovrbr1qp1lq6oX8&#x2F;&#x2F;vjj7ZtvvmFkPypVLkYAAQQQQAABBBBAAIFIBQIf9gWmIK&#x2F;QrPX1GolNS0s7xFEzADT9XSPm2h3&#x2F;SLvzK+zrvMsuu8zdo3379m63&#x2F;65du7qp&#x2F;JreryneemGg8K1ZABrRr1+&#x2F;vt15552Hhf1hw4a5tfY&#x2F;&#x2F;vijW26QOeyHlgV0797dXac9AaZNm2ZNmzZ1MwEU+jX1X8cxxxzjliEwsm&#x2F;uBcvrr79+iLWWUPTr1++IL3LC+cullzO1atWy77&#x2F;&#x2F;3p2u2k2ZMiWs&#x2F;R5yuz8j+7kJ8XsEEEAAAQQQQAABBBAICRD2&#x2F;5LQBnd9+vRx6+Y1Ert&#x2F;&#x2F;373GwV9BWSNrD&#x2F;33HO2fv36I356FPY1dV7rv&#x2F;fs2eOCvjbh0zp6Tdu&#x2F;7rrr3Dr6zp07u&#x2F;X7Gp2vVq2ae+bZZ5&#x2F;t7l+sWDFbsmTJwTX7Woc&#x2F;btw49+0As2bNOrhmX&#x2F;sI6OVB&#x2F;&#x2F;793f4ACv0K+VozrvX52sxPywm2bdtmV155pXXq1Imw&#x2F;1f1tHmiZlQonOslzIcffhiT0Xf9hdKyDO3Cr3Culyza&#x2F;I81+&#x2F;xPFwEEEEAAAQQQQAABBBIpQNjPpF2iRAm3Nl&#x2F;fa6&#x2F;d63VoIz2td9eo+tq1a3OtjcL+zp073cZsGuH&#x2F;6KOP3Fp5zRZQ2NYyAM0M0Cj+rbfeameddZZbP65p5QMHDnTLCrRj&#x2F;n&#x2F;+85&#x2F;DduPX1wJqhoDWnOv+K1eudGH1ySeftIYNG7r1+nfccYfb6V+HZg089thjpq8Y1P30PEb2cy1h1Cfo2w&#x2F;0R4fqfqSZIJE8jJH9SLQ4FwEEEEAAAQQQQACBYAsQ9rPUXyO+2ixPQVpBTV&#x2F;JpzXeGmn38qGv+9PeAfqaPg5vChD2vVk3Wo0AAggggAACCCCAQDIECPvZqGtKv9baa8RdG96tWrUqGbWJ+pnah0Bfu6fd4DVlXS8sNMLP4U0Bwr4360arEUAAAQQQQAABBBBIhgBhPxnqCXrmtdde69aP66vgRowYYc8880zMppQnqAs8JpMAYZ+PAwIIIIAAAggggAACCIQrQNgPV4rzEEiyAGE&#x2F;yQXg8QgggAACCCCAAAIIeEiAsO+hYtHUYAsQ9oNdf3qPAAIIIIAAAggggEAkAoT9SLQ4F4EkChD2k4jPoxFAAAEEEEAAAQQQ8JgAYd9jBaO5wRUg7Ae39vQcAQQQQAABBBBAAIFIBQj7kYpxPgJJEiDsJwmexyKAAAIIIIAAAggg4EEBwr4Hi0aTgylA2A9m3ek1AggggAACCCCAAAJ5ESDs50WNaxBIggBhPwnoPBIBBBBAAAEEEEAAAY8KEPY9WjiaHTwBwn7wak6PEUAAAQQQQAABBBDIqwBhP69yXIdAggUI+wkG53EIIIAAAggggAACCHhYgLDv4eLR9GAJEPaDVW96iwACCCCAAAIIIIBANAKE&#x2F;Wj0uBaBBAoQ9hOIzaMQQAABBBBAAAEEEPC4AGHf4wWk+cERIOwHp9b0FAEEEEAAAQQQQACBaAUI+9EKcj0CCRIg7CcImscggAACCCCAAAIIIOADAcK+D4pIF4IhQNgPRp3pJQIIIIAAAggggAACsRAg7MdCkXsgkAABwn4CkHkEAggggAACCCCAAAI+ESDs+6SQdMP&#x2F;AoR9&#x2F;9eYHiKAAAIIIIAAAgggECsBwn6sJLkPAnEWIOzHGZjbI4AAAggggAACCCDgIwHCvo+KSVf8LUDY93d96R0CCCCAAAIIIIAAArEUCHzYL1OmjFWrVs12795tW7dutbS0NNu7d69t2bIlls7cC4GoBQj7URNyAwQQQAABBBBAAAEEAiMQ6LBfoEABu&#x2F;vuu61o0aIHC56enm768&#x2F;3339vw4cMD80Ggo6kvQNhP&#x2F;RrRQgQQQAABBBBAAAEEUkUg0GG&#x2F;dOnSdvvtt9u&#x2F;&#x2F;&#x2F;1vVw+FKb0A0Ej&#x2F;hRdeaNOmTbORI0fagQMHYlqv9u3b2&#x2F;bt223mzJnZ3rdWrVrWqVMnGzRo0GG&#x2F;b926tWvfhx9+aG3btrWjjz7aPv7445i2j5ulpgBhPzXrQqsQQAABBBBAAAEEEEhFgUCH&#x2F;SJFitj9999v99xzj9WoUcOaN29un376qe3Zs8f99xVXXGETJkywb775JqaBv2fPnrZjxw4bP358tp+JJk2a2FVXXWXXXHPNYb8&#x2F;&#x2F;&#x2F;zzrUGDBm5GwmmnnWZVq1a1119&#x2F;Pdv76MXFXXfdZQ8++KCbrcDx&#x2F;wKFShazCi3q238V&#x2F;W&#x2F;bsuR327RgmVls3+nYUUcd5R74559&#x2F;xoSesB8TRm6CAAIIIIAAAggggEAgBAId9hWGBwwYYA8&#x2F;&#x2F;LC1adPGWrRoYc8++6xt3rzZFb9ixYp27bXX2pQpU2zMmDFhBf7KlSvb6tWrD16&#x2F;f&#x2F;9+W79+vfvvKlWq2MaNG61w4cKmn2&#x2F;bts39u0Kh2rJz50537sknn2xXXnmlC&#x2F;QlSpSwXbt2ucCoGQaZw36pUqWsUKFC7ncFCxZ099E&#x2F;tf+A7tOqVSsbOHCg&#x2F;eMf&#x2F;7ANGzbYpk2bAvGhzq2TxaocZd2GPnHIaXOf+dAWv&#x2F;tVWDXO7f76verStWtXW7Nmjc2YMSOcS3I9h7CfKxEnIIAAAggggAACCCCAwF8CgQ&#x2F;79913nwv4CuEKyhrVz3xo5Pzqq6+2H374wYYOHZrrB2fy5MnuxUH+&#x2F;PndEgBN1z&#x2F;33HPddZMmTbKLL77YzjjjDBfQBw8ebO+9954L&#x2F;QrjTZs2tV69elmjRo3s3nvvdSF&#x2F;6dKldtZZZ1mfPn3cLIPMYV8j&#x2F;3Xr1rWbb77Z3njjDbcMYcmSJda5c2c777zz7NJLL3X&#x2F;fPnll92SAfWBw6zlwL5WpVPTwyjG&#x2F;v0u27p0ZUyIVAMFff0FI+zHhJSbIIAAAggggAACCCCAQAQCgQ77CuRas6+APnHixBzZateu7YLzkCFDbNasWUfk1TmaOr9s2TL78ssv3Q7&#x2F;elmg0D9q1Cjr0qWL9e3b92DY10aAmo6v8&#x2F;Lly+dGljWN&#x2F;+2333YzDTTdX8sLNMPgn&#x2F;&#x2F;8Z7Zh&#x2F;5ZbbnEvAq6&#x2F;&#x2F;nqbM2fOwfaddNJJ9swzz7j1&#x2F;&#x2F;qWAY7&#x2F;Ezhr6uuWv1DBwzgm933C1k7+f7+8eukFjGZX6KhQoQJhP6+QXIcAAggggAACCCCAAAJ5Fgh02JeapsyffvrpbhR++vTpOULWr1&#x2F;fbdqnEXdNwc&#x2F;p0B4AGqVXiFfI1mj7b7&#x2F;95qbQn3DCCfbYY49Zv379Dob9yy67zI326&#x2F;mfffaZO1dhv3&#x2F;&#x2F;&#x2F;u7nOrScQKPzGuHPbmT&#x2F;pptucj&#x2F;XywAtOfjkk09s4cKFRtjPvkpdPx9oxatXOuyXE6580NbPXpTnv0y6UJs+qn7aj+GYY45xSys0qyIWmzwyjT+q0nAxAggggAACCCCAAAKBEgh82Fe1GzdubOecc469&#x2F;&#x2F;779vPPPx8WzDTiXq9ePRf2Ne3&#x2F;SGG&#x2F;W7dudskll7hztF5eQV2b7WlN&#x2F;qOPPupGeTOHfT1fv9PMAU3HP&#x2F;XUU91u+5k36Asn7Ic+tWeffbY98cQTpnaouIzsH&#x2F;73uWq3Vtb8wT6H&#x2F;GLftp02sns&#x2F;S9t16DKOSP9voCUYderUcZdp5oj+zJ071+bPnx&#x2F;prQ47n7AfNSE3QAABBBBAAAEEEEAgMAKE&#x2F;b9KrVF3jaRrVHz27NmHfAA0Qq5195pav3jx4iN+OEqWLGmjR4+2cuXKuWn42gNg3LhxVqlSJWvZsqVbx5057GcugKb9P&#x2F;TQQ27KfaRhPxQE9WJCmwlqBoI2GnzzzTetXbt2tnfv3sB8qHPraL4C+a1S60bW8KYL7L8rlLXlIybbvOc+tn3bduR2aa6&#x2F;V7hXDXTopU358uXdyH4svg2BsJ8rPycggAACCCCAAAIIIIDAXwKE&#x2F;b8gFND0lXYa4R8+fPjBzew0Jbt3795umr02uAtnOrZeGCiYaZRd52sKvnbG15IBjfhnDvvapK948eLupYBGgPXNAA0bNowo7GvNvjYZVLjUfVatWuW+TlDrxp988kk79thjD24GyCc&#x2F;cQL6JgX9BVu3bl1MHkrYjwkjN0EAAQQQQAABBBBAIBAChP0sZdZmeD169LCvv&#x2F;7ahWUFfY2UaxM&#x2F;DgSSKUDYT6Y+z0YAAQQQQAABBBBAwFsChP1s6qXd1C+66CL3m48++sgWLFjgrarSWl8KEPZ9WVY6hQACCCCAAAIIIIBAXAQI+zmwatM8HUfajC8uFeGmCOQgQNjno4EAAggggAACCCCAAALhChD2w5XiPASSLEDYT3IBeDwCCCCAAAIIIIAAAh4SIOx7qFg0NdgChP1g15&#x2F;eI4AAAggggAACCCAQiQBhPxItzkUgiQKE&#x2F;STi82gEEEAAAQQQQAABBDwmQNj3WMFobnAFCPvBrT09RwABBBBAAAEEEEAgUgHCfqRinI9AkgQI+0mC57EIIIAAAggggAACCHhQgLDvwaLR5GAKEPaDWXd6jQACCCCAAAIIIIBAXgQI+3lR4xoEkiBA2E8COo9EAAEEEEAAAQQQQMCjAoR9jxaOZgdPgLAfvJrTYwQQQAABBBBAAAEE8ipA2M+rHNchkGABwn6CwXkcAggggAACCCCAAAIeFiDse7h4ND1YAoT9YNWb3iKAAAIIIIAAAgggEI0AYT8aPa5FIIEChP0EYvMoBBBAAAEEEEAAAQQ8LkDY93gBaX5wBAj7wak1PUUAAQQQQAABBBBAIFoBwn60glyPQIIECPsJguYxCCCAAAIIIIAAAgj4QICw74Mi0oVgCBD2g1FneokAAggggAACCCCAQCwECPuxUOQeCCRAgLCfAGQegQACCCCAAAIIIICATwQI+z4pJN3wvwBh3&#x2F;81pocIIIAAAggggAACCMRKgLAfK0nug0CcBQj7cQbm9ggggAACCCCAAAII+EiAsO+jYtIVfwsQ9v1dX3qHAAIIIIAAAggggEAsBQIf9vPly2dHHXWU7d6927Zu3RpLW+6FQEwFCPsx5eRmCCCAAAIIIIAAAgj4WiDQYT9&#x2F;&#x2F;vzWt29fq1SpkivygQMHbNeuXS70jx8&#x2F;3n788UdfF5&#x2F;OeUuAsO+tetFaBBBAAAEEEEAAAQSSKRDosF+yZEm788477f7773c1KFSokBUuXNgaNWpk7du3tw8&#x2F;&#x2F;NAWLlzoXgIk8qhXr4OuSnoAACAASURBVJ6tWbPGNm&#x2F;enMjH8qwUFyDsp3iBaB4CCCCAAAIIIIAAAikkEOiwX7RoUbv33nvt7rvvNgX&#x2F;xo0b27hx41y4b9iwoV1wwQX2zjvvuMCfyOO5556zTz75xCZOnHjEx7Zo0cJ+++03++OPPxLZPF88K3&#x2F;G8o3&#x2F;LlDA8mX0Zl96uu3J+JPXo2DBgpaWlnbYS6ECGffXsX&#x2F;&#x2F;&#x2F;rze+pDrCPsxYeQmCCCAAAIIIIAAAggEQiDQYV9h7IEHHrAHH3zQOnXqZK1bt7aBAwfaxo0bTWv5FfjPOecc++KLL2zWrFkJ+0CoXekZ4TO3GQWDBg2yZ555xubNm5ewtvnhQaUywvmbrVpZlYyXPQUz6rxx714bMHeuTVy3LuLuaRbIsccea2PHjrVt27YdvF6fn27dutmff&#x2F;5pM2bMiPi+2V1A2I8JIzdBAAEEEEAAAQQQQCAQAoEP+5rC&#x2F;9RTT7m1+uXLl7eVK1ceErJbtmxpXbt2taFDh9rs2bNz&#x2F;VDccMMN1qBBA9Nob9myZW379u321VdfueCn++seWjqgQ&#x2F;sF6AWDgn3p0qXt6quvds9&#x2F;&#x2F;vnn7c0337SZM2fau+++axMmTLBTTjnFXf&#x2F;rr7+anqFZB7fffrvNnz&#x2F;fNm3a5P69cuXKNmDAANuzZ4+VK1fO9DJA7e7evbt7mVGmTBkrVqyY25Cwf&#x2F;&#x2F;+9tNPP7kZDTpP&#x2F;dfeBWqrXiCceOKJ7p96XpEiRaxChQr21ltv2eDBg13b9Tzdc8eOHTZlyhR77LHH7Pjjj7eHHnrIhd7ixYu763ObnZAraBxOuPWEE+yiGjUOu3OPjFkdqzMcwj1KlSrlXKpVq2bTp08&#x2F;JOxr1kXohQ1hP1xRzkMAAQQQQAABBBBAAIFYCQQ67GuDPgVvBeK5GSO7OR0K&#x2F;D179nSheMWKFUe0VxA&#x2F;&#x2F;fTTrUuXLu68Dz74wPZmjBxfeumlpucpGOt3CsR6GRCaRaD9AT7++GP77LPPDgn7+vnq1avt5ptvdrMNxowZYxdddJGbuq&#x2F;zFe5DI&#x2F;tq3&#x2F;vvv29Tp051wV0vCtq1a+fCvkJ427Zt3cuHa665xqpWreqWL2gWgf6ojQr4umfz5s2tRkYY&#x2F;vzzz93LiPXr17tr9WJEAb9z587uZcGZZ55p+&#x2F;btc&#x2F;3UqLNeFFxxxRWubbrHk08+aW3atHH3TqVj8mmnWbGM9mY9rv3hB5uSMRIf6SGPadOmHQz7epmiP7LWywDCfqSinI8AAggggAACCCCAAALRCgQ67AtPIV6B9oUXXnCh+kiBv1evXnbPPfcccXq9wv4JGSPHffr0cbd69NFHbcGCBfb222+7&#x2F;9Za&#x2F;Ntuu82NmCv864&#x2F;C9o033mhr165152Ue2VfY11IDjeDr0CwEhXgtK8ga9vXtAZohkPmoVauWm5lwWkbAVUDXofZpVoFCvw49X+3QzIBRo0aZXm7oZcCzzz5rHTt2dOfo5cGnn37qZhg88cQTtmrVKhfmQ0fNmjXdKH7m9enaYFAvCTJPb4&#x2F;2AxuL68dnhPPSGZsxZj2uyRid&#x2F;z7jxUakR+awr79Q+kwNGTLEqlSpQtiPFJPzEUAAAQQQQAABBBBAICYCgQ&#x2F;7Gi3XSHurjDXcr7zyigvc2R2aqq0Arw39QqPZ2Z2nsK9zb731VvdrhX0F848++sj9dyjsa4bAsGHD3PTvJUuWuED+9ddfZxv2FdK1O7+O3MK+Rt6zBm6N7Kt&#x2F;aruOzGG&#x2F;X79+LsBrzblCv14ChML+448&#x2F;7pYf6Mgc9p9++mm3MaD+GTq0bl2zEvQsLQnQoT0H9DWGue09EJNPcgQ3+WfGC5AbM5YcZD06ZPhvysMshMxhX&#x2F;s8aFbE7t273Tc7aDmHlkuoxtEerNmPVpDrEUAAAQQQQAABBBAIjkDgw75KHQr8mvL+2muvuSCb+VB4&#x2F;+c&#x2F;&#x2F;+lGrsePH3&#x2F;ET4fCvkbFNXqvI6ewr1H0yy67zK688ko3qv7ee+&#x2F;Z6NGjIwr7Wj+vWQBaGqBDswB0D63316G19gqdOYX9a6+91n7++Wc79dRT3awGBVW9lMgt7J933nl2xhlnuOUECvJqv7628LvvvrPrr7&#x2F;eTWnXUaJEiZQb1Ve7tAt&#x2F;&#x2F;4yw3&#x2F;noo61ExnT+uRkzEB7NmH2xKOPFRF6OzGFfDgr4OlRj7bOgvRdisZSBsJ+X6nANAggggAACCCCAAALBFCDs&#x2F;1V3BX6ttW&#x2F;SpIkL&#x2F;KG1+QpsWoeuUKxp7LmNUocb9rWuffjw4W66tzbO05RvhfbspvHnNLKvZ+nbAnTdww8&#x2F;bHXq1HGj7YsWLXKBUxv1&#x2F;etf&#x2F;8ox7Gsav0bvda76p40FFfw1C0AvLHIa2ReZ9gfQaP+6jB3s9aJAyxuaNm3qlkNo&#x2F;wO9aNCfv&#x2F;3tb7maef2vnvqtpRo7d+48pCsVK1Z0yypUj1gchP1YKHIPBBBAAAEEEEAAAQSCIUDYz1JnjVgrvL300ktugzUFbYVXbVYXzpH1u9X133pBoJ3ZdSiwaZq9fhZaK69&#x2F;18&#x2F;0wkHnZf7qvczn6&#x2F;rMv9P5+r2O0NKC0B4A+pnuqfvpZzo3NL1f&#x2F;6776LvhM99Dv9fPda&#x2F;M5+heofNCzwn9PnTfUP9Cfcr8&#x2F;HDcOCd3AcJ+7kacgQACCCCAAAIIIIAAAv8nQNjP8klQeNV0&#x2F;tBa9W+&#x2F;&#x2F;db0J&#x2F;M6eD48CCRDgLCfDHWeiQACCCCAAAIIIICANwUI+znUTZuraUQ8tNmcN8tLq&#x2F;0kQNj3UzXpCwIIIIAAAggggAAC8RUg7MfXl7sjEDMBwn7MKLkRAggggAACCCCAAAK+FyDs+77EdNAvAoR9v1SSfiCAAAIIIIAAAgggEH8Bwn78jXkCAjERIOzHhJGbIIAAAggggAACCCAQCAHCfiDKTCf9IEDY90MV6QMCCCCAAAIIIIAAAokRIOwnxpmnIBC1AGE&#x2F;akJugAACCCCAAAIIIIBAYAQI+4EpNR31ugBh3+sVpP0IIIAAAggggAACCCROgLCfOGuehEBUAoT9qPi4GAEEEEAAAQQQQACBQAkQ9gNVbjrrZQHCvperR9sRQAABBBBAAAEEEEisAGE&#x2F;sd48DYE8CxD280zHhQgggAACCCCAAAIIBE6AsB+4ktNhrwoQ9r1aOdqNAAIIIIAAAggggEDiBQj7iTfniQjkSYCwnyc2LkIAAQQQQAABBBBAIJAChP1Alp1Oe1GAsO&#x2F;FqtFmBBBAAAEEEEAAAQSSI0DYT447T0UgYgHCfsRkXIAAAggggAACCCCAQGAFCPuBLT0d95oAYd9rFaO9CCCAAAIIIIAAAggkT4Cwnzx7noxARAKE&#x2F;Yi4OBkBBBBAAAEEEEAAgUALEPYDXX467yUBwr6XqkVbEUAAAQQQQAABBBBIrgBhP7n+PB2BsAUI+2FTcSICCCCAAAIIIIAAAoEXIOwH&#x2F;iMAgFcECPteqRTtRAABBBBAAAEEEEAg+QKE&#x2F;eTXgBYgEJYAYT8sJk5CAAEEEEAAAQQQQACBDAHCPh8DBDwiQNj3SKFoJgIIIIAAAggggAACKSBA2E+BItAEBMIRIOyHo8Q5CCCAAAIIIIAAAgggIAHCPp8DBDwiQNj3SKFoJgIIIIAAAggggAACKSDgq7CfP39+K1q0aAqw0gQEIhdIS0uz3bt353ghYT9yU65AAAEEEEAAAQQQQCCoAr4K+0EtIv0OhgBhPxh1ppcIIIAAAggggAACCMRCgLAfC0XugUACBAj7CUDmEQgggAACCCCAAAII+ESAsO+TQtIN&#x2F;wsQ9v1fY3qIAAIIIIAAAggggECsBAj7sZLkPgjEWYCwH2dgbo8AAggggAACCCCAgI8ECPs+KiZd8bcAYd&#x2F;f9aV3CCCAAAIIIIAAAgjEUoCwH0tN7oVAHAUI+3HE5dYIIIAAAggggAACCPhMgLDvs4LSHf8KEPb9W1t6hgACCCCAAAIIIIBArAUI+7EW5X4IxEmAsB8nWG6LAAIIIIAAAggggIAPBQj7PiwqXfKnAGHfn3WlVwgggAACCCCAAAIIxEOAsB8PVe6JQBwECPtxQOWWCCCAAAIIIIAAAgj4VICw79PC0i3&#x2F;CRD2&#x2F;VdTeoQAAggggAACCCCAQLwECPvxkuW+CMRYgLAfY1BuhwACCCCAAAIIIICAjwUI+z4uLl3zlwBh31&#x2F;1pDcIIIAAAggggAACCMRTgLAfT13ujUAMBQj7McTkVggggAACCCCAAAII+FyAsO&#x2F;zAtM9&#x2F;wgQ9v1TS3qCAAIIIIAAAggggEC8BQj78Rbm&#x2F;gjESICwHyNIboMAAggggAACCCCAQAAECPsBKDJd9IcAYd8fdaQXCCCAAAIIIIAAAggkQoCwnwhlnoFADAQI+zFA5BYIIIAAAggggAACCAREgLAfkELTTe8LEPa9X0N6gAACCCCAAAIIIIBAogQI+4mS5jkIRClA2I8SkMsRQAABBBBAAAEEEAiQAGE&#x2F;QMWmq94WIOx7u360HgEEEEAAAQQQQACBRAoQ9hOpzbMQiEKAsB8FHpcigAACCCCAAAIIIBAwgcCH&#x2F;eOPP96aNGligsjpOHDggG3YsMG++eYb27ZtW8A+InQ3VQQI+6lSCdqBAAIIIIAAAggggEDqCwQ67BctWtTuuOMOW7lypf355585VqtAgQJWo0YN0z+feOIJS0tLS&#x2F;3K0kLfCRD2fVdSOoQAAggggAACCCCAQNwEAh32mzVrZi1atLAXXnjBNHp&#x2F;pKNUqVJ2yy232PPPP29&#x2F;&#x2F;PFH3AoSzY3r1KljTz&#x2F;9tPXq1SvX&#x2F;uTlOf3797clS5bYsGHD8nI510QpQNiPEpDLEUAAAQQQQAABBBAIkECgw37btm2tXr169uqrr+Za8uLFi9ttt91mr7zyiq1ateqI57dp08buvfde27Vrl6Wnp1uZMmWsa9eutnfv3lyfE80Jxx13nOvLqaeeesSwP2DAAHv77bdt6dKlET1OsyB++eUX+&#x2F;zzzyO6jpNjI0DYj40jd0EAAQQQQAABBBBAIAgCgQ&#x2F;7WrM&#x2F;aNCgbGtduXJla9mypQu34Yb92rVr2wcffGAaBZ80aZK7b5EiRWz37t3u38uXL2+nnHKKaQnBzJkzbdGiRe7nmmWwbt060&#x2F;WVKlWyH374wc0gUHAvVKiQjR8&#x2F;3i01KFasmJ155pk2depUd83OnTtt1KhRtm&#x2F;fPssa9suVK2ft2rWzwoUL2+TJk+3333+3pk2b2rvvvuvC&#x2F;sKFC+3LL790z2&#x2F;fvr0dc8wx9uuvv9r333&#x2F;vXlLkz5&#x2F;fPUNt+u2330wvMTSyT9hPzv8aCPvJceepCCCAAAIIIIAAAgh4USDQYV+hWyP7Cvv58uVzoVyj8ToqVqxoffv2tSlTptiIESPCDvv&#x2F;&#x2F;ve&#x2F;7aijjrJ+&#x2F;fod9nnQ&#x2F;YcOHWpz5851o+qXX3653XrrrTZu3Di75557XDBXyFeAv+KKK2zOnDk2ffp0U2jv0KGDe&#x2F;Ggf1fQX7BggY0cOdL9TC8QevfubbVq1To4sq8XBB9&#x2F;&#x2F;LG73+bNm939Tj&#x2F;9dKtataq9&#x2F;vrrbu8BhX31TyP91atXdy8ULr74YnvuuedsyJAh1rlzZ3vqqafsxRdfdE4nn3yyPfnkk4T9JP1NJ+wnCZ7HIoAAAggggAACCCDgQYFAh31N4w+N7GsU&#x2F;+qrr3Zr8gsWLGh9+vSx2bNnu5FvjXKHO7KvafQa0X&#x2F;nnXcO+zjccMMNVrNmTbvpppvc7zSaft1119nf&#x2F;&#x2F;53F&#x2F;ZLlCjhlgroxYNG4tWWwYMHu28K+O677+zCCy903wag33Xs2NGNtuuaefPmWZcuXdx1oWn8l112mevb448&#x2F;7p6llxDaiPDZZ5+1adOm2QUXXOBeGJQuXdrdu0ePHrZnzx73MkEj&#x2F;5oBoMD&#x2F;wAMP2KxZs9y9P&#x2F;roI&#x2F;vwww8J+0n6i07YTxI8j0UAAQQQQAABBBBAwIMChP2&#x2F;pvErSGnkW1PhdYTWpoc27gs37Guzv59++smt7c96aIR8&#x2F;vz5bkNAHbrnmDFjrHXr1i7sr1mzxl577TX3u9GjR9vAgQPd1&#x2F;1plF6BXAF+06ZNNnHiRLex4MaNG925M2bMsKuuusrNCAiFfY3Ia7ReLyxCh0b5NYsgc9jXkgH9TEsPMh8K+TpfoT90qI1qP9P4k&#x2F;M3nbCfHHeeigACCCCAAAIIIICAFwUI+1nW7J9zzjnuq&#x2F;VCa9lDRQ037F9&#x2F;&#x2F;fVuar2mw2c97r&#x2F;&#x2F;fre2&#x2F;sEHH3S&#x2F;OvbYY91LAU2XV5BesWKFW0sfCvuPPPKIC+JZw76Cv5YgrF271hQANbJ&#x2F;7rnnunuHwr42CNRa&#x2F;bvuuuuQZuhnWhoQGtnXkgNN5T&#x2F;ppJNsx44dh5yr53Tv3t22b9&#x2F;ufq6XD1rPT9hPzl91wn5y3HkqAggggAACCCCAAAJeFAh82I&#x2F;1bvwlS5Z0a98Vuj&#x2F;55BO3K76WBWizPW10p3B&#x2F;3nnnuZ35NXqukXq9BIgk7GtkXnsCaNS&#x2F;YcOGbg1+q1at3F4BobCvKfyajq+XAHqGNgTUcoQNGza4Nf96CaB&#x2F;6gXB2LFj7a233nIhvkCBAm4qv2Y23H333e6e9913n5vuP3z4cPfvhP3k&#x2F;FUn7CfHnacigAACCCCAAAIIIOBFgUCH&#x2F;ebNm1uTJk3spZdeyrV2ofX0moKvEfUjHdrc7+abb3Y76SvoazRcewDo0Ii81s&#x2F;r6&#x2F;j0MkDr8rVTfyRhX9P4tfZeLw20hl&#x2F;r&#x2F;pctW3bYbvx6AaARfu1HoF3&#x2F;9dV5Ok9T83W9Ngm85JJLXJDXiwedr9F9rfMfNmyY2&#x2F;n&#x2F;4Ycfdrvwa58ATevX7wn7uX5c4nICYT8urNwUAQQQQAABBBBAAAFfCgQ67GsU&#x2F;pZbbnEj8Vovn9Ohr6DTCLo219Mu9trILlnH0UcfbRMmTHBr9jVizxEcAcJ+cGpNTxFAAAEEEEAAAQQQiFYg0GFfeI0aNXJr7DXNPadDU&#x2F;H1Hfeaxr5ly5ZozaO6nrAfFZ+nLybse7p8NB4BBBBAAAEEEEAAgYQKBD7sJ1Q7Bg&#x2F;TEgFNsddX7SX7xUMMusMtIhAg7EeAxakIIIAAAggggAACCARcgLAf8A8A3feOAGHfO7WipQgggAACCCCAAAIIJFuAsJ&#x2F;sCvB8BMIUIOyHCcVpCCCAAAIIIIAAAgggYIR9PgQIeESAsO+RQtFMBBBAAAEEEEAAAQRSQICwnwJFoAkIhCNA2A9HiXMQQAABBBBAAAEEEEBAAoR9PgcIeESAsO+RQtFMBBBAAAEEEEAAAQRSQICwnwJFoAkIhCNA2A9HiXMQQAABBBBAAAEEEEBAAoR9PgcIeESAsO+RQtFMBBBAAAEEEEAAAQRSQICwnwJFoAkIhCNA2A9HiXMQQAABBBBAAAEEEEBAAoR9PgcIeESAsO+RQtFMBBBAAAEEEEAAAQRSQICwnwJFoAkIhCNA2A9HiXMQQAABBBBAAAEEEEBAAoR9PgcIeESAsO+RQtFMBBBAAAEEEEAAAQRSQICwnwJFoAkIhCNA2A9HiXMQQAABBBBAAAEEEEBAAoR9PgcIeESAsO+RQtFMBBBAAAEEEEAAAQRSQICwnwJFoAkIhCNA2A9HiXMQQAABBBBAAAEEEEBAAoR9PgcIeESAsO+RQtFMBBBAAAEEEEAAAQRSQICwnwJFoAkIhCNA2A9HiXMQQAABBBBAAAEEEEBAAoR9PgcIeESAsO+RQtFMBBBAAAEEEEAAAQRSQCDwYT9fvnxWrlw5K1So0BHLsX37dtu6dWsKlIwmBFWAsB&#x2F;UytNvBBBAAAEEEEAAAQQiFwh02FfQv+CCC6xBgwa2f&#x2F;&#x2F;+I+rp3Lffftt++eWXyJW5AoEYCBD2Y4DILRBAAAEEEEAAAQQQCIhAoMP+McccY3369LGXX37ZtmzZkmPJFfTr1KljZ555pj3yyCOmUX4OBBItQNhPtDjPQwABBBBAAAEEEEDAuwKBDvutW7d2o&#x2F;qvvPJKrhUsUaKE3XbbbfbSSy&#x2F;Z6tWrczy&#x2F;f&#x2F;&#x2F;+9tRTTx38&#x2F;bXXXmuzZ8+2qVOnup&#x2F;Vrl3bTj&#x2F;9dHfOgQMHcn1u1hOuv&#x2F;56e&#x2F;PNN23Hjh123HHHuZkG2d3nzjvvtFKlSrkZC3&#x2F;88YcNHz7cli1bFvHzuCB1BAj7qVMLWoIAAggggAACCCCAQKoLBDrsn3LKKVavXj0bNGiQafS+TZs29vPPP9v69evdf9evX982btzown3x4sVd2NeLgVWrVuVY1+nTp1vHjh3d6H&#x2F;hwoVt2rRpNnPmTLviiivcNZdffrm1bdvWLrvssjx9Nt577z37xz&#x2F;+Yenp6TZ48GC75JJLsl2C8MMPP9jzzz9vO3futOOPP9569uxpTz75pH388cd5ei4XJV+AsJ&#x2F;8GtACBBBAAAEEEEAAAQS8IhDosK&#x2F;QrbD&#x2F;6quvunpdeeWVVrVqVXv66aetUqVKLki&#x2F;88477gVAuGH&#x2F;rbfesk8++cRGjBjhRvBPO+00a9SokQv4OhTAv&#x2F;nmGxsyZIg1b97c&#x2F;ud&#x2F;&#x2F;sdtEKj9AF588UVLS0tz7dAzL7zwQmvVqpV9++23dtddd9mePXvs4Ycfdv+u4H722Wfbrl27bN++fe4ZegEQOhT2u3XrZhs2bHA&#x2F;qly5so0aNcpOPvlk94yyZcu6JQma3aAXFHfccYetW7fOK5&#x2F;bQLaTsB&#x2F;IstNpBBBAAAEEEEAAAQTyJEDYzxT28+fPbxdffLHVqFHDChYs6EbOFbo1TT7csN+vXz+rWbOm3Xjjjfb+++&#x2F;bRx99ZOeff75pOv&#x2F;mzZvtu+++cy8AihQpYl999ZV7nmYBaNr98uXLXYhX2Nd9zj33XPcNAAr4I0eOdKPydevWdVP3taxg9OjR1qtXLzeyn3XPgaxhX5+O1157zT7&#x2F;&#x2F;HN3L03r1wuGCRMmuOUA99xzj3Xt2jVPSwvy9MnjoogFCPsRk3EBAggggAACCCCAAAKBFSDsZwr7+hS0aNHCzjrrLLcm&#x2F;plnnjn4dXvhhv1mzZrZgAED3Ki+gv0ZZ5xh7dq1c4H6gw8+sCeeeMJt9HfLLbe4D93jjz&#x2F;u&#x2F;lm0aFEbO3asW0qgsH&#x2F;ssce6FwA6NEKvWQC6b+Zj0qRJ1r59+xyn8Wce2dd1AwcOdC8v9NJALxrUrtB6&#x2F;2HDhtl9991ns2bNCuxfhlTvOGE&#x2F;1StE+xBAAAEEEEAAAQQQSB0Bwn6msK9Arqnzmmav0fnq1avbs88+60bkww37CmQK4Vojr&#x2F;X9Gp3XaLym9WuavkbkFdoVvH&#x2F;66SfTGvzQof9u2LChC&#x2F;uaZRBaXtChQwcX6u+&#x2F;&#x2F;&#x2F;6owr5mGrzxxhu2cOFCt9GgXkSEDs1i0Ei&#x2F;ZgtwpKYAYT8160KrEEAAAQQQQAABBBBIRYFAh&#x2F;3MG&#x2F;QpXGtk+4svvnC75xcoUMBNvZ8xY4bbST&#x2F;csK8iP&#x2F;fcc25jv&#x2F;nz57tRdG3Up6n3K1eutAceeMCtndfsAY3ih0b4q1WrZq+&#x2F;&#x2F;rp16dIl7LCvmQPaDFBr9rMeWafx6yWCwrzW7Gs0X&#x2F;3SfgC6VpsRjhs3zj13yZIlqfg5pU0ZAoR9PgYIIIAAAggggAACCCAQrkCgw742zdNO9dqNX4fW6WvzutDUdr0A0KGN7yIJ+71793bT9bt3725Lly5199C6e80aaNy4sXsRoJcJGu1XKNdX4vXp08etm9fIergj+xqpX7Nmjc2ZM8ctEVDbQ4fuq3Cv9fxNmjRxf2666SYX6nXopUOdOnXsyy+&#x2F;dLMQ9I0D+rYBjtQVIOynbm1oGQIIIIAAAggggAACqSYQ6LCvnfg1lV3BPLvR8czFqlixovXt29dtoBfa4T6nYmon&#x2F;3POOceN1O&#x2F;evdudpt3wtQHem2++efAy7Yivn5UqVcqNtOsr+vSiQS8ENNoeWj+vDQO1pECb6WU+9M0BeqGgr9fTNPzMu&#x2F;Hrq&#x2F;70gkIvALTLvq7NvNu+XmR07tzZBf7ff&#x2F;&#x2F;dxowZc7CtqfYhpT3&#x2F;J0DY55OAAAIIIIAAAggggAAC4QoEOuxrdF0BXgFbI9s5HTpP6&#x2F;k1FV8j6KGR&#x2F;3CROQ+BWAgQ9mOhyD0QQAABBBBAAAEEEAiGQKDDvkqsEXSNbmv0PKdDo+Nax79p06ZgfCroZUoKEPZTsiw0CgEEEEAAAQQQQACBlBQIfNhPyarQKASyESDs87FAAAEEEEAAAQQQQACBcAUI++FKcR4CSRYg7Ce5ADweAQQQQAABBBBAAAEPCRD2PVQsmhpsAcJ+sOtP7xFAAAEEEEAAAQQQiESAsB+JFucikEQBwn4S8Xk0AggggAACCCCAAAIeEyDse6xgNDe4AoT94NaeniOAAAIIIIAAAgggEKkAYT9SMc5HIEkChP0kwfNYBBBAAAEEEEAAAQQ8KEDY92DRaHIwBQj7waw7vUYAAQQQQAABBBBAIC8ChP28qHENAkkQIOwnAZ1HIoAAAggggAACCCDgUQHCvkcLR7ODJ0DYD17N6TECCCCAAAIIIIAAAnkVIOznVY7rEEiwAGE&#x2F;weA8DgEEEEAAAQQQQAABDwsQ9j1cPJoeLAHCfrDqTW8RQAABBBBAAAEEEIhGgLAfjR7XIpBAAcJ+ArF5FAIIIIAAAggggAACHhcg7Hu8gDQ&#x2F;OAKE&#x2F;eDUmp4igAACCCCAAAIIIBCtAGE&#x2F;WkGuRyBBAoT9BEHzGAQQQAABBBBAAAEEfCBA2PdBEelCMAQI+8GoM71EAAEEEEAAAQQQQCAWAoT9WChyDwQSIEDYTwAyj0AAAQQQQAABBBBAwCcChH2fFJJu+F+AsO&#x2F;&#x2F;GtNDBBBAAAEEEEAAAQRiJUDYj5Uk90EgzgKE&#x2F;TgDc3sEEEAAAQQQQAABBHwkQNjPVMz8+fNbvnz5Dilvenq6HThwwEclpyteFSDse7VytBsBBBBAAAEEEEAAgcQLEPb&#x2F;Mj&#x2F;++OPtjDPOMAX+zMe2bdvsrbfesu3btye+OjwRgUwChH0+DggggAACCCCAAAIIIBCuQGDDvkbwy5Qpc9Dp73&#x2F;&#x2F;u9WoUcO+++472717t&#x2F;t5pUqVrEGDBvbNN9&#x2F;YzJkz3c927drl&#x2F;nAgkGgBwn6ixXkeAggggAACCCCAAALeFQhs2C9durT169fPihQpYvv27bP9+&#x2F;cfsYqFChVy0&#x2F;kXLFhggwcPENQ0hAAAH&#x2F;lJREFUzvHcNm3aHPa7rVu32ty5c6P6lLzzzjv25Zdf2meffRbVfbjYuwKEfe&#x2F;WjpYjgAACCCCAAAIIIJBogcCGfUFryv7NN99sY8eOtR9&#x2F;&#x2F;PGI9hdeeKFt2bLFRowYccTzHn74Yff78847z0aPHm2bN2+25cuX28svvxxVbQn7UfH54mLCvi&#x2F;KSCcQQAABBBBAAAEEEEiIQKDDvqbyK+x&#x2F;&#x2F;fXXMQv7oaotXLjQzjrrLPv555&#x2F;dj5544gl76qmn7JJLLrESJUrY3Xff7V4IdOrUyS0beOyxx2zFihVug8Czzz7bunfv7vYJ+Pzzz23ixImmsK+XEtWqVbOaNWvaF198YcOHD0&#x2F;Ih4SHpIYAYT816kArEEAAAQQQQAABBBDwggBh&#x2F;6+R&#x2F;Tlz5ljhwoVNa&#x2F;ffffdd0zR&#x2F;hW79u6b5hzuyn1PYHz9+vG3atMmN9i9atMjGjRtn119&#x2F;vem5devWtb59+1qrVq2sXbt2dsMNN9hDDz1k5cuXd&#x2F;sDjBkzxoV97SHw4osv2s6dO93v9aJiwoQJXvic0cYYCBD2Y4DILRBAAAEEEEAAAQQQCIhA4MP+TTfd5Eb2Fbo14n7XXXfZnXfe6YK11vQPGDDABe5YhP1BgwbZ+++&#x2F;f9hHSy8Wvv&#x2F;+e+vcubOdcMIJdvvtt9tVV13lRvrT0tLc+Qr706dPt+eff979t2YC6KXBa6+9FpCPKt0k7PMZQAABBBBAAAEEEEAAgXAFCPsZYV+77WvNfsmSJV3Qj1fY10h8aFd&#x2F;TdcfOHCgC&#x2F;hFixY1FUKb+61cudLatm1rL7zwgq1evdouv&#x2F;xyW7VqlQv7Q4cOtU8&#x2F;&#x2F;dTV9j&#x2F;&#x2F;+Y&#x2F;7+auvvhpurTnP4wKEfY8XkOYjgAACCCCAAAIIIJBAAcJ+prAf75H9UNhX0Nf6e+3qP2zYMPeNAJpdoOD&#x2F;+++&#x2F;u&#x2F;Jr93+t6e&#x2F;du7dbWpB1gz7CfgL&#x2F;lqTIowj7KVIImoEAAggggAACCCCAgAcEAh&#x2F;2+&#x2F;fv70b2NY1fu&#x2F;OfdNJJNmvWLDfS3rBhQ&#x2F;vhhx8sPT09JtP4M4d9rdnXFPzvvvvOrdPXcgH9U7MLKleubOvWrXMj&#x2F;M2aNbNLL72UsO+Bv0zxbiJhP97C3B8BBBBAAAEEEEAAAf8IBD7sa12+1svrz5GOK664wpYuXWraaC+cQ1Pude9ff&#x2F;3Vnf7mm2+6dfYLFixw&#x2F;611+vrvcuXK2RtvvGEXX3yx3XjjjQf3DdCeATNmzLDHH3&#x2F;cfeWfNuTTCwLNCNBx3XXXuRcCn3zySTjN4RwfCBD2fVBEuoAAAggggAACCCCAQIIEAh32ZdytWzdr2bKlTZkyxfbs2ZMtu0bbNcKu4L1169YElYbHIHCoAGGfTwQCCCCAAAIIIIAAAgiEKxD4sK+p+02aNLHatWubwlR2x4YNG9w0f22Ix4FAsgQI+8mS57kIIIAAAggggAACCHhPIPBh33slo8VBFSDsB7Xy9BsBBBBAAAEEEEAAgcgFCPuRm3EFAkkRIOwnhZ2HIoAAAggggAACCCDgSQHCvifLRqODKEDYD2LV6TMCCCCAAAIIIIAAAnkTIOznzY2rEEi4AGE&#x2F;4eQ8EAEEEEAAAQQQQAABzwoQ9j1bOhoeNAHCftAqTn8RQAABBBBAAAEEEMi7AGE&#x2F;73ZciUBCBQj7CeXmYQgggAACCCCAAAIIeFqAsO&#x2F;p8tH4IAkQ9oNUbfqKAAIIIIAAAggggEB0AoT96Py4GoGECRD2E0bNgxBAAAEEEEAAAQQQ8LwAYd&#x2F;zJaQDQREg7Ael0vQTAQQQQAABBBBAAIHoBQj70RtyBwQSIkDYTwgzD0EAAQQQQAABBBBAwBcChH1flJFOBEGAsB+EKtNHBBBAAAEEEEAAAQRiI0DYj40jd0Eg7gKE&#x2F;bgT8wAEEEAAAQQQQAABBHwjQNj3TSnpiN8FCPt+rzD9QwABBBBAAAEEEEAgdgKE&#x2F;dhZcicE4ipA2I8rLzdHAAEEEEAAAQQQQMBXAoR9X5WTzvhZgLDv5+rSNwQQQAABBBBAAAEEYitA2I+tJ3dDIG4ChP240XJjBBBAAAEEEEAAAQR8J0DY911J6ZBfBQj7fq0s&#x2F;UIAAQQQQAABBBBAIPYChP3Ym3JHBOIiQNiPCys3RQABBBBAAAEEEEDAlwKEfV+WlU75UYCw78eq0icEEEAAAQQQQAABBOIjQNiPjyt3RSDmAoT9mJNyQwQQQAABBBBAAAEEfCtA2PdtaemY3wQI+36rKP1BAAEEEEAAAQQQQCB+AoT9+NlyZwRiKkDYjyknN0MAAQQQQAABBBBAwNcChH1fl5fO+UmAsO+natIXBBBAAAEEEEAAAQTiK0DYj68vd0cgZgKE&#x2F;ZhRciMEEEAAAQQQQAABBHwvQNj3fYnpoF8ECPt+qST9QAABBBBAAAEEEEAg&#x2F;gKE&#x2F;fgb8wQEYiJA2I8JIzdBAAEEEEAAAQQQQCAQAoT9QJSZTvpBgLDvhyrSBwQQQAABBBBAAAEEEiNA2E+MM09BIGoBwn7UhNwAAQQQQAABBBBAAIHACBD2A1NqOup1AcK+1ytI+xFAAAEEEEAAAQQQSJxAzMN+8eLFrU6dOla6dGlTONm2bZstX77c1q5dawcOHIiqZ4ULF7YtW7ZEdQ8uRsCrAoR9r1aOdiOAAAIIIIAAAgggkHiBmIX9smXLWsOGDa1SpUq2f&#x2F;9+F8r1z2LFilnRokVd6F+wYIGtW7fOGjRoYDNnzrR9+&#x2F;ZF1GPCfkRcnOwzAcK+zwpKdxBAAAEEEEAAAQQQiKNATMK+Av4pp5xiu3fvtnnz5rmR&#x2F;Myj+GXKlLGTTjrJKlasaBs2bLBy5crZ8OHDbfv27RF1jbAfERcn+0yAsO+zgtIdBBBAAAEEEEAAAQTiKBB12C9ZsqT16NHDBfdRo0ZZWlpats0tUaKEeyFQqlQp93vCfhyryq19KUDY92VZ6RQCCCCAAAIIIIAAAnERiDrsd+jQwY3Y5xbeNXW&#x2F;fv36rhPp6en2xRdf2N69eyPqFCP7EXFxss8ECPs+KyjdQQABBBBAAAEEEEAgjgJRhX1twtetWze3&#x2F;n7x4sVxbOb&#x2F;3ZqwH3diHpDCAoT9FC4OTUMAAQQQQAABBBBAIMUEogr72nW&#x2F;UaNG9tlnn0W90344LoT9cJQ4x68ChH2&#x2F;VpZ+IYAAAggggAACCCAQe4Gowr6m5tesWdOGDRsWUdjXS4IKFSrY5MmTI+oRYT8iLk72mQBh32cFpTsIIIAAAggggAACCMRRIKqwr7X6Rx99tP34448RNbFjx46m4DJmzJiIriPsR8TFyT4TIOz7rKB0BwEEEEAAAQQQQACBOApEFfbz0q78+fNbz549bePGjYzs5wWQawIrQNgPbOnpOAIIIIAAAggggAACEQtEHfYLFCjgNs7Toa&#x2F;dy22H&#x2F;WLFiln37t1t1qxZtmzZsogazMh+RFyc7DMBwr7PCkp3EEAAAQQQQAABBBCIo0DUYb9169Z2zDHHuCZu3rw516n5Xbp0sXLlytmQIUNsz549EXWNsB8RFyf7TICw77OC0h0EEEAAAQQQQAABBOIoEHXY1&#x2F;p7bbZ34MABmzZtmv322285Nrdx48ZWt25dmzRpkq1atSribhH2IybjAh8JEPZ9VEy6ggACCCCAAAIIIIBAnAViEvbLlCnjmrl7926bN2+e&#x2F;f7775aenu5+pjX6+n29evWscuXKtmDBAps&#x2F;f35Eu&#x2F;eHDAj7cf40cPuUFiDsp3R5aBwCCCCAAAIIIIAAAiklEHXYr1Wrlmnd&#x2F;pYtW6xZs2amNfk6NKW&#x2F;YMGCVrx4ccuXL5&#x2F;t2rXL5syZc8SR&#x2F;9xkCPu5CfF7PwsQ9v1cXfqGAAIIIIAAAggggEBsBaIO+5mbo1F8BfIaNWpY2bJl3dfrbd261W3Et337dtu&#x2F;f39UrSfsR8XHxR4XIOx7vIA0HwEEEEAAAQQQQACBBArENOzHu92E&#x2F;XgLc&#x2F;9UFiDsp3J1aBsCCCCAAAIIIIAAAqklQNhPrXrQGgRyFCDs8+FAAAEEEEAAAQQQQACBcAUI++FKcR4CSRYg7Ce5ADweAQQQQAABBBBAAAEPCRD2PVQsmhpsAcJ+sOtP7xFAAAEEEEAAAQQQiESAsB+JFucikEQBwn4S8Xk0AggggAACCCCAAAIeEyDse6xgNDe4AoT94NaeniOAAAIIIIAAAgggEKkAYT9SMc5HIEkChP0kwfNYBBBAAAEEEEAAAQQ8KEDY92DRaHIwBQj7waw7vUYAAQQQQAABBBBAIC8ChP28qHENAkkQIOwnAZ1HIoAAAggggAACCCDgUQHCvkcLR7ODJ0DYD17N6TECCCCAAAIIIIAAAnkVIOznVY7rEEiwAGE&#x2F;weA8DgEEEEAAAQQQQAABDwsQ9j1cPJoeLAHCfrDqTW8RQAABBBBAAAEEEIhGgLAfjR7XIpBAAcJ+ArF5FAIIIIAAAggggAACHhcg7Hu8gDQ&#x2F;OAKE&#x2F;eDUmp4igAACCCCAAAIIIBCtAGE&#x2F;WkGuRyBBAoT9BEHzGAQQQAABBBBAAAEEfCBA2PdBEelCMAQI+8GoM71EAAEEEEAAAQQQQCAWAoT9WChyDwQSIEDYTwAyj0AAAQQQQAABBBBAwCcChH2fFJJu+F+AsO&#x2F;&#x2F;GtNDBBBAAAEEEEAAAQRiJUDYj5Uk90EgzgKE&#x2F;TgDc3sEEEAAAQQQQAABBHwkQNj3UTHpir8FCPv+ri+9QwABBBBAAAEEEEAglgJxCfvFihWzEiVKWIECBWznzp22efNmO3DgQNTtLly4sG3ZsiXq+3ADBLwoQNj3YtVoMwIIIIAAAggggAACyRGIadjXzU4++WSrWrXqIb3ZtWuXTZ482davXx9VLwn7UfFxsccFCPseLyDNRwABBBBAAAEEEEAggQIxC&#x2F;u6Ubdu3UyBPLsjPT3dZs+ebYsXL85z9wj7eabjQh8IEPZ9UES6gAACCCCAAAIIIIBAggRiFva7du1qZcqUOWKz9+3bZyNHjjSN9OflIOznRY1r&#x2F;CJA2PdLJekHAggggAACCCCAAALxF4hJ2C9fvrx17tw5rNauXr3aJk6cGNa5WU8i7OeJjYt8IkDY90kh6QYCCCCAAAIIIIAAAgkQiEnYb9u2rVWpUiWs5u7evduGDx9uaWlpYZ2f+STCfsRkXOAjAcK+j4pJVxBAAAEEEEAAAQQQiLNATMJ+z5493e774Ryayj9s2DDbu3dvOKcfcg5hP2IyLvCRAGHfR8WkKwgggAACCCCAAAIIxFkgJmG&#x2F;d+&#x2F;epq&#x2F;bC+dQ2NfI&#x2F;p49e8I5nbAfsRIX+FWAsO&#x2F;XytIvBBBAAAEEEEAAAQRiL0DYj70pd0QgLgKE&#x2F;biwclMEEEAAAQQQQAABBHwpQNj3ZVnplB8FCPt+rCp9QgABBBBAAAEEEEAgPgIxCftnnXWWaT19OIc25tOafabxh6PFOQj8vwBhn08DAggggAACCCCAAAIIhCsQVdjXxbVq1bIGDRqE+zx33vLly23RokW2cePGiK5jg76IuDjZZwKEfZ8VlO4ggAACCCCAAAIIIBBHgajCfpcuXaxcuXJ5bt6IESNs27ZtYV9P2A+bihN9KEDY92FR6RICCCCAAAIIIIAAAnESiCrsV61a1WrWrJmnpm3ZssXmzJkT0bWE&#x2F;Yi4ONlnAoR9nxWU7iCAAAIIIIAAAgggEEeBqMJ+Tu2qVq2aFSxY0P16&#x2F;&#x2F;79tmLFCktPT4+6G4T9qAm5gYcFCPseLh5NRwABBBBAAAEEEEAgwQIxD&#x2F;v58+e3Hj16WPHixV1XtCHf0KFDbe&#x2F;evVF3jbAfNSE38LAAYd&#x2F;DxaPpCCCAAAIIIIAAAggkWCDmYV&#x2F;tL1SokLVp08bt0D9v3jxbuXJlTLpF2I8JIzfxqABh36OFo9kIIIAAAggggAACCCRBIC5hP179IOzHS5b7ekGAsO+FKtFGBBBAAAEEEEAAAQRSQ4Cwnxp1oBUI5CpA2M+ViBMQQAABBBBAAAEEEEDgLwHCPh8FBDwiQNj3SKFoJgIIIIAAAggggAACKSBA2E+BItAEBMIRIOyHo8Q5CCCAAAIIIIAAAgggIAHCPp8DBDwiQNj3SKFoJgIIIIAAAggggAACKSBA2E+BItAEBMIRIOyHo8Q5CCCAAAIIIIAAAgggIAHCPp8DBDwiQNj3SKFoJgIIIIAAAggggAACKSBA2E+BItAEBMIRIOyHo8Q5CCCAAAIIIIAAAgggIAHCPp8DBDwiQNj3SKFoJgIIIIAAAggggAACKSBA2E+BItAEBMIRIOyHo8Q5CCCAAAIIIIAAAgggIAHCPp8DBDwiQNj3SKFoJgIIIIAAAggggAACKSBA2E+BItAEBMIRIOyHo8Q5CCCAAAIIIIAAAgggIAHCPp8DBDwiQNj3SKFoJgIIIIAAAggggAACKSBA2E+BItAEBMIRIOyHo8Q5CCCAAAIIIIAAAgggIAHCPp8DBDwiQNj3SKFoJgIIIIAAAggggAACKSBA2E+BItAEBMIRIOyHo8Q5CCCAAAIIIIAAAgggIAHCPp8DBDwiQNj3SKFoJgIIIIAAAggggAACKSBA2E+BItAEBMIRIOyHo8Q5CCCAAAIIIIAAAgggIAHCPp8DBDwiQNj3SKFoJgIIIIAAAggggAACKSBA2E+BItAEBMIRIOyHo8Q5CCCAAAIIIIAAAgggIIGYh&#x2F;38+fNbtWrVrGzZslagQAHbvHmzLV++3Pbu3Ru1eOHChW3Lli1R34cbIOBFAcK+F6tGmxFAAAEEEEAAAQQQSI5AzMJ+kSJFrH79+la7dm3Lly&#x2F;fYb1Zu3atzZ8&#x2F;3&#x2F;78888895Swn2c6LvSBAGHfB0WkCwgggAACCCCAAAIIJEggJmG&#x2F;VKlS1rFjR1MYP9Jx4MABmz17ti1evNj075EehP1IxTjfTwKEfT9Vk74ggAACCCCAAAIIIBBfgajDfvHixa1Xr16HtTIU5rMb5Z8yZYqtWLEi4p4R9iMm4wIfCRD2fVRMuoIAAggggAACCCCAQJwFogr7CvLdu3e3kiVLHtJMjdz&#x2F;&#x2F;PPPbvS+YsWK1qxZM9Na&#x2F;tChn48dO9Y2btwYUfcI+xFxcbLPBAj7Piso3UEAAQQQQAABBBBAII4CUYX96tWrW6tWrQ5p3vbt223EiBFWpUoVK1SokC1btswaN25sxx133CHn6efTp0+PqGuE&#x2F;Yi4ONlnAoR9nxWU7iCAAAIIIIAAAgggEEeBqMJ+y5YtrUaNGoc0b82aNTZhwgQ3tV9T&#x2F;IcNG2bavK9Lly6HnLdv3z4bMmSIpaenh909wn7YVJzoQwHCvg+LSpcQQAABBBBAAAEEEIiTQFRhv2vXrlamTJlDmpaWlmZbt251X723bds2N8qvHfqbNm16WBdGjRrlvpov3IOwH64U5&#x2F;lRgLDvx6rSJwQQQAABBBBAAAEE4iMQVdjv2bOnlShRItuW7dy508aMGeNG7nVedjv1f&#x2F;vtt7Zu3bqwe0bYD5uKE30oQNj3YVHpEgIIIIAAAggggAACcRKIKuxnN7IfaueCBQtMfzp16nTY6H&#x2F;onNGjR9umTZvC7hphP2wqTvShAGHfh0WlSwgggAACCCCAAAIIxEkgqrCvzfm0SV92x59&#x2F;&#x2F;mlr1661Bg0aZPv7&#x2F;fv322effcaa&#x2F;TgVltv6T4Cw77+a0iMEEEAAAQQQQAABBOIlEFXYr1mzprVo0SLbtunr93bt2mUNGzbM9vfLly+3qVOnRtQvRvYj4uJknwkQ9n1WULqDAAIIIIAAAggggEAcBaIK+wof3bp1c7vuZz3GjRtnO3bscLvyZ3d8&#x2F;fXXtn79+oi6RtiPiIuTfSZA2PdZQekOAggggAACCCCAAAJxFIgq7KtdFSpUsA4dOli+fPkOaaa+Wk+b82XdmO&#x2F;AgQO2ZMkSmzlzZsTdIuxHTMYFPhIg7PuomHQFAQQQQAABBBBAAIE4C0Qd9tW+KlWqWOvWra1AgQJHbK6C&#x2F;urVq23SpEmmf4&#x2F;0IOxHKsb5fhIg7PupmvQFAQQQQAABBBBAAIH4CsQk7KuJ+gq+9u3bZzulX7&#x2F;XKL9G85ctW5anoK97EPbj+2Hg7qktQNhP7frQOgQQQAABBBBAAAEEUkkgZmFfncqfP7+VLl3aTe0vVqyYFSxY0K3bX7dunW3cuNE0tT+ag7AfjR7Xel2AsO&#x2F;1CtJ+BBBAAAEEEEAAAQQSJxDTsB&#x2F;vZhcpUsS2b98e78dwfwRSUkDLZPbs2ZOSbaNRCCCAAAIIIIAAAgggkFoCngr7amy0swNSi5&#x2F;WIBCZAC+7IvPibAQQQAABBBBAAAEEgipA2A9q5em3JwUI+54sG41GAAEEEEAAAQQQQCDhAoT9hJPzQATyLkDYz7sdVyKAAAIIIIAAAgggECQBwn6Qqk1fPS9A2Pd8CekAAggggAACCCCAAAIJESDsJ4SZhyAQGwHCfmwcuQsCCCCAAAIIIIAAAn4XIOxnU2F9hWB6errfa0&#x2F;&#x2F;PChA2Pdg0WgyAggggAACCCCAAAJJECDsZ0EvX768lSxZ0jZt2uT+cCCQSgKE&#x2F;VSqBm1BAAEEEEAAAQQQQCB1BQIf9vPly2cHDhw4WCGF&#x2F;RIlStj69ett27ZtB3+e9bzULSktS1WBggULWlpa2iGft0jbStiPVIzzEUAAAQQQQAABBBAIpkCgw75C&#x2F;VFHHWWrVq2yPXv2uE9AsWLFrGLFivbbb78dnMqv8&#x2F;QSYOXKlbZv375cPymFCxe2Xr162dChQw+e36BBA1u7dq39+eefuV4f7QnVqlUzLUVQH3I7InmJoRkP3bp1c2FVofPHH3+0NWvW5PaIsH9fqFAhq127ti1YsCDsa7x0osK+PkfRmBH2vVRx2ooAAggggAACCCCAQPIEAh32y5UrZ6VKlbI&#x2F;&#x2F;vjDduzY4apQqVIlK1q06CHT+MuUKWP6o5C2a9euXKvllbBfoEABO+2002zMmDG2f&#x2F;&#x2F;+XPulsN++fXsbPXq0KZifcsopNnbs2LCuzfXmGSfoxYPsdu&#x2F;eHc7pnjxHbqVLl7Z169blqf2E&#x2F;TyxcRECCCCAAAIIIIAAAoETCHTYV7isXLmyGwVX+NLovkbF&#x2F;+u&#x2F;&#x2F;sv27t3rRvI10q&#x2F;R2J07d4Y9Kn+ksL9x40br0aOHrV692j1Ho73Tpk1zMwDq1avnnqUXCvqdnq&#x2F;zO3Xq5F40aET9p59+siZNmrjzixcv7kbXt2zZYnXr1nUvKtROhXi9wNDIfp06dUwvNdRX3WvRokUHP+TVq1e3pk2b2q+&#x2F;&#x2F;ur+6P4nnXSSu4faNX&#x2F;+fNu8efPB8xX227VrZ8OHD3c&#x2F;079PmTLFdJ+yZcu652rmgtpz&#x2F;PHHO0&#x2F;1Y8aMGW5pROPGjd399DIlFOjVLj1L9ylSpIhrr&#x2F;rYtm1bmzRpkmtThQoV7IQTTrDx48dbx44d3RILfXB1Tz1P16tts2bNOqS9qfq3Wf1U6N+6dWvETSTsR0zGBQgggAACCCCAAAIIBFIg0GFfFQ+N2mv3fQVHTeHXof9WOFb41qFwHu6Ic25hv3fv3m6Kv55x3HHHueA3d+5c69y5s3399dfueaeeeqotWbLEtUFT50eOHHnY8zXlXcFZ1+oFgkbo9RKgRYsWLuyrPxqJHzVqlHuWgvK333578IOudnbt2tVGjBjhRufbtGljM2fOdM9Rv7X0YNy4cYeEfbXrhx9+cL&#x2F;XS4QJEyZYrVq17Oijj3bhXEeHDh3cSwhtcNisWTP3okIvEDQTQC8KFOBlMGzYMPfvrVq1ci8W1Pbcwr5efOhlgPqmfspn8eLFLvirHXPmzEnpv8h6IaKXF3q5FM5siqydIeyndHlpHAIIIIAAAggggAACKSMQ+LCvwFulSpUjFkRBOZz176GbKLyHAn1ojX9ozX7m8K6gq5B87LHH2vfff+9G2fVPHfXr13cj5DpfLwEUktUOjWJrhFxhW89Zvny5C7gK9aFgHlqzr4Ctn4e+RlAzGPSSIbQ&#x2F;QdawryD9zTffuOcrlHbp0sW9KAgdGj1X2NcovDYv1OwH9UHt12i1AruO7t27u5cQOjRyr&#x2F;Zt2LDB9U8vJHRkflZodoHaG07Ynzx5snshoVkICs16EaMPskb&#x2F;9bIiVQ&#x2F;5q95qb+ZNISNpL2E&#x2F;Ei3ORQABBBBAAAEEEEAguAKBD&#x2F;sqfY0aNdxU&#x2F;pwOBUsFtHAPBdzTTz&#x2F;djaIrFOveCsAa+VZYyzyyr+n3Ct0anc8cgDWNXVPrs4Z9BX21RVPZFbK1zECj6Lq&#x2F;grR2ez&#x2F;55JPddTpHU+21rj4ULvX70KGXBbpOI&#x2F;v6eevWrW327NluGUFOI&#x2F;uZp&#x2F;GH7pM17IdG9kPfZqCXDVqnruUHaks4YV9tmTp1qmu3lgnUrFnTTeOXkRz1wsJrYV91lnNeRvRD1oT9cP8Wch4CCCCAAAIIIIAAAsEWIOxn1F&#x2F;r9jUyndOhtdUKzpEcWh7QsGFDNwKtdesKvgr0Cv4K+&#x2F;oGAIVgjYBrNF8zAE488US39lxhW+FY09Ozhn2N2mttvtqkqesKjwroWu+vafXaaDC0Pj+0Zl&#x2F;BXaPwCsjz5s072A2dpyn0+t3SpUtdsG7UqJF7IaF2aVd8jciHjqxr9nMK+3qe1uyr77rnL7&#x2F;84mYkRBL2NQKulzCa3aB+6oPq9bAfyecnp3MJ+7FQ5B4IIIAAAggggAACCPhfgLCfUWOF8SON7GskNprR2MwfI02P1zr5r7766ohTuRWMNYIfzde0+f&#x2F;jG7weEvaDV3N6jAACCCCAAAIIIIBAXgQI+3lRi+KaI4V9rTnXpnY6p3nz5tluyhfFo7nUBwKEfR8UkS4ggAACCCCAAAIIIJAAAcJ+ApAzP0JT57Xj&#x2F;9q1aw97cqlSpdwafB36ijptWMeBQGYBwj6fBwQQQAABBBBAAAEEEAhHgLAfjhLnIJAiAoT9FCkEzUAAAQQQQAABBBBAIMUFCPspXiCahwAj+3wGEEAAAQQQQAABBBBAIFIBwn6kYpyPQBIFGNlPIj6PRgABBBBAAAEEEEDAQwKEfQ8Vi6YiQNjnM4AAAggggAACCCCAAALhCGQN+&#x2F;8L30iTQ3xzVaoAAAAASUVORK5CYII=&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I use the Today view for anything that will realistically get done today. This includes both tasks, and anything I&#x27;ve captured through the day. The goal is to make the Today view empty at the end of each day.&lt;&#x2F;p&gt;
&lt;p&gt;Projects are never assigned a date, to prevent them from showing up in the Today view. They exist separately, and I look at the WIP tag to see what I need to be working on. I also track what needs to be done for a project by modifying the description of the entry in TickTick.&lt;&#x2F;p&gt;
&lt;p&gt;I also have a &quot;Dates&quot; list. This is mostly because (free tier) TickTick limits lists to having 100 items, so I made a separate list with birthdays, anniversaries, etc to avoid using up the quota for my main list.&lt;&#x2F;p&gt;
&lt;p&gt;I’ve also tagged a few other types of tasks - wishlist is just a list of things I want to eventually buy (so I never forget to purchase something I needed at the store). Maintenance is anything that I do to maintain my lifestyle - things like dishes, laundry, even getting a haircut. I recommend not going overboard to keep things simple - when I was in college I had a single tag per class I was taking in a semester.&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s it! I’m not the most prolific or productive person by any means but this simple system has been instrumental in making sure I never forget something I need to do, and reducing my urge to procrastinate.&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Android gaming on a budget</title>
		<published>2022-01-02T00:00:00+00:00</published>
		<updated>2022-01-02T00:00:00+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/1kjmljnzpjyqs-hzo8crsgkstkwdflcdteo6yvhsfpsk/"/>
		<id>/posts/1kjmljnzpjyqs-hzo8crsgkstkwdflcdteo6yvhsfpsk/</id>
    
		<content type="html" xml:base="/posts/1kjmljnzpjyqs-hzo8crsgkstkwdflcdteo6yvhsfpsk/">&lt;p&gt;I&#x27;ve never really been much of a PC gamer - growing up, I mostly played
on various Nintendo consoles. I recall trying to build a PC back in
2014, and giving up due to how expensive it was (I was still a student
at the time). Somewhat ironically, the build that I specced  out at the
time would cost about the same today, due to the GPU market being what
it is. Phones at the time weren&#x27;t really powerful enough to do nearly as
much as they can today - I recall playing a few Gameboy games on an
emulator for my Nexus 5, along with Angry Birds.&lt;&#x2F;p&gt;
&lt;p&gt;Recently, I thought I would try playing &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.google.com&#x2F;url?q=https:&#x2F;&#x2F;genshin.mihoyo.com&#x2F;en&#x2F;&amp;amp;sa=D&amp;amp;source=editors&amp;amp;ust=1641167502445000&amp;amp;usg=AOvVaw3Y5DpumKnQ-RIf5sReIdyG&quot;&gt;Genshin
Impact&lt;&#x2F;a&gt;
. I tried running it on the fastest hardware I currently own (a
refurbished gaming laptop from 2015) but I was unable to get over 12 or
so FPS even on the lowest settings. That machine has an i7 4720HQ, 16GB
of DDR3 ram, and an Nvidia 860m. I figured I would try and run it on my
current phone (Redmi Note 5), as Genshin is also on Android.
Unfortunately, my phone isn&#x27;t supported, and even if it were I highly
doubt it would get anything close to playable on a four year old budget
phone.&lt;&#x2F;p&gt;
&lt;p&gt;I considered buying a console as well - the market for a Switch OLED or
a PS5 however seems to be dominated by scalpers, so I figured that
wouldn&#x27;t be an option. Trying to get into gaming during a pandemic after
chip shortages have become common isn&#x27;t easy.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve also been getting more and more interested in emulation of the
Nintendo consoles I&#x27;ve owned - specifically 3DS, DS, and the Wii. To my
surprise, on Youtube folks were able to run Wii games just as fast as
the original, on Android phones. I figured I&#x27;d buy a phone just for
playing games, without upgrading my current phone. Below are a list of
requirements and notes that I used to decide on a phone to buy.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;requirements&quot;&gt;Requirements&lt;a class=&quot;zola-anchor&quot; href=&quot;#requirements&quot; aria-label=&quot;Anchor link for: requirements&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;Cheap. We&#x27;re talking &amp;lt; $150 on a phone, so it&#x27;ll likely have to be
used or refurbished&lt;&#x2F;li&gt;
&lt;li&gt;Okay battery life. Since I won&#x27;t be using it as a phone, I&#x27;m looking
for &amp;gt; 5 hours, roughly on par with a Nintendo Switch. If the phone
is used, I can also expect the battery to not hold a full charge.&lt;&#x2F;li&gt;
&lt;li&gt;A decently sized screen, around 6 inches diagonally.&lt;&#x2F;li&gt;
&lt;li&gt;Minimum resolution of 1920 x 1080 for general crispness of text.&lt;&#x2F;li&gt;
&lt;li&gt;Bonus points for an OLED panel&lt;&#x2F;li&gt;
&lt;li&gt;Able to play Genshin Impact on high settings at 60fps. Able to
emulate PS2, Wii, and anything less powerful.&lt;&#x2F;li&gt;
&lt;li&gt;Able to do video out over USB C, so that I can dock it to a monitor.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;That&#x27;s quite a few requirements, I know. Thankfully, a couple of them
narrow down the available choices a lot. Most of the Chinese phone
manufacturers do not do video over USB C, so I excluded companies like
Xiaomi, Redmi, Oppo, and Realme.&lt;&#x2F;p&gt;
&lt;p&gt;Point 6 is the most interesting one. To emulate many titles, a
Snapdragon processor is preferred as it tends to get the best
performance for emulators. If you have a Mediatek or Exynos CPU you
often need to download and run a patched emulator (such as Citra MMJ
instead of Citra) for playable frame rates. More specifically for Point
6 though, it seems that a Snapdragon 845 and up would be able to get me
the performance I&#x27;d want.&lt;&#x2F;p&gt;
&lt;p&gt;Point 1 also cut out many other options. A Samsung Galaxy S10, a three
year old phone, still goes for $200-$300 used. There are a few other
tricks that one can use to find a cheaper phone. One is to add &quot;bad
imei&quot; or just &quot;imei&quot; to the search. These are phones that have been
blacklisted by a cellular provider, so while they don&#x27;t function as a
cellular device they still can work over Wifi for gaming. Of course, for
a phone to be blacklisted, the owner either lost the phone, had it
stolen, or didn&#x27;t pay the cellular company. A second trick is to try and
buy a &quot;demo&quot; unit phone. This can be a hit or a miss - demo phones can
be an entirely different model, missing a cellular connection, having
reduced storage, or other caveats. I&#x27;d only recommend this if you&#x27;re
able to find others who&#x27;ve reported on the status of demo phones.&lt;&#x2F;p&gt;
&lt;p&gt;Eventually, after digging into the flagship phones that had launched in
2018 and 2019 I was able to at least settle on a company: LG.&lt;&#x2F;p&gt;
&lt;p&gt;LG made some very standard phones that would usually have a gimmick to
encourage the buyer to purchase the phone. And yes, I said made . LG has
closed their smartphone division, which is part of the reason their
flagships can be found on sites like eBay for cheap, around $120. In
the end, I was deciding between the LG G8 and the LG G8x. The G8&#x27;s
gimmick is being able to control certain things in the phone with your
hand, and the G8x&#x27;s gimmick is a case that includes a second flip out
display. Both can be found for around the same price on eBay and have
largely similar specs as far as performance goes. The G8 is lighter and
slightly smaller, while the G8x has a lower display resolution.&lt;&#x2F;p&gt;
&lt;p&gt;In the end I picked the G8 purely because it was lighter, and ordered
it. I&#x27;ve had the phone for a couple of days now, and I&#x27;m pretty happy.
It met all of my requirements, and cost me $130 (after tax). There
weren&#x27;t any with a bad IMEI that were worth it, and the demo units seem
to have a quirk where only a few GB of the 128GB is made available to
the user, so I skipped out on those.&lt;&#x2F;p&gt;
&lt;p&gt;Additionally, I picked up one of those telescoping bluetooth controllers
that fit many phones, and look a bit like a Nintendo Switch. The
specific model I used is a Saitake 7007F1, but there are many. If you
care a lot about latency there is also the Razer Kishi, a more expensive
option. I wanted something I could still use with stuff other than a
phone though, so I stuck with bluetooth.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s a quick photo of the device.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;lh6.googleusercontent.com&#x2F;wor-OEGUeOvOoKaOuWVgky1HwQwnz-LI8avV9K3TojjCe7739mXXy5L7Kw2hBzwaBReN9gJ4LLfsqhPMg5jwnDdL7XcHDxb2Ve-QdgqILTDLSSwbP0aviwt9_hPoNotCFg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Pretty impressive to get a 1440p OLED display, with stereo speakers,
that can play modern gaming titles all for less than $150! I hope that
this was helpful to anyone else looking to do something similar.&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Building a simple typing test website using hyperscript</title>
		<published>2021-12-18T00:00:00+00:00</published>
		<updated>2021-12-18T00:00:00+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/hyperscript-simple-type/"/>
		<id>/posts/hyperscript-simple-type/</id>
    
		<content type="html" xml:base="/posts/hyperscript-simple-type/">&lt;p&gt;Recently, I&#x27;ve been playing around with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hyperscript.org&#x2F;&quot;&gt;_hyperscript&lt;&#x2F;a&gt;. It&#x27;s from the same folks that made &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;htmx.org&#x2F;&quot;&gt;HTMX&lt;&#x2F;a&gt;, so you know it&#x27;ll be an... interesting project. I used it to build &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arhamjain.com&#x2F;typehand&quot;&gt;typehand&lt;&#x2F;a&gt; which is a tiny little typing speed measurer inspired by &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;typings.gg&quot;&gt;typings.gg&lt;&#x2F;a&gt;. If you want to see an explanation of the code, skip to the &lt;a href=&quot;&#x2F;posts&#x2F;hyperscript-simple-type&#x2F;#typehand&quot;&gt;typehand section&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;personal-tangent&quot;&gt;Personal Tangent&lt;a class=&quot;zola-anchor&quot; href=&quot;#personal-tangent&quot; aria-label=&quot;Anchor link for: personal-tangent&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;When I first started doing web development around 2012, I would manually link to scripts (usually jQuery) and CSS files in the head of my HTML before writing code. I had heard about this cool thing called &quot;npm&quot; and &quot;node&quot; but trying to install it on my Windows laptop was a hassle. Once I did manage to somehow install it, it made this folder called &lt;code&gt;node_modules&lt;&#x2F;code&gt; that &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;stackoverflow.com&#x2F;questions&#x2F;28175200&#x2F;how-to-delete-node-modules-deep-nested-folder-in-windows&quot;&gt;was impossible to delete&lt;&#x2F;a&gt;. Eventually, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.microsoft.com&#x2F;en-us&#x2F;windows&#x2F;wsl&#x2F;about&quot;&gt;WSL&lt;&#x2F;a&gt; came along and I was able to successfully install and use the npm ecosystem.&lt;&#x2F;p&gt;
&lt;p&gt;After a couple of years though, the npm ecosystem no longer felt like it was helping me build projects faster. I&#x27;d go to make a tiny website that would just generate a random word or submit a form and be pulling in VueJS out of sheer habit (along with its dependencies). Build times were slow as well on my hardware, usually around 10 seconds to hot reload and closer to a minute to build. When I went to &lt;code&gt;npm install something&lt;&#x2F;code&gt;, it became mentally exhausting to watch &lt;code&gt;something&lt;&#x2F;code&gt; pull in hundreds and hundreds of Javascript and CSS files. Web dev just didn&#x27;t feel as fun as it had been when I started. When you have a hammer, everything starts to look like a Single Page Application and I wanted out.&lt;&#x2F;p&gt;
&lt;p&gt;Don&#x27;t get me wrong - SPAs have their place in the world. There are quite a few web applications I interact with and depend on to do work, which I can&#x27;t imagine using if they didn&#x27;t have some of the features of an SPA. It was around this point that I saw HTMX, and tried using it in a few small projects. It&#x27;s very powerful and could probably replace needing to write Javascript for many, many websites.&lt;&#x2F;p&gt;
&lt;p&gt;What about websites that actually need a bit of JS though? Or those that don&#x27;t need a server running backend logic?&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s what hyperscript aims to solve.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hyperscript&quot;&gt;Hyperscript&lt;a class=&quot;zola-anchor&quot; href=&quot;#hyperscript&quot; aria-label=&quot;Anchor link for: hyperscript&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;hyperscript is a &lt;strong&gt;language&lt;&#x2F;strong&gt; that works especially well for those little interactions that need a bit of JS to work. I like to think of it as &lt;code&gt;jQuery&lt;&#x2F;code&gt; if it were it&#x27;s own language, or as a language dedicated to working with the DOM.&lt;&#x2F;p&gt;
&lt;p&gt;Their website states&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;hyperscript is an easy and approachable language designed for modern front-end web development&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I&#x27;ve found this to be a pretty accurate statement of what one can do with it.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Well hold on, I&#x27;ve seen languages try to replace JS before. How is this different from Typescript, Flow, and Coffeescript?&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve seen some of the hyperscript developers describe their approach as &quot;intentionally unscaleable&quot;. Those languages above are designed to solve the problem of &lt;strong&gt;writing correct Javascript quickly&lt;&#x2F;strong&gt;. I&#x27;m going to generalize and say that they&#x27;re also designed to write business logic, aka code that runs via Node on a server. hyperscript doesn&#x27;t do that. Writing business logic in Hyperscript is a lot more painful than those languages (including JS), but working with the DOM is a lot, lot easier.&lt;&#x2F;p&gt;
&lt;p&gt;Enough talk - here&#x27;s a quick example to show an element after clicking a button taken from their website. In other words, on click show #show-target.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;JS&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;html&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;button&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-other z-attribute-name&quot;&gt; onclick&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;document&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;getElementById&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;show-target-1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;style&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;display&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;block&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  Show Element&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;button&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;div&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-other z-attribute-name&quot;&gt; style&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;display: none&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-other z-attribute-name&quot;&gt; id&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;show-target-1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  Hidden Element&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;div&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;jQuery&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;html&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;script&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;function&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;  $&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;#showBtn&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;click&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;function&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;    $&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;#show-target-2&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;show&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;  }&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;script&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;button&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-other z-attribute-name&quot;&gt; id&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;showBtn&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  Show Element&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;button&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;div&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-other z-attribute-name&quot;&gt; style&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;display: none&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-other z-attribute-name&quot;&gt; id&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;show-target-2&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  Hidden Element&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;div&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;hyperscript&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;html&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;button&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-other z-attribute-name&quot;&gt; _&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;on click show #show-target-3&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  Show Element&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;button&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;div&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-other z-attribute-name&quot;&gt; style&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;display: none&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-other z-attribute-name&quot;&gt; id&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;show-target-3&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  Hidden Element&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag&quot;&gt;div&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-tag&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I also really like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;htmx_org&#x2F;status&#x2F;1459364371067453442&quot;&gt;this demo&lt;&#x2F;a&gt; that the developers posted on Twitter, it shows just how powerful it can be compared to what you&#x27;d need to write out in Javascript.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;typehand&quot;&gt;typehand&lt;a class=&quot;zola-anchor&quot; href=&quot;#typehand&quot; aria-label=&quot;Anchor link for: typehand&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;As usual, when I want to try out some new framework, language, or stack, I build a small project to validate its claims. I figured a typing test website would be large enough project to attempt doing, without it taking too long. I won&#x27;t be going through all of the code&#x2F;HTML, just the bits with hyperscript. I would recommend going to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arhamjain.com&#x2F;typehand&#x2F;&quot;&gt;typehand&lt;&#x2F;a&gt; and right clicking to view the source if you want to follow along (never thought that would be useful in 2021). I&#x27;ve also put the source in a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;ajusa&#x2F;09dd3c1aab78515a32504dd1578e503a&quot;&gt;Github gist&lt;&#x2F;a&gt;. This code uses the development build of hyperscript at the time of writing, not the latest stable release.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;requirements&quot;&gt;Requirements&lt;a class=&quot;zola-anchor&quot; href=&quot;#requirements&quot; aria-label=&quot;Anchor link for: requirements&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;Randomly generate words to type from a wordlist (in this case, generously taken from typings.gg).&lt;&#x2F;li&gt;
&lt;li&gt;Allow a user to select how many words to type [10, 25, 50, 100, 250]&lt;&#x2F;li&gt;
&lt;li&gt;Have the word that the user needs to type highlighted. If the user mistypes the word, mark it as incorrect. If the user types the word correctly, mark it as green.&lt;&#x2F;li&gt;
&lt;li&gt;As the user types the word, the moment they make a mistake on that word, make the typing field change color to tell them that somehow.&lt;&#x2F;li&gt;
&lt;li&gt;Once the user has typed the last word, calculate their accuracy and words per minute (WPM). Display those statistics.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;code-explanation&quot;&gt;Code Explanation&lt;a class=&quot;zola-anchor&quot; href=&quot;#code-explanation&quot; aria-label=&quot;Anchor link for: code-explanation&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;I&#x27;ll be jumping around a bit. Thankfully the code is so short that it shouldn&#x27;t be too difficult for anyone reading this to following along.&lt;&#x2F;p&gt;
&lt;p&gt;First, loading the wordlist.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;init fetch words.json as json &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;then set $allwords to it&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;then trigger reset(count: 50) on #words&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The first line here does a fetch request to &lt;code&gt;words.json&lt;&#x2F;code&gt;, which is just a JSON file containing English words in an array. The second bit triggers an event called &lt;code&gt;reset&lt;&#x2F;code&gt; on the element with an id of &lt;code&gt;words&lt;&#x2F;code&gt;. Notice the async transparent nature of hyperscript when we trigger the event after the JSON has loaded - you don&#x27;t see any promises and callbacks here, even though internally that&#x27;s what is happening.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;on&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; reset&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;count&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;  set&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; $startTime&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; to&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Let&#x27;s jump to the &lt;code&gt;reset&lt;&#x2F;code&gt; event, since we trigger it on load. The first line listens for it being triggered, and it additionally unpacks &lt;code&gt;event.count&lt;&#x2F;code&gt; into the &lt;code&gt;count&lt;&#x2F;code&gt; variable. The next line sets &lt;code&gt;$startTime&lt;&#x2F;code&gt; to -1. The &lt;code&gt;$&lt;&#x2F;code&gt; in front of &lt;code&gt;startTime&lt;&#x2F;code&gt; means it is a global variable, so any hyperscript can access it. hyperscript does have element scoped variables, but as I was trying to keep things simple I didn&#x27;t use them. &lt;code&gt;$startTime&lt;&#x2F;code&gt; is used to hold the (Unix) time that the user starts typing - when we reset the words to be typed however, the user hasn&#x27;t typed so we just set it to -1.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;  repeat&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; count&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; times&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;    append&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; `&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;lt;code class=&amp;#39;yet&amp;#39;&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;${&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;random&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; in&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; $allwords&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;lt;&#x2F;code&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;`&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; to&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; randwords&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;  set&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; my&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; innerHTML&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; to&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; randwords&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Apologies for the syntax highlighting - there is a Prism based highlighter for hyperscript &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;dz4k&#x2F;prism-hyperscript&quot;&gt;here&lt;&#x2F;a&gt;, but my blog doesn&#x27;t support it.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, the next line repeats &lt;code&gt;count&lt;&#x2F;code&gt; times, the parameter passed in as an event. We append a string with interpolation to the variable &lt;code&gt;randwords&lt;&#x2F;code&gt;. hyperscript is pretty loose with variable declarations and some scoping rules to make it easier to write simple code. Note the bit inside of the &lt;code&gt;${}&lt;&#x2F;code&gt; block. Each iteration, we end up selecting a random word from &lt;code&gt;$allwords&lt;&#x2F;code&gt;, the global variable we filled with words using JSON earlier. We then go ahead and set this HTML string to fill the element&#x27;s innerHTML. We&#x27;ve fulfilled requirement 1.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;  add&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt; .&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;light&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;purple&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; to&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; first&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt; .&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;yet&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;  set&lt;&#x2F;span&gt;&lt;span&gt; #&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;maininput&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;s value to &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  call #maininput.focus(&lt;&#x2F;span&gt;&lt;span class=&quot;z-invalid&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Finally, we add the class &lt;code&gt;.light-purple&lt;&#x2F;code&gt; to the first word that is &lt;code&gt;.yet&lt;&#x2F;code&gt; to be typed, fulfilling part of requirement 3. Since this all part of resetting the list of words, we are now ready to let the user start typing. We clear the input field and focus it, so that they can immediately start typing.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;on&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; load&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;  tell&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; my&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; children&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; add&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt; .&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;secondary&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; add&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt; [&lt;&#x2F;span&gt;&lt;span&gt;@&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;href&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;on&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; click&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; from&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; in&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; me&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;  take&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt; .&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;contrast&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; from&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; in&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; me&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; for&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; it&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;  trigger&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; reset&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;count&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;it&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;innerText&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; on&lt;&#x2F;span&gt;&lt;span&gt; #&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;words&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You can listen for multiple events in hyperscript, and that&#x27;s what we do there. First, when the page loads we go ahead and add some classes and attributes to the children, which are the links we can click to change the number of words to be typed. Note that the next line listens for a click on the parent element. This is simpler than needing to listen to each link for a click.&lt;&#x2F;p&gt;
&lt;p&gt;Once someone clicks on the child &lt;code&gt;&amp;lt;a&#x2F;&amp;gt;&lt;&#x2F;code&gt; tag, we take the &lt;code&gt;.contrast&lt;&#x2F;code&gt; class from all of them, and add it to the link that was clicked. We then trigger the &lt;code&gt;reset&lt;&#x2F;code&gt; event as before, but using the innerText of the clicked link to fill in the count. With this, we&#x27;ve fulfilled requirement 2.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;on&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; click&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; trigger&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; reset&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;count&lt;&#x2F;span&gt;&lt;span&gt;: #&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;words&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;children&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt;length&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; on&lt;&#x2F;span&gt;&lt;span&gt; #&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;words&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is the code for the reset button. It is pretty similar to how the links from above work, only we set the count to be the number of children (words) that the element with id &lt;code&gt;words&lt;&#x2F;code&gt; has.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;on&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; input&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;yet&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;s length is 1 and my value is .yet&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;s&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; innerText&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; or&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;keydown&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;key&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;key&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; is&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; and&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; some&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt; .&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;yet&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;]&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; my&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; value&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;    call&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; nextWord&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;my&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; value&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;  end&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;  set&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; my&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; value&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; to&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;  halt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The events on the input here are pretty dense, so I&#x27;ll try my best to explain them. This event handles when to go ahead and write the next word. There are basically two times we want to do this: the user hits space after typing some text, or if the user has typed the last word correctly.&lt;&#x2F;p&gt;
&lt;p&gt;The first event we check for here is checking that second condition - is there one word left to type, and did we type it correctly. If that&#x27;s the case, it&#x27;ll run the code at the end. Note that we are listening to event 1 or event 2 happening to run this code - earlier we were listening to two different events with two different pieces of code.&lt;&#x2F;p&gt;
&lt;p&gt;The conditions for the second event is that the user pressed the spacebar down, and that there are still words &lt;code&gt;.yet&lt;&#x2F;code&gt; to be typed. So if either of these events are true, we do a few things. First, if there was something typed (the input isn&#x27;t blank), we call the &lt;code&gt;writeWord&lt;&#x2F;code&gt; function with the value inside of the input. Regardless of whether there was something in the input, we clear the value (setting it to &#x27;&#x27;) and &lt;code&gt;halt&lt;&#x2F;code&gt;, which stops the event (preventDefault for the JS folks). This stops the space from actually being added to the input, as this is a &lt;code&gt;keydown&lt;&#x2F;code&gt; event which runs before the input has been updated with the value of the key.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;on&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; input&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;$startTime&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; is&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; set&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; $startTime&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; to&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; Date&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;now&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;on&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; input&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;some&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt; .&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;yet&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;]&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;  set&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; @&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;aria&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;invalid&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; to&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; not&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt; (&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;first&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt; .&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;yet&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;s innerText).startsWith(my value&lt;&#x2F;span&gt;&lt;span class=&quot;z-invalid&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;These are easier to explain thankfully. The first one just sets &lt;code&gt;$startTime&lt;&#x2F;code&gt; to the current time when the user types (so long as it was just reset, setting its value to -1). The second one handles requirement 4. As long as there are words remaining, it sets whether the field is valid or not based on whether the value of the input starts with the current word we need to type (first of the words yet to be typed). Since the attribute is &lt;code&gt;invalid&lt;&#x2F;code&gt; we need to negate it with the &lt;code&gt;not&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;def&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; nextWord&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;value&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;  tell&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; first&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt; .&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;yet&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;    remove&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt; .&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;yet&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt; .&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;light&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;purple&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; value&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; is&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; your&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; innerText&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; add&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt; .&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;green&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; otherwise&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; add&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt; .&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;red&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; no&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt; .&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;yet&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;      set&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; minutes&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; to&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt; (&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;Date&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;now&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; $startTime&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt; (&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; *&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 60&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;      put&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt; (&lt;&#x2F;span&gt;&lt;span&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;words&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;children&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt;length&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; minutes&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; as&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; Fixed&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; into&lt;&#x2F;span&gt;&lt;span&gt; #&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt;wpm&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;      put&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt; (&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;green&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt;length&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; *&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 100&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span&gt; #&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;words&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;children&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt;length&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; as&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; Fixed&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt; into&lt;&#x2F;span&gt;&lt;span&gt; #&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-type&quot;&gt;acc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;    otherwise&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; add&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt; .&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;light&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;purple&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; to&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; next&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor&quot;&gt; .&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;yet&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt; end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Last stretch here! This is a function in hyperscript. I separated it out to aid in readability, but it technically could have been embedded into the input tag.&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;code&gt;tell&lt;&#x2F;code&gt; statement here basically aliases &lt;code&gt;first .yet&lt;&#x2F;code&gt; to the word &lt;code&gt;you&lt;&#x2F;code&gt;, and it makes some operations affect it by default. Again, &lt;code&gt;first .yet&lt;&#x2F;code&gt; is the word that the user just typed when we end up in this function. We remove the classes yet and light-purple from that word. If the value matched the word itself, we add green, otherwise we mark it as red (requirement 3). The if statement check if there are &lt;code&gt;no .yet&lt;&#x2F;code&gt; left - in other words, no words left to type. If that is the case, we do some math to get the WPM. Notice the accuracy calculation - we just use the DOM to hold this state for us and figure out how many words were red to calculate the percent. With that, we&#x27;ve met requirement 5.&lt;&#x2F;p&gt;
&lt;p&gt;If there are words left however, we need to highlight the next word in purple, which is exactly what that last piece of code does.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Personally, this was fun! I can imagine that writing this in normal ES5 would have been a bit of a slog, as I know that the difficult part of that would just be finding all of the DOM manipulation methods and figuring out when I need to iterate a list of elements to add and remove classes.&lt;&#x2F;p&gt;
&lt;p&gt;As far as performance goes, yes hyperscript is slower than Javascript. It&#x27;s an interpreted language implemented in Javascript. For the majority of interactions you use it for though, I&#x27;d expect performance to not matter all that much - it&#x27;s still just doing DOM manipulation the same way Javascript does.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m not claiming that hyperscript will replace Javascript, but it is very &lt;em&gt;interesting&lt;&#x2F;em&gt; to use. The strangest thing about this project was that I found it slightly more difficult to write code, but much easier to read my code back. Everything was plain English, and I didn&#x27;t have to go digging too much for JS functions that manipulate the DOM. In other words, if you already understand DOM events, you can pick up hyperscript in a few hours and be productive.&lt;&#x2F;p&gt;
&lt;p&gt;Speaking of productivity, I was able to write this simple project in a few hours. It was pretty much my first time using hyperscript to do anything substantial, and I&#x27;d say it went pretty well. However, I did find a few bugs and make a few feature requests as I was writing this code. hyperscript is still in &lt;strong&gt;beta&lt;&#x2F;strong&gt;, though its shaping up nicely. If you&#x27;re planning on using this for a larger project, you may want to wait for 1.0 to avoid any sort of breaking changes.&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Building a simple room-based chat application in Nim (using HTMX)</title>
		<published>2021-11-22T00:00:00+00:00</published>
		<updated>2021-11-22T00:00:00+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/nim-simple-chat/"/>
		<id>/posts/nim-simple-chat/</id>
    
		<content type="html" xml:base="/posts/nim-simple-chat/">&lt;p&gt;This is going to be a bit of a weird tutorial - rather than walking you through the natural progression of how one would build an application, I&#x27;ll instead be explaining the code step by step of the existing application. This is done for two reasons: first, it&#x27;s easier to write a tutorial. Second, if you just want to see the final code, you can skip ahead and not have to bear with me as I explain things that you may already know.&lt;&#x2F;p&gt;
&lt;p&gt;A quick note - I use the word templating and template a bit in this explanation. A &lt;code&gt;template&lt;&#x2F;code&gt; refers to a construct in Nim that allows for code substitution. Templating refers to translating our data into HTML, using Karax&#x27;s DSL in this instance.&lt;&#x2F;p&gt;
&lt;p&gt;With that out of the way, let&#x27;s get started! The final code can be found &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ajusa&#x2F;simple-chat&quot;&gt;in this Github repo&lt;&#x2F;a&gt;. Here are a few screenshots of what we&#x27;ll be building.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;2021&#x2F;simple-chat-home.png&quot; alt=&quot;sign in&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;2021&#x2F;simple-chat-room.png&quot; alt=&quot;chatroom&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;nim&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; std&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;[strutils, asyncdispatch, sets, hashes, json]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; karax&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;[karaxdsl, vdom], jester, ws, ws&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;jester_extra&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;On the first line we&#x27;ve got stdlib imports, and the second line has all of the external libraries we&#x27;ll be using. To install them, just run&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;nimble&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; install&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; karax&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; jester&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ws&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;nim&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;converter&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; toString&lt;&#x2F;span&gt;&lt;span&gt;(x&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; VNode&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt; string&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; $&lt;&#x2F;span&gt;&lt;span&gt;x&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;type&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; User&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; object&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  name&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt; string&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  socket&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; WebSocket&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;proc&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; hash&lt;&#x2F;span&gt;&lt;span&gt;(x&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; User&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; Hash&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; hash&lt;&#x2F;span&gt;&lt;span&gt;(x&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;name)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;var&lt;&#x2F;span&gt;&lt;span&gt; chatrooms &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; initTable[&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;string&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt;HashSet&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt;User&lt;&#x2F;span&gt;&lt;span&gt;]]()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now, we&#x27;ve got some real code. The first line is a converter. In Nim, converters are automatically ran to convert between types if needed. In our case, we are converting a &quot;VNode&quot; to a string whenever it is required. A VNode is just a DOM element, which is what the Karax DSL uses to represent HTML. However, Jester only responds with string. With this converter, we can simply &lt;code&gt;resp vnode&lt;&#x2F;code&gt; and have it automatically get converted.&lt;&#x2F;p&gt;
&lt;p&gt;The next few lines simply set up the data structures for this chat application. A user consists of a username, and the websocket corresponding to their computer. We define a hash function for this type so that we can use it in a hashset. Then, we define the core in-memory variable that&#x27;ll be storing all of our users and rooms. It&#x27;s a map from string, to HashSet[User]. In other words, each room name maps to a set of users that are connected.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;nim&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;template&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; index&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;(rest&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt; untyped&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt; untyped&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;  buildHtml&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;(lang &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;en&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    head&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;      meta&lt;&#x2F;span&gt;&lt;span&gt;(charset &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;UTF-8&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, name&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;viewport&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, content&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;width=device-width, initial-scale=1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;      link&lt;&#x2F;span&gt;&lt;span&gt;(rel &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;stylesheet&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, href &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;https:&#x2F;&#x2F;unpkg.com&#x2F;@picocss&#x2F;pico@latest&#x2F;css&#x2F;pico.min.css&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;      script&lt;&#x2F;span&gt;&lt;span&gt;(src &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;https:&#x2F;&#x2F;unpkg.com&#x2F;htmx.org@1.6.0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      title&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; text &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Simple Chat&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    body&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;      nav&lt;&#x2F;span&gt;&lt;span&gt;(class&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;container-fluid&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ul&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; li&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; a&lt;&#x2F;span&gt;&lt;span&gt;(href &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, class&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;secondary&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; strong&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; text &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Simple Chat&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;      main&lt;&#x2F;span&gt;&lt;span&gt;(class&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;container&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; rest&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now we get into some of the templating&#x2F;boilerplate. This snippet builds our &quot;header&quot; and takes in the rest of the page &quot;rest&quot; as input. Taking a closer look, we can see that we load a stylesheet (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;picocss.com&#x2F;&quot;&gt;PicoCSS&lt;&#x2F;a&gt;) and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;htmx.org&#x2F;&quot;&gt;HTMX&lt;&#x2F;a&gt;. We then create a quick navbar, all using the Karax DSL.&lt;&#x2F;p&gt;
&lt;p&gt;Note that this is a &lt;code&gt;template&lt;&#x2F;code&gt; and not a &lt;code&gt;proc&lt;&#x2F;code&gt;. So, anything that is passed in as the rest argument performs simple code substitution. We&#x27;ll see an example of that in a second.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;nim&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;proc&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; chatInput&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; VNode&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; buildHtml&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;input&lt;&#x2F;span&gt;&lt;span&gt;(name&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;message&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, id&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;clearinput&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, autofocus&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, required&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;proc&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; sendAll&lt;&#x2F;span&gt;&lt;span&gt;(users&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; HashSet&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt;User&lt;&#x2F;span&gt;&lt;span&gt;], msg&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt; string&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;  for&lt;&#x2F;span&gt;&lt;span&gt; user &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;in&lt;&#x2F;span&gt;&lt;span&gt; users&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; discard&lt;&#x2F;span&gt;&lt;span&gt; user&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;socket&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;send&lt;&#x2F;span&gt;&lt;span&gt;(msg)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;template&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; buildMessage&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;(msg&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt; untyped&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt; untyped&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;  buildHtml&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;tdiv&lt;&#x2F;span&gt;&lt;span&gt;(id&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;content&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, hx&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;swap&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;oob&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;beforeend&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    tdiv&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; msg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;We&#x27;ve got some helper procedures here. chatInput generates our input field using the Karax DSL that grabs focus. It&#x27;s also required, so that the user can&#x27;t just spam sending empty messages. &lt;code&gt;sendAll&lt;&#x2F;code&gt; just sends a string to all of the users in a room by iterating over them.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;buildMessage&lt;&#x2F;code&gt; is another template that we can use to help us reuse code for building HTML. You&#x27;ll also notice an interesting attribute: &lt;code&gt;hx-swap-oob&lt;&#x2F;code&gt;. The documentation for that can be found &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;htmx.org&#x2F;attributes&#x2F;hx-swap-oob&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;, but in a nutshell what this does is put the innerHTML of this &lt;code&gt;&amp;lt;div&amp;gt;&lt;&#x2F;code&gt; into a new element, which is the last child of anything matching an id of &quot;content&quot;. If you&#x27;ve never used HTMX you may think that this is a very ugly way of doing things, but trust me: it works.&lt;&#x2F;p&gt;
&lt;p&gt;In other words, any time the client sees this div being returned, it appends the content into the end of the DOM element with an id of &quot;content&quot;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;nim&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;routes&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;  get &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span&gt; html &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; index&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      h1&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; text &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Join a room!&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;      form&lt;&#x2F;span&gt;&lt;span&gt;(action&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;chat&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, `&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;method&lt;&#x2F;span&gt;&lt;span&gt;`&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;get&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        label&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;          text &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Room&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;          input&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;type&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;text&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, name&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;room&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        label&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;          text &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Username&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;          input&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;type&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;text&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, name&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;        input&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;type&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;submit&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, value&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Join&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;    resp &lt;&#x2F;span&gt;&lt;span&gt;html&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Finally, some Jester code! This is the index page, where we can join a room. You&#x27;ll notice we use our &lt;code&gt;index&lt;&#x2F;code&gt; template form earlier, to help us build the first part of the page, before we insert the rest of it. This code is pretty self explanatory as it&#x27;s just HTML, but we&#x27;re creating a form that asks for a room name and a username. Submitting this form will then send a &lt;code&gt;GET&lt;&#x2F;code&gt; request to &lt;code&gt;&#x2F;chat&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;nim&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;  get &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;chat&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span&gt; html &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; index&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      h1&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; text &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;@&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;room&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;      tdiv&lt;&#x2F;span&gt;&lt;span&gt;(hx&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;ws&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;connect:&#x2F;chat&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; @&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;room&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; @&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;        p&lt;&#x2F;span&gt;&lt;span&gt;(id&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;content&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;        form&lt;&#x2F;span&gt;&lt;span&gt;(hx&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;ws&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;send&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, id&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;message&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; chatInput&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;    resp &lt;&#x2F;span&gt;&lt;span&gt;html&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;After submitting that form, we end up in this bit of code. Based on the &lt;code&gt;name&lt;&#x2F;code&gt; attributes from the earlier snippet, we can access the username and room the user submitted with &lt;code&gt;@&quot;name&quot;&lt;&#x2F;code&gt; and &lt;code&gt;@&quot;room&quot;&lt;&#x2F;code&gt;. You&#x27;ll notice the &lt;code&gt;hx-ws&lt;&#x2F;code&gt; attribute here as well, from HTMX. The &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;htmx.org&#x2F;attributes&#x2F;hx-ws&#x2F;&quot;&gt;documentation for it&lt;&#x2F;a&gt; says it will try and open a websocket connection to the URL it is given.&lt;&#x2F;p&gt;
&lt;p&gt;Moving on, we see a paragraph with the id &quot;content&quot;. This is where the earlier snippet can be used to append HTML inside of that tag. Within this div, we have a form with the attribute &lt;code&gt;hx-ws&lt;&#x2F;code&gt; again, only this time it is set to &quot;send&quot;. Looking at the documentation from earlier shows that any time this form is submitted, a JSON response will be send to the closest opened websocket. In other words, submitting this form will send something like&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt;message&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;here is my message!&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;over the websocket connection to the server.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;nim&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;  get &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;chat&#x2F;@room&#x2F;@name&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    var&lt;&#x2F;span&gt;&lt;span&gt; ws &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; await&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; newWebSocket&lt;&#x2F;span&gt;&lt;span&gt;(request)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    var&lt;&#x2F;span&gt;&lt;span&gt; user &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; User&lt;&#x2F;span&gt;&lt;span&gt;(name&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; @&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, socket&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; ws)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Here&#x27;s where we handle the websocket connection. We use &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;treeform&#x2F;ws&quot;&gt;treeform&#x27;s library&lt;&#x2F;a&gt; to create a new websocket, and then we create a new User that corresponds to that websocket. The following code is a bit tricky, as it uses the helpers we defined earlier.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;nim&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    try&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      chatrooms&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;mgetOrPut&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;@&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;room&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;initHashSet&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt;User&lt;&#x2F;span&gt;&lt;span&gt;]())&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;incl&lt;&#x2F;span&gt;&lt;span&gt;(user)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;      let&lt;&#x2F;span&gt;&lt;span&gt; joined &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; buildMessage&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        italic&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; text &lt;&#x2F;span&gt;&lt;span&gt;user&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        italic&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; text &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; has joined the room&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      chatrooms[&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;@&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;room&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;sendAll&lt;&#x2F;span&gt;&lt;span&gt;(joined)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;      while&lt;&#x2F;span&gt;&lt;span&gt; user&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;socket&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;readyState &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;==&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; Open&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;        let&lt;&#x2F;span&gt;&lt;span&gt; sentMessage &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;await&lt;&#x2F;span&gt;&lt;span&gt; user&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;socket&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;receiveStrPacket&lt;&#x2F;span&gt;&lt;span&gt;())&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;parseJson[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;message&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;        discard&lt;&#x2F;span&gt;&lt;span&gt; user&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;socket&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;send&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;chatInput&lt;&#x2F;span&gt;&lt;span&gt;())&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;        let&lt;&#x2F;span&gt;&lt;span&gt; reply &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; buildMessage&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          bold&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; text &lt;&#x2F;span&gt;&lt;span&gt;user&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;          text &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;: &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; sentMessage&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;getStr&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        chatrooms[&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;@&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;room&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;sendAll&lt;&#x2F;span&gt;&lt;span&gt;(reply)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Oh boy, here we go. Well, everything is wrapped in a &lt;code&gt;try&lt;&#x2F;code&gt; block first of all. First, we create a new HashSet in that table we defined earlier if it didn&#x27;t already exist. We also add the user to the HashSet that holds the users for the given room. The following lines generate the message that is sent on join. We use the &lt;code&gt;buildMessage&lt;&#x2F;code&gt; template to ensure it is appended to the end of the main content. Then, we use the &lt;code&gt;sendAll&lt;&#x2F;code&gt; proc to ensure it is sent to every user connected to that room.&lt;&#x2F;p&gt;
&lt;p&gt;The following while loop only runs while the user is connected (readyState == Open). Remember, we are using Nim&#x27;s async module, so the loop is non-blocking. We wait for a message to be sent over websockets, parse the JSON, and grab the &quot;message&quot; key. I talked about the JSON format a bit earlier.&lt;&#x2F;p&gt;
&lt;p&gt;The following line is weird - we send the chatInput back to the client we just got a message from. If you remember from earlier, anything that is sent over the websocket will have it&#x27;s id attribute checked, and the content will affect the DOM. In this case, the element that is sent over will replace the &lt;code&gt;input&lt;&#x2F;code&gt; tag that the user has on their machine. This is done for two reasons:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;The input tag that the user has on their machine has some text in it (the message that they sent). By sending over a blank one, we clear the message.&lt;&#x2F;li&gt;
&lt;li&gt;Due to the &lt;code&gt;autofocus&lt;&#x2F;code&gt; attribute, we regain focus of the text input.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Normally, you&#x27;d probably clear the input with Javascript. Since we&#x27;re using HTMX however, this is the recommended way of doing things. Additionally, imagine that you had to filter the messages (for example, to check for slurs). In this way, you&#x27;d be able to quickly and easily clear the input and include a message along with the cleared input telling the user why the message wasn&#x27;t accepted.&lt;&#x2F;p&gt;
&lt;p&gt;After that somewhat lengthy explanation, we build the message itself in Karax&#x27;s DSL, using our buildMessage helper. Then, we send the message to all the connected users.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;nim&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    except&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      chatrooms[&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;@&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;room&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;excl&lt;&#x2F;span&gt;&lt;span&gt;(user)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;      let&lt;&#x2F;span&gt;&lt;span&gt; left &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; buildMessage&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        italic&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; text &lt;&#x2F;span&gt;&lt;span&gt;user&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        italic&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; text &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; has left the room&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      chatrooms[&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;@&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;room&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;sendAll&lt;&#x2F;span&gt;&lt;span&gt;(left)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;    resp &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Remember how all that code was wrapped in a &lt;code&gt;try&lt;&#x2F;code&gt; block? Here&#x27;s the matching &lt;code&gt;except&lt;&#x2F;code&gt;. An exception in this code will usually be thrown if there was some sort of error with the websocket. If you wanted to be more precise you could catch the specific exceptions, but as this is SIMPLE chat I didn&#x27;t bother.&lt;&#x2F;p&gt;
&lt;p&gt;If there&#x27;s an error with the websocket, we take that to mean that the user has disconnected. We remove them from the chat room that they were in. Then, we build a message to show that the user has left the room. Finally, we send that to all of the remaining clients in the room! The last &lt;code&gt;resp&lt;&#x2F;code&gt; is there to make sure that Jester has something to terminate the connection with for the user that left.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;And that&#x27;s it! Around 70 lines of code to build a room based chat using nothing but HTMX and Jester! The best part of this code? You don&#x27;t need to know or understand Javascript to work with this stack, it&#x27;s fantastic. The code surface for bugs on the client side is pretty much 0, but on the server side it does go up a bit with the &lt;code&gt;hx-swap&lt;&#x2F;code&gt; logic. Still, at least the logic is only in one codebase.&lt;&#x2F;p&gt;
&lt;p&gt;This stack isn&#x27;t for everyone, and I&#x27;m not claiming that you can build every sort of application with it. I consider it to be very powerful for what it can accomplish without a whole lot of code. I hope that this was informational and helpful!&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Using Nim for Web Development in 2021</title>
		<published>2021-11-22T00:00:00+00:00</published>
		<updated>2021-11-22T00:00:00+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/nim-webdev/"/>
		<id>/posts/nim-webdev/</id>
    
		<content type="html" xml:base="/posts/nim-webdev/">&lt;p&gt;These are some of my thoughts and recommendations on using Nim in 2021 for web development. If you want a summary of what I think you should use, skip to the end. As this is my first post on the topic, I&#x27;ll be including a bit of history. My intent is not to compare to any specific libraries in other languages. While I&#x27;ve used others, it&#x27;s been a while and I don&#x27;t want to spend a ton of time researching and relearning them for the sake of a &lt;strong&gt;Nim&lt;&#x2F;strong&gt; related article.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-is-nim&quot;&gt;What is &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nim-lang.org&#x2F;&quot;&gt;Nim&lt;&#x2F;a&gt;?&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-is-nim&quot; aria-label=&quot;Anchor link for: what-is-nim&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Nim is a statically typed compiled systems programming language. It combines successful concepts from mature languages like Python, Ada and Modula.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;That&#x27;s what the website says, and I&#x27;ve found it to be pretty accurate in the last four years that I&#x27;ve used it.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s dig more into web development in Nim. Unlike other languages, there are a few things that set Nim apart for web development.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Nim has native support for compiling to C and JS (without using Webassembly) so it can be used to write Javascript code similar to how Typescript can be used to write Javascript&lt;&#x2F;li&gt;
&lt;li&gt;Nim has meta-programming features that include templates and macros.&lt;&#x2F;li&gt;
&lt;li&gt;Nim has a small community and fewer libraries in general.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;using-nim-for-front-end-development&quot;&gt;Using Nim for front-end development&lt;a class=&quot;zola-anchor&quot; href=&quot;#using-nim-for-front-end-development&quot; aria-label=&quot;Anchor link for: using-nim-for-front-end-development&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Since Nim can natively output JS, we can use it everywhere we want to use JS. The main library that is used to create Single Page Applications (or SPAs) in Nim is &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;karaxnim&#x2F;karax&quot;&gt;Karax&lt;&#x2F;a&gt;. It uses a virtual DOM similar to React.&lt;&#x2F;p&gt;
&lt;p&gt;Karax can be thought of as an alternative to Vue&#x2F;React&#x2F;Angular. It is written in pure Nim, and has the benefits of a compiled, statically typed language - namely type checking and compile time optimization. Another feature of Karax is the DSL, or domain specific language. It can be used to generate HTML within Nim on the server (when compiled to C) or the client (when compiled to JS)&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s an example of just using the &lt;em&gt;Karax DSL&lt;&#x2F;em&gt; to generate HTML, without the bit that does the virtual DOM.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;nim&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; karax &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt; [karaxdsl, vdom]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; places &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; @&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;boston&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;cleveland&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;los angeles&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;new orleans&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;proc&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; render&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; VNode&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;  buildHtml&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;tdiv&lt;&#x2F;span&gt;&lt;span&gt;(class &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;mt-3&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    h1&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; text &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;My Web Page&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    p&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; text &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Hello world&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ul&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;      for&lt;&#x2F;span&gt;&lt;span&gt; place &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;in&lt;&#x2F;span&gt;&lt;span&gt; places&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        li&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; text &lt;&#x2F;span&gt;&lt;span&gt;place&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    dl&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      dt&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; text &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Can I use Karax for client side single page apps?&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      dd&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; text &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Yes&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      dt&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; text &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Can I use Karax for server side HTML rendering?&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      dd&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; text &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;Yes&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; render&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you want to see how to use this sort of syntax to create an SPA, check out the Karax project README and examples. There are also a few tutorials and example projects made by the community &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;karaxnim&#x2F;awesome-karax&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;using-nim-for-backend-development&quot;&gt;Using Nim for backend development&lt;a class=&quot;zola-anchor&quot; href=&quot;#using-nim-for-backend-development&quot; aria-label=&quot;Anchor link for: using-nim-for-backend-development&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;There are two web frameworks that I would recommend: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;dom96&#x2F;jester&quot;&gt;Jester&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;planety&#x2F;prologue&quot;&gt;Prologue&lt;&#x2F;a&gt;. There are quite a few others, but most aren&#x27;t as mature or well tested as these two. In case you are curious about performance metrics between the two, you can look at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;web-frameworks-benchmark.netlify.app&#x2F;result?l=nim&quot;&gt;these benchmarks&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;some-history&quot;&gt;Some History&lt;a class=&quot;zola-anchor&quot; href=&quot;#some-history&quot; aria-label=&quot;Anchor link for: some-history&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Note that you may have heard of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;dom96&#x2F;httpbeast&quot;&gt;httpbeast&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;xflywind&#x2F;httpx&quot;&gt;httpx&lt;&#x2F;a&gt;, and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;disruptek&#x2F;httpleast&quot;&gt;httpleast&lt;&#x2F;a&gt; in the Nim community. The difference between these is a bit confusing, so I&#x27;ll try to explain it here.&lt;&#x2F;p&gt;
&lt;p&gt;httpbeast was created by &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;dom96&quot;&gt;dom96&lt;&#x2F;a&gt; with the intent of getting Nim to perform really well as a web server. As such, it is dedicated to serving HTTP 1.1 requests as quickly as possible and doesn&#x27;t really do anything else. Jester then adds a layer on top of httpbeast to handle routing, cookies, and other niceties you&#x27;d expect from a &quot;web framework&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;httpbeast doesn&#x27;t really support Windows due to parts its reliance on epoll&#x2F;kqueue, so &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;xflywind&#x2F;httpx&quot;&gt;xflywind&lt;&#x2F;a&gt; forked it into httpx to add Windows support using IOCP. httpx powers Prologue, the other web framework I mentioned.&lt;&#x2F;p&gt;
&lt;p&gt;httpleast is unrelated to any of these projects, and aims to serve HTTP requests as fast as possible using &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nim-works&#x2F;cps&quot;&gt;CPS&lt;&#x2F;a&gt;. As of 2021, it&#x27;s still alpha level software and there are no sizeable Nim web frameworks using it to serve requests.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;2021&#x2F;relation.png&quot; alt=&quot;relation&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;jester&quot;&gt;Jester&lt;a class=&quot;zola-anchor&quot; href=&quot;#jester&quot; aria-label=&quot;Anchor link for: jester&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;nim&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; jester&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;routes&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;  get &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;    resp &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;lt;h1&amp;gt;Hello World!&amp;lt;&#x2F;h1&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Jester is pretty bare-bones, but as it is written by a core Nim developer it is kept up to date and supports most things a &quot;micro&quot; web framework would support. Since it is minimal, it leaves it to the programmer to decide what to use to parse JSON, validate requests, and do templating. Since Jester is so minimal the only documentation is provided in a README file, and it is assumed that the developer has done web development before. The core features it has are routing, form handling, cookie handling, and serving static files.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;prologue&quot;&gt;Prologue&lt;a class=&quot;zola-anchor&quot; href=&quot;#prologue&quot; aria-label=&quot;Anchor link for: prologue&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;nim&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; prologue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;proc&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; hello&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;(ctx&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; Context&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; {.&lt;&#x2F;span&gt;&lt;span&gt;async&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.}&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function&quot;&gt;  resp &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&amp;lt;h1&amp;gt;Hello World!&amp;lt;&#x2F;h1&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; app &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; newApp&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;app&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;addRoute&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, hello)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;app&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;run&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Prologue on the other hand, is a bit more full featured and has much more comprehensive documentation. It also has official support for websockets, openapi, middleware, and more. There are a couple of official middleware plugins such as auth, cors, clickjacking, and csrf protection.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;comparison&quot;&gt;Comparison&lt;a class=&quot;zola-anchor&quot; href=&quot;#comparison&quot; aria-label=&quot;Anchor link for: comparison&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Personally, I tend to use Jester. It&#x27;s been around longer, and there are a few more third party libraries that add support for it because of that. For example, there is a simple &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;treeform&#x2F;ws&quot;&gt;websockets library&lt;&#x2F;a&gt; and an &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;FedericoCeratto&#x2F;nim-httpauth&quot;&gt;authentication library&lt;&#x2F;a&gt; that ship with support for Jester.&lt;&#x2F;p&gt;
&lt;p&gt;However, Prologue has many more features. If you were to compare the two in Python-land, I&#x27;d say that Jester is closer to Flask and Prologue is closer to Django in terms of the size and functionality of the two. Both are still very good frameworks that have a lot to offer.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;&#x2F;th&gt;&lt;th&gt;Jester&lt;&#x2F;th&gt;&lt;th&gt;Prologue&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Created&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;2012&lt;&#x2F;td&gt;&lt;td&gt;2020&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Middleware&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;No&lt;&#x2F;td&gt;&lt;td&gt;Yes&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Auth&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Yes &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#external&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;td&gt;&lt;td&gt;Yes&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Advanced Security (CSRF, Clickjacking)&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;No&lt;&#x2F;td&gt;&lt;td&gt;Yes&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Documentation&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Some&lt;&#x2F;td&gt;&lt;td&gt;Yes&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Routing&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Yes&lt;&#x2F;td&gt;&lt;td&gt;Yes&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Static Files&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Yes&lt;&#x2F;td&gt;&lt;td&gt;Yes&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Cookies&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Yes&lt;&#x2F;td&gt;&lt;td&gt;Yes&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Mocking&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;No&lt;&#x2F;td&gt;&lt;td&gt;Yes&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;CORS&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Manual&lt;&#x2F;td&gt;&lt;td&gt;Yes&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Websockets&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Yes &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#external&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;td&gt;&lt;td&gt;Yes&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Uploads&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Yes&lt;&#x2F;td&gt;&lt;td&gt;Yes&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Simple&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Yes&lt;&#x2F;td&gt;&lt;td&gt;No&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Cross-platform&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Yes&lt;&#x2F;td&gt;&lt;td&gt;Yes&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;external&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;Support with an external library&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;h3 id=&quot;templating&quot;&gt;Templating&lt;a class=&quot;zola-anchor&quot; href=&quot;#templating&quot; aria-label=&quot;Anchor link for: templating&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Templating is how we get our data to render as HTML. I&#x27;ve already discussed the Karax DSL, which is what I prefer as it was written by Araq (creator of Nim). However, it doesn&#x27;t really look like HTML so it is non-trivial to just paste in a snippet from Bootstrap and have it work. There is a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nim-lang-cn&#x2F;html2karax&quot;&gt;package&lt;&#x2F;a&gt; that can convert from HTML directly to the Karax DSL, but it is a bit clunky to use.&lt;&#x2F;p&gt;
&lt;p&gt;There are a few good alternatives in this space, if you prefer something else. A newer, more active project is &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;enthus1ast&#x2F;nimja&quot;&gt;Nimja&lt;&#x2F;a&gt;, which has jinja2 style templates.&lt;&#x2F;p&gt;
&lt;p&gt;{% raw %}&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;nim&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;%&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; block&lt;&#x2F;span&gt;&lt;span&gt; content &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; A random loop to show off. #}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;h1&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt;Random&lt;&#x2F;span&gt;&lt;span&gt; links&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;h1&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;%&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; const&lt;&#x2F;span&gt;&lt;span&gt; links &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    (title&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;google&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, target&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;https:&#x2F;&#x2F;google.de&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    (title&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;fefe&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, target&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;https:&#x2F;&#x2F;blog.fefe.de&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;  %&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;%&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; (ii, item) &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;in&lt;&#x2F;span&gt;&lt;span&gt; links&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;pairs&lt;&#x2F;span&gt;&lt;span&gt;() &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {{ii}} &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;a &lt;&#x2F;span&gt;&lt;span&gt;href&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;{{item.target}}&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt;This&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; is&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; a &lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;link &lt;&#x2F;span&gt;&lt;span&gt;to&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; {{item&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;title}}&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&amp;gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;br&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt; endfor &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;h1&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt;Members&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;h1&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; `users` was a param to the `renderIndex` proc #}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;%&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; (idx, user) &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;in&lt;&#x2F;span&gt;&lt;span&gt; users&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;pairs &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;a &lt;&#x2F;span&gt;&lt;span&gt;href&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;&#x2F;users&#x2F;{{idx}}&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;%&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; importnwt &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;.&#x2F;partials&#x2F;_user.nwt&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; %&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&amp;gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;br&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt; endfor &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt; endblock &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;%&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;{% endraw %}&lt;&#x2F;p&gt;
&lt;p&gt;Nim also has libraries for working with Mustache templates, but those can be found on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nimble.directory&quot;&gt;Nimble&lt;&#x2F;a&gt; without too much hassle.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;databases-orms&quot;&gt;Databases&#x2F;ORMs&lt;a class=&quot;zola-anchor&quot; href=&quot;#databases-orms&quot; aria-label=&quot;Anchor link for: databases-orms&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h3&gt;
&lt;p&gt;Nim ships with support for SQLite, MySQL, and PostgreSQL in the standard library. Of course, these libraries are at a lower level - you need to manually write and form your SQL queries. Most language are pretty similar in this regard.&lt;&#x2F;p&gt;
&lt;p&gt;So, what I suggest to use for storing data is &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;moigagoo&#x2F;norm&quot;&gt;Norm&lt;&#x2F;a&gt;, an ORM that lets you define your schema (as a Nim object), and then generate SQL based on it. It supports both SQLite and PostgreSQL, which should be sufficient for most projects.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;nim&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; norm &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt; [model, sqlite]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;type&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support&quot;&gt;  User&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;*&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; object&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; of&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt; Model&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; #&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; define our schema&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    email&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;*&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt; string&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; dbConn&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;*&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; open&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;:memory:&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; open a SQLite memory DB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;dbConn&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;createTables&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support&quot;&gt;User&lt;&#x2F;span&gt;&lt;span&gt;()) &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; create the table if it doesn&amp;#39;t exist&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;var&lt;&#x2F;span&gt;&lt;span&gt; userFoo &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt; newUser&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;foo@foo.foo&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;dbConn&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;insert&lt;&#x2F;span&gt;&lt;span&gt;(userFoo) &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment&quot;&gt; create and insert a row&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;In case Norm is too high level or different from libraries that you&#x27;ve used in the past, I can also recommend &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;itsumura-h&#x2F;nim-allographer&quot;&gt;allographer&lt;&#x2F;a&gt;. It helps in forming SQL queries in Nim, so it isn&#x27;t quite as high level as an ORM, but it is much better than manually writing queries.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;nim&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;proc&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name&quot;&gt; main&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;{.&lt;&#x2F;span&gt;&lt;span&gt;async&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.}&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; =&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;  let&lt;&#x2F;span&gt;&lt;span&gt; result &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; await&lt;&#x2F;span&gt;&lt;span&gt; rdb&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;                    .&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;table&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;users&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;                    .&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;select&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;id&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;email&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;                    .&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;limit&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;                    .&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;offset&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;                    .&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;  echo&lt;&#x2F;span&gt;&lt;span&gt; result&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Note that &lt;code&gt;allographer&lt;&#x2F;code&gt; relies more on manually specifiying a schema in SQL terms rather than specifying a Nim type.&lt;&#x2F;p&gt;
&lt;p&gt;Nim does have drivers for MongoDB and other non-relational database, but I personally haven&#x27;t used any, which makes it difficult for me to recommend any libraries. What I will say is that Nim has very nice interop with Python through &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;yglukhov&#x2F;nimpy&quot;&gt;nimpy&lt;&#x2F;a&gt;, if you&#x27;re willing to lose the speed benefits in exchange for a massive ecosystem. Nim also has very good interop with C libraries, though I wouldn&#x27;t recommend writing your own wrappers if you are new to the language.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot; style=&quot;visibility: hidden;&quot;&gt;&lt;&#x2F;a&gt;
&lt;&#x2F;h2&gt;
&lt;p&gt;Nim has a strong enough web ecosystem to build web applications. The main issues today are documentation, and finding these libraries in the first place.&lt;&#x2F;p&gt;
&lt;p&gt;As far as my preferred stack goes, as you might expect, I use Jester for the backend, Karax&#x27;s DSL for templating, and Norm for persistence&#x2F;storage. I recommend treeform&#x27;s websockets library (mentioned earlier) for websockets with Jester, and Federico&#x27;s httpauth library (also mentioned earlier) for handling authentication in a secure way.&lt;&#x2F;p&gt;
&lt;p&gt;However, I don&#x27;t feel comfortable recommending Nim for front-end web development, specifically Karax. There are too many rough edges and bugs for it to be ready for a production grade web service. Karax is also less performant than React&#x2F;Vue due to it&#x27;s nature - there&#x27;s a layer of abstraction to access JS APIs, which inherently makes it slower unless Nim&#x27;s JS output is improved significantly. &lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#js&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Instead, what I recommend is using something like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;htmx.org&#x2F;&quot;&gt;HTMX&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hyperscript.org&#x2F;&quot;&gt;hyperscript&lt;&#x2F;a&gt; to add interactivity to pages, rather than reaching for an SPA framework. With something like React&#x2F;Karax, you have four states to keep track of:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Backend state&#x2F;database&lt;&#x2F;li&gt;
&lt;li&gt;Frontend state&#x2F;application&lt;&#x2F;li&gt;
&lt;li&gt;Virtual DOM state&lt;&#x2F;li&gt;
&lt;li&gt;Actual DOM state&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;With something like HTMX&#x2F;hyperscript, you just have two: backend state, and the DOM state. This is inherently unscalable - you won&#x27;t be able to build the next Google Docs with this stack without ripping your hair out. However, it works fine for 90% of web applications.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, that&#x27;s just my opinion. If you are seriously considering Nim for web development, I&#x27;d suggest trying out a few combinations of the above to see what it feels like on a tiny project. Pick your favorite and use that!&lt;&#x2F;p&gt;
&lt;p&gt;If I did miss something here, just let me know via Discord (I&#x27;m in the Nim #webdev channel).&lt;&#x2F;p&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;js&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;2&lt;&#x2F;sup&gt;
&lt;p&gt;Nim&#x27;s JS output is suitable for replacing JS however. You could use it write Javascript libraries, without a problem. See &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;juancarlospaco&#x2F;nodejs&quot;&gt;nodejs&lt;&#x2F;a&gt; for doing this more easily.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>My first post</title>
		<published>2019-11-27T00:00:00+00:00</published>
		<updated>2019-11-27T00:00:00+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/first/"/>
		<id>/posts/first/</id>
    
		<content type="html" xml:base="/posts/first/">&lt;p&gt;This is my first blog post.&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Summary and Analysis Blog: Rosencrantz and Guildenstern are Dead</title>
		<published>2018-03-25T21:55:51+00:00</published>
		<updated>2018-03-25T21:55:51+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/summary-and-analysis-blog-rosencrantz-and-guildenstern-are-dead/"/>
		<id>/posts/summary-and-analysis-blog-rosencrantz-and-guildenstern-are-dead/</id>
    
		<content type="html" xml:base="/posts/summary-and-analysis-blog-rosencrantz-and-guildenstern-are-dead/">&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Author: Tom Stoppard. Born in Czechoslovakia, his family escaped due to Hitler. He spent most of his life in Britain, and writes plays. He is still alive, in his 80’s.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Setting: Takes place in Elsinore, and in the boat that Hamlet is put on at the end of &lt;&#x2F;span&gt;&lt;em&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Hamlet&lt;&#x2F;span&gt;&lt;&#x2F;em&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;. Takes place during the same time as Hamlet.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Plot: The plot is the same as Hamlet, only it is told from Rosencrantz and Guildenstern. R and G are on their way to Elsinore, because they were summoned by Claudius. On the way there, they are flipping a coin that keeps coming up heads. They meet some Players, a group of actors, and interact with them before arriving at Elsinore. They talk with Claudius and Gertrude, who welcome them, and ask R and G to question Hamlet about his madness. After this scene, R and G work on questioning each other to prepare for Hamlet. They do this in a very absurd way, playing a game of questions. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;After their meeting with Hamlet, they bemoan how they were outsmarted by him in the questions that they asked and his answers. The Player comes back, talks with R and G about life and how to go with the flow, and leaves. Claudius and Gertrude enter, and they ask R and G about Hamlet’s condition. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;We see the Tragedians perform a rendition of the Murder of Gonzago, only this one shows representatives of R and G dying on a boat. There is a cut to the scene where R and G are asked to find Polonius’ body. They set up a comical trap with their belts, that fails to catch Hamlet. They eventually find Hamlet and deliver him to the King. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;We have a scene with the boat on its way to England, with Hamlet in tow. They open the letter with their instructions, and see that they are going to have Hamlet killed. The Players jump out of barrels on the ship, saying that they are escaping Denmark. Suddenly, pirates attack and Hamlet is shown having jumped ship. R and G bemoan their fate, and reread the letter, seeing that it now calls for their deaths. Guildenstern snaps and tries to kill the Player with a dagger, which is revealed to be a trick dagger. R and G’s death are now acted out, and the end has each say a few lines, then vanish (dying). The play closes with the ambassadors from England saying that R and G are dead.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Rosencrantz and Guildenstern – the main characters of the piece. Very hard for others to distinguish between, as they are very similar in mannerisms and absurdity.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The Player – a know it all character, who seems to have already read Hamlet as a play. He is witty, and knows his fate, but he goes along with it. He often interacts with R and G and tries to reassure them.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Hamlet – He is still in the play, but his influence is that he is a puzzle for R and G to solve for the King and Queen. He has no new lines added.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;There is no narrative voice, since this is a play. The author’s style is very interesting. The point of view leans towards R and G, since they have the majority of the lines. The tone is very absurdist, where very few things have emotion or seriousness attached. The only emotional lines happen near the end, where Guildenstern almost kills the player. There isn’t much imagery other than the stage directions, which tend to emphasize the place being very generic and plain.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;There is a lot of symbolism throughout the play. Pirates can be likened to a disaster happening all of a sudden, which the non stop heads can show a high or low in life. In general, this play had a lot of intertextuality, like one of the articles we read about it. There is also a lot of back and forth between what is real, and acted, and the real world vs acting. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;“Pirates can happen to anyone” – This quote shows that life can be confusing, and horrible things and good things can happen at random. The pirate ship was good for Hamlet, but it proved deadly for R and G.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;“Life in a box is better than no life at all, I expect. You’d have a chance at least. You could lie there thinking: Well, at least I’m not dead.” – This is a very interesting question that he poses, and it reminded me a lot of schrodinger’s cat. It also shows how R and G feel that they would rather be immortal than mortal, even if their lives were terrible. It is quite similar to how they are living their lives anyway.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;In R&amp;amp;G, Stoppard comments on the futility of human purpose in a world where people are confined to a role that they cannot control. (1st Hour)&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;R and G are put into a world that they have no power over. They even mention it at the start of the play, saying that there must have been something they could have done to not have ended up with this conclusion. The title of the piece seems to say that their fate is fixed, and nothing they can do will ever change that. The setting is mostly one of Elsinore, which Hamlet describes as a prison. R and G focus on that statement as well, after their talk with Hamlet. In a prison, you have a lot less free will than outside, in the world. The imagery that is given is harsh and unassuming, seeming to restrict them to one choice. The play (Murder of Gonzago) foreshadows their deaths, and also shows that no matter what happens, they will die on that boat.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Response to Course Materials 3&#x2F;25</title>
		<published>2018-03-22T17:36:22+00:00</published>
		<updated>2018-03-22T17:36:22+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/response-to-course-materials-3-25/"/>
		<id>/posts/response-to-course-materials-3-25/</id>
    
		<content type="html" xml:base="/posts/response-to-course-materials-3-25/">&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;We finished our Hamlet discussion first. I think I got a lot out of that discussion, as listening to other people’s ideas is always fun. I do remember some of the conspiracy theories we started throwing around, and while they were entertaining, I feel like we should have stayed more on task.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;We then started Rosencrantz and Guildenstern are Dead. This play was rather confusing at first, like the American dream. So much of it seemed repetitive and boring. As time went on, however, I realized that the author was making differences in the dialogue to show us something. Yes, this is an absurdist play, but as we discussed in class, some of the lines were misused idioms, or a line would be repeated with a different subject. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;There are a few parallels I noticed between this piece and the American Dream. For one, we lose some characters by the end, with something changing. R and G fade away, as does Grandma in some ways. The American Dream also has a seemingly omniscient character (Grandma), with R and G having the Player. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Annotating the literary analyses of R and G was very interesting. It is weird how literature can have so many faces, so many interpretations of the exact same story. I think that Stoppard has had more variation of responses when compared with the original &lt;&#x2F;span&gt;&lt;em&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Hamlet&lt;&#x2F;span&gt;&lt;&#x2F;em&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;. I really liked the critique that said something to the affect of all writers being contained by Shakespeare. I feel like we saw this idea at the start of the year, with the book on how to read literature. So many writers have borrowed from Shakespeare, or maybe Shakespeare just wrote about 90% of the human experience. I like the idea of Stoppard complaining through a piece because it just seems like such a human thing to do.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;We then had our discussion of Rosencrantz and Guildenstern are Dead. Evan’s theory of everything writing itself was a little far fetched. Overall, I didn’t like how much we theorized about how this play happened. I feel like we should have focused more on the symbols and discrepancies within the text, rather than some parallel universe theory. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;I really wish we could have had more time to discuss!&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Also, somewhere in here we did some poetry multiple choice, which I found harrowing. I need to brush up on my poetry skills. We ended up tying with another hour. The stories we read could be seen in so many different ways depending on what you knew about the specifics the author refers to. For example, we were comparing a physician to a doctor for medical knowledge, or some sort of Frankenstein body digger.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>2008 Open Prompt Answer</title>
		<published>2018-03-19T00:24:04+00:00</published>
		<updated>2018-03-19T00:24:04+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/2008-open-prompt-answer/"/>
		<id>/posts/2008-open-prompt-answer/</id>
    
		<content type="html" xml:base="/posts/2008-open-prompt-answer/">&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;In Shakespeare’s Hamlet, we are introduced to Horatio, Hamlet’s best friend. He always follows Hamlet where possible, and quickly carries out orders. He appears to care for Hamlet throughout the play. The relationship between Horatio and Hamlet shows us that Horatio is too perfect, and that he was essential in carrying out the death of Claudius.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;We first see Horatio at the start of the play. He is trusted by the castle guards, who know that he is close to Hamlet. The castle guards show him the ghost, and he endeavours to tell Hamlet the next day, so that he is well informed. Horatio doesn’t go around telling anyone else, nor does he discuss it with the guards. The guards work for the king, but Horatio makes sure that the guards don’t tell anyone, so that Claudius never hears about it. He seems to have predicted every scenario, and does for the good of Hamlet. In this way, Horatio is perfect.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;We later see Horatio and Hamlet in a number of scenes. Horatio is often advising Hamlet of what to do. When Hamlet needs to check if his uncle reacts unfavorably to the play he has put on, he turns to Horatio to watch his uncle. In this way, Hamlet shows that he trusts Horatio with his family members’ lives. That level of trust is almost never seen in the real world showing that Horatio must be very loyal to Hamlet. Later in the play, Horatio receives the letters from Hamlet, the key component that the entire plan rests on. Horatio delivers the letters perfectly, and he does this without letting Claudius know what is happening. Everyone seems to trust him, and not realize he is loyal to only Hamlet. This amount of amiability, and ability to look at a difficult situations and get a solution makes Horatio a “Mary Sue” – someone without any flaws.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Near the end of the play, Horatio advises Hamlet on what to do. He warns Hamlet that the entire setup with Hamlet fighting Laertes is a trap, but Hamlet doesn’t listen to him. Horatio demonstrates that he knows the future, or that he is very intelligent. Then, when everyone is dying, he offers to commit suicide as well. This is a huge moment. What kind of friend would willingly die, when everyone is so young? There were many rational decisions that Horatio could have made at this point, as he had demonstrated in the past. Horatio instead does exactly what Hamlet tells him to do, and makes sure that Hamlet’s voice is heard from beyond the grave in the choosing of the next king of Denmark.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Throughout Hamlet, we see Horatio and Hamlet’s relationship. The relationship appears to never change, but instead it is revealed to us through the many actions and the amount of trust Hamlet has in Horatio. Horatio is loved by all, but he only appears to care for Hamlet. His unquestionable loyalty, and his extreme intelligence make him a perfect man, someone who proves essential to Hamlet’s quest.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>2008 Open Prompt Analysis</title>
		<published>2018-03-12T03:17:58+00:00</published>
		<updated>2018-03-12T03:17:58+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/2008-open-prompt-analysis/"/>
		<id>/posts/2008-open-prompt-analysis/</id>
    
		<content type="html" xml:base="/posts/2008-open-prompt-analysis/">&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Author 1:&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;This author does change what they think the thesis is from the beginning to the end. They initially talk about foil and how they influence each other, but end up talking about how Huang influences just Lindo by making her stronger. There is also a lot of plot summary thrown in. While that is good and illustrates the point, the author could have talked more about the points they were trying to make rather than showing us the points, leaving it to the reader to figure it out. Lastly, I also felt that Huang wasn’t shown as being too much of an opposite with Lindo. Lindo is discussed too much rather than equally. Other than those few things, I think that this author did a really good job of answering the question. They had good answers, and although I disagree a little in the way they approached them, they did it well.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Author 2: &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The thesis is very strong and talks about how a minor character (the father) causes Celie to feel terrible for the rest of her life. The first body paragraph tackles Maslow’s pyramid of needs, which is a strong literary argument. However, the paragraph starts more and more to explore how females in general are oppressed rather than staying on topic with the relationship between Celie and her father. The paragraphs start to focus more and more on feminism and being a strong female. While I don’t disagree with the sentiment, I feel like the author should have talked more about the relationship and how it makes an impact on the book, rather than talking about the plot and how the main character grows and learns. I don’t really think that the main character and her father are foils, since they are antagonists with some stuff in common. If they bounce ideas off each other, it might make more sense.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Author 3: &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;This essay starts out making a claim that Baba and Hassan were foils because they were very similar. Foils are people who are different, and whose relationship is shown to be important. While this relationship was important, Amir often said that Baba and Hassan were similar, that Baba wanted a son more like Hassan. The first body paragraph supports the illogical thesis and introduction, so the author knows how to draw from evidence. They could have stated their point more clearly, and used more than one example to make a point. The third body paragraph moves onto differences between the two. I feel like this should have been explored more in order to have a much better essay that could have answered the prompt a whole lot better. The conclusion has very little to do with the thesis, and could work to answer a different prompt much better. Overall, a rather weak essay.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Hamlet Final Summary and Analysis</title>
		<published>2018-03-12T02:17:22+00:00</published>
		<updated>2018-03-12T02:17:22+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/hamlet-final-summary-and-analysis/"/>
		<id>/posts/hamlet-final-summary-and-analysis/</id>
    
		<content type="html" xml:base="/posts/hamlet-final-summary-and-analysis/">&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Shakespeare is the author, lived during the 1500’s to 1600’s. He was a famous playwright, and had his own theatre that he wrote his plays for.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The setting is Elsinore, in Denmark. It is set during a similar time to Shakespeare, or before him.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Plot: Hamlet is a moody teenager, whose father recently died. His father’s ghost appears to him, and informs Hamlet that the current king (Hamlet’s uncle) killed King Hamlet, and that Hamlet should get revenge. Hamlet vows revenge. His family worries about him, especially his recently remarried (to his uncle) mother. His mother and his uncle seek out Hamlet’s old friends to spy on him and tell them what is wrong. Hamlet realizes that his friends are trying to spy on him. He also comes up with a plan to make sure that his uncle did actually kill his father, to verify what the ghost said. This plan involves a play that mimics what the ghost told Hamlet, and then watching the King’s reaction. Once the King reacts unfavorably, Hamlet starts making plans to kill him. Hamlet kills Polonius (mistaking him for his uncle) while talking with his mother. He is then sent to England, but he escapes and sends his old friends (Rosencrantz and Guildenstern) to their deaths. He returns, realizes his girlfriend committed suicide, and attacks her surviving brother. They all head back to the castle, where his uncle and the brother are poisoning everything. A fencing match takes place, to kill Hamlet, but Hamlet poisons the brother, who poisons Hamlet. The queen drinks a cup of poison and dies. Hamlet makes the King drink poison so he dies. Hamlet hands the throne off to another prince (Young Fortinbras) before dying.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Characters:&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Hamlet – A young teenager who studies in Germany. His father just died, and he feels a strong sense of revenge against his uncle who killed him. He is quite intelligent, and driven.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Claudius – The younger brother of King Hamlet. He is shown to be quite cunning and deceitful, willing to kill his nephew to hold on to the throne with no challengers. He loves Hamlet’s mother, and never fights people in person. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Laertes – Overprotective older brother. He loves his family, and is popular with the inhabitants of the castle. Willing to do anything for his honor, including poison. Maybe easy to manipulate, or Claudius is really good at manipulating.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Gertrude – Hamlet’s mother and queen of Denmark. She loved King Hamlet dearly, and according to Hamlet had a very happy relationship with him. She makes Hamlet very angry by remarrying, and we see that she has very few doubts or regrets. She does speak with Hamlet before he sets off to England, where she agrees to keep his secrets, and starts to acknowledge that she may have done something wrong. While she loves Claudius, she kept her son’s secret from him.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Narrative Voice – Since it is a play, the only narrative voice are the directions, which are brief, and to the point. Very impersonal. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Style – Point of view is everyone, since it is a play, but we get more asides from Hamlet. Since Hamlet is the main character, we get more info from him, but he is not telling the story. Tone feels more dramatic than other Shakespeare plays. Lots of comparisons and flowy writing. Because many people are royalty, Shakespeare gives them blank verse lines, which are usually iambic pentameter. The tone is also serious, since this is a tragedy. There are lots of symbols. Main ones would be the poison that is used, and the “something is rotten in the state of Denmark”. Another symbol would be the deaths of the people representing the way royalty would be dying and losing power all across Europe. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Quotes: “Something is rotten in the state of Denmark”. Meaning is to show how a supernatural being can influence us all. Also relates to the poison I mentioned earlier, death, corruption, and decay.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;“Now cracks a noble heart. Good-night, sweet prince;&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;And flights of angels sing thee to thy rest.” – this is rather interesting because it is being told to someone who ends up causing many different deaths. Despite the number of people that died due to Hamlet’s actions, his best friend Horatio still believes that Hamlet will go to heaven.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;In Shakespeare’s Hamlet, we are taught that inaction is the weakest and worst thing that man can do.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Setting – Hamlet is literally a prince. His job is to do things for his people. By neglecting that duty, he dooms Denmark. Plot – Hamlet fails to act on Claudius, preferring to make sure and dilly dally, before making too many bad decisions leading to his death. There is a lot of symbolism (that I saw) with not doing your job (inaction) and something being rotten in the state of Denmark. I can’t think of any imagery that supports this thesis, but the image of Claudius praying while Hamlet doesn’t attack him is fixated in my mind.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Response to Course Materials 2&#x2F;26</title>
		<published>2018-02-27T03:14:23+00:00</published>
		<updated>2018-02-27T03:14:23+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/response-to-course-materials-2-26/"/>
		<id>/posts/response-to-course-materials-2-26/</id>
    
		<content type="html" xml:base="/posts/response-to-course-materials-2-26/">&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The first thing that we did was our final exam project. First off, I love how open ended these are. I always have way too much fun with creating games, and when it doubles as a school assignment, I can feel productive while having fun. I spent too much time on this game for homework, but it was worth it and a ton of fun in the end. I think that most of the class enjoyed it, and if we have an open ended project for Hamlet, I can’t wait to create “Stabby Hamlet”.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;I have created Stabby Macbeth, Stabby Boys (this one), and I am working on a more full featured game for a class I am taking at MSU. I always love how there are well written games, that make it more of an interactive literature experience.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;After that, we covered a bunch of poetry. Hearing my classmates debate and talk about the different viewpoints made me realize that there is rarely one “true” answer for any given piece of text. There are bad answers that may lack evidence, but there are a lot of good ones, influenced by prior readings. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;We then started a Shakespeare unit, with Elizabethan theatre, before jumping into Hamlet. Hamlet is a good story, albeit with some missing parts almost (I really wish that Shakespeare had written an addition for it that explained more of the plot). He died in his fifties, so it isn’t unreasonable that he may have had a sequel or prequel in mind. We read through the play, which is always nice. Polonius’ lines were a pain. He didn’t have that many, but they were literally tongue twisters.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;We also did the multiple choice creation exercise. Learning what it is like from the other side does better prepare us for the AP. I had a few learning moments where I realized just how College Board designs questions, and how to exploit that to do better.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The poetry projects were very cool. I loved seeing how many people were able to have different opinions on something as short as a poem. Just being forced to sit down and analyze something isn’t something I have done since middle school. Since I have learned a ton since then, it was fun to read something and give myself time to mull it over. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;My goal score on the AP exam is a 5. I need to work on my writing skills a ton, I think that I have been underperforming recently. I don’t often write out the connections I make in my head, or my thesis morphs as I write. Most of this is just practice. The only way you could help me is by grading extra AP essays that I fill out by myself, and leaving helpful feedback.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>2006 Open Prompt</title>
		<published>2018-02-11T14:54:17+00:00</published>
		<updated>2018-02-11T14:54:17+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/2006-open-prompt/"/>
		<id>/posts/2006-open-prompt/</id>
    
		<content type="html" xml:base="/posts/2006-open-prompt/">&lt;p&gt;In Of Mice and Men, John Steinbeck uses a country setting to show how primative the country can often be. He has many simple laborers working in a secluded area, where murders take place without anyone in the outside world really noticing. The country setting also manages to create some simple characters, such as Lennie and Candy. Lastly, the setting influences the dreams that the characters have while living there.&lt;&#x2F;p&gt;
&lt;p&gt;Having sheep dogs killed, and Lennie’s puppy, shows that nobody in the country of this book really cares. It is a part of life, and the people just accept it. When Candy’s sheep dog is killed, everyone accepts it, and they try to get him a new dog. Lennie pets his puppy to death, and Curley’s wife to death. The killing of a human being would ordinarily make the news, and cause sensation, but we are left thinking that soon this will only be a memory. The country setting serves to cover up some of the more viscious crimes that take place.&lt;&#x2F;p&gt;
&lt;p&gt;The setting creates a few simple characters. First we have Lennie Smalls, who has always lived in a country area with his protector, George. We have Candy, who offers his life savings for a farm, without any guile or tricks. Carlson is also a part of the story, with him playing a simple brute of a man. The country setting shows how uncomplicated many of these people are. When Candy offers giving all of his money to three strangers, only George is a little apperhensive at first. He warms up to the idea as well, something that would not happen in a city setting.&lt;&#x2F;p&gt;
&lt;p&gt;The biggest influence the country has on the story is with the dreams of the characters. Candy’s dream is to work his own land. He has spent his entire life working for other people, and now he wants to work for himself, still within the country. If this had been any other setting, he wouldn’t have wanted that. Curley’s wife wants to be a movie star, something that is as far away from the country as possible. George and Lenny’s dream is similar to Candy’s dream, to have their own farm with rabbits. Crooks wants his own garden where he can plant what he wants. All of these people clearly want things based on what they have seen. Curley’s wife wants to get out of the country, everyone else wants a better version of it for themselves.&lt;&#x2F;p&gt;
&lt;p&gt;The country setting in Steinbeck’s Of Mice and Men leads to many mishaps, dreams, and adventures that would not be possible without it. The pleasant setting belies many of the killings that take place there, the people have dreams due to it, and some of the characters are quite simple.&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Open Prompt 1 Jan 28</title>
		<published>2018-01-28T20:46:17+00:00</published>
		<updated>2018-01-28T20:46:17+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/open-prompt-1-jan-28/"/>
		<id>/posts/open-prompt-1-jan-28/</id>
    
		<content type="html" xml:base="/posts/open-prompt-1-jan-28/">&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;2006 Question 3&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;3A&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;This response does a really well job of responding to the prompt and staying on topic. The author focused on the setting of the book, and the specific development it had on one character. The main issue with this response was how much it overfocused on only one aspect of one character. While there was some comparisons between two settings, the majority of the essay was talking about how the Anne was innocent and smart, just like the countryside. As I read it, I felt that the author was simple repeating themselves, without giving much new information. I also thought that the author could include more focused detail. Certain characters were introduced without giving much more thought, when related to the setting. Overall, this author definitely connected the setting to the values of the character they chose, Anne. This is a very strong response.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;3B&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;This response tries to respond to the prompt, but doesn’t do that well of a job. One entire paragraph is dedicated to just plot summary, without focusing on the details of the setting. This author connected setting to plot influence, but barely touched on the values of the setting that add to the story. The only affect the author describes is one of confusion due to the contrasting countryside and city. The conclusion makes a different point than the introduction. The conclusion says that the main point the play makes is that of comedy through confusion, whereas the introduction says that the setting develops confusion, in a comedic play. I feel like the author should have focused more on the point they were making in the conclusion rather than the thesis they put forward at the start. The value they would have used would be comedy, and they could show how the differences between the two settings creates comedy. Adding the confusion intermediate weakens their response.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;3C&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The thesis starts out weak, and simply spits back out at the question&#x2F;prompt. The second paragraph gives no specific examples of setting. The author simply makes generic statements about how the text uses diction and has a stream of consciousness. The third paragraph makes a generic point about how Faulkner says that the south has backward values in his story, but the author fails to provide any specific evidence or plot points to corroborate this argument. The next few paragraphs start to make a point about a specific character being influenced from where they are from, but that is not the same as setting. The book doesn’t (from what I could gather) actually take place in the south. It just has characters that are from the south. All of the comparisons that the author makes seems to rely on calling southerners stupid, even though the south isn’t the setting. The conclusion says that all of the weird bits in the story can be blamed on the south. The author never discusses any values or ideals that might lead to this conclusion. &lt;&#x2F;span&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Oedipus Rex</title>
		<published>2018-01-08T22:12:50+00:00</published>
		<updated>2018-01-08T22:12:50+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/oedipus-rex/"/>
		<id>/posts/oedipus-rex/</id>
    
		<content type="html" xml:base="/posts/oedipus-rex/">&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Oedipus Summary and Analyses&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Author  – Sophocles. Greek playwright, not all of his work survived. He wrote this play for an Athenian contest, where he came second.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Plot:&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Oedipus rules a troubled kingdom. He sends his brother in law (Creon) to a oracle, to see how the problem may be resolved. Creon tells Oedipus that the killer of their king must be apprehended for everything to return to normal. Oedipus resolved to find the killer, and asks everyone to find him. Jocasta (his wife) and Oedipus talk, and they summon the sole survivor of the attack that killed Laius. A messenger arrives, and says that Oedipus’ father is dead. Oedipus is happy, because he didn’t kill him, stopping the prophecy. The messenger says that Oedipus’ father is adopted, as is his mother. He tells Oedipus that one of Laius’ men gave him a child, who he gave to Oedipus’ parents. They interrogate that man, who tells Oedipus that he is the son of Jocasta. Jocasta hangs herself, and Oedipus uses her brooches to gouge his eyes out. He leaves, and banishes himself.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Characters:&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Oedipus – Prideful king who believes that everything he does is right, and often disregards other people. He holds himself to very high standards.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Creon – Intelligent man who helps in managing the kingdom, and provides advice to Oedipus. He is a little prideful, but is willing to reconcile with Oedipus after their spat.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Jocasta – Oedipus’ wife, who is scared of the truth. She begs him to go back on his promise, and would rather live in ignorance than embrace the bitter truth.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Tiresias – Blind prophet who knows everything. He refuses to tell Oedipus the truth, and when he does, he enrage Oedipus. They have some verbal wordplay, and then Tiresias leaves.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;There is no narrative voice here. The point of view is that of the person watching the play. You don’t see anyone’s inner thoughts, just the drama playing out in front of you. The tone is also rather impersonal. Since this is a translation, the author can’t add additional remarks, and interpreting what Sophocles may have meant 2000 years ago is very difficult. The imagery he uses is very strong, especially near the end with the blood pouring out of Oedipus’ eyes is shown. Whenever a character reminisces about their past, it is well described and easy to understand. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Symbolism is very strong. The fall of a prideful arrogant man, with pride being symbolized by Jocasta’s golden brooch. A blind man who sees symbolizes intelligence, such as Tiresias. The majority of the story happened at a crossroads, showing that even though a prophecy was declared, it wasn’t forced on anyone. Oedipus and Laius made it happen on themselves.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Quotes:&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Creon – “You are stubborn—obviously unhappy to concede, and when you lose your temper, you go too far. But men like that find it most difficult to tolerate themselves.” This quote is foreshadowing what will happen later in the story, as Oedipus gives up on himself. He would have killed himself, but he was too proud to do that as well. The best form of torture that he can come up with, is to live with himself, because that is the thing he most fears.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Tiresias – “Let me go home. You must bear your burden to the very end, and I will carry mine, if you’ll agree with me.” Tiresias knows what Oedipus will do. He also seems to liken their burden as being similar, foretelling the blindness that will occur to Oedipus. Oedipus chooses not to agree with Tiresias, making his story that much more tragic.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;In Oedipus the King, Sophocles illustrates how pride brings downfall, by looking at Oedipus’ character and showing his stubbornness.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;This is illustrated by dialogue. Everything is illustrated by dialogue, since there is no voice, and any style is translated. Oedipus starts out by calling his citizens children, and pretends to know what has been going on. He quarrels with the only threat to his rulership, Creon, even when Creon is just trying to help him. He talks with Tiresias, and belittles him, just because of the truth. He does irrational things because of his pride. He finds out who is true mother and father are because of the promise he makes to all the citizens, not because he hates ignorance. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Reponse to Course Material</title>
		<published>2017-12-17T17:07:59+00:00</published>
		<updated>2017-12-17T17:07:59+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/reponse-to-course-material/"/>
		<id>/posts/reponse-to-course-material/</id>
    
		<content type="html" xml:base="/posts/reponse-to-course-material/">&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;We learned about the different tones that authors will use when talking about literature. This felt like a review of what we learned in British Literature.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Then we started Kite Runner. It was a great book, that kept me hooked while I was reading it. By breaking up the story the way Hosseini did, he was able to keep talking about his themes while appearing fresh. He showed the parallels and the differences between two very different cultures. Our discussions were a bit slow and awkward, but it was nice to hear the thoughts of other people who had just read what I had read. Not going to write much else here, we spent a lot of class time reading. We studied this book quite well, and came up with a good theme statement. The most important theme, in my opinion, was that guilt leads to redemption.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;We did peer reviews of poetry blogs this time around, and that was super helpful. I needed to be more concise and accurate with my words and thesis. We also did some practice multiple choice on the Kite Runner, which went smoothly. I need to do more practice AP Lit multiple choice. I did not do well on the 52 that we were given in class. Reviewing my answers made me realize that there are usually two that are similar, but one is always backed better by the text.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;We did a final Kite Runner summary and analysis blog. We also read through all of Oedipus Rex, which is a very unique play. It explores 2000 year old tragedy, and I am still amazed by how well it was written, despite being so old. It was still fascinating.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;That is all we did. It was mostly reading Kite Runner, which I enjoyed, and some multiple choice work.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>The Kite Runner</title>
		<published>2017-12-14T03:39:08+00:00</published>
		<updated>2017-12-14T03:39:08+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/193/"/>
		<id>/posts/193/</id>
    
		<content type="html" xml:base="/posts/193/">&lt;p&gt;&lt;strong&gt;AUTHOR &amp;amp; SETTING&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Khaled Hosseini was born in Afghanistan, during a tumultuous time. He moved to America in the 1980’s, escaping much of the brutal Taliban regime. This novel takes place in Afghanistan for Amir’s childhood, and in America for his adulthood. He returns to a very different Afghanistan in 2001. Amir’s timeline parallels Hosseini’s in many ways.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;CHARACTERS&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The major characters are Baba, Hassan, Soraya, Assef, and Sohrab.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Baba is Amir’s strict father, who wants his son to be like him. He is often disappointed in Amir.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Hassan is Amir’s best Hazara friend growing up. He is raped by Assef while Amir hides, later feeling guilty.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Soraya is Amir’s wife. She moved to the US earlier and ran off with a different man, which divides her from the Afghan community.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Assef is Amir’s tormentor. He hates Hazaras, and brutally beats Amir as an adult after joining the Taliban.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Sohrab is Hassan’s son. He is abused by Assef, saved by Amir, and goes to America. Eventually he smiles.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;PLOT&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The story starts in Amir’s childhood, of him and Baba’s relationship being strained. He has fun with Hassan, and teases him about his illiteracy. There is a kite fight scene, with Amir winning to gain his father’s acceptance, but that is also the same day Hassan is raped by Assef. Amir withdraws from Hassan, and manages to get Ali and Hassan to leave his house. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;He leaves for America with his father when he is 18, because of the hostilities due to Russia. He and Baba move to Fremont, California, and he finishes high school while Baba smokes and pumps gas. Amir is accepted into college, and he meets Soraya, his future wife. Baba gets cancer, Amir asks him to help him get married to Soraya. After their marriage, Baba dies, and Amir lives in peace for several years.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Rahim Khan, Baba’s old business partner and Amir’s favorite adult, sends a message asking for Amir to come to Peshawar, Pakistan. He goes, and a dying Rahim Khan asks him to rescue Sohrab, Hassan’s son, and that Hassan was Amir’s half brother. Hassan is now dead, and Amir feels guilty enough to go to Taliban occupied Afghanistan, and starts searching for Sohrab.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;He and his driver Farid find Sohrab being abused by Assef, now an adult. Assef and Amir fight, with Assef beating Amir. Sohrab threatens to shoot Assef’s eye out, and then he does. He and Amir escape with Farid to a hospital. Amir recovers, encounters numerous difficulties in getting Sohrab back to America. Sohrab tried to commit suicide, but Amir is able to save him and take him to America. Sohrab is silent for almost a year, but through kite flying they are able to connect, and Sohrab finally smiles.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;STYLE&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Hosseini uses his point of view, as an adult reflecting on his childhood, to add many details to the story. He uses it to foreshadow events to come, and to criticize his choices. We get truly feel when Amir regrets something, or when he was proud of something. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The tone of the novel leans towards the factual and emotional. Hosseini is trying to get you to notice things that people don’t like to talk about. Mainly the horrors committed in Afghanistan by the Taliban, rape, and abuse of power. He also tackles classism, and uses his tone to show what he thinks of each of those topics. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;There is a lot of imagery in the novel. The imagery of Afghanistan tends to be much more run down and dark when compared with the way Fremont is described. When Amir is injured, we can see exactly how badly beaten he is in our mind. We can picture the darkness that swallows him as he is smuggled into Pakistan.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Some symbols I noticed was Assef being abuse of power, Sohrab being innocence, and Amir + Bab showing redemption through guilt. In general, each character can represent a facet of life. There are definitely more symbols in this book, I just need to think about them more.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;QUOTES&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;“True redemption is . . . when guilt leads to good.”&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;This quote serves as a direct theme statement from someone in the book. Many people feel guilt throughout the story, nearly every character. All of them do good things after feeling guilty.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;“Baba loved the &lt;&#x2F;span&gt;&lt;em&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;idea &lt;&#x2F;span&gt;&lt;&#x2F;em&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;of America. It was living in America that gave him an ulcer.”&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;This quote can be used to explore the ideas of classicism and the difference between what you see and what you get. Baba became a lower class worker once he moved, but he still embraced the idea of the country that would kill him&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;THEME&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;In Kite Runner, Hosseini makes a compelling argument that guilt leads to redemption.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Plot – Amir goes back to Afghanistan because he feels guilty. Baba creates charities to deal with his guilt. Hassan felt guilty for lying about taking money, so he moves in with Rahim Khan. Sohrab feels guilty about being abused, redeeming himself by talking with Amir about a new life.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Closed Prompt 2 Blog Post &amp;#8211; Arham Jain</title>
		<published>2017-12-03T19:12:46+00:00</published>
		<updated>2017-12-03T19:12:46+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/closed-prompt-2-blog-post-arham-jain/"/>
		<id>/posts/closed-prompt-2-blog-post-arham-jain/</id>
    
		<content type="html" xml:base="/posts/closed-prompt-2-blog-post-arham-jain/">&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Blake focuses on different aspects of a chimney sweeper’s life in his “The Chimney Sweeper” poems. In the first one, he uses anecdotes and imagery to emphasize the work that the sweepers do, and to show the difference between the dirty work and heaven. In the second one, he uses dialogue and metaphors to show a child’s point of view. Both poems convey similar information, but each leaves the reader with a different understanding of the situation.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The first poem focuses on using anecdotes and imagery to convince the reader that the life of a chimney sweeper can be joyful. By using common names such as “Tom”, “Dick, Joe, Ned, &amp;amp; Jack” and describing how the chimney sweepers live, Blake uses an anecdote to help build a connection with the people he is talking about. He also uses great imagery, such as “coffins of black” and “green plain, leaping, laughing they run” to show the difference between their work and heaven. He seems to be describing a dream that Tom has, that encourages him to keep sweeping since he will be rewarded in heaven, even though his life is terrible. Black coffins also seems to imply that many of the children are dying due to the soot they inhale.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The second poem uses lots of dialogue to show a conversation between a man and a child who appears to be crying. The entire poem is a conversation, with a child telling the man why he is so sad, and his life’s story. The words “They are both gone up to the church to pray.” tell us, for example, that the child is an orphan. The dialogue makes the story seem more believable, and gives the reader more freedom to interpret, since it is word for word what the child said. Whatever interpretation the reader has, is more powerful because they had to come up with it. This poem also uses metaphors such as “the clothes of death” and “notes of woe” that show how close many of these chimney sweepers are to death. Such drastic comparisons leave an impression in the reader’s mind of what fate eventually befalls young children.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Blake is criticizing the exploitation of children to sweep chimneys, and is using religious elements to make the reader feel even worse for the kids. He does this in two different poems by using literary elements like metaphors, dialogue, anecdotes, and imagery. He is argue for a better future for poor children though his writing.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Closed Prompt 2 11&#x2F;18</title>
		<published>2017-11-18T23:00:11+00:00</published>
		<updated>2017-11-18T23:00:11+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/closed-prompt-2-1118/"/>
		<id>/posts/closed-prompt-2-1118/</id>
    
		<content type="html" xml:base="/posts/closed-prompt-2-1118/">&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Evening Hawk describes a hawk flying around, and its viewpoint, during sunset. Robert Penn Warren uses his poetic language to describe the majestic hawk, and relates it to embracing how powerful life is. He talks about Time, and the world to show us the different aspects of life..&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The first stanza has many references to geometry, with “plane of light” and “black angularity”. Warren is paints a picture of a perfect place through his use of mathematical terms. He talks about light, and describes the contrast with the darkness of the peak. He uses these lines to describe the setting that the hawk is flying through and exploring. The reader gets the impression that the hawk is going from the light of the setting sun, and into the darkness of the mountain willingly, representing how life has its ups and downs. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The second stanza focuses on a different aspect of life: aging. The hawk “Scythes down another day”, showing how we are always losing time. The scythe is a reference to Kronos, who was considered the Titan of time by the Greeks, wielding the same weapon. The rest of the stanza talks about time passing, such as the “crashless fall of stalks of Time”. The next stanza, of one line, states that we all have regrets, that each stalk is “heavy with the gold of our error”. Warren is also alluding to increasing consumerism, which happened during his lifetime, by using the word gold.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The fourth stanza references the Sun. The “last light” alludes to this, but the phrase “world… swings into shadow” makes it clear. Warren is trying to say that only celestial objects can be perfect. Humans make mistakes, and inanimate objects cannot make mistakes.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The last two stanzas describe how all humans can do is learn while we live. Warren mentions a bat whose “wisdom, Is ancient, too, and immense”, telling us that there are other creatures than the hawk, who are part of this world. He is telling us to be like the bat, and learn as much as we can while fumbling through life, before Time catches up to us and the inevitable happens. The description of history “drip in darkness” is simply reinforcing that humans must learn about our past as well. He is asking us to make sure that history is embraced in the light, and not forgotten in a cellar.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Warren uses his language, with powerful diction and allusions, to describe the scene and convey his interpretation of the meaning of life, and how humans can do better. While he may be a little critical of our society, similar to Albee, his words have good intentions behind them. He is hopeful that humans can change the way we look at life.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Response to Course Material</title>
		<published>2017-11-12T17:18:13+00:00</published>
		<updated>2017-11-12T17:18:13+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/response-to-course-material/"/>
		<id>/posts/response-to-course-material/</id>
    
		<content type="html" xml:base="/posts/response-to-course-material/">&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;We started out this unit talking about Absurd theatre and comedy. I hadn’t heard of these topic before in a school setting, especially not Theatre of the Absurd. The definition of comedy was very interesting as well. I hadn’t thought about humor following a defined set of rules.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Our main focus was The American Dream. I learned so much about Albee, and the time period surrounding that literature. I always feel like literature is a reflection of a time period, and this piece was no exception. This was also the first time I had seen an author critique their time period. I was used to praise of the time they lived in, not outright attack of the era.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;This was the first Absurdist play I had read, and it was a good introduction. Based on what I have seen so far, this play had absurdist elements, but it wasn’t the best example. The play was non-circular, because the Young Man replaces Grandma at the end. This play has had so many different interpretations as well. We read one interpretation that Grandma represented the old American Dream, while the Young Man represented consumerism and what society was moving towards. While I agreed with this interpretation, I also felt that being given an interpretation was bound to influence the rest of our discussion, which I saw in our theme statements. Most of them seemed to take for granted what the Young Man and Grandma represented. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The vocabulary we learned through vocabulary.com was useful in describing the themes from The American Dream. I knew some of the words already, but a few were new to me. Learning new words that can be used to describe is always a good thing. The terms we learned, on the other hand, is only useful to literature. Some of the terms, such as poetry, blank verse, and foot, I will use throughout my life, but words such as epizeuxis I am likely to forget once I get to college. Still, learning all of these terms was an interesting challenge, and recognizing them will be another challenge. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Learning about how to tackle the MC AP Lit questions was difficult. Literature is inherently open ended; asking students to narrow choices down between two options was tough. The questions are written so that most of the viewpoints are defensible, but only one is correct. I personally hated that, but I can think of no other way of incorporating MC questions into a literature based class. That is why I enjoyed the writing assessments we had more, because they asked us about our thoughts, and we were free to pick from whatever we wanted to.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;We covered many different topics over the course of this last month. Most of them can be related to each other, especially the essay writing and the American Dream. I look forward to reading more great literature!&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>American Dream Summary and Analysis</title>
		<published>2017-11-06T21:43:05+00:00</published>
		<updated>2017-11-06T21:43:05+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/american-dream-summary-and-analysis/"/>
		<id>/posts/american-dream-summary-and-analysis/</id>
    
		<content type="html" xml:base="/posts/american-dream-summary-and-analysis/">&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The American Dream, by Edward Albee&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Setting&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;An apartment, set in the 1960’s. Multiple shops near by. The apartment is spacious enough for 3-4 people.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Author&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Edward Albee  was adopted when he was very young by rich conservative parents, who he always felt apart from. His parents sent him to multiple boarding schools and academies, which he kept changing. He always felt like a poster child, a toy on display. He left his family in the 1940’s because he wanted to be a writer. He wrote mostly plays that critiqued American culture. He was also a homosexual man, and his parents still forced him into an engagement with a woman.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Characters&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Grandma – A unique old woman who critiques Mommy, and tries to be caring to most others. She argues with Mommy at the beginning, then says that she is quitting her act and talks normally with Mrs. Barker. Later, she encounters the Young Man, and compliments him on being “The American Dream”. She looks around the house, missing it, before walking out with her boxes. The boxes contain her past 86 years of living, and her dog. She then leaves, escorted by the Young Man. At the end of the play, the audience can see her as an outsider, where she breaks the fourth wall and addresses the audience, closing out the play.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Daddy – A man who doesn’t feel right in his own gender. He doesn’t have much say in what goes on, and tends to simply accept what is happening. He shows suicidal thoughts, hoping he could just get it all over with. He is tired of what happens every day in his household. On the whole, he is a hollow character, unusual for the time period. We don’t know his job, but he recently had a gender change surgery. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Mommy – She has most of the lines in the play. As a child, she was a decietful little girl, tricking kids into giving her candy. As an adult, she argues frequently with her mother. She states that “the van man”  is coming to take Grandma away. When she doesn’t get something that she wants, she belligerently attacks the person who is denying her satisfaction. When Grandma leaves, she appears to show some remorse and misses her, however this quickly passes once the Young Man replaces Grandma. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Young Man –  He is in his twenties, and was an identical twin. He claims that he feels hollow inside, after incidents occurred to his twin.He seems  to represent a Gilded Age, where everyone just wants what they can buy with money. He is quite happy to comply with whatever if someone has money. Despite with the young man says, he is still quite caring towards others. At the end of the story when Grandma is walking out, he offers to escort her to the elevator.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Plot&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The play starts with Mommy and Daddy complaining that some visitors are late. As they complain about how they can’t get satisfaction, Mommy recounts how she went to go buy a hat, and returns it after she feels the color was off. Daddy nods along and just goes with the flow.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Grandma enters the scene, carrying many nicely wrapped boxes. She complains about the bathroom which leads to Daddy insulting her. Grandma then goes off on a tangent, saying old people are always treated unfairly.  Mommy recounts her childhood remembering how nicely Grandma wrapped boxes for her during lunch. She talks about how she was able to convince her classmates to give her food everyday.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Grandma calls Mommy a tramp for marrying a rich husband, just for the money. Mommy seems proud of the fact that she was a able to marry him. The doorbell rings, and Mrs. Barker enters the scene. Mrs. Barker removes her dress, and asks Mommy and Daddy why they called her here. Grandma and Mommy get into a fight, with Mommy leaving to get Mrs. Barker some water. Daddy leaves to break Grandma’s television.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Grandma and Mrs. Barker talk about the “bumble”, Mommy and Daddy’s child from 20 years ago. They mutilated the child until it died because they were unhappy with how imperfect it was. Grandma leaves Mrs. Barker with this thought, not explaining much about it.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The Young Man enters the home, and immediately attracts the attention of Grandma. She describes him as the “American Dream”. The young man says that he will do anything for money, to which Grandma replies that there is plenty of money around here. the young man recounts his tale,  explaining how he felt being mutilated throughout his childhood. He says that he was born with a twin, and that they were separated at birth. He explains how as life went on, he started to lose the feelings that normal human beings are able to have. Grandma seems to realize that the “bumble” and the young man were twins.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Grandma decided to leave the house and replace herself with the Young Man.  Mrs. Barker explains to Mommy and Daddy how the van man came and took Grandma away. Mommy is emotional for a moment, but then Mommy and Daddy realize that the Young Man is there.  mommy directs the young man to get out some drinks, so he gets out 5 glasses. Mommy admonishes him for bringing out 5 instead of 4, signifying that she can no longer see Grandma while the Young Man still can.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The play ends with Mommy promising how she will tell the Young Man what happened to their previous child, and Grandma breaking the fourth wall, saying “Good night”.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Notes&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;There is no point of view, since this is a play. Albee is criticizing American culture and the path that we are on, and he longs for the true American past (Grandma). &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The historical references here are quite important. This is a period right after WWII, with the baby boomers still growing up. Most of the people watching this play would have remembered some effects of the Depression. Grandma at one point says “150 years”, which in context means the start of the American way of life. Mrs. Barker may be related to Eleanor Roosevelt, as both have husbands that had wheelchairs, and both were women of power.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Quotes&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;“I no longer have the capacity to feel anything. I have no emotions.” – Young Man&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;This is showing the despair the Young Man feels inside, while looking fine on the exterior.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;“She’d have you carted off too, if she thought she could get away with it” – Grandma&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Grandma is pointing towards how conniving her daughter is, and how she would have Daddy removed if possible. Hints towards Mommy having power, rather than the patriarch. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;“The truth is, there isn’t much you can say to old people that doesn’t sound just terrible” – Grandma&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Grandma is criticizing the way the world is today, by saying how nothing that is said to her nowadays feels nice. She actively feels the passage of time.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Theme Statement&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;In Albee’s American Dream, he argues that modern American ideals are leading us to a path of destruction, and that our older American values are vanishing. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Grandma is an old lady who disappears with her values. The Young Man describes himself as a broken person, and laments the death of his twin. These two are important plot elements.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The way the Young Man describes his inner self being terrible, while Grandma simply says he looks nice, draws a contrast between new and old through diction. Albee is stressing that the Young Man lives a terrible existence, and just because he looks good doesn’t mean he feels good.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Closed Prompt 1 2008</title>
		<published>2017-11-05T19:21:29+00:00</published>
		<updated>2017-11-05T19:21:29+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/closed-prompt-1-2008/"/>
		<id>/posts/closed-prompt-1-2008/</id>
    
		<content type="html" xml:base="/posts/closed-prompt-1-2008/">&lt;p&gt;&lt;strong&gt;Author 1A&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 300;&quot;&gt;Overall, this author does a great job analyzing Keats and Longfellow’s poems and meaning. The thesis statement is made well, and quite defendable. Saying that Keats and Longfellow have different viewpoints on life is the answer this prompt is looking for. The claim that both authors feel that life is short is well backed with textual evidence. The usage of the word anaphora is correct and shows that they know what they are talking about. The second paragraph analyzes the differences very well, pointing towards the contrast between the lives of Keats and Longfellow. The meaning that they are able to extract from a few words makes sense. The last paragraph fully backs the thesis and establishes the different viewpoint on life and death. The only thing I believe the author could have done better is add more to the thesis, by adding the first and second paragraphs’ argument. I would have mentioned the differences in love in the thesis, rather than say vague words about regrets they both have. This disconnect feels like the author started writing their thesis, found a better argument, but forgot to modify the thesis to fit their argument. Still, the body paragraphs and conclusion are very strong. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Author 1B&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 300;&quot;&gt;This author’s thesis is not as strong as the Author 1A’s. The only difference that this author finds is actually a similarity. He says that each one symbolizes a wasted life, but lists it as a difference. This author ties their claims and warrants together very well, along with supporting textual evidence. The first body paragraph is a good example of how one should approach one of these prompts. Evidence is all metaphor based, but all of the in text quotes make sense and are not mislabeled. The next body paragraph outlines more similarities between the two poems. However, no differences are discussed except for in the thesis, when the author states that they both have different feelings about death. There isn’t any in text evidence used to prove that claim. The conclusion is very abrupt and doesn’t do well to sum up their argument. This author needs to find more varied sources of evidence to back up their claims, and make more claims. The thesis needs to have a compare and contrast, not just a compare. The essay as a whole is lacking in substance, like the author was rushed. This piece could use a bit more time on the conclusion, and a third body paragraph where the differences are discussed.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Author 1C&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 300;&quot;&gt;This author focuses on only one aspect of both poems: the rhythm. The thesis statement does not discuss anything about the viewpoint of the poems. Furthermore, the thesis only focuses on similarities between the two. The first body paragraph doesn’t mention what type of literary device is being used to convey that the author is close to death, or has a fear of dying. The second body paragraph lacks explicit references to the text. Both of these body paragraphs come up with defensible conclusions. However, the author fails to back them up with claims, evidence, or warrants. The conclusion is also weak, as the author simply comments on how the two poems are similar and different. There is a sense of wrapping things up, but there is no argument to wrap up. The entire piece is rather weak, and it is hard to see what argument is being made, and how.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Fasting</title>
		<published>2017-10-14T01:09:10+00:00</published>
		<updated>2017-10-14T01:09:10+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/fasting/"/>
		<id>/posts/fasting/</id>
    
		<content type="html" xml:base="/posts/fasting/">&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;In Fasting, Desai uses point of view, diction, and dialogue to show that Arun is scared of the unknown; that his indian background leads him to not be familiar with nature, as as a result he is frightened by it. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Arun’s point of view is explored, with his thoughts telling us what he thinks of a beautiful summer day. “But how passionately he prefers its post office, its shops, its dry-cleaning stores” shows us how much Arun wants to be indoors. He loves the small buildings in this isolated small town. Phrases such as “back of his neck begin to prickle, as if in warning” show how opposed he is to the outdoors. He takes what is a beautiful summer day, the kind of day most people would enjoy, and he manages to make it seem negative in his head. Even at the very start of the piece, he “stands despondent” and is unable to make any excuses for staying at home, or in the town. He doesn’t want to go to the beach, and even when he does go, he dislikes it. Since Arun is indian, we can assume that he is from a city, and not from a small village. His had probably spent his entire life in a small area, not really exploring outside of the city. After all, there was no need to.  All of these details reinforce that Arun doesn’t want to try new things; he is quite literally afraid of the unknown.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;The diction that is used throughout the piece tells the reader how Arun is frightened. Phrases like “he starts wildly” show that he is almost amazed by the fact that he may have to go out in nature. “ugly, jarring note” gives the reader the impression that the sounds are discordant. Arun takes the sounds of nature, and the author uses diction to almost twist it. Instead of feeling at ease, the words convey a sense of nervousness; something is not alright. Finally, diction is used to make it seem like the woods want to actively stifle human life, with “creeping curtain of insidious green, these grasses stirring with insidious life, and bushes with poisonous berries”. This phrase is used to say that the active, lively woods are unnatural, and that even the innocent seeming bushes are poisonous to Arun. The use of diction to twist a summer day into a scary forest implies that he is panicky about going to the lake.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Finally, dialogue is used in this work to show a contrast between Arun and his family. “‘Summertime,’ he hears her singing, ‘when the living is eeh-zee—’” shows that faced with the same set of facts, the family members are drawing very different conclusions. The only reason for this to happen would be the background that each grew up in. Arun grew up in crowded India; the Pattons have been close to nature since they were born. This illustrates the difference in the two worldviews. “we’re not going to sit here waiting for them to come home—oh no.’” shows that Mrs. Patton is an independent woman. However, it also shows that Arun is willing to follow. He isn’t going outside because he wants to try something new, he is going outside because once his host family has their minds made up, they intend to follow through with something. This is important because of the lack of something: Arun never wants to go outside. Because his host family wants to, we can see that he is unhappy about the situation, but compliant. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Anita Desai masterfully uses strong diction, focused dialogue, and Arun’s point of view to show how he is scared of the unknown. These are also used to reinforce how Arun’s indian background colors his way of looking at a pure summer day. The meaning of the story is how the unknown is always frightening.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Recap</title>
		<published>2017-10-07T23:41:27+00:00</published>
		<updated>2017-10-07T23:41:27+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/recap/"/>
		<id>/posts/recap/</id>
    
		<content type="html" xml:base="/posts/recap/">&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Reading like a professor&lt;&#x2F;span&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;This book showed me the different ways authors will convey things to their readers. I simply didn’t know about how authors will try and reference other texts, or how rain and other events tend to relate to christianity. This unit showed me the complexities that are in the reading we embark on this year.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;ol start=&quot;2&quot;&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-weight: 400;&quot;&gt; The Nuts and Bolts of College Writing&lt;&#x2F;span&gt;
  &lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;This book taught me how to write concisely and how to not go overboard with the words. The people who read what I write don’t want to read thousands of words that could be summarized in a few paragraphs. That is the most important takeaway I gathered from this unit. Other things that I want to explore more include: flow, endings, and paragraphs. I had never thought of paragraphs as units of thought before, which is a comparison I liked a lot. I connected this with computer science in my head, thinking of a paragraph as a nested data structure. There are infinite types, but some work better than others to do the same thing.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;ol start=&quot;3&quot;&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-weight: 400;&quot;&gt; Essay Writing&lt;&#x2F;span&gt;
  &lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;This presentation was mostly on how to write essays for the AP Lit exam. I found the central question that we always have to answer to be the most useful thing in that powerpoint. Knowing what the grader wants is central in writing a good answer. I plan on using this statement for the rest of the year.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;ol start=&quot;4&quot;&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-weight: 400;&quot;&gt; Close Reading Practice&lt;&#x2F;span&gt;
  &lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Practicing everything that we had learned by using “A Jury of her Peers” was a great in class activity. Engaging with the class made me realize the number of different interpretations there were of the exact same story and words. Applying everything that we had learned was also lots of fun. After doing this activity, I went home and re read Ender’s Game. A bunch of religious references and other bits and pieces all jumped out at me.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;ol start=&quot;5&quot;&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-weight: 400;&quot;&gt; All Textbook Activities&lt;&#x2F;span&gt;
  &lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;These were fun to do. I enjoyed applying all of the skills that we were learning in class to real material, stuff that was closer to the AP Exam. I felt that the poetry section was harder than the prose. In my opinion, prose has a much easier to understand plot, whereas poetry has many more interpretations than prose. Realizing the differences between them this early is something I am thankful for.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;ol start=&quot;6&quot;&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-weight: 400;&quot;&gt; Peer Review&lt;&#x2F;span&gt;
  &lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;We already posted our reflections on this in Classroom, but there are a few things that I realized after doing it. This assignment helped me so much with my writing skills. Having multiple students review my writing and tell me what parts they liked and disliked is something that will help me write better. &lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;ol start=&quot;7&quot;&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-weight: 400;&quot;&gt; Terms List&lt;&#x2F;span&gt;
  &lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;I have been studying the terms in class and at home for a while now. I have gone through about 50 of them, and I like to learn them everyday. Some words are ones we covered last year in British Literature. Others are completely brand new to me. Learning these allows me to describe literature much better.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>AP Lit 9&#x2F;24</title>
		<published>2017-09-26T01:21:57+00:00</published>
		<updated>2017-09-26T01:21:57+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/ap-lit-924/"/>
		<id>/posts/ap-lit-924/</id>
    
		<content type="html" xml:base="/posts/ap-lit-924/">&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Ann Petry’s 1946 novel, The Street, shows how Lutie Johnson has a connection with the setting of an urban street. Throughout this passage, Petry establishes Lutie Johnson’s relationship to the urban setting through the use of imagery, by using phrases like “rattled the tops of garbage cans”. Petry uses personification, by saying “Fingering its way along the curb, the wind set the bits of paper to dancing high in the air, “. Petry also uses figurative language such as good diction, with “barrage of paper” and “grit stung their skins”.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Imagery is used very heavily throughout this passage. Petry says “rattled the tops of garbage cans” to show how strong the wind is, and to make the reader feel as if there is a rattling noise of metal on metal. She says “sucked window shades out through the top of opened windows and set them flapping back” to show that the wind was really powerful and changing; it was fluid. This gives the impression of the wind playing around with the people in the streets of this urban place. This wind later encounters Lutie, and all of these images start to make sense as it mercilessly drives her to find a warm room.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Personification is used to show the relationship between Lutie and the setting. By saying “Fingering its way along the curb, the wind set the bits of paper to dancing high in the air, “ Petry shows that the wind is moving across all of the people around it. It is trying to be as much of a nuisance as it can, by makes the streets dirtier, and by touching each person in a certain way. “She shivered as the cold fingers of the wind touched the back of her neck” shows that the wind is exposing everyone, and it is making people feel uncomfortable. The wind blowing through this less crowded city is unmasking everyone and making them feel like they need a safe place. This very wind that Lutie is trying to avoid quickly annoys her right before she finds a room to hide from it.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Petry also uses figurative language such as good diction, with “barrage of paper” and “grit stung their skins”. The barrage of paper really puts a picture in your head. You can almost see a tornado of paper being driven through the dirty streets. The grit flying into people’s faces makes them blind and hurt. “dark red stain like blood” tells you exactly the color that this rusted sign has, and it makes you feel a bit more afraid for the protagonist. “impossible angle on the rod that suspended it from the building” shows you just how precariously the sign was placed, and that the wind is so strong that it can makes even the impossible happen. This wind is so powerful that it has, in some ways, created this urban setting that Lutie is trying to navigate.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;In conclusion, the wind is used in many different literary ways to show the connection between Lutie and the city she is in. The author uses very powerful techniques to put a picture in the readers’ heads of what this wind can do, and how it touches everyone. Petry truly  establishes Lutie Johnson’s relationship to the urban setting through the use of such literary devices as imagery, personification, and figurative language, and makes the passage a pleasure to read.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>AP Lit Blog Post 9&#x2F;10</title>
		<published>2017-09-09T19:40:25+00:00</published>
		<updated>2017-09-09T19:40:25+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/ap-lit-blog-post-910/"/>
		<id>/posts/ap-lit-blog-post-910/</id>
    
		<content type="html" xml:base="/posts/ap-lit-blog-post-910/">&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;2006 AP Lit Free Response&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;“The following passage is an excerpt from Lady Windermere’s Fan, a play by Oscar Wilde, produced in 1892. Read the passage carefully. Then write a well-organized essay in which you analyze how the playwright reveals the values of the characters and the nature of their society.”&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;First Response&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Author A answers the prompt. They point out the differences in character between the women and the Lord Darlington. However, this response focuses too much on what is being revealed, rather than how. The prompt is asking for how the writer reveals details about the characters. Author A says about that is “a mundane situation to reveal character”, and then picks apart a few lines of dialogue to show how and what it means for the character. I feel that they could have included more dialogue, and started with the dialogue, rather than their impressions of the characters. The last paragraph is the most organized of them all, and it finishes out a strong argument. The author is able to back their claims with solid quotes, and I found myself agreeing with them on a few points. Overall, this response is quite good, but the author could have been more direct in answering the prompt. EDIT: After reading the other responses, I feel like I was too critical of this one. This response is the strongest one of them all, but it could use a little bit of work, like I mentioned above.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Second Response&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;This author barely answers the prompt. There are very few direct quotations, and they only talk about their impressions about the characters. The introduction is okay. The author simply rephrases part of the prompt and then provides what they thought of each character. The second paragraph deals with what they thought of Lord Darlington, which happens to agree with the first author. In this paragraph, the author mostly talks about how the lord is funny and doesn’t judge people based on their “scandals”. While I agree with the author, this &lt;&#x2F;span&gt;&lt;strong&gt;does not answer the prompt.&lt;&#x2F;strong&gt; &lt;span style=&quot;font-weight: 400;&quot;&gt;There is very little analysis on how the author reveals the character. The piece reads more as an argument for what each character is like. In the second to last paragraph, author B references the text a lot more, trying to answer the prompt better. In the last paragraph, they conclude by mentioning that dialogue is shows the personalities of each person, but they don’t mention how or why.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt; &lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Third Response&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;This response is the weakest of them all. It only covers one character, artificially limiting the author to a set amount of content. The response also spends a lot of time directly “translating” the dialogue that is said, rather than analyzing it. This author also does not really answer the prompt. In their conclusion statement, they talk about how our society and the society mentioned in the play are not that different. Their central claim is based on comparing our world to the world described in the text. This response makes it feel like they’re answering a completely different prompt than the one that is mentioned. They talk far too much about the world, and they end with a call to action, on making the world a better place. This read like an essay that was based on a similar prompt. It does all the right things, but it doesn’t even remotely answer the prompt, and it doesn’t have the content that was in the other two responses.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Programming Languages Explained</title>
		<published>2016-05-27T12:12:43+00:00</published>
		<updated>2016-05-27T12:12:43+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/160/"/>
		<id>/posts/160/</id>
    
		<content type="html" xml:base="/posts/160/">&lt;p&gt;You might hear someone call themselves a programmer, but what does that really mean?&lt;&#x2F;p&gt;
&lt;p&gt;It means that they know one or more programming languages. Now what is a programming language?&lt;&#x2F;p&gt;
&lt;p&gt;A programming language is the way a programmer can tell the computer what to do. There are many programming languages out there, but I will touch on the ones that I have used and liked for this post.&lt;&#x2F;p&gt;
&lt;p&gt;First off, we have C. C is one of the oldest languages (1972) that is still in heavy use today. Operating systems are written in it; most other languages are based on it. C is one of the highest performing languages as well, however it can be a pain to code in for beginners. Here is an example “Hello World” program.&lt;&#x2F;p&gt;
&lt;pre&gt;&#x2F;* Hello World program *&#x2F;

#include&amp;lt;stdio.h&amp;gt;

main()
{
printf(&quot;Hello World&quot;);
}&lt;br clear=&quot;none&quot; &#x2F;&gt;&lt;br clear=&quot;none&quot; &#x2F;&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;thumb&#x2F;3&#x2F;35&#x2F;The_C_Programming_Language_logo.svg&#x2F;564px-The_C_Programming_Language_logo.svg.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;What this program will do is, if run in a terminal&#x2F;cmd, it will print out the text “Hello World”. Most of this is easy to understand, however things like manual memory management and pointers make C harder to work with for beginners.&lt;&#x2F;p&gt;
&lt;p&gt;A successor to C, C++ was created to add object orientation to C. It aims to keep the same performance, and since it is object oriented, many games are written in it. Object oriented means that you can write classes, which make it easier to have a lot of something appear on a screen.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;cite&gt;&#x2F;&#x2F; my first program in C++&amp;lt;&#x2F;cite&gt;
&amp;lt;dfn&gt;#include &amp;lt;iostream&amp;gt;&amp;lt;&#x2F;dfn&gt;

&amp;lt;var&gt;int&amp;lt;&#x2F;var&gt; main()
{
std::cout &amp;lt;&amp;lt; &amp;lt;kbd&gt;&quot;Hello World!&quot;&amp;lt;&#x2F;kbd&gt;;
}&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;thumb&#x2F;5&#x2F;5b&#x2F;C_plus_plus.svg&#x2F;100px-C_plus_plus.svg.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;
As you can see, the two languages are quite similar, and you can sometimes use C libraries in C++. Next up we have Golang, a language backed by google. Golang is quite fast, as it compiles into C code. Golang was created by google in order to reduce their server processing time by rewriting some of their application in Golang. It also has a nicer syntax than C or C++ for some people, so one could use it as a beginning language.
&lt;&#x2F;p&gt;
&lt;pre&gt;package main
import &quot;fmt&quot;
func main() { 
fmt.Println(&quot;hello world&quot;) 
}&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;thumb&#x2F;a&#x2F;ac&#x2F;Gogophercolor.png&#x2F;600px-Gogophercolor.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;div&gt;
Still is pretty simple. Next up, we have the king of beginning languages, Python. Python is an interpreted language, which means that each line is read by the compiler as you run it, then each line is evaluated. This makes it a much, much slower language then all of the ones I have covered so far.
&lt;&#x2F;div&gt;
&lt;pre&gt;print(&quot;Hello, World!&quot;)
&lt;&#x2F;pre&gt;
&lt;p&gt;That’s it. Very, very simple and easy to read. My favorite out of all of these, however, would have to be C++. You can do almost anything in it, and it is high performance. It might have a bit of an ugly syntax, but it clicks for me in my head, and I love using it for simple stuff. However, if I was asked to write a GUI application, I would probably switch to a different language, like D. D was designed as the successor to C++, and it is also quite fast. It hasn’t really caught on in the rest of the world however, because no one wants to move away from C++ and rewrite everything.&lt;&#x2F;p&gt;
&lt;div&gt;
&lt;&#x2F;div&gt;
&lt;div&gt;
&lt;pre&gt;import std.stdio;
void main()
{
writeln(&quot;Hello, world without explicit compilations!&quot;);
}&lt;&#x2F;pre&gt;
&lt;p&gt;
As you can see, the syntax is close to C and C++, but quite easier to work with due to the lack of header files, which I can get into quite later.
&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div&gt;
That&amp;#8217;s all for this post!
&lt;&#x2F;div&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Spell Dev Log: 0.1.6</title>
		<published>2016-04-30T20:01:52+00:00</published>
		<updated>2016-04-30T20:01:52+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/151/"/>
		<id>/posts/151/</id>
    
		<content type="html" xml:base="/posts/151/">&lt;p&gt;Link: &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;ajusa.github.io&#x2F;Spell&quot;&gt;http:&#x2F;&#x2F;ajusa.github.io&#x2F;Spell&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Welcome back to another Spell Dev Log. In this log, I will be discussing what the current state of Spell is, and why I have decided to change all of the gameplay. This is a pretty short one, since all of the changes can be described succinctly.&lt;figure id=&quot;attachment_152&quot; style=&quot;width: 300px&quot; class=&quot;wp-caption alignnone&quot;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;04&#x2F;spellnewverison-300x170.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;First off, a ridiculous amount of changes have happened since I last posted one of these. We have working multiplayer, and better graphics than before. We had an actually playable, not too bad game. However, after discussing it with some of my friends, we realized that the way the gameplay worked was kind of limiting.&lt;&#x2F;p&gt;
&lt;p&gt;We had a 2d platformer type of game, where you can shoot only in two directions and move in only two. This makes it somewhat easy to “camp” in a corner and spam long range spells. If done right, you could kill everyone on the map. For games such as Mario, it works because you are trying to solve a puzzle. However, for a game like Spell, where all you need to do is shoot and move, this becomes very boring.&lt;&#x2F;p&gt;
&lt;p&gt;After thinking about it for a while, we decided a top down tile based game would be better for the feeling we were trying to achieve. A top down game is more like Pokemon, and it adds on two new directions the player can travel and fire in: up and down. If you have ever played games like Realm of the Mad God, Agar.io, or Binding of Issac, you know what I am talking about.&lt;figure id=&quot;attachment_153&quot; style=&quot;width: 300px&quot; class=&quot;wp-caption alignnone&quot;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;04&#x2F;newspell-300x170.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;We decided to leave most of the controls the same, but to implement aiming with the mouse, so that the game would require more skill. Right now, you face the mouse, but the spell don’t actually fire in the right direction, rendering it useless. However, this will be fixed within a few days. Some of the math requires trig and basic calculus, so that is why we are looking for a better way to do things.&lt;&#x2F;p&gt;
&lt;p&gt;Another gameplay change is the way the controls are mapped. Since we are planning on using a mouse to aim, that means that one hand will always be on the mouse. This means that you have to move with your left hand and choose your combo with your left hand. While this could get a bit cramped, we can’t really think of a better way to do it. If you have any suggestions as to how we should go about implementing the controls, feel free to leave a comment!&lt;&#x2F;p&gt;
&lt;p&gt;One change that has happened to our Dev Team is that it has grown substantially. We now have two developers, two graphics artists, and one game designer. EpicMittMitt, Ajusa(me), AlphaBetaR, Dark_P1ant, and FunnyWabbit are part of our current team. The game master, Dark_P1ant, has already started to balance Spell and make it more fun to play. He has also been suggesting good ideas for us to implement. Other people that I bounce ideas off of are my friends at school. They have helped a bit in the brainstorming process.&lt;figure id=&quot;attachment_154&quot; style=&quot;width: 300px&quot; class=&quot;wp-caption alignnone&quot;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;04&#x2F;github-300x120.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;What is coming in the near future? Right now, basic aiming and 4 base spells are our goal. By sometime in May we will probably have some spell combos implemented for you guys to test out. We will be designing a map so that you can move around and shoot people with spells strategically. Lastly, we will be adding a chat bar of sorts, so that you can run commands and talk with other players.&lt;&#x2F;p&gt;
&lt;p&gt;In short, Spell development has not halted. It is accelerating much faster than I had thought it would, and I hope it manages to become popular, like agar.io. See you all in the next spell update!&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Reusing an Old Laptop</title>
		<published>2016-03-13T17:49:39+00:00</published>
		<updated>2016-03-13T17:49:39+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/reusing-an-old-laptop/"/>
		<id>/posts/reusing-an-old-laptop/</id>
    
		<content type="html" xml:base="/posts/reusing-an-old-laptop/">&lt;p&gt; &lt;&#x2F;p&gt;
&lt;div&gt;
  Hello everyone! Today I will be talking about an operating system named Solus. Solus is based on Linux. When most people think of Linux, they immediately think of hackers and programmers. However, this is flawed. Linux can be used for many purposes, including a normal alternative to OSX or Windows. In fact, if you use a Chromebook, or even visit websites, you are most likely interacting with Linux, though you may not realize it.
&lt;&#x2F;div&gt;
&lt;div&gt;
&lt;&#x2F;div&gt;
&lt;div&gt;
  So, why should one install Solus? Well, if you are like me, you probably have an old laptop. I have one from 2009. These laptops are usually pretty bad nowadays, and even selling it won&amp;#8217;t get you that much money. Since electronics age quickly, you might think it is practically worthless. However, many of the issues you may be having with the laptop can be fixed by using a lightweight Linux Operating System. In this case, I chose to install Solus on my laptop.
&lt;&#x2F;div&gt;
&lt;div&gt;
&lt;&#x2F;div&gt;
&lt;div&gt;
  My laptop is an Acer Extensa. It is 7 years old now, and it only has 2 GB of ram, along with a 2.0 GHz processor. In other words, my phone had better specs than it does. It takes about a minute to boot into Windows, crashes a lot, takes ages to open up a word processor or chrome, and tends to lag out when on YouTube. For this reason, it had been lying under my bed for a while.
&lt;&#x2F;div&gt;
&lt;div&gt;
&lt;&#x2F;div&gt;
&lt;div&gt;
  I installed Solus on it about two weeks ago. Now it is actually usable, and faster at booting than my other laptop, which has an i3 processor with 6 GB of ram. Both laptops have a normal HDD, which is much slower than an SSD, but even then, the old laptop manages to perform quite well. I can watch YouTube, do homework, browse the internet, and play music. I can technically play Minecraft, but it runs at about 20 fps, which is borderline unplayable.
&lt;&#x2F;div&gt;
&lt;div&gt;
&lt;&#x2F;div&gt;
&lt;div&gt;
  Here is some more info about Solus. First off, it is a 64-bit operating system. That means that some very old computers will not be able to run it. The OS is designed for desktops, however it runs just fine on laptops. Some wifi cards are not supported, but I recommend you try it out before assuming it will not work. The minimum specs on their website is 1 GB of ram, which most older laptops will have. They recently released a new version, 1.1, which has many updated packages. Here is a link to their website if you want more info. https:&#x2F;&#x2F;solus-project.com&#x2F;
&lt;&#x2F;div&gt;
&lt;div&gt;
&lt;&#x2F;div&gt;
&lt;div&gt;
  Now on to the exciting part. Benchmarks. Boot time is quite fast for an older laptop. I have attached a video at the bottom of this post showcasing the laptop booting, but the actual time was about 20 seconds on my stopwatch.
&lt;&#x2F;div&gt;
&lt;div&gt;
&lt;video style=&quot;width: 100%&quot; preload=&quot;metadata&quot; controls=&quot;controls&quot;&gt;&lt;source type=&quot;video&#x2F;mp4&quot; src=&quot;&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;03&#x2F;VID_20160304_210842.mp4?_=1&quot; &#x2F;&gt;
&lt;&#x2F;div&gt;
&lt;div&gt;
  That&amp;#8217;s it for this post. If you think this is useful for reducing e-waste, tell me in the comments so I can write more posts like it. Robotic Arm Part 4&lt;br &#x2F;&gt; post will be next!
&lt;&#x2F;div&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Building a Robotic Arm for Cheap: Part 3</title>
		<published>2016-02-26T19:51:39+00:00</published>
		<updated>2016-02-26T19:51:39+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/building-a-robotic-arm-for-cheap-part-3/"/>
		<id>/posts/building-a-robotic-arm-for-cheap-part-3/</id>
    
		<content type="html" xml:base="/posts/building-a-robotic-arm-for-cheap-part-3/">&lt;p&gt;This post covers the base of the arm, and putting it together. I have built the base with my partner, along with a rudimentary claw. We are almost done, we just need to attach the two. It has been lots of fun, and I hope that we will do well in regionals for Science Olympiad.&lt;&#x2F;p&gt;
&lt;p&gt;So, to start off I will go over the parts. We ended up buying 4 servos: one for the base to rotate left and right, one for base up&#x2F;down, on for up&#x2F;down, and one for the claw opening and closing. We bought one servo driver board, and one Arduino. We were able to make the body out of duct tape, paint stirring sticks, and a some screws. It is surprisingly stable for the price of all of those items put together.&lt;&#x2F;p&gt;
&lt;p&gt;The total cost of the arm so far is pretty low. I’ll post some numbers once the competition is over.&lt;&#x2F;p&gt;
&lt;p&gt;TO build the base, you need a box of some sort. We went to hobby lobby and bought a generic wooden crate, but you can experiment with any box. Next, we drilled a hole in the top of the box, to allow the servo to rotate side to side. We have one servo under the box, for side to side, and one over, for up and down. Currently, the one on the top is unstable, but it is working.&lt;&#x2F;p&gt;
&lt;p&gt;If you were to build the arm, and put it on top of that base, you would notice that there isn’t anything to stop it fro tipping over. I recommend trying to use your power supply as you counter weight, but if it is too light, you can use 2 pound dumbbells like we did. They are heavy enough to cover the weight of the arm flailing around and stop the entire contraption from tipping over.&lt;&#x2F;p&gt;
&lt;p&gt;That is the base. Here is a quick photo of the arm itself, shaking hands. Pretty cool, eh?&lt;br &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;draftin.com:443&#x2F;images&#x2F;36608?token=DLbwQMnIzUOxntfxwbylRr6vvrHXALmyrymkpNsSOUIWJJY_JqSGs0MkesOh3TWexCOPyf4sS37POa8T66-zTR4&quot; alt=&quot;IMG_20160221_183609.jpg&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Now, on to the code and technology. We are using Arduino code to drive the servos, but all of the values that change come from the computer. The computer is connected to joysticks. The joysticks are able to move the arm, and rather smoothly. There is some code to stop it from jerking around.&lt;&#x2F;p&gt;
&lt;p&gt;The data that is being sent is formatted like this:&lt;br &#x2F;&gt;
rightxrightyleftxlefty,rightxrightyleftxlefty,rightxrightyleftxlefty,&lt;br &#x2F;&gt;
You get the idea. For each one of those, we are sending forward, neutral, or backward. All of these are being sent over the Serial protocol, which is hooked up over USB.&lt;&#x2F;p&gt;
&lt;p&gt;The code to do all of this is located on the computer and written in Javascript. It is using a Javascript run-time called Nodejs, and I have mentioned Node before on this blog. The code check the joysticks, and spams the Arduino with the values every 20 milliseconds. This way, there is no easily identifiable delay between the two.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, here is some video of the entire thing in action.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Y9GKIAr99GQ&amp;amp;feature=youtu.be&quot;&gt;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Y9GKIAr99GQ&amp;amp;feature=youtu.be&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;See you all next post! In part four, I’ll include how we did, what I learned, and what I would change.&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Spell Dev Log: 0.1.3</title>
		<published>2016-02-12T18:39:58+00:00</published>
		<updated>2016-02-12T18:39:58+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/spell-dev-log-0-1-3/"/>
		<id>/posts/spell-dev-log-0-1-3/</id>
    
		<content type="html" xml:base="/posts/spell-dev-log-0-1-3/">&lt;p&gt;Here is another… SPELL UPDATE!&lt;br &#x2F;&gt;
The reason Spell development has slowed was due to finals week at my school. Finally (sorry, that was bad) I can go back to working on Spell.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;draftin.com:443&#x2F;images&#x2F;36149?token=jwCJhgPcgUYpv9zN5cjENkw_BqyPQPxmqvC_Q8FfYZ-fJTMHMsBNMY-JrcdWlJiPY43TcCLaOzPxdzG7O9daWM4&quot; alt=&quot;spellupdate.PNG&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;However, several things have changed since the last update. The largest change is that a new person has joined our team. AlphaBetaR is the new official graphics designer of Spell. He has created artwork for the character sprite (no more rectangles!) and he has created art for each of the elements of the game. He plans on creating the graphics for each spell as well.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;draftin.com:443&#x2F;images&#x2F;36148?token=JbIJXyyOT4mZzmeBteRV2vXF-JdzQ9v-50iiDH3MbhCxvvEtb8fH92lot9Iui9Q3QEX1mv8BFHYtKBuJV7090AE&quot; alt=&quot;spellupdate2.PNG&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Another, huge update is that the hardware for the server has arrived! It only cost $9, and should allow up to 10 players on at a time, maybe more. I would need testers to test that. Also, there is experimental server code that has been written by me. It will be running on the new server sometime on Thursday. Right now, it is somewhat glitched as people don&#x27;t ever disconnect, so a &#x27;ghost&#x27; version of them is left on the screen which requires a server restart to fix. I will hopefully fix this by Friday.&lt;&#x2F;p&gt;
&lt;p&gt;So far, the server support the joining of players, and the movement. Spells cannot be implemented until we have an image file to render. Still, it is pretty good progress, considering how much time making games usually takes.&lt;&#x2F;p&gt;
&lt;p&gt;Spells and spell bias also were implemented by EpicMittMitt. He had been pushing lots of code recently, since I haven&#x27;t had much time. Spell bias shows which element the player prefers more. If you use mostly fire based moves, your fire bar goes up and other bars go down. This is a good step towards completion of the game, and now very few aspects need to be worked on!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;draftin.com:443&#x2F;images&#x2F;36150?token=pvr3CZ9JmjHXh-opdBVGR9tA98v7le2jdBO-r-sqofU3hXkGuU7RKKOdwcfS3IAzSye8aNL3Efk2EDWMzlxwtDw&quot; alt=&quot;bias.PNG&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;When I say spells were implemented, I mean they were implemented except for actually seeing them. As in, in the code they are rendering, but we have no image to render it to. This means that nothing appears on screen, but stuff is happening behind the scenes. You can see your input on screen.&lt;&#x2F;p&gt;
&lt;p&gt;Our plans for now include:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Adding better graphics&lt;br &#x2F;&gt;
For this, all we need are 4 backgrounds for each of the maps we plan on releasing in March. After that, we need one for each Spell, which is a lot of art.&lt;&#x2F;li&gt;
&lt;li&gt;Adding XP Orbs&lt;br &#x2F;&gt;
These XP orbs are so that if there is nobody else on to fight, you can still level up and grind your character for levels.&lt;&#x2F;li&gt;
&lt;li&gt;Working up the multiplayer.&lt;br &#x2F;&gt;
We need spell support, and player deaths. This one will take a bit of time, but it should be completed by the due date.&lt;&#x2F;li&gt;
&lt;li&gt;Gamepad Support&lt;br &#x2F;&gt;
Gamepad support would be cool for all of the people who play super smash bros. After all, this game borrows some of the 2d platformer aspect from it, and some people prefer a gamepad to a mouse.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;All of these need to be finished by version 0.2 Alpha. After that, we will have an official release. However, we need your help! If you have any suggestions, email them to me, or make a Github Account. Then, on our repository, create an issue.&lt;br &#x2F;&gt;
Here is a link: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Ajusa&#x2F;Spell&quot;&gt;Click Here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I have one question for anyone who is reading this: What platforms would you like Spell to be supported?&lt;br &#x2F;&gt;
That&#x27;s about it for this Spell Update! The game will be out soon!&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Spell Dev Log: 0.1.1</title>
		<published>2016-01-14T21:17:28+00:00</published>
		<updated>2016-01-14T21:17:28+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/spell-dev-log-0-1-1/"/>
		<id>/posts/spell-dev-log-0-1-1/</id>
    
		<content type="html" xml:base="/posts/spell-dev-log-0-1-1/">&lt;p&gt;Hello everyone! This post is about a game called Spell, which I am currently developing with some friends. The game is currently in Alpha 0.1.1, hence the title being a version number. Right now, the team consists of two developers, so the graphics are virtually non existent. All of the code is located on Github. This is NOT a tutorial on how to write a game, just a write up on how I made a game.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;draftin.com:443&#x2F;images&#x2F;35309?token=nT02C5xNc_uDYV-_88K1bavHpxDt91aHQWaJPaikTpCx_biEb_h8f-nvvR3TNWovUddUwvIlnfyZqQ61b3fum9M&quot; alt=&quot;spelltitle.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Here is a brief summary of the history of this project. The code is based on a game I wrote called Zdefense 2, which in turn is loosely based on ZDefense. ZDefense was a game I wrote in the summer of 2014, right before I had started high school. If anyone wants to play it, click &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.arhamjain.com&#x2F;TDbeta&#x2F;play.html&quot;&gt;here&lt;&#x2F;a&gt;. As you can see, it seems like a final product, but the gameplay was really lacking. You couldn&#x27;t move around. All you could do was spam one button, and your score was determined by your upgrades. That is why I wrote ZDefense 2. It, however, never really got off the ground. I felt limited with the original game getting in my way. I didn&#x27;t want Zombies anymore.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;draftin.com:443&#x2F;images&#x2F;35307?token=7IeRJMB4q9Fl_UHYgbwE3qJ7oS64oLYLkDBFyeFjiDvWW6kq5e9jhNqfC4-DB62APhH1GfRD_FChqD3pT219oRU&quot; alt=&quot;zdef.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Then, on Jul 26, 2015, Spell was created. The idea itself was based off of a google doc my friend and I had made back in 2012, with magic and the different elements. At the time, none of us had been developers, so it had been forgotten for the next three years. One day, I was going through my Google Drive, and I saw that document at the very bottom. I realized that I now knew how to develop games. I contacted my friend, he ended up writing the input code, while I worked on the multiplayer support for the game. The game server ran in my house, and development was going great. Then, I noticed that the game was running rather slowly. It would log out my laptop, and drive the CPU up to 100%. So, I decided to rewrite the game using a framework called Pixi.js. This JavaScript framework was created for speed, and used webgl. Unfortunately, school had started, so my friend and I had scant time to devote to the game.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;draftin.com:443&#x2F;images&#x2F;35308?token=esnWls1eWcv9Ve59p7iME9jQyLh9y1aEBrLSFQkUtlOrvIm5dWITqV2OnCZBNMuG7KNwRUNsFU_6gtOc3NJGiJQ&quot; alt=&quot;spell.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Over winter break, we both met up, and got the webgl rendering working. That was about two weeks ago. Now, the game is under development, and will be released sometime before this summer. We are currently implementing a large amount of the game play. Adding things like levels, and skill points are our current focus. Want to know what technologies we used while making it? Keep reading.&lt;&#x2F;p&gt;
&lt;p&gt;Here are the stacks of technology we are using. First, we are using Javascript. Being a web game, we had to use JS. However, we had to decide between the plethora of rendering options. There was canvas, webgl, css, and a few others. We decided on WebGl, the fastest, after our canvas version started to lag heavily.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;draftin.com:443&#x2F;images&#x2F;35311?token=EFJYDe8nzQS667ObnBPyhWOJWrVSMLBwnIlAD4Ir2-_rIKAMGbja7hdsRKV8i0lkwOzknbisqHR23oD5IScSAec&quot; alt=&quot;javascript-736400_960_720.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;For the multiplayer, I originally used Golang, a language created by google. It is ridiculously fast. However, I noticed that the language wasn&#x27;t as great as I had initially thought. I wasn&#x27;t able to use many of the libraries I was depending on. So, I switched to Node.js. Node.js takes Javascript code, and lets you run in on a server, instead of a browser. You lose a little bit of speed, but the language is a lot easier to work with. The multiplayer is now written in Node.js.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;draftin.com:443&#x2F;images&#x2F;35310?token=gCS_JrBKxz3vs33K7K8tY7j_dcxhfJ-7x56_9MPHAm7up5Gg8KFvMk5nt3VaFu0ctxI5_6r5lUp7BluAHs8s330&quot; alt=&quot;Node.js_logo.svg&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Finally, we are using a few different libraries. Riot.js, for rendering out html, Martmotta, for executing ajax calls, and Pixi.js, for the rendering of the game. These libraries greatly simplify game development, as you can focus on coding the game instead of spending large amounts of time on drawing a box. We have already written roughly 800 lines of code, and that number is going up.&lt;&#x2F;p&gt;
&lt;p&gt;That is all for this post. I will be posting more updates as more and more of the game gets done. Within a month or so, the game will be released for official alpha testing. Keep an eye out for that post if you want to see it in action.&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Building a Robotic Arm for Cheap: Part 2</title>
		<published>2015-12-15T03:09:11+00:00</published>
		<updated>2015-12-15T03:09:11+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/building-a-robotic-arm-for-cheap-part-2/"/>
		<id>/posts/building-a-robotic-arm-for-cheap-part-2/</id>
    
		<content type="html" xml:base="/posts/building-a-robotic-arm-for-cheap-part-2/">&lt;p&gt;As I had said in the first part, this post will be covering the frame of the robotic arm, the power source, the code, and any other miscellaneous items. I have been working with my partner on it, and we almost have a prototype built. We will finish it over winter break. Remember, the best arm in the world is useless if the drivers haven’t practiced using it.&lt;figure style=&quot;width: 1199px&quot; class=&quot;wp-caption alignnone&quot;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;draftin.com:443&#x2F;images&#x2F;34844?token=l32LRK0eDbW8iCJNQVUSIy9WMK_GXe5UBxfpJk9VSx2iUJJ_c1jL8g1k-KgdjhXfyf5wt9J-1JOzTKN6On9GmR0&quot; alt=&quot;&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;draftin.com:443&#x2F;images&#x2F;34845?token=EabnVyOmdfgaEcMU01aci7V-CrLqffBvEQWmyhvoU5PfCi0Cch3CPoN0a0FSY_-IE2Lk44adJqHQAnWXO8F0e7s&quot; alt=&quot;&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;draftin.com:443&#x2F;images&#x2F;34849?token=jE1Cxj9zw3m6rrvJY_I-AjqsClhAAwhjemZSiKNn8xwNCrblEULd7FaNh-0abSRRklN9kP1akot46U6mViMkXnM&quot; alt=&quot;&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;draftin.com:443&#x2F;images&#x2F;34847?token=ahryMnbRN7Hm42yGoGxr2WBHnVXycjPRJK0nMqWRDrfJTr3n-PZtB1sXvBQurtCw9N7dnpHAoHp1VASz4G1MqW0&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So, the frame. The “backbone” of the arm needs to be very sturdy and stiff. Some people try using PVC piping, the piping used to carry water through a house, however that is a bad idea for several reasons. Number one, is that PVC piping is hard to attach flat things to. Since the servos are flat, attaching them to a rounded object is hard and less secure. Secondly, PVC is relatively heavy, compared to the alternatives. The material that I recommend is aluminium.&lt;&#x2F;p&gt;
&lt;p&gt;Aluminium is lightweight, flat, and best of all, cheap. The amount of aluminium that I need for my arm is about $10 from Home Depot. It is much stronger than PVC, and metals do not bend easily. You may be thinking, “Isn’t aluminium hard to cut and shape?”. The truth is, yes, but you can do it with a simple hacksaw. Cutting it isn’t very difficult, as aluminium is one of the softer metals. All you need are some screws, a drill, and you can mount the servos to it with ease.&lt;&#x2F;p&gt;
&lt;p&gt;Next, we need a power source. As you can imagine, it will be rather beefy and need enough power to run a micro-processor and several servos lifting each other. If you buy a shield, then the shield will tell you how many volts it requires. After you know that, search on a site like HobbyKing for that volt of a battery. Next click on a link that has the most amount of mA, or milliamps. More mA means you can run your arm longer.&lt;&#x2F;p&gt;
&lt;p&gt;One really important thing that you need is the claw. The claw that I am using is from an old toy, and it is shaped like a bowl, but can open and close easily. For anyone else perusing this project, I recommend that you buy something prebuilt from ebay, such as &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.ebay.com&#x2F;itm&#x2F;Aluminum-Robotic-Claw-For-Arduino-Medium-Servo-Robot-Arm-MG995-&#x2F;271899326471?hash=item3f4e767807:g:jcIAAOSwpdpVenSV&quot;&gt;this arm.&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
Make sure to wrap the arm in some sort of rubbery material so that it has a good grip. I plan on using electrical tape, with the sticky side facing in.&lt;&#x2F;p&gt;
&lt;p&gt;Another thing to consider is the base of the robot. The base will have to have some sort of weight, to stop it from tipping, but it will also need to have the Arduino and the power source housed within. One nifty idea one can use is to simply use the power source as your weight. Most of them should be heavy enough to support the weight of the arm. As for the material, something like a wooden box should be fine, because the weight inside will stop it from tipping over. The wooden box will also be easy to mount things to, such as the power source and the servo to move the entire arm side to side.&lt;&#x2F;p&gt;
&lt;p&gt;In short, building a robotic arm can seem outrageous on paper, but if you spend some time understanding the concepts behind it, you can quickly develop a plan to build one. Part 3 will be coming soon!&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>HTML Tutorial: Getting Started</title>
		<published>2015-11-30T22:47:42+00:00</published>
		<updated>2015-11-30T22:47:42+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/html-tutorial-getting-started/"/>
		<id>/posts/html-tutorial-getting-started/</id>
    
		<content type="html" xml:base="/posts/html-tutorial-getting-started/">&lt;p&gt;HTML. Hyper-Text Markup Language. The programming language that changed the web as we know it. Every since the early days of the internet, this programming language has been used on all web pages, and it is what all web browser use to display web pages. But that is just an overview. How do you actually start using it to create websites? Simple.&lt;&#x2F;p&gt;
&lt;p&gt;Start by downloading a text editor, such as &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;brackets.io&#x2F;&quot;&gt;Brackets&lt;&#x2F;a&gt;. This is a common, cross-platform text editor designed to build websites. After you finish downloading the installer for your computer, open it up. You will be presented with an interface like this:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;draftin.com:443&#x2F;images&#x2F;34492?token=_hqnqqUUkj000JiSbdu0ZfVv8kAxFCNoWjCHULhITOFCP_0YavzD6UFkrjQRiyECztpbsmZtkfEF6nVqjOnfbIo&quot; alt=&quot;Brackets.PNG&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The interface is much simpler than most other code editors out there. You may be looking at the text in the middle and being confused, but the rest of the interface is simple enough for most people to figure out. The lightning bolt figure at the right of the screen is what you use to display the page that you code. If you click on it now, you will see that the text in the middle is now being displayed in a webpage, inside your selected browser, or in most people’s case, Google Chrome.&lt;&#x2F;p&gt;
&lt;p&gt;You have just displayed your first web page. Now let us code a really basic one. Create a new file within Brackets by hitting the New button under the File menu. Now copy this code, I will explain it step by step.&lt;&#x2F;p&gt;
&lt;div class=&quot;highlight&quot;&gt;
  &lt;pre&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&amp;gt;&lt;&#x2F;span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;&#x2F;span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;&#x2F;span&gt;Document&lt;span class=&quot;nt&quot;&gt;&amp;lt;&#x2F;title&amp;gt;&lt;&#x2F;span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;&#x2F;head&amp;gt;&lt;&#x2F;span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;&#x2F;span&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;span class=&amp;quot;nt&amp;quot;&amp;gt;&amp;amp;lt;&#x2F;body&amp;amp;gt;&amp;lt;&#x2F;span&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;&#x2F;html&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;pre&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;First thing that you may see is the greater than and less than symbols everywhere. Don’t worry, they are quite simple to understand. When a computer looks at the code, it needs something to know where the content is located within the text. So, it scans for certain symbols, such as &amp;lt;, or &amp;gt;, and gives them importance based on the text between them.&lt;&#x2F;p&gt;
&lt;p&gt;The &amp;lt; and &amp;gt; define tags. Here is an example of a tag: &lt;code&gt;&amp;lt;p&amp;gt;Some Info&amp;lt;&#x2F;p&amp;gt;&lt;&#x2F;code&gt;&lt;br &#x2F;&gt;
The &lt;code&gt;&amp;lt;sometag&amp;gt;&lt;&#x2F;code&gt; part defined the “opening” of a tag. The one with a slash in it defines the end of the tag, &lt;code&gt;&amp;lt;&#x2F;sometag&amp;gt;&lt;&#x2F;code&gt;. The info in between the &amp;lt; and &amp;gt; tell what to do with the information in between the &amp;lt;&amp;gt; and the &amp;lt;&#x2F;&amp;gt;.&lt;&#x2F;p&gt;
&lt;p&gt;So, the first line. &lt;code&gt;&amp;lt;html&amp;gt;&lt;&#x2F;code&gt; means that this document is an HTML document, and that the browser should process it as such. The second line defines the &lt;code&gt;&amp;lt;head&amp;gt;&lt;&#x2F;code&gt; of an HTML document. The head is like the extra information that doesn’t get displayed on the page. Many extra things, such as font styles and website styles go in the head.&lt;&#x2F;p&gt;
&lt;p&gt;Next we have the &lt;code&gt;&amp;lt;title&amp;gt;&lt;&#x2F;code&gt; tag. This sets the tab name to the text in between the opening and closing tag. In this case, the tab name in the upper left area will be set to Document. As you can see, we then close the tag, because the entire document is not a title, only that area is. It is still part of the head, which is still part of the html.&lt;&#x2F;p&gt;
&lt;p&gt;Now we have the &lt;code&gt;&amp;lt;body&amp;gt;&lt;&#x2F;code&gt;. This is the most important tag, because this is where all of the information will go. &lt;em&gt;&lt;strong&gt;&lt;em&gt;All of the content is here!&lt;&#x2F;em&gt;&lt;&#x2F;strong&gt;&lt;&#x2F;em&gt; So, we can simply type in text to that area, and it will show up in the web page. Try it now. Type in something to that area, then hit the lightning button on the right to see the result.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;draftin.com:443&#x2F;images&#x2F;34493?token=xmJV3QhHe2kf96JDwxuASK8hDrhljJQejdJXI9u9YbF28ROmU6zLBGc41pTJmqKOgXhZ5UUCQM9Sj7Sgy49I_14&quot; alt=&quot;webpage.PNG&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Pretty cool, eh! After that line of code, we end each of the tags that we opened up above, in this case the html tag and the body tag.&lt;&#x2F;p&gt;
&lt;p&gt;I will cover more in the next part of this series, which will be mostly video based. If you have any questions, ask me in the comments. Enjoy!&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Building a Robotic Arm for Cheap: Part 1</title>
		<published>2015-11-19T04:19:32+00:00</published>
		<updated>2015-11-19T04:19:32+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/building-a-robotic-arm-for-cheap-part-1/"/>
		<id>/posts/building-a-robotic-arm-for-cheap-part-1/</id>
    
		<content type="html" xml:base="/posts/building-a-robotic-arm-for-cheap-part-1/">&lt;p&gt;This year, I am participating in Science Olympiad. Science Olympiad is basically a yearly competition, where students from around the country compete to do the best in their event. This year I picked robotic arm.&lt;&#x2F;p&gt;
&lt;p&gt;I haven’t done many things like this before. The arm hasn’t been built yet, so this blog will be like progress updates. Each update I will share pictures, possible parts, and later, video of the arm in action.&lt;&#x2F;p&gt;
&lt;p&gt;So, back to the arm. There are a few main components: motors, microprocessor, battery, and frame. All of these fit together to create one cohesive product that can be very efficient, and powerful. I’ll explain them one by one.&lt;&#x2F;p&gt;
&lt;p&gt;Motors. You have definitely have heard of these and used these in your life. However, what you may not know is that there are different types of motors. The different types of motors are servo, DC, and stepper. DC is the kind most people are familiar with. Give it power and it spins. More power = faster spin. Unfortunately, using this in a robotic arm is very unwieldy. You cannot keep it steady, because it would start to fall down the moment it stopped spinning. They are unwieldy, and not suited to a fragile arm.&lt;figure style=&quot;width: 1186px&quot; class=&quot;wp-caption alignnone&quot;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;f&#x2F;f4&#x2F;DC_Motor.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The best motor to use is the servo motor, or servo for short. Servos are good for an arm because instead of giving it power and it spins according to power, you give it power and &lt;strong&gt;an angle&lt;&#x2F;strong&gt;. This lets you have infinite control over the motor, because while it has power, it will try to stay at that angle, useful when you go to pick something up. Then when the arm dips down, it will be able to hold that position without jittering.&lt;figure style=&quot;width: 1600px&quot; class=&quot;wp-caption alignnone&quot;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;d&#x2F;d2&#x2F;Servomotor_01.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;What is a microprocessor? If you have read my previous post, you may recall that a processor is in a computer, and that it does calculations. Well, a microprocessor is just a smaller weaker processor. Why do you need one? To control the position of each motor as it receives data from the controller.&lt;&#x2F;p&gt;
&lt;p&gt;The microcontroller I am using in my arm is the Arduino board. It is cheap if you buy it off brand, and it is reliable. The huge community built around it means that someone else has already done what you might be struggling with. The Arduino board is programmed in a language called Arduino-lang, which is very similar to C. C is an advanced programming language, along with being one of the oldest.&lt;figure style=&quot;width: 600px&quot; class=&quot;wp-caption alignnone&quot;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;draftin.com:443&#x2F;images&#x2F;34171?token=xOAqMt7VvviUcbOvmwrNX4CDB4NAEregpMRsGuYptJ82V0U2HzS_sExuAF80_4-B4X0pNDnmb3PKkwWP29PcOLw&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There is one more thing which I haven’t covered quite yet: what a shield is for an Arduino. An Arduino shield is like an accessory that lets the Arduino do more. In our case, I bought a servo shield, which lets me plug in servos without doing and complicated soldiering or splicing. The shield automates the power distribution, and it makes it easier to control the servos.&lt;figure style=&quot;width: 1024px&quot; class=&quot;wp-caption alignnone&quot;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;0&#x2F;02&#x2F;Arduino_Protoboard_Shield.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I will write another post as I get closer and closer to finishing the arm. It will cover the frame, the battery, and some of the code required to use the arm. See you all next post!&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Technology Terms</title>
		<published>2015-10-31T20:06:56+00:00</published>
		<updated>2015-10-31T20:06:56+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/technology-terms/"/>
		<id>/posts/technology-terms/</id>
    
		<content type="html" xml:base="/posts/technology-terms/">&lt;p&gt;Do you know the names of many of the things you interact with on a daily basis? Then why don’t people know how technology works, and what things make it up? Your phone, to your laptop, all use these pieces of technology in one cohesive device.&lt;&#x2F;p&gt;
&lt;p&gt;First off we have RAM. Your ram is like your short term memory. Every time you click on a program, it runs in your ram and takes up space there. RAM stands for Random Access Memory. It is measured in GB, or gigabytes. Ram is useful when you are running large programs.&lt;&#x2F;p&gt;
&lt;p&gt;Next up, we have your processor. Your processor, or CPU, executes instructions that are given to it by you. It is measured in GHz, or gigahertz. Gigahertz measures operations per second. It is what determines the speed of your computer, for the most part. Common CPU names include i7, i5, i3, A9, A6. The “i” processors are made by Intel, the “A” processors are made by AMD. CPU’s can also have several cores. Each core is like another “brain” for your computer. It allows it to multitask much better than with less cores.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;4&#x2F;41&#x2F;AMD_Phenom_II_X4_840_(HDX840WFK42GM)_CPU-top_oblique_PNr%C2%B00373.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;What about your screen? If you look at a screen, you have many pixels, which are like little light bulbs. A common resolution is HD, or 1920 x 1080. If you multiply the two numbers together, then you get the number of pixels a screen has (which is 2073600). Your TV, your phone, and anything else with a screen has a resolution. A new resolution you may have heard about is 4k. 4k promises 4 times the resolution of HD, and it is an insane amount of pixels in a tiny area. Another term within screens is pixel density. All that tells you is the number of pixels per inch. Each one of these pixels has to be controlled by the computer if you want to use a monitor&#x2F;screen. What controls it?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;0&#x2F;0e&#x2F;Screen-door_effect.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Another term you have probably heard is the graphics card. Everyone has that one friend who claims that they have the fastest graphics and the coolest games. All the graphics card does is control the pixels on your screen. It too has it’s own type of RAM, and has cores. However, the graphics card has many more cores than a CPU. The trade off of having many more cores is that each one has a very low gigahertz, such as 1Ghz per core. The reason it has many cores is because it has to run millions of pixels and determine which ones are on. The RAM of a graphics card holds the color values for each pixel. So, the more pixels or higher resolution your screen has, the more RAM you need to hold all of those values.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;6&#x2F;62&#x2F;AGP-Video-Card.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;You have probably heard of Windows, OSX, Android, and IOS. So what do all of these share in common? They are all operating systems! An operating system is a very large program that controls your entire computer. The operating system dictates how you use your computer, and it is the one of the first things your computer runs when it turns on. It is why you can’t usually run apps from your phone on your computer.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;thumb&#x2F;5&#x2F;5f&#x2F;Windows_logo_-_2012.svg&#x2F;2000px-Windows_logo_-_2012.svg.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There are a few programming languages you have probably heard about, such as HTML, CSS and Java. Where are they used? HTML and CSS are languages of the web. This means that they are used in nearly all web pages, such as Google, and this blog. This is why if you look at the address bar, it will usually end in “.html”. CSS is the language for styling your websites. HTML usually holds all of the content, like this post, and CSS is the one which tells the post how large to be, where to be, and the color. I will be making a HTML tutorial soon!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;1&#x2F;1b&#x2F;CSS3_and_HTML5_badges.svg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;That’s all for this post. I hope you learned something and have walked away with a greater understanding of the technology around you.&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Information</title>
		<published>2015-10-21T12:23:07+00:00</published>
		<updated>2015-10-21T12:23:07+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/information/"/>
		<id>/posts/information/</id>
    
		<content type="html" xml:base="/posts/information/">&lt;p&gt;This blog will now be featuring more technology tips and things like video tutorials on how to code. I will also write some articles on basic technology terms and try to explain them as simply as possible. More posts to come soon!&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Zdefense</title>
		<published>2014-08-25T00:32:08+00:00</published>
		<updated>2014-08-25T00:32:08+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/zdefense/"/>
		<id>/posts/zdefense/</id>
    
		<content type="html" xml:base="/posts/zdefense/">&lt;p&gt;Hey guys, here is the InDev Version.&lt;a href=&quot;&#x2F;wp-content&#x2F;uploads&#x2F;2014&#x2F;08&#x2F;Beta-1.4.5-WIP.zip&quot;&gt;Beta 1.4.5 [WIP]&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Just unzip it and double click the play.html file.&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Server</title>
		<published>2014-04-22T00:15:38+00:00</published>
		<updated>2014-04-22T00:15:38+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/server/"/>
		<id>/posts/server/</id>
    
		<content type="html" xml:base="/posts/server/">&lt;p&gt;My server has a skyblock plugin. Type in &#x2F;sky in order to stop endlessly dying. Then, you will spawn on a skyblock near two other islands.&lt;br &#x2F;&gt;
Those are my other islands. Then,&lt;br &#x2F;&gt;
Just play skyblock!&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Open Source</title>
		<published>2014-04-13T00:50:44+00:00</published>
		<updated>2014-04-13T00:50:44+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/91/"/>
		<id>/posts/91/</id>
    
		<content type="html" xml:base="/posts/91/">&lt;p&gt;As the title implies, this post is about open source. Some people will go like, “Open source? What’s that?” Open source just means that some program, be it something as large as an operating system or as small as a calculator, is freely editable and usable by anyone in the world, free of cost. (Most of these projects ask for donations.) Linux is open source. Well, you ask, “Why doesn’t everyone use open source?” The main reason for that is most open source projects don’t offer support in the form of a telephone number. Instead, they use a forum to ask you, the people, to report bugs and features. I know for  fact that some people think that they should be getting much better support. They are used to support that will be with them 24&#x2F;7, the entire year.&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Ajusa pic</title>
		<published>2014-01-30T02:45:52+00:00</published>
		<updated>2014-01-30T02:45:52+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/ajusa-pic/"/>
		<id>/posts/ajusa-pic/</id>
    
		<content type="html" xml:base="/posts/ajusa-pic/">&lt;p&gt;Here is a picture&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;wp-content&#x2F;uploads&#x2F;2014&#x2F;01&#x2F;20140129-214537.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Ajusa</title>
		<published>2014-01-30T01:13:44+00:00</published>
		<updated>2014-01-30T01:13:44+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/ajusa/"/>
		<id>/posts/ajusa/</id>
    
		<content type="html" xml:base="/posts/ajusa/">&lt;p&gt;Today I am excited to announce that after 4 snow days of hard work, ajusa alpha will be released soon. It has a blue and white color scheme. The logo will be done by our very own FunnyWabbit. More info to come soon.&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Server change... Again</title>
		<published>2014-01-20T16:29:34+00:00</published>
		<updated>2014-01-20T16:29:34+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/server-change-again/"/>
		<id>/posts/server-change-again/</id>
    
		<content type="html" xml:base="/posts/server-change-again/">&lt;p&gt;Hey guys! I am sorry to say that ftb lite did not work out so well. Instead, the server will be running vanilla with mini games, and pvp death matches. Send me an email if you have any ideas.&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Server Time</title>
		<published>2014-01-18T02:32:09+00:00</published>
		<updated>2014-01-18T02:32:09+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/server-time/"/>
		<id>/posts/server-time/</id>
    
		<content type="html" xml:base="/posts/server-time/">&lt;p&gt;The minecraft server will be running ftb lite 2 with bukkit plugins such as clearlagg and ptweaks this Sunday at 2:00 pm. See you there!&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Server final</title>
		<published>2014-01-15T02:34:57+00:00</published>
		<updated>2014-01-15T02:34:57+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/server-final/"/>
		<id>/posts/server-final/</id>
    
		<content type="html" xml:base="/posts/server-final/">&lt;p&gt;So guys, I finally managed to make a plausible server running on my rpi. The server is pretty much final, and will be running FTB Lite mod pack for this week. If it manages to run well, it will be running 24&#x2F;7. When I was on, there was no lag, whatsoever. See you on Sunday!&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Results</title>
		<published>2014-01-14T12:11:28+00:00</published>
		<updated>2014-01-14T12:11:28+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/results/"/>
		<id>/posts/results/</id>
    
		<content type="html" xml:base="/posts/results/">&lt;p&gt;Here are some of the results of different server jars for mods!&lt;br &#x2F;&gt;
Tekkit Lite: very laggy, even for just one person. It was minecraft 1.4.6&lt;br &#x2F;&gt;
Ftb lite: worked very well, and there was no noticeable lag. Minecraft 1.6.4.&lt;br &#x2F;&gt;
However, ftb lite had no build craft and industrial craft, so I chose not to use it.&lt;&#x2F;p&gt;
&lt;p&gt;Things I will be testing are:&lt;br &#x2F;&gt;
Spigot + tekkit lite&lt;br &#x2F;&gt;
Spigot + risers pack&lt;br &#x2F;&gt;
Tell me what u think.&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Server Closed</title>
		<published>2014-01-13T22:14:27+00:00</published>
		<updated>2014-01-13T22:14:27+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/server-closed/"/>
		<id>/posts/server-closed/</id>
    
		<content type="html" xml:base="/posts/server-closed/">&lt;p&gt;Hey guys! My server will be on and off this week because I will be testing tekkit and feed the beast on it. More updates to come on this blog. Ps, the next time is Sunday and Saturday 2pm, so be there!&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Minecraft Server</title>
		<published>2014-01-02T16:32:04+00:00</published>
		<updated>2014-01-02T16:32:04+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/minecraft-server/"/>
		<id>/posts/minecraft-server/</id>
    
		<content type="html" xml:base="/posts/minecraft-server/">&lt;p&gt;Hey guys! My minecraft server should be back up soon. I just finished upgrading to the latest java, so the performance should be much better. Bye for now!&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Swim Meet</title>
		<published>2013-12-14T17:20:42+00:00</published>
		<updated>2013-12-14T17:20:42+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/swim-meet/"/>
		<id>/posts/swim-meet/</id>
    
		<content type="html" xml:base="/posts/swim-meet/">&lt;p&gt;There was a swim meet in a place, but I could not go because of the snow.&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Zumnet 1.3</title>
		<published>2013-11-07T19:20:11+00:00</published>
		<updated>2013-11-07T19:20:11+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/zumnet-1-3/"/>
		<id>/posts/zumnet-1-3/</id>
    
		<content type="html" xml:base="/posts/zumnet-1-3/">&lt;p&gt;It here, and it has tabs!&lt;&#x2F;p&gt;
&lt;p&gt;http:&#x2F;&#x2F;tiny.cc&#x2F;zumnet_1-3-0&lt;&#x2F;p&gt;
&lt;p&gt;Download Today&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Zum Store</title>
		<published>2013-10-29T23:07:45+00:00</published>
		<updated>2013-10-29T23:07:45+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/zum-store/"/>
		<id>/posts/zum-store/</id>
    
		<content type="html" xml:base="/posts/zum-store/">&lt;p&gt;The zumstore will be launching on November 1st. Right now, our team is busy preparing for this event. More info on this post.&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Zum Apps</title>
		<published>2013-10-29T20:55:36+00:00</published>
		<updated>2013-10-29T20:55:36+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/zum-apps/"/>
		<id>/posts/zum-apps/</id>
    
		<content type="html" xml:base="/posts/zum-apps/">&lt;p&gt;Guess what? I have officially decided to end the existence of zumlets. Instead I will now be developing and adding zum apps. This new service relies on flash and javascript, which every windows computer has. Also, this will allow us to create much more powerful full featured apps. This new service will be contained within a store, where you can add it to your own zumnet. The apps will mostly be games. Email me any apps you would like and they will be added to the zum store shortly.&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Zumcloud</title>
		<published>2013-10-26T00:27:51+00:00</published>
		<updated>2013-10-26T00:27:51+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/zumcloud/"/>
		<id>/posts/zumcloud/</id>
    
		<content type="html" xml:base="/posts/zumcloud/">&lt;p&gt;Zumcloud is officially being released on January 2nd. What is Zumcloud, you may ask? Zumcloud is an all new cloud service from Zumnet. This service will give an entire 10gb of storage free. More info to come on this post. Update: The new service will offer:&lt;br &#x2F;&gt;
A calendar&lt;br &#x2F;&gt;
Note taking&lt;br &#x2F;&gt;
Cloud bookmarks&lt;br &#x2F;&gt;
The ability to sign in to google drive and add storage&lt;br &#x2F;&gt;
Contacts&lt;br &#x2F;&gt;
Music&lt;br &#x2F;&gt;
Picture&lt;br &#x2F;&gt;
And much more!&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Zumnet</title>
		<published>2013-10-22T00:53:23+00:00</published>
		<updated>2013-10-22T00:53:23+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/zumnet-2/"/>
		<id>/posts/zumnet-2/</id>
    
		<content type="html" xml:base="/posts/zumnet-2/">&lt;p&gt;To download, go to zumnet.webs.com&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Zumnet</title>
		<published>2013-10-14T19:36:08+00:00</published>
		<updated>2013-10-14T19:36:08+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/zumnet/"/>
		<id>/posts/zumnet/</id>
    
		<content type="html" xml:base="/posts/zumnet/">&lt;p&gt;Its finally here!&lt;&#x2F;p&gt;
&lt;p&gt;Instructions: Download. Open and unzip, then click on setup.exe not zumnet deploy. Enjoy.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;&#x2F;wp-content&#x2F;uploads&#x2F;2013&#x2F;10&#x2F;ZUMnet1.1.5.zip&quot;&gt;ZUMnet1.1.5&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Join</title>
		<published>2013-09-30T18:38:31+00:00</published>
		<updated>2013-09-30T18:38:31+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/join/"/>
		<id>/posts/join/</id>
    
		<content type="html" xml:base="/posts/join/">&lt;p&gt;Go here to join. &#x2F;wp-login.php?action=register&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>B-GAV</title>
		<published>2013-08-23T15:34:08+00:00</published>
		<updated>2013-08-23T15:34:08+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/b-gav/"/>
		<id>/posts/b-gav/</id>
    
		<content type="html" xml:base="/posts/b-gav/">&lt;p&gt;I am here to officially announce that G-BAV is finally finished and working. G-BAV (Ground Based Automatic Vehicle) was designed by MittMitt, Sathvik, and I as an offensive remote controlled drone with a video feed. We succeeded in making an indoor and out door version. Too see more about the robot, click on the G-BAV page at the top.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;wp-content&#x2F;uploads&#x2F;2013&#x2F;08&#x2F;20130823-113438.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;wp-content&#x2F;uploads&#x2F;2013&#x2F;08&#x2F;20130823-113446.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
	</entry>
	<entry xml:lang="en">
		<title>Hello world!</title>
		<published>2013-08-22T23:58:39+00:00</published>
		<updated>2013-08-22T23:58:39+00:00</updated>
		<link rel="alternate" type="text/html" href="/posts/hello-world/"/>
		<id>/posts/hello-world/</id>
    
		<content type="html" xml:base="/posts/hello-world/">&lt;p&gt;Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!&lt;&#x2F;p&gt;
</content>
	</entry>
</feed>