<?xml version="1.0" encoding="UTF-8"?>
<Worksheet>
<Version major="11" minor="1"/>
<Label-Scheme value="2" prefix=""/>
<View-Properties presentation="false"><Hide name="Group Range"/><Hide name="Section Range"/></View-Properties>
<MapleNet-Properties warnlevel="3" longdelim="true" plotoptions="" echo="1" errorcursor="false" elisiontermsthreshold="10000" elisiontermsbefore="100" errorbreak="1" prettyprint="3" prompt="&gt; " latexwidth="9.0" useclientjvm="true" ansi="false" screenheight="25" labelwidth="20" plotdevice="inline" typesetting="standard" displayprecision="-1" indentamount="4" elisiondigitsthreshold="10000" quiet="false" plotoutput="terminal" rtablesize="10" preplot="" showassumed="1" plotdriver="openviz" elisiontermsafter="100" labelling="true" postplot="" screenwidth="79" elisiondigitsbefore="100" elisiondigitsafter="100" verboseproc="1" imaginaryunit="I" ShowLabels="true"/>
<Styles><Font name="Normal256" background="[0,0,0]" bold="true" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Heading 4" background="[255,255,255]" bold="false" executable="false" family="Serif" foreground="[0,0,0]" italic="true" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Ordered List 5" background="[255,255,255]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="_cstyle261" background="[0,0,0]" bold="true" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Ordered List 1" background="[255,255,255]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Text Output" background="[255,255,255]" bold="false" executable="false" family="Monospaced" foreground="[0,0,255]" italic="false" opaque="false" readonly="true" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Bullet Item" background="[255,255,255]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Equation Label" background="[255,255,255]" bold="true" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Author" background="[0,0,0]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Text" background="[0,0,0]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Diagnostic" background="[255,255,255]" bold="false" executable="false" family="Monospaced" foreground="[40,120,40]" italic="false" opaque="false" readonly="true" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Heading 2" background="[255,255,255]" bold="true" executable="false" family="Serif" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="16" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Page Number" background="[0,0,0]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Ordered List 3" background="[255,255,255]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Maple Plot" background="[255,255,255]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Normal" background="[0,0,0]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Maple Input" background="[0,0,0]" bold="true" executable="true" family="Monospaced" foreground="[255,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Annotation Title" background="[255,255,255]" bold="true" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="18" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="2D Output" background="[0,0,0]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,255]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="2D Inert Output" background="[255,255,255]" bold="false" executable="true" family="Times New Roman" foreground="[144,144,144]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Dictionary Hyperlink" background="[255,255,255]" bold="false" executable="false" family="Serif" foreground="[147,0,15]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="true" placeholder="false"/>
<Font name="Dash Item" background="[255,255,255]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Heading 3" background="[255,255,255]" bold="true" executable="false" family="Serif" foreground="[0,0,0]" italic="true" opaque="false" readonly="false" size="14" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Ordered List 4" background="[255,255,255]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Maple Output" background="[255,255,255]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="List Item" background="[255,255,255]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="2D Input" background="[255,255,255]" bold="false" executable="true" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Line Printed Output" background="[0,0,0]" bold="false" executable="false" family="Monospaced" foreground="[0,0,255]" italic="false" opaque="false" readonly="true" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Maple Input Placeholder" background="[255,255,255]" bold="true" executable="true" family="Monospaced" foreground="[200,0,200]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="true"/>
<Font name="2D Math" background="[255,255,255]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Error" background="[255,255,255]" bold="false" executable="false" family="Monospaced" foreground="[255,0,255]" italic="false" opaque="false" readonly="true" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Warning" background="[0,0,0]" bold="false" executable="false" family="Monospaced" foreground="[0,0,255]" italic="false" opaque="false" readonly="true" size="10" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Heading 1" background="[0,0,0]" bold="true" executable="false" family="Serif" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="18" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Annotation Text" background="[255,255,255]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Title" background="[0,0,0]" bold="true" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="18" subscript="false" superscript="false" underline="true" placeholder="false"/>
<Font name="_cstyle256" background="[0,0,0]" bold="true" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Ordered List 2" background="[255,255,255]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="false" placeholder="false"/>
<Font name="Hyperlink" background="[255,255,255]" bold="false" executable="false" family="Serif" foreground="[0,128,128]" italic="false" opaque="false" readonly="false" size="12" subscript="false" superscript="false" underline="true" placeholder="false"/>
<Layout name="Normal256" alignment="left" bullet="none" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="0" spacebelow="0" linebreak="space" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Layout name="Ordered List 5" alignment="left" bullet="ROMAN" firstindent="0" leftmargin="144" rightmargin="0" linespacing="0.0" spaceabove="3" spacebelow="3" linebreak="space" pagebreak-before="false" initial="-1" bulletsuffix=""/>
<Layout name="Heading 4" alignment="left" bullet="none" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="0" spacebelow="0" linebreak="space" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Layout name="Text Output" alignment="left" bullet="none" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="0" spacebelow="0" linebreak="newline" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Layout name="Ordered List 1" alignment="left" bullet="numeric" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="3" spacebelow="3" linebreak="space" pagebreak-before="false" initial="-1" bulletsuffix=""/>
<Layout name="Annotation Title" alignment="centred" bullet="none" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="12" spacebelow="12" linebreak="space" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Layout name="Bullet Item" alignment="left" bullet="dot" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="3" spacebelow="3" linebreak="space" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Layout name="Author" alignment="centred" bullet="none" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="8" spacebelow="8" linebreak="space" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Layout name="Dash Item" alignment="left" bullet="dash" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="3" spacebelow="3" linebreak="space" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Layout name="Heading 3" alignment="left" bullet="none" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="0" spacebelow="0" linebreak="space" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Layout name="Diagnostic" alignment="left" bullet="none" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="0" spacebelow="0" linebreak="any" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Layout name="Ordered List 4" alignment="left" bullet="ALPHABETIC" firstindent="0" leftmargin="108" rightmargin="0" linespacing="0.0" spaceabove="3" spacebelow="3" linebreak="space" pagebreak-before="false" initial="-1" bulletsuffix=""/>
<Layout name="Maple Output" alignment="centred" bullet="none" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.5" spaceabove="0" spacebelow="0" linebreak="space" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Layout name="Line Printed Output" alignment="left" bullet="none" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="0" spacebelow="0" linebreak="any" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Layout name="List Item" alignment="left" bullet="indent" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="3" spacebelow="3" linebreak="space" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Layout name="Heading 2" alignment="left" bullet="none" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="8" spacebelow="2" linebreak="space" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Layout name="Ordered List 3" alignment="left" bullet="roman" firstindent="0" leftmargin="72" rightmargin="0" linespacing="0.0" spaceabove="3" spacebelow="3" linebreak="space" pagebreak-before="false" initial="-1" bulletsuffix=""/>
<Layout name="Error" alignment="left" bullet="none" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="0" spacebelow="0" linebreak="space" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Layout name="Maple Plot" alignment="centred" bullet="none" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="0" spacebelow="0" linebreak="space" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Layout name="Warning" alignment="left" bullet="none" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="0" spacebelow="0" linebreak="space" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Layout name="Heading 1" alignment="left" bullet="none" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="8" spacebelow="4" linebreak="space" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Layout name="Title" alignment="centred" bullet="none" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="12" spacebelow="12" linebreak="space" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Layout name="Ordered List 2" alignment="left" bullet="alphabetic" firstindent="0" leftmargin="36" rightmargin="0" linespacing="0.0" spaceabove="3" spacebelow="3" linebreak="space" pagebreak-before="false" initial="-1" bulletsuffix=""/>
<Layout name="Normal" alignment="left" bullet="none" firstindent="0" leftmargin="0" rightmargin="0" linespacing="0.0" spaceabove="0" spacebelow="0" linebreak="space" pagebreak-before="false" initial="0" bulletsuffix=""/>
<Pencil-style name="Pencil 3" pen-color="[0,0,0]" pen-height="3.0" pen-width="3.0" pen-opacity="1.0"/>
<Pencil-style name="Pencil 1" pen-color="[0,0,0]" pen-height="1.0" pen-width="1.0" pen-opacity="1.0"/>
<Pencil-style name="Pencil 5" pen-color="[255,0,0]" pen-height="5.0" pen-width="5.0" pen-opacity="1.0"/>
<Pencil-style name="Pencil 2" pen-color="[0,0,255]" pen-height="1.0" pen-width="1.0" pen-opacity="1.0"/>
<Pencil-style name="Pencil 4" pen-color="[0,0,255]" pen-height="3.0" pen-width="3.0" pen-opacity="1.0"/>
<Highlighter-style name="Highlighter 2" pen-color="[255,204,0]" pen-height="14.0" pen-width="14.0" pen-opacity="0.8"/>
<Highlighter-style name="Highlighter 4" pen-color="[0,255,255]" pen-height="32.0" pen-width="32.0" pen-opacity="0.8"/>
<Highlighter-style name="Highlighter 3" pen-color="[51,255,0]" pen-height="24.0" pen-width="24.0" pen-opacity="0.8"/>
<Highlighter-style name="Highlighter 1" pen-color="[255,153,255]" pen-height="12.0" pen-width="8.0" pen-opacity="0.8"/>
<Highlighter-style name="Highlighter 5" pen-color="[255,255,0]" pen-height="48.0" pen-width="48.0" pen-opacity="0.8"/>
</Styles>
<Page-Numbers enabled="false" first-number="1" first-numbered-page="1" horizontal-location="right" style="Page Number" vertical-location="bottom"/>
<Task-table>
    <Task-category name="&lt;default&gt;">
    </Task-category>
</Task-table>
<Annotation-table>
    <Annotation-category name="&lt;default&gt;">
    </Annotation-category>
</Annotation-table>
<Task>
</Task>
<Group labelreference="L20" drawlabel="true">
<Input>
<Text-field style="Text" layout="Normal" alignment="centred"><Image height="78" width="800" zoomable="false">TUZOV3RLVWI8b2I8Uj1NRExDZE5WWlpKOnROPlQ6XFxXbURxaUNCYE5cXEBOZFxcUWdxeHhgSkZtb2Rwc3FhVE91VG9leFBwV0xcXE5mSFNKXFxSQjxLPVxcaz51TVVdTT5JTGBJdmE8TkJZSlZAUEhAbmJga0ldVUE9WUZtbV1cXEtyaHNBQXk+dFZWPXRTPFZSYUpZYHFrXFxrYllsP21xU2BSO0hKazx5SnVqWjxOXjxsSE1Rd3hYUVF4aHl3eXV3eXF4c3huSGl1ZEV3aFBTeXlZWXlUY1FzZ1hYSWlRZWlReXl1c3lPYVRUbz1uPkxKO0BSWjxMQlxcSjxEalptTUpobGA8TEJcXDo9PkxSOl1KPDpMWls+XjxGajo7QEJDQks7Qz5LSjtKQkZaSz5bPk46SjxuYlFgYDtAYlo6PU5idVVGZVNJQW9TUFRTZUx0UFhkPVlhQWt0aXVCYVNaeXh3WFltTFdjcU11PW9fZFl3TFI6XTo+Pk5qdElgeEZhZ3Bncnl0WVh0cWlkdWdfX3hxVW9wR1Z0cVlkSWBlW1B5RGh1ZFZtQ1FvRGdwTElgb09cXDxOXko+Wz5OOkJtYWNnVXJ1W3Q+YXJeT0ladWV3Z1Roc0hhaURrWXlnd2dib3l4cVlMcVY6VXg7S3hrdXlgeXZWeUVXd2lhb2dYRVNeWXZmZ0hpd0NWeWRlQUZJUUNbO0Y8Oktqc11OWHR1cz1XbXh5eVlYeEFUY2hUdXl3RV1yXUlsWXFxRHV0SHVRdEVrZHRsZUx3ZVRNeG1QQW1RdkZ5cnZ2eWBdUEl0Zz9ePl5iWlo8WmJHXjpvXkB5bmBIY2VIeFl4b0g/b2Vud3I/YmdoYVxcQWJ5eXhNdl5kUHdkWHFYXm5peW13d3RDUW9peG5VZ2lbWWlJYHRKeFt2cXhgWGJwWXdycXhKTlpcXD48Qko7Qz5DRFpVWGNnRj1TQmRTZUVRZElpUms/dF9PQ3NhWVxcV3lxd2NGP2RQWXZWd0l2O1R3W2lzVUNXVVlaSWdhRWM+P2JePXY9d3k9c1Rzc0VSR1U7X2ZqO2RodVhbc0U8PVI+OlxcSms8WWp5VGlUbF15eHdxbUlsSj1sdkp1SmZJcT5lTXR4d0pQTWR5d0VgcVlhTlRcXFM8XVNaUU1NWEx4WXlJdFl0cGxGYXBwdUxCREpLOkJLO3ldWWZQRWdHeUdoQ3hDc0JqYXllV2lCX2RaWXhqcVZRX2N2R1g/QVY6P0dqd2lBR1N2S2Q6R3NBaVVZQ0ltV1Y8WXdEQ0JLO1s+OktlOjtEOjtleUN3YDtUdmlFXlNCeGVFamNndFF5PXNjTW9iXmFyT1lnTlF3d3FkTEN5SmlTY090WlF3bXV0ZHd4WU9ZRnFXQW1JVHFjOl9zUE9TZF1Ydk1UT09zXz9WW1NYV01ndT9UWnNiVm9TP2dnaD1nUUFibTtnbGlVV0VjTWF3SGd4WGlValdDb2FYZFlXSHdVZWFybU11OmtIXkd5Vlt3QVVYdWdVVT1DdFNFRUdXWFFDPktqQEVwUVF0dzx3bXFyPXB4S1V3SE1VR11uPWhNRFl0ZGVhSlFpOmBydnl4eVFxYEhnaWFlckZyZUledWdqOkBnOlFqQUZuZnhhWWlvZEhtVmF1XFw/d2ZOak1ZYGhJa0lobURPYnBfd1RmZD8+bGJQYmk/blg/b21RdDtJajpneXNmY2BQZVBXYE9QZ1pmY3VIWj1OXTxRWzpIamdvY05wY2ZYZF1edl1Yb0VpXkVJcUZnYHRodWRIXU9vb04/Z1Z3Y3VWYlVmZ05ZdVc/Y2Zhc2A+ZGd3YVlOcFNhY1VveGFfdVZoYFlpckZodWtvdUReWjxGYm1GanFPX0JAc2FudXNfYXNWbVlPeEl4W05pYnhObV9hZ0h4eHdZbklweVZneW5JbEE/d3l5XFxnWGVhcGxoZmVkXlo+YWdeXndwaGxgUGNkZ3VfdndFXnlwUGhfUV9vZ3dveGldcGZid2BoWHhCPltIRmw7cXdbeXF3YXhbZ3hvWF1pX3hpeHV4V3lnUWdcXGB3WFBlc1ZgdVZjeWdzbnZwWHFoQVBdWUhtYldzdGd3VlZdUWdsbGd3Y1htZj5ubk9mV1B3P1ZsSVhfeVF4TVF3c3h2cGByYHhyUnBaSEhhcEFdb3FwcXhtaFBpdVFpT0F1PmFsZGlfUGdkS0leXFxOakhZcmpBc2JmcT1BYFFpcFN5dVBPWnVfdVZoZWZXeFA/Xko+W1RnWnJJanZ5bUlfbV1wb3l5bEdHcGA+ZWZIeDpIdVBXcFxcYGVLSVpAeGB2Z2RXV3hfeW9MeXlJPnVpd2VvT3Vjd25DRlpjSGdiSG1TT3RKXnlacXVpeXR2cVo7cF9VaHNkUGtxQGBwT11qWFxcVHdgVXBrU0ljWT9fOj9jO0BebWh4X3hcXE9xTFdHanVHbW1Cb0lGZXdDUVV2TVd0S09lZG9YZ1dUXT9zTk1TQ1d0bENTO3l1dW13eFdVV19pcGVndHV1X3NFSlVETVV0bmVVQj1TYUViP294Z1l1cG9CYFlyO3lneVtjbldWZ0FWeVd1QmFlV2llYWlnOj1GSltoRDt0PFdSVUtCXFxFckhTd3Q7WHdpaHVteGRveVxcdWhkaXdnaVdkWWhTX1lWd1lgeWVKX2c7Z2NJSXJ3a2RvZ1NVYWhHQ0I7R0lMS1Zkc0lwQXddbXRZeWV2TXhDTVVGSVZ0O2h1T3Vac1Y9XVdtUWJ1S2dnTXRZZWZEY3dyeVdSQWg7ZUlyQWJFYXdrO2l5cXZ0d3NNR1dLdUZQSWdLXVRtZ3hRSUNnPWlfWFVOeXZ5QHg/RE5bZE1CXFxzQVxca29VWHhcXFlwUW1lXVRfUFVjVXlzVFFlPVdReExNYXFPPjtVZ1tNSWlXZTpnREpbSFBbeHdPVG9pdmJfTVBZTmxEd3ZlUnFkV1RhbnhJd3BZWU55THl0eHlcXHRzdXZ3eVBEWVhedXRoZHBhUXRbRE5abE5qWFBReXRRaU1qdFU7cW9qdE9OQHBZVVFuQXhxPG9TSHVsdVJMPExlUWpYSG11cGxDYVZ0dG9IZXRsXXZpaW1SdW5gbXBBbHJpeUp5PHlbVFFbcFlcXHlRYl1TbUF5QDxQcElwXUV4O3h4eXhVR2VzSFFLO0R3bnB5SWF0SElYPkRNUmhPUVBRZGB3RWhXWFFLPkxKO1VuOkRZUkhPT0h3Wk1yVm1QQXVOWHhLaUF1O3Vxd2BRW3V0WFRSXUxsTlxcTXB5TFJZcXFUbkBwakBEc2ldTElRcHNsbFlhWW1pT2Rhcl1xa1B1TFY9WDt4T210eG9hcWBwTldhcj5hSlM9TU9Uaz9pckM9UlJJTmxJeEFxdm54TVJJbXVcXHdqWHJ2RUpHVHE9QVY8WHBXTHdBTExBXVNWSUpsZG9ITVFzaU9kaU9pRXldZGtSaGw8dVhddEx2YHdTUXVsRXJGVWo/QVhOSU9VSG1nQW90ZFBMeWtwVFR1XFx3dDx1PjxUUmhxVkRYPklMXnVrc0l3SWVZRHlxSEh4SEhYeXF2TWxTRl1WUFROYnVXWjx3PGhrUmBPPkxYSEF5RmFUZUhsbW1wTXV1P01KO0BubTx4P3h3d0xWd3BLQWhXcmFTdll5bXRPdHluPlh3Okl5VHRuWWR5VElZU1VMc2F1SFR4c3lWVlRZSkRsRnR4d01tX3hYZHRvbUFLYlRQb2RQX3Bqd1RYVj1sSEBQPEhWVEhWP0VKSWlQQ1FzbUF5YXlYXWxRY0RVazxVWnRRTG1LXlVKTEV4anFuQWl0dW11d21WYnFqd3l3cXBxXFxwWXJ1dUk8cz5cXHlEWE9oQFRBaU1xXXVcXGFOWjx0ZF1MbEVNWVlTWVBNd0FyT11wcklwTVxcTnB1altwUTxVTkFpakxUVnVdV2ZhdmtVdm1UUV9VWEJgblt5U11ReDxAWDtIalJkbFFsd2dRVGtxeE1ZSndkUT5RbWFlUGFEVF55UUpZVEZgTmk9V3lsTGxVbE54cmZ4TUZVUG5FTlNkVz1Iaz9YeWdld0Zld2lheVhFWGBJVkdYUE1kUXlQU19RUlNNeURodWNYdz55czp4VUpcXHRKYHVhZXhOaWs7SXRCQFE8PEx0eW9eSUxZPW1fQFZRUW5LQWs/ZWxEZXJkPGpQZG12ZVNnbUpReXdaWGpITFRZPHFuUXQ6WHBpcWpZXFxXWkR2aWBVY2BuZFlRbnhTW1hPUUx1aUVTVWlqQWlYUm1VcHBxO0FtQ3lYX1VUb0hOSWh1dFV5ckRTd0x0Rml4alBYP2lsQ3h2PW1zXFxIUVpMbFhtbVV4S3RVVVxcUVVPWU4+TFl1SFh1cXNLTGpUcVhvaHBXXXR2aE9lVXhpbFdIUXZYUVlYaVJHQW1xWHh3dFY/TEo7YXlcXExzU1R5TWxLO0RSYlFVVT11VD1RY1V2Wjxyc0FKSFl4alRzQ3h2PUBKW2VVPkR2OllZU2lVcVlvWFlRdHhqPGFsXWlZP3h1WVVwRkV0UzxOTVV0TU1vblRVXFxkSz1Mak5AclFJcUxtdVlwcV1JUUpxVmpwaj5cXE49XFxuPGxRW1RTdFF5dk1WPUVsb2RwR2xTVnVNWWBYPUxqakhVZlxcVmdcXHFZRXh2eW5YUFlEZVF5UXZpWU5lQVlnaXRZWFRxcHVteU9FTFFQTHU9VUpcXGFYPm1RUXhOZ3RKXWFqXXlrYWhNXz1XPD11ZlR3Q3hyWWRUYWxtak1qTUF5X1VvOmhyW0BUc3VsSGxWV015cT1sVnBPaXV0eGB2ZjxsXVh2bVxccEpIbl1hc3ZRdmxRcnc9VWpJTlpNTmlIeGNQTGdxeFVReFxcWFluQHA8WVg8SVNgPHB1THM8dVI7WU1iZW5kPXFjXFxKcHVyS3FXb2RWY3BzP2hPSFFZPGBqZ2BRYGl5cm1OQXBRQEB4OkRxPWxWOj1zUXV1az1ydz15d1hPTWVLPlBTcEhsRFFYX210cXhVVlhPWW1OUFdaO3lqVXFtPkZmaWhhYD9eTmFsZUZwb1diWFZuTVhsO1hnQkBgP1BpZGlpVF9oPk5eTnhaPFBcXHh3Yj5RbnhxdVxcZ3U8Z2tHV15ObnRAP19xTnVPVnZmaV9ld3RMRndKaV1NWW5CcWBxaV1JaGx2eHg8Tm9QeGZXcGFlQGV1aV9maGVgXl1sZm9VSFtLQWFCUXF3Z2p2X3N2YHhzR2p4SHRhQXJuYVp0aWZgXnBZX3NsP3dtT19Hd11hRndZb19VdmthX3NvT1tBZnd3YG5NYHNjTl1dSXVzYGFyb2tdX2NlaXdbWGxOQHBiUV5NWHRtcGl0PmFeWHh3b2ZzSWdYWWdvQ25Xdzp1ZUVdR25xaUF5d3RFRWNbcm9FR11RZWlJV153aFhJSUV5c0JNYmJHWVVfdldfZGBtc2xBSWNtclZnREJMUUE8TGB5TGw8bkE8UzpdbWNdWFhBVVhdV19pdm9lTVtRWWtwTGZQdVlpTmg8UT1dcnZ1UEBIV3ZNcmhYdnhpY3hPbXhYd2xmaFI+XFxTVmdaR3NMaHJDP2Jyd2ZITlpRcHd5SWheSWR5P2J1WHFCVmREeXRZcGhUZlxcPFFdaHhcXGZWd0duXFxuP286QWJOY11baVpFRnZNV21ZdF5HVltxQztvYl9haW15R05VUj1jWWRdVmZdVUdreHFpQnRrdVB3RHY9VGo/Y0Fldj9nUk5xaDpRYm9zcnBnYm0/Z1BvZmFjdF1TZXBDdG1xaElzQ01lWWs/aGVZYlJnQkQ7Q1J1aVZheT49ZmZsS2dRdVl5dWllb1VUS3lscHBFdnRBckY8S0lxbTtAVltJbTxEcUZxcVxccFV2bXlzZFBkYXhRTHNxXFxRVlxcVF9McnFISlFJVHhdS2RpTGV0S0ZdVGFsTUU8T2lcXGpIXFxwd1xcdD1Ac1l1V2E9S3JFVG9VSkp5SmJYdT14S3dcXHZZVVFkQXddRXdYcFVBPUp3aHdweFloSHNRbG5KVXlmeWlMTmd0WWlPV3Q+Tm1GRnk/YGpJV2BYaWNLeXJzPmp0eG11b3NzXnBtWW1FaVxcZE95WE5aYHljeE94eUdnSD93b0F0dWlzRnBxPnBgQUFtcz93O3ltcnl0Uld0PGB5RnFoc2Z3bll0PEZpa05pdWhtbnhwWXFdQj5dO1loWk5vWV9zeG5Nb0ZkUXddXXRdW2d5RUZaT3Z0R3VoO3dZaWRla1RKaWl3ZVJPVVI8PVlIXWJHSUdeSWJHRWRdc2N2S3RZV0Q/dXdfW3hMWUNJWXlLZWZkbXY9WWRJTXRSd2Z2a1RnT2Zra3JIb2JJYVd4aWZ5WUVEeUM8SWN0ZWNjVVZZO2JJPUREaUNsWXZRR3hRc1M+d3NVeWh2SURTV1NHd1NQRWdGR1dhYXd4dUJmX1hDV2Jtc1dxS1dtcURdZWZPVXhwS2dJVXZgYXdISXRrc3ZXWXVpW0Y+PUZiQVZWeWlzSUlvRXVjdVdGX1NNXXdIS1daRVZkY3haeWdYbVg/Z3dnVXJebWc+Y0M8R0dCeVdzRXZxaUh4PUVqPUNBaXh1c1l4YUdXeXhAaUQ9X1Y8a0I6VUdbZXVeR2JJd2Jgc3hdcXlZZ3loXXJxQ2c8bUlhXFxZeUFzSll3XVhuXWBweER4dXRMYEB1Rl1NPEFqYWFRd2F0TXBxZkxxUXFxdVl5X2VwS1RNd2lNSUlqVUBuV210d2lSanFLX114bnlPTE1KPFFXeW1MbklKYmVRSkFTSmFYZnBYUFxcdHVdcWVBcEl4cWZRcEVhVHNtcFZEbUlUbW1ATll4c3lteXRkWD1YeHlldVN5bHFFbWtld0ZZcEhRVGFhbXVtVTpAUT51dm9pcE5FWUdJbEVQT0dcXG1iTE5AaG1BeVV3cXZxREptXW1NbVNzZHJzSXBOPEw6RU5OcWtzVGtyXFxUYm1wbXROclxccGVcXFN1PXZFPW5ReEo8eUs+QG1DSHhDZFhPXXJ3QW9JbFhfeW9WdXFYSU5ZZHF4QHQ+ZE9McXJHWE1jdFlVaVlRdVV3ZXB5eVlueHI7eEp4cFR3cU5gcFN0cUtiXFxUR3hYWElYVT1XeEFKeFVSWEFMSllyPmh1ZlhOXkh3SWFSVT1ud0l2UmhWUEltZVlzW0BYO01SQFR5bWVTc0RQbkxXQUl1V2lPa21VRmxramlwYGVzVEBSV0h4PERQaWl2eDxyaDx0T3hZc3BRbnBNYnlwRXVRckVvZTxYZW1ZXmxPY2FzP0x1P0xyZEFzaEhQZUFVPE1Rd3RPTnhKPHhvWHlycEhROnBZa3BzO3RTSmVKQz1xXXFzdUxMb0lwZ21RS3BOW1hPWXVUeXFZSklTQURWcT1uYW1zVkxLZ11SVEFOYW1TVlVNbXROanFNOlVpa3BqQFFcXG1vYEdhaXJ2dGN3YnZYWzpfYW9RcFxcYHlaVmlweGhPZlpsPm9GcV5oVm54dmdrcV9FV2Fhd3Ntb3ZmTnNiV2lRZmxhT19HdnNVcWZxSXd1d194YG5jWGhQQz5TQz1nVV1ZdkNfSFo7WWlhWXNxdXlVRkxRRGBtZ29VdUFvc1pLRjpfaHJbQ0p1U0F5Vmg9ZWBtVEljZ3k/Y0JHU1JXdHJvaVBzWV9VcklhZ2BhVkJZeVxcaWhBVWdxbUVxUWk6cVJRa3U/eWhWUVhFT2l4cXJpTXlRQVZgY1h2SUhBV3R1XXc8aVhRQ2RAXVJ5dWhcXEFCO11peUF2SUlWXFxlcmxpSWJpRXNxaE11dWBRc3BVVE1Nd013ZXZhRHdXRXlUb2VheUhYeVhpWHBJdXhgS0VoWFtJdEdVTT1sTFE8clFoTVNxbENES3BMdVpfZj1paXFJcVVGbGl3aXVXc3RZaTt5dVBhZ2VoeW54bmxOdldeaVBha3ZJckt5YkFOdG1YbnRHdWw/bVBvc1xcT1pdV2VKaWhaR2Q+UXJDaGU/Z3VoUXFTSGk7YHM+aGI8SXRZWGxDSGtkZmo7XmtXYXNXWG5bYXY9YVxcWkZoUkBdcG9cXEFpcUpxbz5Bdm1JeT53eF15eElJYT1uXFxkd2JCXl5OcXdPYWhLTmhycXFyPnhoYWlSQFxcXVdnZVlhaGFxTWBaWW5vVV9cXHBwZ1dRYzxwZE5nbUt5cHF3VUl2UXdmc01FSj9Yaj9ybj1zZXFDQ2t3cj1USmlCZ2d1V0d4SG9pPVdKbklTTmVRallNVlR1QXFuVmVXQ3RzT1xcaz1VdEttWXJ1dkJddlI9cm9ZTWk9cUtQeERUTllsVnlAVlFUTV1tU1lYSm5YeF1JS2RAd3Fgbnddc21JT2h4UUxweGl5U1Z4a1htUGx5T2ptdmBBdVJBVVxcSVE7cHBXcG1WdFNOeXFjPUtjXFxwREVUaXlMSnBsblR4UGxYQ0lTYXlVZ2FxZ2BwZm11cFRxSXVxcWl1dVBtdHRWP0xaP0hadk9eZl9qPEhqR2dcXEw+bVdOeDtGdnleX2dub1l4eE9ZaVdpZXlXc2BgWnh3cEt4WnJ5bVpnY0JWdDpAYDxBc0F2dndHcnlRcVVnaWlXdGlYaj5odmV2ZUt3XXlQeGlIa3JeZW1weW1Od1B5Z3lleFNYc3liTllGSWd5TE9yX3FEbmdoU1NlXFx1dHlpdW9Rd25ZaEl5eFdHc2lJaWVxSG9ZZHVxaUl1eHdddkx5SWFLZGtxZUV3SUZFd1phWFhXWEJxQ0JdQllLWGZ3V2JZeG87V0o/eFhlUlhfU0w9Ujw/eHldZDtzd01pd1RveD5DV1VFYz9zdDo/YnY9UlprdFFrVWJlSWo/WGxXdEdvd0FLQlVxSFJ3Vj9HeTs/ZUVDSFl5Yld3aG15c3lzZXh3eXJ5cnlrQ2pAVU5EcD1ka1dtVUY8VVU9TURhUHNlb3dkdk51akNxSz9sc2ZEc1VNdmFZbUlJc0BgclJ5VkxQUkhReUhATGxVdWd4UEFsTF9dbEFsdkdUU0FwSk9ZcElxeWE9Tkh5UUI9S1V4WGpdcGs8bWhBeHdBV1U9bVRBbFBNcjtBdWJBb3RxeXd4eHRRcj5MdFtkUUZ5T25lb05QWFhISzphS0F1c0VcXHZLdXdBQVQ7WVVdbFVSYG1yeVFGVWpuRU5ARHlXPVlbaUpOeXU6XFxTP114V0FUXmhVeGBZc2RsR0RpZ1dgR0diVVh4P3FjPV5jcT5uU0heW3h3cHhpSF5hTWZ4O3FrO2FjY2ZpYmF0ZGh0SXleWFh2TV9ocXZ2c095cnZwS3hjZFlpYWBxdFdpbVd5WnBxcXB1dFdnWnBfcl50bWFxcXdxVWBqZ0FgdUdkUD5na25qanZaWmFcXEk+d3NHcDpXc0lpYlVOZlFganF2WkZ5dlxcX3NbX2FHZ3NOUFp3X1s8XnRGcGFwSFxcY1ZweWdnb0VGaXRNd1N0Q3NRO2hLcUhSV2VqU0Vsc3ZOWUlIQUk9ZXhJW0NSVXhzcXhxbWk9TXVOc3ZnW2RybUlab0VLTXJwb2V5S3c7O3JuRUNgYVRSXWVmVXhwaWdpZVllQ0lsV3VgaUdYaVNoXURlX1NkR0lFTUVUX1V2cVI9VUhhaVdMb0lnZXJWZ0RCTHU9PExWeU1YZXFsTFlNbHRzdUxoVU1YQE5HeWpIPFdXPFFJZFF5XFxSdE1wU1BPO3RUWVhxcHBqPj12WDxjPGFgWj5pWUlyZllzYEFuaG9heVl3SV5haFltXUd2V2lrPUZaW2h3cnFzZ3ZwZEhueHFhRFdoUkluQVB5eFdqPVdiPW95YEB1WXlpZ3FaRHdbeWFreXh5dXhfQE5eTkdeV253PVFpd295P3dscnluVlhiTW9pc3lieU53TF5weWh5VU9xSE5wbWluaXZpYz5uQ0hqP1BydW51c29sdHF4cXBxW3lsY1F1ZXFvXVZ0VT9nUkBmSFFbblBkbUl0UF5aPmhaXFxfX0pPYVo+dUpJclg/a25gZlJ5cl1HcDtAeFlHYHBveGpAal9Pb21uZG12XnB2Z1pHakJWW1lZbVlheGBmcGhndXRIYTthcktOdUtJanJvX2Zxbk1hdj9GWll3dVNgcXVxc1VJX2leW15uaEJPY2xYZGRXdWdgZkxQcnVAdU1Wdl1HWmxwYmBWXFxIQGxzVmRoUHRIRnl4WXlneWI8SFxccD90c2BhSm5vWm94OmBhWllyXFxYcFQ/W2teXkI+aW9Jd2hJd11YYmU/ZjxecklJXllZXUE/bFtBa3c+cD14ZltRaj9oXUBIdXFGZG9PdE1BamZPYnJedD9AXVZOc0FGdkVocF4/cE9geVxceWx4QG94bnlreGt1eXM+aWFiVm14YW1qdnJTb2BJTmpdSXlOeDxJcnlpWFt1QnNRclk7Zlg/ZVJxaHhrYkBBRztfR1FVUmBHVEhfZ2hHQjs/VFJ3cz9bQmlneGV5eURJRlBneVhJZj9lVGRVWUJrWGZtcjxfaHJvVGhjVGQ9U1lveVZLRT1tdTtlUnZrQ1I/VmVpdzxpV0JHaD5tU2RJRmNlVzp1RTw/Uj9leGs7WHJZRUhPWHRBeWJBdXhrQ2V5VU5nc19rRFtpeDpPZ3RXZ3V3cllJd0FXVnRvVXBtZU09d3VHVWlnd0pxSXRVdVxcbVd2PXk9eUVgb2g/RWU9cXY9a3dNPVhwc3M+Y2hLQ1Y8bHdFXFx1PVF1QD1RclluaWFXbXFYQFlQQWVrVHhwcm1PRHlsYG1zQEhXdGR4a1xcTG90V2tZbVh5bllNeWxJUGRZVlF4WWZwd3hkUnlkcFxcbXNEXFxaZ1laTUBlUkBqWnF5aXlzZmFvS2Fpdm94V3deTV9aY1Z4dF55bU5yQj5zdFhsUFdlRz9xWm9zU2ZuO0ZqUHByPmh3c0F5eGFzUGllZGljSEZaW1dbWV5xWUZtdj9gWFloW1lpTmF2XmFlWHhhdnh5QXBhY0BqYFleZl5haD5jQm5pQU9ldj92eXlaTEFuQU9cXD4+dnV5bkF2YjtJZ2VpcWQ+XUdGaFNxZUVJc25oZ3hoXXZ5XFxOYVpFcFtPXnNvR3lYVnlWSWJeQV89QHBQSHVWZ3NIT2FQVl1mcXhTcVxcaFZ1SF5gbFlaWz9ST1JKQVI9U1ReU0JhRWh0U3RVSUReRWI8dURES1JtUXJcXEdXXmlCR1lieFdjQl9pVmVXO2VIUFVpS1tVVllIS1t2Xl9TeVdWUVdUaXNDUFNWSndDaHNTeD90R2V2PT9iXFx3d0pLaHNzQ0RJZnVzQ01nVXFXaHJXeFpZRkFRVUE9eTtxQ3FTQl5tYkNBRnBNdG1JeTxneEZZY1pxc3l3REhbSFVzRW9RQ3JFeU93VD1LUktbd2ZJaXY/R1FrRmdraT09Rj55V3RBWTpvdEF1SG9LaDtTaWI/RF49Ung7RHhXRHNJckBjWUBJWUBbaEFNSVpZeT0/Z3Vrdj5tZ0FVQkxzVHltUz1PaGVZVkJhRmRBU21ZZlljeWI7VFlrdVd3Ulk/ZllBdHA7d0llVT9TeVV5dXhxSEpxc2BDeT1tSV5bV1FdVUFnVm5nSEBRRGxRYkA7clhvdFtrdD9PUl5NdXlBWXZJWHlfd3ZhV25ZVE51RU1BeWdRc0xtWVF3WWxZVG9jWUZpeGpHRGNrR1U7Qlxcb0RPbUhyYUZjSVl3U3hleVY8c2lNQ1ddR1hMd3hVcURfYWJwR1JBc2hna1lJU2VJW1hXWXVXeXZ2UWZAQUdnbUZyS2J1Q0RRYUd5XXVyVXhgYWlfcWlhUUg8a2hzVXNbR1lNb3NTXXZfVUVxT3lSSWNlWVRWeWdxSUdYaXhvcXhjY0JDPVNqc1ZTVUddO0RCS0lRVUNsP3Q6PUhHP1hHO1NAUVlwd1JSSVlZW1lXV2JhPXVmW0VaU0dcXDt1QHNpRUNZPXVCVHlDd2lZaFVCblNyQnVyVU9JcnV5T2FCXUFzU1libT1lO0FTUEtCRUtTOj1oaj9yYGdVWT1VW1tiS1dEcmtESHVTQndJdEFlWj9WQD9zZjtFQlNoQE9zV3FoPWNTPGVVQGlVOllYVElmeT1VWmlXPFVERFlEU3dkcTtDPUNZc2NWblN4PHdnRFNDUF9pVT1FWXFFW0lXVkFVTWlVb0NkQT9GdkdWYUVlRVlCbW1Cbld3a3dyZ0dnU2lTSXNEOldob1NpcElXcFV3Zz14XT15QWF0VT9jT1d0YHlDdkF5eEFCa09WTUtFV2FnRHdpPWFEPXVEbEd2WlVDTUdkU0FDTVtDYFV5dEl1O1tVSTtEQnF0R0d4cnFZSVN3VWtEckFVbWFmdUlTW2lyPllWPFd3TFd4Qk1WWm1ncmNXPXV0ZW9YbG1iV1VERnlDQmN3VnFFdnlkQ2tjZ2dDb3l2VFF0bEFpXFxzeWFjc0tLVWlZVnBDZ0tZeVJXeWB1d3dzZFBheGtXU1xcV3NbaXlVR0NYZ0hLc1RwY1lBP0dkXWVtVXVcXHdFUnFlUGFobWdTbHNFdmF5PE15dVFmb1V3Ym13b2FYdV1yQUlXUWtXVV9XPEtGVWNIUFFkSElVSER0dmhzUHF4Y2hXWHFQTnluY3R2Zk1scE1MQlxcSmdZSnB0VURNWFdodmNcXHlgeFlaPHc9YXZjZHNtRFhwdGpHPEt1aU1hWUpcXE1KSXFrdG1RdTxZPXl1XXlPeFF2XVxcTE9Rc3BIVWxoWV5dcnE9UUFIeU5xeWV0S0ZgWWhcXE9YPWxIPHJ3PXBKSHRDdGtVQVdrWU1jSFNISW9lRUtTWVVqTHhLbVhJTG9UbE1TQEtqUFJSaXBPaFg7UVNVPXlHQVh2aHZsPVBgUXBHVXM6cVBHaVJnbFdpcE9SYGpzeWxuVFBpbHRiYXJbTFU9TFRPRVVdRW5AQExEcW5zbG5qZWo9XVdmTVJMTHQ9YWtDdU5wTHltRXRhRHFgbE9cXElYc2VUYnVKdnRMWlV2UmBvYEVxRmF5SnBqVVFNcVF2SjxyZnhPWmlWZ2hZYXF5UFxcV2VwVFlQVFdha3BgcmhsUXBFbG95bERJckF0TWZ5a0NsTFphV2BUa0ZQZ3dpWj1WYD1neUpnXlVGWkRea3l3YjpzU2FVbEdJaFdJbHNWbGdId11FUHFJaGloRmVTWVNSbXNUY19WPVVzUGt0WW9IWW9HcVViO2llQXFWRltYUmlDaWl5VGdJY0ViWllSd0FpZ2Vzc1dyaUFKPF1YTD1WaHBLSGxLc3BRY2xSQkBWUFFLa1lwS3VNbnl2PHVzVVVYUWRPeG11YHh3TVV1clVXUVhsX2lKPERydlFKPExRPF13aD15TklZbnFvdmlybXlvTElvY0FYdHFTPTxXVE1yZlxcTVxcYFBaRFRzaVI7THBUSUpxeHU9bUtZQVF2eUteRXY+WXZIcG5vUE1sdE9GSW9icFlVUWpIdXU9SFBhWVheWXhzTVV1PFJmPWpnWHVwSHRAaWtYTFZxXFxTPUxMWmRVZEVWcGxXUFxcazpAeGhlcFhsWVE8ckhMTVBUVVBcXHdnTVJPRG1QPFE8VU9VeVZBZXc6TFJKVXBnQUp0eE5zdWxldUw+cUxeaWxedVJrRFdUZFVqYFJmPFdRPVJjUW9jdEtsUWpnbFBpQUtsQExFUXI9dFFFaHNtPE5mRXdIeHl0SFVWVVI+VVBbXUxYZFVycHZXeFNVcVdgdGtBZHV4RUxxcVhzVExLdXV3eXBDZG1FTFJuWFI+THBuQFJ3XXh4eGpKYVNebHFMQXlIaVJtUHNRVW1pbXBjaFlGSFFZYWt0UW1VaExgXUpsXFxqXlxcVnlRTXFcXHRobXJdRE5kPHh2XWxtSFVhdVNqcHZRcVI+ZHVhXXNwaHV2aFJ3WVVXeW5zQE9NcVA7QFJKSXg6PVFWVVQ6eHZqRHFgaVg+RXI8WXFSVG0+dUx3VXh4cWpGbXA8cXVXaXhiPVJyYHNgPFhgREs6dFFIXFxSeFBqSUROQlFqRV1SVk1QPFRMZDx5bD1yYUBUUXFyTVhRPG1OQFVMZ0hVZUBOSW1xeWRvQFxcbkpoVV5dSj5sWEhBeHlBWVRRdnlJVENxVGVddE1NeXM9TkpcXHJadVl3PXZkaFQ7WGxcXGhXRWhMPmRwU1Rzc0hOaFFqUmhvVz1Md2hqbEhxc0VvQGhQWjxKdnVVbl13cXh4WG10bEFydklKZnFNXlhqP1hMQmxQdGFqbXVLT1xcT3VIV3ZETkVMbU48eVM8bWtMblVFT1ZRVHNhbUBMdFl4clRwTlVJa09BTVlUcF9IdVRIeDp5dF1kal5lV1FZWXhgalNwUj5YWXF1blFpd1lVdEY9S2thcj1BblVId1NYcUZJVnc9bE5da0hUVz1Bb25gb1tFU015ck9QU2NkWFl0bmN4SmFoVk08TnJZTWpYeHBsbW9wWXd5eV5MVDpJbGpgdXNRVG9pSnlJeXh0Vzx5UGNdd1pJWVVRd3hkc0RJTVpMSjt1cjt0anFJUnJ1UzxtTkpkSmU9WV5tbkBgWT5obWVJTGNcXHlgaXdcXHlXd0xNSlhVeFxcWVBQeV1ZblBFb3llWVxcPHl4aVVrPFFhTWtEdEprWXJIQFFMYHNHSXBAVVJFTEpMQWpJXFxtQklOeUxOPFBvTHF1SUhwYEF4QERSa3BtYm1NXFxISltNbDxEcXVUbWlxVVZdSj54Sz9VdF1MUUtJeVk8UHlNcGZsWWZoWVo9cng9eTpNUWpUb1ZAdWhFUUdMbVN4VExheVxcUXRqWHhmTVQ7aG5KTHBsVVBzRFZcXE1qV2FKPm13RFBRPUBWeFh1a0xTOkxwQFVtRD1WPFRsXlxcTmhVT2R5VUlESztZUztod2ZJbEFIdXFJU0hhVWpJa2plbXVgc0dwcFtdVVRBUU1YUlVZUV1IVV51a01xdmxtbz1gUHZ5T25Bc2tdTXBVTWdhc1tlVktkbWlQUktQcmBVV0JkeXZgV1RhWHJhcWdlWFlQSz5MaldZTWhdTGZ4TGU9c0RsS3hZU0VwVnRBajpVdGtcXHFddVJHSE9SPGtDSVFFeVVtdFJwcHhZeWxQUU0+XU8+PXZXPGxLXFxtR0xyZU1RRklwWll0O0xUPFxca0ltUz5tSmhESjtFdm9US1RgbDtpUVBIVUxkTmpJSkNhT1xcdE1KQHBqWXFaZWp0cXdnXUxKcEtbWXNudXJdSXluSGpoZVJ4RXFCdVJrcXZOeGpvVFNKPFZqbXA7cFlgPEo9RHQ7YXhqbW1FRHRISFR1dG1TYUphTW9SRVNpTXI9aXRiYHVPUVNVYWtdcFRFRFZjbVhTWHRuSE5TeXdBXXhJXXRtVXdjWFh3TE1KTEtcXERUaEBsc2hMRnFvam1xQUhRaEdnW2FpYG9yP3ZcXFY/YnFBbWF3c25QXFx1WHJ2aGdvd21EXlo8cHM9Vm1jRnc6cGA9Tm1LVlxccj5uaV5fSUBwQl9kcD5iXU90RnddSk5pcHFtRU9cXGF4cnRIcl5fWmlhZ0hWcVVZdHlgcnFJdzpJYjtAeENGdEl3YnFGeERxeGdxeTtQampJXztfYGdQbWI/bkNeaTpvbmBXc2R4aGtAXFxKblt5WHlNeWJYRm9TP3dNUFpjR3B1b2RISGFtT25LQmVtaEp3dEJNZWBdZEF3RlZLRl9IW3docVM/cTxIc0NeamteXXBpcEpod1JmXmZgZGZ2bkR5anNGZUFOdF5PaENZc1dhXkF3ZE5oYGheWm1fbD13Z3BWbWNIeG9POmtnck9GS1l4W09kX2FZPFF5XFxjY1o9ZWBnQ11hd1FVdGhxZHFTVGJtdE1RVms7Yjp3Y21fSGptWUlJVWFhaVV5VE1Xd21dYm9PRnJvY0pPaGZBZ1hRV0xLaHVfc1VxVHFJZzo9RmJhU1JveVg7RllTVXBndEBHY0dPdEBbZjtrZU9ZdXVNZXdlSWhvYllfYkh3WFJJQmM7Y0BvaTtfRGBZSEJFZnBlSTxLaG51Y3c7d0JjQnJxYjpVQzxTU1lrWEp1aFBZclN1ZlJVVTxnWDpDVklZV0JnVEZvQj5vdE1PeGZRYm5ZeTxBVzpdRVtfQz5bRlpBR011Qlp1eEZXWHM7R2Z1Z1FwV108UkFMcGpwdGJcXHN2cHZVVUpcXHhteUBKakBORWhNTlVUQkh2TWh1Z01qaFVuQk1UaFVQREltSU1QdGB3PVl0bmR3O2lxX1xcU3RATVtBUUZ5WVtQVGNlbXRJUENIc0xUeUI9dVZMWT1RdUpEbmNoV3h5UVs9ckV4V3BgUFdseXZBbHhFU1RxanBNVk9Fa2ZZdm5UcV9hVkxwUlRxc2JFSnFkb0BcXFJhRE5SeE9SeFBpSFVwYGtOXXZyVGpcXElzYXRtXmhrTGRVZUBqdFxcWV5ZUlFQb1VwV3RGbFBAb215ZkxXXFxQV3NSX3deSGlVYXd4Zmt0d1tOcW5nQF87QGJqWGl1PmFkZ246PlpWRmpDX2I7X2RaZmtAXnZkWHFYXmNXeHlxb11UYWdvb2lBYGdUZm47RmlncW1vUHE8QHBKXnFhcF1zUGp4UXZeXmhyWWF5eHhcXFljZG9bXFxedkdAaXJJXjxAYlZAaTxJW2RheW12eT5AY0JpeHFyXldISW94T2Fzcj9FUkFoXlVUZl1meWN5RndYSnl4TEdTOk1WbjtGSkFmRmVzUHdEXndjYWllOj9UXnFFYVlIbGtpZTtoakVma0lyPnNodWNjRD90Wl95UWFCRkVGUmt5Q3VpSG1ZU3FnZmVVdVtXW3Via19IbXNnXkd5P21lPUt2ZltyVmN4ZENDc0Fiak1jP3NlQztERWtIclN3PnVXcVlXaVdpaG1HbEFlUW9pbHNjVF9mVj1zbVFmcE11Z21WOmVVc2FZOj1EbUdDSXFodmNVVVt4VlVUZFFXbWlTS1lyPXNScVdSaFt0W3dESE1pYHdDTndHclNFSG9JPl1JR3NpTUtJU1FpQ01yUz1VeV9Sb3dIQUVjZUdnbW1GV29ySWtpZktTRV9CT19IeVNVU2F4bl93UmlTUWlleE9YPXF1UD9zPl9jSUVJeV93bFdzQkl4WXV4d0dic29EbmtGY1VSanFkPXFIc1tpTVN0R3l4X1V1SFl1bEVpW2FJXVF5bltXdmdobFV0Oj1GSltHZkN1Om9kO0N2b2VTWml1RnNyaFV0Y2VpWD9XUkVWSFN3UlVUPWFIWjt1dnNiQ110T3l2aGdDVnlXdW1JdnlJUl9XWjtSQjtDP2tIU0N2ST1jb2NWcnV2Qk95W2lZeTtGbVlHSjtjRXd1cXFJRFVDbUtnSXVVa2VGd3d3W01jb0V3X3N3TXVFcl94TE1JQnNkR21iWWNZbnl2XlNDXXl4XXljc1tlbkt4Zk1nP1diVGV4b09mTm1odVFpYlFlUFd1aGVpU290bFt2SVdUU1lZdj9XXVVpV0NCW2NPYVBWYj15OlVWVnBYVFBVc1BWP11uWklrP3VTWUlYXWhNXT1tW0VZcHB2cG5oQnBdPmhlRFd1PG5mQEhsXmhaS0lxQFZpb3FmYGlcXGFeZ2NpeEVQXFx2QVxcb1FfQ0dpVllsP1hgZHFqVW5xZHlsQ3ZeTlZyY3d1dmZoWHBzTUBfUV91TXlrZUFhd1lxS1BhY0VjQVJTQ0ZySXc7a0JgYWJSc3hGb2R0TXJHT3ZfSVRib3ZWS2lLUWVDZ1ZVU2lrbUZFXXc9YWJRS2NIO0l2U3dbQWdBS1JcXEliVWd3bWNITWVGdT9Ud0FWQU1JU1lJPD1TcEdXbzt3bldYRVVJU1F1altHZ3NlPUt2TENnVmVTWXNFc112S0dmd11ja1VkcHdjTUF5YT9YVFVIRmdnTVlWSFlDdl9TbUlmQld4d1tJZz9DQmNJVElUcUloWkFTcU1ZQld3XnlzaVxcUlBFeGZdcXVMdWxtdWBRVVl5bnBIcFNhc0dVSjtAUmp0cWpoUnZQWV1RaztBcmlBTjpsUEc8c1Jhck5EVz08dm5tV0BFYlBAa1JgXjxGaXZveFd3Xk1ZcUVCPnFUSGFpYW1Td0V5U3NXYHdpcXlXeG1HbltiaklVZW1VaXlVPWdSRktmWEV4UztGdDtSeGtJdWVLTkFqYEhNO2VNaU15QVltT3lweWh4R2R4SXVwWVlueFRweFFNRER2RUFWeXhrSWFVeElOb0V2dFhrPGxZXFw8eFllclREcmNNclZod0lFUV9hTHR4TT48S1lsVVFBblN1allYVkhlcEtESlNkTVdkVGlcXHFyUVZiSW87SVY8TExWUFduXVNISHFxWW1IcXZCdXBnPVlhUFVMWVVuYWpMYW9kQFE8WVV4VHd0PHBIYWxlUFdkTVdkPFhYPEt4cVF1aFZFRFl4eVR1UVlOcW9rSVNMYW1iQXJjSHdBZU13XW9kcGx1XVRbWFlIcVlKXFx3TWFybGl2RWl0ZUBPPVVMbVFNalF3bUx3Rl1NbXRxUW1waUF4UmV5SlBtU3BtcHBRTVh0SlRQcWxLVlxcdmxhVERlUnQ8bEB5T0lBc2JkalJYdEdxUkp5V2J0bnNNd3ZMeGlsTEVQb3l4dEd0UkRIS0hwWHBEanRATkltTkVEU0xpck9JT1FoTV5UcXA9b3lhc21cXFRAXXFrbXBuPVByTWtvTHdARFZFYXhRQFI+PW5YcXVYTExQcVVTcVFWVVZlRWtsXFx3bk13WUVYdFluSj1PcllxXFx5T3NUVlRhTV1YVXFwV091T3dAeHZkVUlNTWNBV151cnBVd295dXd0eGZka0ltTUFscVpldktUdFF1WHRoeE5peVtAeGxBUnc9d15HbTt2bmdedXRWd15ZXUtHcEp4Z2BQdUFPdVlOdXNBeFRZeWN5blhgeHFPd2t3W04/cWJZXFxVWWtCZnc8V3hoP2ZaPmB4cGpxX3ducG5PWXVKeHZjTnRUUXVVRmQ7T2NIb3FSSWo7WXBHcWFgSWh0YHJjeWBXVnFgbl5jZnFTeXJ2bnBgXm1ZaWdJWXZ0X3hwd3ZvSHBwXl1UcGhTWGBwcHB1ZmZScXh1eVxcQj9gQFl4Wk95QHB4VHBuc0ZkbklbbGFsTXF5XVZxYD53XkFpd15laU5zPnBxO1loPXF2PXBhSEhibG5iQHdyZT9bPUFwUW9eTmhcXGl5XXlxeVdocGlZc3R3dmdPbG4+XkBnblNJbUpJaUVQaGFxeFZPd3FJbGd4Y2dXeHBIbHhmXWR5d192ckpPbkFwc3ZoW1VYcFV3ZXRHZGdRW1N3Z2ZYZ1Rxb1dPY1o+XFxGeV9aXm15X3hSaG5kSW9jSFpvX2JrX2Rfd2h4QG9wdGVNeHl1eWNJaHhpSHZXZHV5WEdTREM9cnlJeXR5V3h5ZXVHYmtPaEVpU0lHWXlRc1pJcm5ZRVNtc2JFeVxceXdEcWdLZWhDSWRNX1c6TUViRUdYd3VydWVkc0VyXWVZbWRHVWVYXVR1W2VxdUNEQWNsT3dJeXlfeUdYP3hpTHh4SFlhUW1VcGpeSW1hdVBzSXlmVFVUeEtmTU88UW47dHY6QHJkdWpxZGprcXk9UVk8UFh5VHBzeWxQUVA8UU9CRFdKdVN3ZUs6aHJKdHV1aHZxdHFQVVVGWHlaaHU6eUpyRXJLSFJqSUtFeXlFcFNYPFlpVG5WPU9NXFxWUXlyWVRZZmRUWVBSeHlyY2B3PVRKPWRzYTxOSmxqWjxWW2luSURuQWFMPmhYdXR4VnBwZWxWQG1xW0B3PGxzWT1LRHBuXWROPkhqU1FrTUVseEBuakxyYXB1UFxccVdcXFV3bGt2REtbWU1xTG9taE1AcWxDaXZPdVdZZXdoaE10bEtFTFFEQXNhQFZdRXJAUXZHaEpFdU9BbFNRdW1kZGxXTFhLPVR3UG9rYHFIbVFjYU5xTHA6dVdZZHdcXG1MZ1RtbWB2alxcVGhQVFhlVXNRak14U2dxb2JBdDp1TV9ZanBYc1BVcztETk5kdjtZcFtBUFdZbWk8eXVYanJwVEJJTWFQS2lwVWd1TXJsa0pobGdRT3JpeDt1dVBMWHdkUGBhVmJUT0JETmFYd3BdSkphWVBxVWFsU1FsVGFsb3FcXHR3XW47SXNHYUo+VFF2aXFeUXZFaHVwSFJ3aHFrPHJvVVJTaFhsZWp1P3FwV2JnP3VPWG5raXRdR2traWtlQWM9WGhNPm06QGZ2Vnc8Vl9NeGJUdnZIWXBGeXVcXHZeTWh2U1hzcFFlSE9ydHdwYEFvRl9qVEl3TUl3U0hdZHZgSHdfb1ZyS1dgWz5zdWZnUll1UVlvQF5rYmBlVV9dXFxpaTxYYFtJbkdOdnhGYnV3W25xWlVZXWleXFxOSVprb3FFR3FMZ3NyQG5rbnZCPmlzX3hhcGBpWGxuSGZWT2VOSVpdYW5VZ1xcTmFoPnddYVl4O3deaHFvVmFvZGlfXllndEFdd0lqdlFxVlBhQXNCaVg/eWRHaVNVaXdOR1Rjd2ZvU1VUXXNpd1hXZ1lwY2VGU2VNcVNacUdcXEFmRVFWa1tYeG1iR3lCRmdUdnd0SnVSdGNnVkNZT2N1cW1iZ19TSHVGZG93XFx1aFBxYnBlc2NzaD9NZXNVY25xaHBVUlRrZ2lTR2hLcmFpV0tPd0x5dE1HZVFvST9heUJ5WHFBeV1pQ21xSGhtc1xcZ0d2ZVdSQXRMT0VNW2lsd1Z0a2hJcXV1dWZMUWVDW0I8b3I7cXQ+WVdGWXdAaUh3eXllXVdzYWJWVUhpSVh3WUVkdWNqO3VdaWhpPVRlbXhuXXZHWVJRaWJgaUVvYXlUT0hZX1hSXVh3R2RwQWldUXRxd2RxeUQ7b1JMcXVNX2d5a0NoPWd5Q3R4P3VST2I8T0JpQVZVd2lEPUVcXGVYZjt0dj1idl1HWVlXaUtVRltTbElEP1N4P3lJa2N3aFF5d0tpY1VWWlFJPmtnQ0lVUWFIRXN4Ynl4a11lcm1VYnVjckt2Qj9ydz9WPz9EYkFWaElWdWNzS3NpPT9IWkdkVlV5clFoVE9la2VCaztkUWNlPmNkdnNWcE1GdkNDbVFlUm9lW0NyPWFzRVNjVndXSEVkaltmZWdzUT1iUTtTPklXQEV5SnFURjtDRz1ZcGFjXTtzXFxhVzxHdVNJRW9rSW9jU0tjQ1hreWN5Uz1jdjtVZTw9SDo/UmR3d3RPaV5LZ1xcaWhFYUdPaUNjZVc7S0JGQWV3aXZKU0VqXWZVY2VWX3hcXDtSP3VDa0tIV0VYRFlTSz9GbjtYc3lSQXlGV1FYc3NFdnVIb2dCXjtzVkNYXkNDSkVTRkFWWk10W21jRXFWQ0NGW01nSElja0lDVEl3P3lWYUF3Uk91a1dXTk92dVVmWFlpYGtmTmljcVt1UjtTSUtSV014XFx3VltnR3NdU2RpWUl5QnJtU0tITkRdeFt4d09kTHJcXHVNVFF0QUw6VW5cXGFZSUFXYEFSdGF5RVR3WW1XPUFxQllWZlVZRHBZO3l4anBRWERNVXRua1hrSWxyR3B5VT1uSVhzX3RRaVR1bXhWTD15P1xcVGRsVz5kUV5pcGRldFZhbVpNWEl0UW9MbU1NVVVRVj08Sl54dVZ4dlZxTm1ITGA9VGJYTkdpc1JQUGNpWTppWF5QUFRUeFBUeFhsdmpdVHB0V1hRdndBTFE8dV1gVGRkanlYd1dwcElQT11Mc01gbklFdEhlc2RZdEx4cEtcXFRtcE9SbXZmVFdPYGpOPUs+TGpzaHNdYE1TYFc7VXU7ZGtEbHlcXFlUSUlXYVFKdVV5PFhNOlhOOlhPZmF1c1hQa3hzY11vPnFyZnBuUzxqdHlNZG14YWhLdTxWYmVQWlxccWNRUnlwcVpBUkJUVlt5TEVsUVBsWVc9VmJReHB1TGdNSkJsWXlYdkhZUWNFckBATDtMcjpoSmxVeGBpczt0akw9S3E9dGxcXHZ2ZFdIXVVYVUxIUVJHVGxAPHVVSW54bFZYPUw+RE5ybFR2dE1PUFRCPXdSXVVhQVg8SVZLXVVSPU0/RW1qPVRHcGtpUVFJaXdMZVRUaVNZQG1SQGpOXFxTPGVPVnBtPGR2a3FMYWVRdFBMcFVOW01NQERuPmRYO21NWmxWWXV5QHlQZE1SXFxUbmZgTHY8cktcXE9SPXZkQFV2WU1KeExUYUpZPEs/bXB0RHdvcU5nRFVodFNnaUpvUE49bHhIYFZoTHZCRHdKbHR3RWpXSU4+UVlXQU9sXWptPHlrWGpEYHFcXGFqYWFuYnhyYHB1YEhKO0FtQHFXZ3RZanlZdj1MWVlNSF1zQnBuXnhwb1xcbUdBdFA8b0lUdUt5THRQWD49dG9ZVExFdHE9TXE9V2Fdaz9dWWppTWRMV3d1bFNUdj9wckltUFY9c21ITG1AUGxkVmdZc1NRVF5VWV14VUp1TV5IcG9JUGBZTkBxT3g8TWlEWHddbV5gU0M9a05USmRYVld0WHd1eHVgUFBBV0hFWWdVa2xld1ZUbWJobWFxc3JEcnVVbk5lc1JVbkdAeHZYUldEcEs9SmxJU3dJVEdETmlxcnZFcEs8WVh4cEJVa2xIblZAWWFkWWVxblVgb1tgc2t0TnNtdWBRWHNUV3VFeFZoUlRJS2lVTF1cXGxiRFltcUx3SVZVeHBSQVc8ZXlabVg/eFNdaFlUSG9QeVFRWHJueE08RGpaRXhaYWw9dWxNeXZJeVN0XFxzeXFxXnhwYmRLTWFWOlhPdmB4bFlzWFlxcFBMRV1SXFxlU2pAVmFUS2BVbE48WTtZdVBEUVc9b210WGNxVFdcXHl0TExcXD1XQXl0QkBMPVlLQmRPcl1MSzxvTjx4PURKSkx2ZmVzVXhrSWR0SEFSYj1yaEhOQUV1PHFPYHBPQj1wU2lKUGxTUkBqW0ltP0BMYVxcU0hZS2BZSjpoT2lcXHdaVVJaXXdnbG5GSFVnRVVuSXF4QUxARXBSdU9ZeVZ5TFV2SFVCYXJtSG5TSFZ1dVFwaExOWXVBWHNdYE07eXJuRFZ1cHhkeXNLVVk8YWo7dXFRdVlAbHlJZG89XFx3R3RLeGV5W11wRU11X0VXWFxcbnVQd2R4cWx5eUlAV0lEU05ZWWJ5dGtIcGtMUXlFUlFsbUtkeTtoV1dESkJcXHVgSU5lPUtYPWpXTXRcXFhsQXhxXV1LbFRXa2RtPGl4THVYS3BKd2VOX3FXc3hPSmxSPmh0b2RqcF1sb2RzW0BYam15PFBrUExKZEF0OnVZR3V1PWFuQ3V3UVxcUjtBdFV5clZUa3JpS11pamxBa0NkVkRESnREa3dsblhxakM9dkxUbWZ4dEFZVGtoWWZtdFtcXG9JWG5uWFB0cXFEPXdSPVJ4bVNUcU9JSW9KYW1NTXlWdEtVVFl4YVFJSXF4TFdgYXk/YVk6PXdWZVl4XFx3eVB4Ok1OZHBwV01ZTkhvRVFSWnVOYGVVR1VqeGF5Xlh4UExVQWxtcUB0bk1tS1RZS3B2RFhPaGBLTkhMaVl2XmR5VWBYWHFQVHludEF1RlhtcXZoREZhc05xSj9eSj5bYFldSkhyWT9oclZaZk5HYXdSYWJhP2ZCRUZQP0hnc2M8Z2I/aVJZSWVAV1RaR3d5SUhRP3VHU1JDWWNGR1M+PWhNW0lvY0k/VWl0T3k8b0JbQUJFW2hna2Rra1hOR2hlc0RfW0NcXEV0P215V21leUdCRlVFVENzRUtSQ1tCVVtkWU93WUtoPXdiP3NEPEtEYUdHU115SF14P0VFV1dJYEFDeUFVaklSXFxhWGFdWXdLUjxvQ1Y7VUFfSVI9dHRbdkpXUjxrWV5bWXJPZUhbeWhtST1DeV1ReXR5aXhhRWdRZFBbRWxlVGxNa2ZZS3d0T0pocU9FTG9NdmtEVGZcXFhjSE9BPU89QFZARE5WdXNpTG9nSGxQXFx2cmB2X0lsQmBTOlVtQFFSRlxccGBtS2Nsa2xUTz5AblJsVkxJbF5ha0lgUF5Zdld0d3ZUa25MSj1wUjp1Sm5YXFxDWXJrdnl3eGlweWY7cGlDVmdZbnc9P1teZ3lId2VzUW1EVltrcHJvUWNbUGRdXnU/aHR1PnRASFxcY2dobFByd19rcHBjVXlyalluS09lWXZeWz5tQ09zYGBtcEdic29IV3ZOQ1NeQ1N1T3dtUWNvY1RCb0JPPVRfZXBTVHdrVXg7XFxKXmxtanFzd3h5SjxWOlR4PFxcblpITW1xTF1JTnhtc2RAdHFFTHl4b1RkbXFIV3RhdFZUbWtVWFBhdXZIcHdYUz9MSjtAUkpRTXJQaz50dmlQbW1ETnFQc0pVeEs9TWZcXEpNcHVoQXBoWU87PHJwSE1FYGtpbXE8TExcXEltVUVuTEx5PFlyPmBybkRtWmVrRGhzVkVKSEF2Uj14Zj1yPGFLO01KdWRYSmxOdGFQR2hqZ3RPVjxMTXRsUXR3cnl4ZU13d1xcd1ppclNgcD5lbltpUllYbldEckZoV3dReXlQS1JwUT5obEFMakVcXFNxQFRYXFx0Q3R1S1RQdFxcd1hddUF4dVtwbT5EbWRITWo8TkRdVkxZdnBpSj5Ea2pwUENgb2lIVFFdUjxNcm9cXE1gWGpsdUpCSFdCZXVKcEw+RUw8bFBJaExYdE9LcFhaUXVSVFRbTHJQZFVBSG1SSGxJVExMZHlNdU9KdUtuaHVveVV3SHRnWGs9bVFaYXRGVG1yVVQ6eXJvPFFSUVJFdWpKUHNLZVlJeHVKeWp3cFVuRW9oYFlFbFg+aGtwXFxTPD15SnlyYnlvbmhZRkhYS3l0TVltRGBNU3h3SEBwc3RqcEhqTXhROkROd0xvV0VxVj13aVxcc21NTnFdTWNUc01ReWBEbUlcXFJOYGxXQEtkcW5UYFVBPGxWXFx5QHBRR1RXbWBObXFsO0x0WGRUQE1PQU1STVxccXR1dmdNbXhkS0Z4UGldc09gVGBkTHNBS1VhVUo8Sz5MSjtVeF9ZSmZoVW1NdWdVeXVwUE1la3NVVF1cXGpTXW1TZGtndU5SYVA9UWo6eEt1PFZQPG5vPVZBVVdiPVdKZUx1UFJwZXB2bEo/RG5RbFN2YGxBWHhXdHNaaVVnbFVGPUxUcFRRcUpaQXhqbEtbWXk+WXZJUGxwYEp4PUxqZFJcXE12O2FqO2hXS0hPPEV0XkFZR21VcXR1dlVQd3RLcEB2QmRYRHFxZjx0eEBsOk12Z0xrUl1sUz1OW0VOQlhSb1F3dXRYZmhWU01Rbjx3YUhKS1RqSXVqY1xcTT1hTkFIanA8Vkxxam5AT2Fwd1FVamxBeEhVT0FIUV9ReGppcTpcXE1AQFJCRHVTZE1xSWpqQHc6PVlGXXRPQHNcXFFvT21ZXkhNbnhMSHlROnFvdmxtSz14SVxcUUZMS3BRWXNkc2VhVWltSnZBVnJcXHlobHc7PVlzbEtJUFNnYXZvWW14WGtGRGp3VG1lUUtGXFxZSGRKZGVXZVVTUnVVTVxcV2Q8cWFBdExgUm1vcnlxY2lecGRHclVJUG9DZGtSOmtUbV1mTXN4Oj9TP0t3XFxFcmhHeGt1aUdFdHg7dWtvdnh3cnJtYl11V2l3Rk5LVFl5eEdpclBzY1ZTYltjd0xhZG5PdUg7QzxTRFpnZ1RDd11xZk9ZUlVzWWpZWTpZSVxcW1dIRVhVUVI6eWhHWVhRPVhZZ3hlcXJLTWVuSXk6eXNfQWRCUXl2P3ZCTUZQeXhaV3R4TVl5V3J5PXNWd2hydXlKXWh2c1dmSWVtcUQ+QUM+bWJvQ1drVVBRWFh4cHZnZVF3TVdVWHBFcUpnSVZaZFdUeUtbPE48RGo6R3E6SVxcOz5bUGZac0BbZVleVVBmU2FzanB2R0BqOj50PEBmW19vU2libW5zWj5bb2Zna2FaU25lRkhdbkBkXFx3bEpJXFxoP1xcW1dzXmZbZmhpO1FmVGh0VmBzV1d4Q2BnOld4S3ZiOm9ed2h1O29lVlhaPG9wTXhdPlZ4VGhtUXdzc1hcXGtoeG93dmBva3N5c2tud3NmY0dXeVpma0tudExgXWR5cmFOXnVpck4+YlNXZzt2YnY/YT5xWm52Y1hxc2F2dD1OWk52cmh5a0RZXFw8Zl5GUXI8cWhGR3lGZ2xKUWFTb2hLaWdJaXBQaXNydmE8eWdVUGRTUHVAYWdlX3duV3c8aV0+PlxcQkZhRl9rR0lgY1dbRU5dR29bYFZkc3ZvbUZlY25oUVZkd1ZbVD9cXFVJaUhOYWJwb0ZfeHN3dHJeZkZObWdRbGB0Yl9odEF1aG1WWXNIXW9FcE9oa011cjtUcm12SnN5aEdFYXNDUkdjbGV1PHFlRWl4YXl1a1lVVj11YUFpeHV2dVlyYGlHaU1WOj9HP2lzU21FSVFpOnd1aGNZRHNyeGl3XWt4c1NXRWNiVktFZ3dTQjtjOj1GYj1CQjt5PXNoPF9IeE10Q0ViamF5OlVHbHFXb0NCO0loSVtoSD1JbFNJXnFTREN4aEVGWmNTa0lCW1dEdmVDTEFWbW1SQV1JeHFlO0lCZV10TWNZazt0bVlDXll3Q0tUZjtCZXFJXFxbaGJPVVxcY1NrUXY9V1laW0dtXVhlb0lBPXNgQWhnb0ZBU2NseXJaaUU6PUNUO1VuQ3N4Z0U8W1ZRPVRdSVZEa3RiYWNfV2JLeWJuX1JgR0hsWXJcXF9VblF0PD1IS2lTcTtYaGFieT9XbWlZVHdXR1tCTU1JUUFybWlYW1lZPUtSZXNobUtmU2VkRHFJO1dmO2VUR0tJX3ViS0NCQE10dEN5SWl4bFlSdVFSdWVyX1lCa0tiOkdkSUdIY0t0VXFyVlNWYEd1TltCeUFHR3ViR3dlQWdSZ0lYP3NIcWFlUm9WdHliTkFkRXNHXFxvZGdnWTpddnd5VmE/RT1vZmprUktRaUBLeXZxSXBzdmFvSUFFZHA/SVJvdzpLZkBNeXJDc1ZNY1VTQ2tFV0dJSU9zdHBPeXJNRz5hc0FjaXhpc2J5WHltaXVVRW5rdnZnUnlBWDp3Y15XWHBLWFhxc211ZWxBdV15aVJ3WXBHSWVVZWVPUnhbQjxDUmU/Yj1TRFtlYkpRQ0w/aFtVckBLdHZXWFh5dXl3eFhwczxEVWI9cWxMSnhoanVZd29gdENkUWZMTlBwTVNRT2RAeHRETWtITEtQUz9Va3BVTF1ZUjtMcExoc2BZbD9NeUNIeFNBUlg9WFhgb1JwbkxkdERlVVdgbkVUeG9RS15wc2xxTVdAc0xtUHZ0b3FYUVVcXHFRUWxoXFx0bmxvP0FqSk12aG1wYFlMcUhOeXV2cGBvUT10QlBURkx3eWhqS0hXVURPSVB3WVVVc2RXcz13c2FOZ3VtXmR3T2BQd010cHVLWVhRU1FxdEFRQ0VZXXBZRVBPUWh3cWBSbU1vSHFQSVVsQHFwS1RMVHFWUGhTRHBSWGlTZ3BtcUhXQHlUd1R4T11tSGlKPERqSGRVZUBMYEhWOnFLeGxTcHFwS1BLdnFMYUVMTnBQWUFPZ0xreD1YW0hZQmFXVHhWQUVXTU1sbkhTbT15OmVXblxcb1B4UjtRdj89TkRAa1JAUD9QUVc9bm1ITEtkdld4cEtBd1xcbHZgeG9AcXZPPFBrUG9AWUs+RVNFQUxfPGpeSExkcUxMSHhwUE5nVW9FUUxBPVFMYHVRdG5PWW9xcHNbXXJeaG1xZVFMYXlYcGxOaHBcXGBVY01zTlF3az1NcXFLQ1BeVUhlQHFiRWldUG9uYG94Y190VmhrXFx2XVxcaHlKPltQbltSSXNBeGNSXlpzX20/aHJ4XmdycWtibmk6aXVxb3VocF9Ud3BIYGpwX107PnJZSXZVb1pnPlpMUXZUPmpKd3ZCTnM9PndRaWNbeV1zQXJZZms9X29dXmFydl1JQXJeUFpxWXZxXm5vdm9tSV1kX2VAVl1ab3BZbmxpcHlmYz9bQng9V3Q7cVZ4T0xZTnJQTGVlUUp4T3h5TVB1UWh1VGBMT3RZcFN5bUt0czo9dXBtWXBNdHBEV2NxVk9VUFFMdWJoampMa0JgUmdcXE90QFZRZFI+TU9fQVE7eW5UYWx0TWxHUFhvbFVCUVdQUU5RQXNIZFhdTGpEcXd0QFNRWVNuTHdXVHBXYHVwbHB0XW5rRFNlYXRrbXRjXUppTGs6ZU9OZVVUaHlWYVBtcVRudE08RFJ1UUo8PVBGcWxabHU8PXlfeXc6SFlyPE54VVZbYU1ZeVR1dVZFRHZUXFxKYj1KYUlOa3lYd0FuX1VMcmlLPGFxSF1WamlVeW1RTVhqX21Sc0BKPnhPQXBWOlxcTjpcXHI7UW9HPVg+PFleWUtncHI9dFF4eFFaXFxybURxOkROaklLRXFyR2BYYExsU3hPQm1KeHlzcUFuRj1OS0RWXllKSVl2YT1yZnB5QXh4d0FyeW1weHVNbGF0b1BPQ011XlhOQjxTTExMTHBsQkB3RXRTTExOTGx2OlxcbT5gUD5Md0tsWFxcRHFEYVA/PmtUX2NVR192UFtjQGNJVm1qVlxccW5oTUBtUm5gVHdrQHdyQ09sYWdeZ3ZjTGFoR1FdVWlzZHl3P0BeRGh4UGhhR0dldUZoWHhgXXhjTUBcXElGdHg/Wz5WW0VeYk1eakBYWktJeXJBXk8/W1hRYXM/ZjxIallBX0dYeHVeWmNvdEpAakJgZ3FhY0xAbUpBeHFBX1xcWWZ1cW89TnJzVmdGXng9QGdjcV1JQGhaUWlSSVpXQWFKbmBGYWREaGB5bm5TZ2RMYGldQVpZX1xcaFhcXHZnXFxNUHlEYF5jV2xISF5aRmNDP2NWUWZLbmZoaFxcX09tP0l0ST9yVmd4Um95WldqP2BsYUFeOklsbndsPU9lRmFxYkFwZmBpal5xYF91PHBscEdmZ3hmW25lYmldcXFkTD5qc3FiTEZeQHdjTWZiQE9lU3FfV0B1YGl3UG92SE9nPXFkaE9lbk95dmljZEh4Sk54Wz5cXGZeYVJXc2toZkVxXFxMSHA6T2BqaWlvcF5qWXdeUFpjP3h1cGlpcWV1cXdpWW1JRmJScWZtWW5veG5WUHVKR3VSYVpFbl5CV3VNPnlWP206SXFwb2BnZmpob2NAYGlvT1xcbEBtS1FcXGFJakB3ZW5BZUo/eV1vX05wcD9RXFxJWXY/P109VlxcZkZ5dlh4aV5uSWZtVFhlZk5laUlbdUFgO1B2dkB5PUlpW05zRV9sQFlqRUlhWVdbdXB5dmhqcmFoVEBwTGZ4Y290Umd1V0h0YldtQ051ZW95cU95dmhjbHBdQ0Z5Sj5bVHlaRWdhXFxJWm1GXlBRajpvdVxcP2JFT3JUeVteSHJxZ2U9T3I+X3JWaXBxZmNyUHc7P11zPmZBZmdid2JcXHVCO2U+RWJGQUg6PWRqdUNCP2N4bWlOY2g9d2RpR3VAQ1c6c3ZwXXVpVVlwVUldZ1ZIPXdDVWZcXGFGUz1ZRmlVYEFIdVVZPm9WXllSQWN5O0N3V3d2Okt0Sm9CcF9pOm1JPHFzZT1TbD9kYWNEUFFkVHdmQ0t0b1d3dm1kXW9leFtTTXVjQG1yQlVoVVlXeE9zV2FzbHdHTmFFZXdodllpbVlJW2dUbXlUQnViOj10WD9VZ0lJdFVIWk1jXldkQVtZWWt0dm1JUklIVHVCdWNTQUdGRElWdUtDZkFTSFNYZGNlRj9yWVVGSDtHTVNDeXFWc0VSPF1zdD1meF13Pm9XcEdSVmVlSm1TYnViQl9yY0VmdGVzYT13X01IR1FzUEtFR0VJQj9IY0tFX1NGS1VjalVJVFlYcVdiWl11ZkVyP21YdmdCPG94Pk10c29pdXdzW0VGWEtCOz9mWDtSdT1CeU1DTW12X0VyeW1pPUF4YGdSTj1FWHFleGlGR0V0SmNyO3dDXFxbVlljV1ZvYkhXYkJjdW9LV1hXcmpUcWpcXHRVRFNlTE88eHN2VW1TXFxwTVFKaVxcaltIeV1lcFdNclhUSz5MUFFpanI9Sz5MamBBSjxMeUxASzxIbF5VUHhcXGtCXWpXWVNJYVdMRFBCVFlwVXFYcG5YaXRoZUpETVhqdFVMQFNUVWtTYFhCTFVlPG5OWVlYVVNhaHBHaG9IRVZnPXVoeFZLQUtTXWxzVU9KPEs+ZGs6RG5sZUpFQGo6QG1FdGNURmxyTmBsQHQ+WG5PWVtiV3FDRmVFSGRaP3VXVndWcWNBVmNoXmJ5QG1tUW9XUHdSUWtzdl88cHE6Pz5jaGJ1VEdLYko7ZHNNRFpLZFh3R2w/RT9PVEtbRT5LYj9pSGlfVkhZQz5LQjs/UkI7U1VDREtDREZbQjxDajo9Tko8Sz5kTUY9UlppcElYcnZBWHRQVnVIS3Jpd2R1WGg8TEJcXEo8WlJfXzp2ZDp2ZkJPa1JHW3h3bXd4eFBXXnVucHFoZl9neD1ZWlFWdG1oWjxGajpDPk5qcEdaclByWnFdRVFcXGF4a09BakZmW0dGb1dYZk1uaVZGdjxvYVlxYFRBXFxNQFxcQl5aPDpOalBZWlR3a1NIdVNPYUVhWlZGbnFYYWlnY2FvbTtObEJAajp2WmZZcHFQXVdmd093X3dgeWxQdXBYZ1FgcHJAYlo+PEQ6W0dsPXJmUUNUd2M7b3VcXHdZQHNFcz9TXk1mR19nTFNJW3d4b3l4ZVdiSEtJQmVURGl2Okd3S2FZWXdoWztEQls6Pl5id10+PnNBZnlHYVpIZlppWG06YGZXbj5XZ19NVm5bd3VpQ0xLRE9HaTo9Rko8Oz5mcXlaQnlqaGh5QnFiYkdiTEZcXEo+dWhnbEVxX1NBYnhobERYYzw/eEpGeHdAXFxCXjo8PlRrVWBZSjxTS0VQYWh5akh5eV1OYDxOeG12SG1uT2RUa2FQWkRRQWBZTmVUVXhNRUlOSjxLPkw6PFxcblBcXFhGeFp4b0o/ZW5Wc0Feam9AXk5Ibk14aV9QYUFfYj5OWjtcXEJqWkVMbT1MPUBZPkhXeUxUSzxMd1ROV0BrQlxcSjxEajo7P0ZIP1lOaVI6TXJsa0JbQ0RCW0I8RDpScktVPD1SVEd4WkU6QjtAVmtJUlJYajo9TkpaO0w8TE5KSjtKQkY6SzpKPERSV0F5eUFKc3RKYHVSSF9gaUFaOj5aOkZjP29jPm9vPD9mPDM8XCJce1x9</Image></Text-field>
</Input>
</Group>
<Group labelreference="L3">
<Input>
<Text-field style="Title" family="Arial" underline="false" size="24" layout="Title"><Font family="Arial" underline="false" size="24">A Maple Package implementing
minimization of boolean expressions</Font></Text-field>
<Text-field style="Author" layout="Author">Jay Pedersen
University of Nebraska at Omaha Student
E-mail: <Hyperlink linktarget="mailto:jayped007@gmail.com" hyperlink="true"><Font style="Author" underline="true" foreground="[0,128,128]">jayped007@gmail.com</Font></Hyperlink>
Version 1.0, 2007-07-09, <Font bold="true">
Project: Finds the mimimal sum of boolean expressions in sum of products form (eg: XY + X'Y + XY').</Font></Text-field>
<Text-field style="Author" layout="Author">The &quot;consensus&quot; routine finds prime-implicants.  The &quot;minbool&quot; routine finds minimal boolean sum.</Text-field>
</Input>
</Group>
<Group labelreference="L4">
<Input>
<Text-field prompt="&gt; " style="Maple Input" layout="Normal">restart;
with (StringTools):
with(combinat,choose):</Text-field>
</Input>
<Output>
<Text-field style="Warning" layout="Warning">Warning, the assigned name Group now has a global binding
</Text-field>
</Output>
</Group>
<Section collapsed="false" MultipleChoiceAnswerIndex="-1" MultipleChoiceRandomizeChoices="false" TrueFalseAnswerIndex="-1" EssayAnswerRows="5" EssayAnswerColumns="60"><Title>
<Text-field style="Heading 1" layout="Heading 1"><Font family="Arial">References</Font></Text-field></Title>
<Text-field style="Normal256" layout="Normal256"> The consensus method for determining prime implicants, is defined in:</Text-field>
<Text-field style="Normal256" layout="Normal256"></Text-field>
<Text-field style="Normal256" layout="Normal256">     Schaum's Outlines</Text-field>
<Text-field style="Normal256" layout="Normal256">     Essential Computer Mathematics <Font style="_cstyle256">by Seymour Lipschutz Phd, Professor of Math, Temple University</Font></Text-field>
<Text-field style="Normal256" layout="Normal256"><Font style="_cstyle256">     (c) 1987, ISBN 0-07-037990-4
     Chapter 8 - Simplification of Logic Circuits, problems 8.3 : 8.6, pages 201-202.</Font></Text-field>
<Text-field style="Normal256" layout="Normal256"></Text-field>
<Text-field style="Normal256" layout="Normal256">After prime implicants are determined; a second algorithm is applied to the prime implicants;</Text-field>
<Text-field style="Normal256" layout="Normal256">to remove any terms not needed for minimal form.  This is also defined by Lipschutz;</Text-field>
<Text-field style="Normal256" layout="Normal256">in the same pages.  The algorithm is as follows:</Text-field>
<Text-field style="Normal256" layout="Normal256"></Text-field>
<Text-field style="Normal" layout="Normal"><Font style="_cstyle261">	Multiply the prime implicant terms by the conjugate o</Font><Font style="Normal256">f each variable in</Font></Text-field>
<Text-field style="Normal" layout="Normal"><Font style="Normal256">	the expression which is not involved in the term.</Font></Text-field>
<Text-field style="Normal256" layout="Normal256"></Text-field>
<Text-field style="Normal256" layout="Normal256">	For example, if the boolean expression involves XYZ; and a prime implicant is X;</Text-field>
<Text-field style="Normal256" layout="Normal256">	then the following would be calculated for prime implicant X:</Text-field>
<Text-field style="Normal256" layout="Normal256"></Text-field>
<Text-field style="Normal256" layout="Normal256">                   X(Y+Y')(Z+Z') --&gt; XYZ + XYZ' +  XY'Z + XY'Z'</Text-field>
<Text-field style="Normal256" layout="Normal256"></Text-field>
<Text-field style="Normal256" layout="Normal256">	Perform this operation for each prime implicant.  Compare the results.</Text-field>
<Text-field style="Normal256" layout="Normal256">	For any given prime implicant; if each term generated by the multiplication</Text-field>
<Text-field style="Normal256" layout="Normal256">	can be found in the multiplied terms of the other prime-implicants, then that</Text-field>
<Text-field style="Normal256" layout="Normal256">	prime implicant is superfluous and is removed from the minimal sum form.</Text-field>
</Section>
<Section collapsed="false" MultipleChoiceAnswerIndex="-1" MultipleChoiceRandomizeChoices="false" TrueFalseAnswerIndex="-1" EssayAnswerRows="5" EssayAnswerColumns="60"><Title>
<Text-field style="Heading 1" layout="Heading 1"><Font family="Arial">Input Format (boolean expressions)</Font></Text-field></Title>
<Text-field style="Text" layout="Normal">The input is a character-string containing a boolean expression; whose minimal boolean sum form</Text-field>
<Text-field style="Text" layout="Normal">is to be determined.</Text-field>
<Text-field style="Text" layout="Normal"></Text-field>
<Text-field style="Text" layout="Normal">The format of this string is to specify boolean variables as one-letter names;</Text-field>
<Text-field style="Text" layout="Normal">optionally followed by a single-quote to specify &quot;negated&quot; or &quot;NOT&quot;.

Variables are concatenated to specify AND conditions;</Text-field>
<Text-field style="Text" layout="Normal">eg: &quot;XY'Z&quot; means &quot;X AND NOT-Y AND Z&quot;.

The &quot;+&quot; operator can be used to &quot;OR&quot; expressions together; eg: &quot;XY + Z'&quot;</Text-field>
<Text-field style="Text" layout="Normal">is read &quot;(X AND Y) OR (not Z)&quot;.
</Text-field>
<Text-field style="Text" layout="Normal">The variable T is reserved to mean TRUE, and T' means FALSE.</Text-field>
<Text-field style="Text" layout="Normal">So TT' = T', T + T' = T.</Text-field>
<Text-field style="Text" layout="Normal">
Lowercase letters are converted to uppercase.  Eg: xy means &quot;X AND Y&quot;.

Whitespace is ignored (spaces and tabs).</Text-field>
</Section>
<Section collapsed="false" MultipleChoiceAnswerIndex="-1" MultipleChoiceRandomizeChoices="false" TrueFalseAnswerIndex="-1" EssayAnswerRows="5" EssayAnswerColumns="60"><Title>
<Text-field style="Heading 1" layout="Heading 1"><Font family="Arial">Algorithm Code (Module)</Font></Text-field></Title>
<Group labelreference="L5">
<Input>
<Text-field prompt="&gt; " style="Maple Input" layout="Normal">Minimize_Boolean_Expression := module()

  option package;

  # interface routines
  export consensus,minbool;

  # local support routines:
  local verbose_printf,compressAndUpcase, makeInternalForm,
        externalTerm, externalExpression, negateVbl, hasVbl, hasTerm,
        sameTerm, consensusPossible, takeConsensus, termContained,
        consensusStep1, consensusStep2, consensusList, determineVariables,
        minimalSum, superfluousTerm, mulTermByMissingVbls, simplifyTerm;

  global verboseMode, variableSet;

  # Note: The Internal Forma<Font bold="false">t</Font> of a boolean expression is a set.
  #   1. Each term results in a set inside of the expression set.
  #   2. A variable is stored as its uppercase name.
  #   3. A negated variable is stored as its lowercase name.
  #
  # Eg: &quot;XY + X'Z&quot; is stored as {{&quot;X&quot;,&quot;Y&quot;},{&quot;x&quot;,&quot;Z&quot;}};

  # Routine:  minbool
  # Abstract: Determine minimal boolean expression
  # Input:    boolstr - boolean expression in string form (see &quot;Input Format&quot; section)
  # Returns:  string - prime implicants of specified boolean expression

  minbool := proc (boolstr::string)
    local e, p, m;

    # verboseMode iff 2nd arg passed, and set true
    verboseMode := evalb(nargs = 2 and type(args[2],boolean) and args[2]);
<Font encoding="UTF-8">    #printf(&quot;verboseMode = %A\134n&quot;, verboseMode);
</Font>
    # convert input string form of expression to internal form
    e := makeInternalForm(boolstr);

    if (type(e,string)) then # error
<Font encoding="UTF-8">      printf(&quot;%s\134n&quot;,e);
</Font>      return;
    end if;

    # Determine variable set
    variableSet := determineVariables(e);

    if (verboseMode) then
<Font encoding="UTF-8">      printf(&quot;Variables in expression: %A\134n&quot;, variableSet);
</Font>    end if;

    # Determine prime implicants by concensus method
    p := consensusList(e);
<Font encoding="UTF-8">    verbose_printf(&quot;Prime implicants: %s\134n&quot;,externalExpression(p));
</Font>
    # Determine minimal sum
    m := minimalSum(p);

    # Display result
<Font encoding="UTF-8">    printf(&quot;Minimal sum: %s\134n&quot;,externalExpression(m));
</Font>
    return;

  end proc: # minbool

  # Routine:  consensus
  # Abstract: Determine prime implicants for specified boolean expression
  # Input:    boolstr - boolean expression in string form (see &quot;Input Format&quot; section)
  # Returns:  string - prime implicants of specified boolean expression

  consensus := proc (boolstr::string)
    local e;

    # convert input string form of expression to internal form
    e := makeInternalForm(boolstr);

    if (type(e,string)) then # error
<Font encoding="UTF-8">      printf(&quot;%s\134n&quot;,e);
</Font>      return;
    end if;

    # verboseMode iff 2nd arg passed, and set true
    verboseMode := evalb(nargs = 2 and type(args[2],boolean) and args[2]);

    # perform consensus algorithm on internal-format expression
    e := consensusList(e);

    # Display result
<Font encoding="UTF-8">    printf(&quot;Prime implicants: %s\134n&quot;,externalExpression(e));
</Font>
    return;

  end proc: # consensus

  # Routine: verbose_printf
  # Abstract: printf, but only if in verbose mode
  # Note:     uses args, nargs - to process argument list

  verbose_printf := proc()
    global verboseMode;
    local i;

    if (verboseMode) then
      printf(seq(args[i],i=1..nargs));
    end if;

  end proc: # verbose_printf

  # Routine: determineVariables
  # Abstract: Given expression, return set with all variables
  #           used in the expression

  determineVariables := proc(expr::set)
    local e, result, term, v, vbl;

    e := expr;
    result := {}; # empty

    # Step through the set, adding variables to the result set
    for term in e do;
      for v in term do;
        vbl := `if`(member(v,{$&quot;a&quot;..&quot;z&quot;}),UpperCase(v),v);
        result := result union { vbl };
      end;
    end do;

    return(result); # set of all variables used in expression
  end proc: # determineVariables

  # Routine: minimalSum
  # Abstract: Given expression, which is a set of prime implicants;
  #           return the minimal sum (remove any superfluous implicants).

  minimalSum := proc(expr::set)
      local p, term, rem_terms, moreToCheck, loops;

      p := expr;

      if nops(p) &gt; 1 then
        # FALSE + X = X, X + FALSE = X
        p := p minus {{&quot;t&quot;}}; # may do nothing, if FALSE in list, removes
        if (member({&quot;T&quot;},p)) then
          p := {{&quot;T&quot;}}; # X + TRUE + Y --&gt; TRUE, regardless of X,Y
        end if;
      end if;

      moreToCheck := true;
      loops := 0;
      while moreToCheck do;
        moreToCheck := false; # assume no superfluous terms

        # sanity check
        loops := loops + 1;
        if (loops &gt; 1500) then
<Font encoding="UTF-8">           printf(&quot;*** Max loops in minimalSum reached, terminating ***\134n&quot;);
</Font>           break;
        end if;

        for term in p do;
          # Determine if term is superfluous
          rem_terms := p minus { term };
          if (superfluousTerm(term, rem_terms)) then
             # Remove superfluous term, restart with smaller set of terms
             p := rem_terms;
             moreToCheck := true;
             break;
          end if;
        end do;

      end do; # while moreToCheck

      # Check for X + X' situations
      for term in p do;
        if (nops(term) = 1) and (hasTerm(p,{ negateVbl(term[1]) })) then
          # X + X' + whatever ---&gt; TRUE
          p := { {&quot;T&quot;} };
          break;
        end if;
      end do;
        
      return (p);

  end proc: # minimalSum

  # Routine: superfluousTerm
  # Abstract: determine if specified prime implicant term is superfluous
  # Algorithm
  #    Multiply the prime implicant terms by the conjugate of each
  #    variable in the expression which is not involved in the term.
  #
  #    For example, if the expression is for XYZ and a prime implicant
  #    is X then the following would be calculated:
  #
  #      X(Y+Y')(Z+Z') --&gt; XYZ + XYZ' +  XY'Z + XY'Z'
  #
  #    This is performed on each prime implicant; and the results
  #    are then compared.  If each and every term generated by this
  #    multiplication is found in the multiplied terms from other
  #    prime-implicants, then this prime implicant is superfluous
  #    and is removed from the minimal sum form.

  superfluousTerm := proc(term::set, other_terms::set)
    local term_set, other_terms_set, t, result;

    term_set := mulTermByMissingVbls(term);
    other_terms_set := {};
    for t in other_terms do;
        other_terms_set := other_terms_set union mulTermByMissingVbls(t);
    end:
<Font encoding="UTF-8">    # verbose_printf(&quot;checkset = %s\134n&quot;, externalExpression(term_set));
    # verbose_printf(&quot;ocheckset = %s\134n&quot;, externalExpression(other_terms_set));
</Font>    result := `if`(`subset`(term_set,other_terms_set),true,false);

    if (result) then
<Font encoding="UTF-8">        verbose_printf(&quot;Superfluous term: %s\134n&quot;,externalTerm(term));
</Font>    end if;

    return(result);
  end proc: # superfluousTerm

  # Routine: mulTermByMissingVbls
  # Abstract: Given a term, determine what variables it is missing from the
  #           global variableSet.  Multiply the term by the conjugates of
  #           of those variables.  Return the expression that is the
  #           the result of that multiplication.

  mulTermByMissingVbls := proc(term::set)
    local termVbls, missVbls, nVbls, result, i, j, n, s, binary_s, zeropad;

    termVbls := determineVariables({term});
    missVbls := variableSet minus termVbls;
<Font encoding="UTF-8">    # printf(&quot;Missing variables = %A\134n&quot;,missVbls);
</Font>    nVbls := nops(missVbls);
    if (nVbls = 0) then
       result := { term };
    else
       # multiply by conjugates, done by generating every combination
       # of each missing variable with every other missing variable;
       # and appending.  Use binary counting to obtain all possibilities.
       result := {}; # empty
       zeropad := cat(&quot;0&quot;$nVbls);
       n := 2^nVbls - 1; # zero-relative
       for i from 0 to n do;
          # generate next possibility
          binary_s := substring(cat(zeropad, convert(i,compose,binary,string)),-nVbls..-1);
          s := {};
          for j from 1 to nVbls do;
              s := s union `if`(binary_s[j] = &quot;1&quot;,{missVbls[j]},{negateVbl(missVbls[j])});
          end do;
          result := result union { term union s };
       end;
    end if;

    return (result);

  end proc: # mulTermByMissingVbls

  # Routine: consensusList
  # Abstract: Given expression, return simplified form
  #           after applying consensus method to it.
  #           Displays simplified expression in external-form.
  #           Eg: {{&quot;X&quot;}, {&quot;X&quot;,&quot;Y&quot;}} -&gt; X

  consensusList := proc(expr::set)
    local e, saved_e, all_done, loops;

    e := expr;
<Font encoding="UTF-8">    # verbose_printf(&quot;Initial: %s\134n&quot;,externalExpression(e));
</Font>
    all_done := false;
    loops := 0;
    while (not all_done) do;

      # Step 1.  Look for elements contained in other elements.
      #          Eg: AB + ABCDEF --&gt; AB, AB is implicant of ABCDEF
      e := consensusStep1(e);

      saved_e := e;  # save state, so we can see if step 2 makes any change

      # Step 2. Looking for removable elements
      e := consensusStep2(e);

      # If nothing added in step 2, we are done
      if evalb(e=saved_e) then
        all_done := true;
        break;
      end if;

      # Guard against infinite loop
      loops := loops + 1;
      if (loops &gt; 1500) then
<Font encoding="UTF-8">        printf(&quot;*** Max loops in concensusList reached, terminating ***\134n&quot;);
</Font>        break;
      end if;

    end do; # while not all_done

    return(e);

  end proc: # consensusList

  # Routine:  compressAndUpcase
  # Abstract: Remove whitespace from string, convert to uppercase
  # Returns:  converted string

  compressAndUpcase := proc (s_in::string)
    local c,s,s1;

    s := &quot;&quot;;
    s1 := UpperCase(s_in);
    for c in s1 do;
      # remove blanks, tabs and newlines
<Font encoding="UTF-8">      if not (member(c,{&quot; &quot;,&quot;\134t&quot;,&quot;\134n&quot;})) then
</Font>        s := cat(s, c); 
      end if;
    end do;

    return s;
  end proc: # compressAndUpcase

  # Routine: makeInternalForm
  # Abstract: Given a sum of products boolean expression string
  #           eg: &quot;XY+Y'Y&quot;, convert to internal list form with
  #           single-character variables; lowercase if negated.
  #           (eg: &quot;XY + X'Y&quot; -&gt; {{&quot;X&quot;,&quot;Y&quot;},{&quot;x&quot;,&quot;Y&quot;}}
  # Returns: internal form boolean expression (set)

  makeInternalForm := proc (s_in::string)
    local c,i,n,e,s,s1,term,termCount;

    # remove spaces and tabs, convert to uppercase
    s1 := compressAndUpcase(s_in);

    # check for empty expression
    if (length(s1)=0) then
      return &quot;*** Empty Expression ***&quot;;
    end if;

    s := &quot;&quot;;
    e := {}; # output expression
    term := {}; # next term
    termCount := 0;
    n := length(s1);
    for i to n do;
      c := s1[i];
      if (not member(c, {&quot;+&quot;, &quot;'&quot;, $&quot;A&quot;..&quot;Z&quot;})) then 
        return cat(&quot;*** Invalid Character: &lt;&quot;, c, &quot;&gt; ***&quot;);
      end if;
      if (member(c, {$&quot;A&quot;..&quot;Z&quot;})) then
        # lookahead for negation indicator
        if (i &lt; n) then
          if (s1[i+1] = &quot;'&quot;) then # negated =&gt; lowercase
            i := i + 1;
            c := LowerCase(c);
          end if;
        end if;
        term := term union {c};
      elif (c = &quot;'&quot;) then
        # Only valid after variable (see above)
        return &quot;*** Invalid negation operation ***&quot;;
      elif (c = &quot;+&quot;) then
        # Add term
        if (nops(term) = 0) then
          return &quot;*** Missing boolean term before + operator ***&quot;;
        end if;
        term := simplifyTerm(term); # Handle T or T' in term
        termCount := termCount + 1;
        e := e union {term};
        term := {};
      end if;
    end do;

    # append trailing term
    if nops(term) &gt; 0 then
      term := simplifyTerm(term); # Handle T or T' in term
      termCount := termCount + 1;
      e := e union {term};
    end if;

    return e;
  end proc: # makeInternalForm

  # Routine: simplifyTerm
  # Abstract: Handle special variable T and T'.
  #           T' makes entire term false.
  #           T  can be removed from term, if more than T in term
  #           AA' makes entire term false (A is any variable)
  #           eg: {&quot;X&quot;,&quot;T&quot;} -&gt; &quot;X&quot;
  #           eg: {&quot;A&quot;, &quot;B&quot;, &quot;T&quot;, &quot;t&quot;} -&gt; &quot;t&quot; (false)
  # Returns: internal form boolean expression (set)

  simplifyTerm := proc (term::set)
    local result, n, v;

<Font encoding="UTF-8">    # verbose_printf(&quot;simplifyTerm input : %A\134n&quot;,term);
</Font>    n := nops(term);
    result := {};
    for v in term do;
        if ((v = &quot;T&quot;) and (n &gt; 1)) then
            ; # ignore
        elif (v = &quot;t&quot;) then
            result := { &quot;t&quot; }; # entire expression false
            break;
        else
            if (nops(result) &gt; 0) then
                # see if negated form of vbl already in result -&gt; AA' -&gt; FALSE!
                if (hasVbl(result,negateVbl(v))) then
                    result := { &quot;t&quot; }; # entire expression false
                    break;
                end if;
            end if;
            result := result union { v };
        end if;
    end do:
<Font encoding="UTF-8">    # verbose_printf(&quot;simplifyTerm output : %A\134n&quot;,result);
</Font>
    return(result);
  end proc: # simplifyTerm

  # Routine: externalTerm
  # Abstract: Given a term in internal format
  #           return an external-format string.
  #           For example: {&quot;A&quot;,&quot;b&quot;,&quot;C&quot;} -&gt; AB'C

  externalTerm := proc(elem::set)
    local c, s;

    s := &quot;&quot;;
    for c in elem do;
      if (c = &quot;T&quot;) then
        s := cat(s, &quot;(TRUE)&quot;);
      elif (c = &quot;t&quot;) then
        s := cat(s, &quot;(FALSE)&quot;);
      else
        s := `if`(not (member(c, {$&quot;a&quot;..&quot;z&quot;})), cat(s,c), cat(s,UpperCase(c),&quot;'&quot;));
      end if;
    end;

    return s;
  end proc: # externalTerm

  # Routine:  externalExpression
  # Abstract: Given an expression, convert to external format
  # Example:  {{&quot;A&quot;,&quot;b&quot;},{&quot;C&quot;,&quot;D&quot;}} --&gt; AB' + CD

  externalExpression := proc(expr::set)
    local s,term;

    s := &quot;&quot;;
    for term in expr do;
      s := cat(s,`if`(length(s) = 0,&quot;&quot;,&quot; + &quot;),externalTerm(term));
    end do;

    return s;
  end proc: # externalExpression

  # Routine: negateVbl
  # Abstract: Given a variable in internal format, return
  #           a variable in internal format that is its
  #           negation.  For example: v -&gt; V, V -&gt; v

  negateVbl := proc (v::string)
    ASSERT(length(v)=1);
    return `if`(member(v,{$&quot;a&quot;..&quot;z&quot;}),UpperCase(v),LowerCase(v));
  end proc: # negateVbl

  # Routine:  hasVbl
  # Abstract: Determine if variable v contained in term t
  # Returns:  boolean result

  hasVbl := proc (t::set, v::string)
    ASSERT(length(v)=1);
    return `subset`({v},t);
  end proc: # hasVbl

  # Routine:  hasTerm
  # Abstract: Determine if expression e has term t
  # Returns:  boolean result

  hasTerm := proc(e::set, t::set)
    ASSERT(nops(t)=1);
<Font encoding="UTF-8">    # verbose_printf(&quot;hasTerm t=%A e=%A\134n&quot;,t,e);
</Font>    return `subset`({t},e);
  end proc: # hasTerm

  # Routine:  sameTerm
  # Abstract: Determine if 2 terms are equal.  Eg: XY and YX are equal
  # Returns:  boolean result

  sameTerm := proc (t1::set, t2::set)
    return evalb(t1=t2); # could do: `subset`(t1,t2) and `subset`(t2,t1)
  end proc: # sameTerm

  # Routine:  consensusPossible
  # Abstract: Determine if consensus of 2 given terms is possible.
  #           This is true if a single variable is in negated form
  #           in comparison of t1's variables and t2's variables.
  #           Eg1: &quot;ABC&quot; and &quot;ABc&quot; -&gt; true.
  #           Eg2: &quot;ABC&quot; and &quot;aBc&quot; -&gt; false (2 vbl flips)
  #           Eg3: &quot;X&quot; and &quot;x&quot;     -&gt; false (no consensus of X and X')
  # Note:     Concensus also possible if one term completely contained
  #           within another.  This is handled in consensusStep1
  # Returns:  boolean result

  consensusPossible := proc (t1::set, t2::set)
    local v, flips;

    # Note: no consensus of X+X', inserting
    # TRUE would not work properly -&gt; X T X'

    if nops(t1)=1 and nops(t2)=1 then
        return false; # no consensus of X,X', etc
    end if;

    flips := 0;
    for v in t1 do;
      if (hasVbl(t2,negateVbl(v))) then
        flips := flips + 1;
      end if;
    end;

    return evalb(flips = 1);
  end proc: # consensusPossible

  # Routine:  takeConsensus
  # Abstract: Given 2 terms which should be consensus-able;
  #           return the consensus.  Eg: &quot;ABC&quot; and &quot;ABc&quot; -&gt; &quot;AB&quot;
  # Returns:  consensus of 2 terms

  takeConsensus := proc(t1::set, t2::set)
    local flips, e, negatedVbl, v, vnot;

    # Process flipped variables, must be exactly 1
    flips := 0;
    e := {}; negatedVbl := &quot;&quot;;
    for v in t1 do;
      vnot := negateVbl(v);
      if (hasVbl(t2,vnot)) then
        flips      := flips + 1;
        negatedVbl := vnot;
      else
        e := e union {v};
      end if;
    end do;
    ASSERT(flips=1,&quot;Bad call to takeConsensus, flips not 1&quot;);

    # add any vbls from t2 that are not in t1
    for v in t2 do;
      if (v &lt;&gt; negatedVbl) then
        e := e union {v};
      end if;
    end;

    return e;
  end proc: # takeConsensus

  # Routine:  termContained
  # Abstract: Determine if one term contained in another.
  #           Eg: AB and ABC --&gt; true
  #               ABC and ABD --&gt; false
  #               AB and AB --&gt; false
  # Returns:  boolean result

  termContained := proc(t1::set, t2::set)
    return (`subset`(t1,t2) or `subset`(t2,t1)) and evalb(t1&lt;&gt;t2);
  end proc: # termContained

  # Routine: consensusStep1
  # Abstract: Remove superfluous terms which are supersets of
  #           other terms in the expression.
  #           Eg: AB and ABCDE --&gt; AB
  # Returns:  Reduced expression (set)

  consensusStep1 := proc(expr::set)
    local e, i, j, k, n, t, dropset, newset, allpairs, pair;

    e := expr;
<Font encoding="UTF-8">    # verbose_printf(&quot;Step1 start: %s\134n&quot;, externalExpression(e));
</Font>
    dropset   := {};
    n := nops(e);
    allpairs := combinat:-choose(n,2): # all combos of 2 indexes into e
    for pair in allpairs do;
      i := pair[1]; j := pair[2];
      if termContained(e[i],e[j]) then
        # Contained term!
        if (nops(e[i]) &lt; nops(e[j])) then # e[i] contained in e[j] =&gt; drop e[j]
          t := j;  k := i; # drop e[j]
        else # e[j] contained in e[i] =&gt; drop e[i]
          t := i;  k := j; # drop e[i]
        end if;
        if (not member(t, dropset)) then
          dropset := dropset union {t};
<Font encoding="UTF-8">          verbose_printf(&quot;Simplify: combine terms %s + %s --&gt; %s\134n&quot;,
</Font>                           externalTerm(e[i]),externalTerm(e[j]),externalTerm(e[k]));
        end if;
      end if; # termContained
    end do; # for pair in allpairs

    if (nops(dropset) &gt; 0) then
      newset := {};
      for i to n do;
        if (not member(i, dropset)) then
          newset := newset union {e[i]};
        end if;
      end do;
      e := newset;
<Font encoding="UTF-8">      # verbose_printf(&quot;Result: %s\134n&quot;, externalExpression(e));
</Font>    end if;

<Font encoding="UTF-8">    # verbose_printf(&quot;Step1 end: %s\134n&quot;, externalExpression(e));
</Font>
    return e;
  end proc: # consensusStep1

  # Routine: consensusStep2
  # Abstract: Given expression (list), perform consensus on
  #           terms which have a single variable changed.
  #           Eg: XY, XY'Z -&gt; XZ
  # Returns: expression with consensus terms added (set)

  consensusStep2 := proc(expr::set)
    local e, t, loops, moreToCheck, allpairs, pair, added;

    e := expr;
<Font encoding="UTF-8">    # verbose_printf(&quot;Step2 start: %s\134n&quot;, externalExpression(e));
</Font>    moreToCheck := true;
    loops := 0; added := 0;
    while moreToCheck do;
      moreToCheck := false; # assume no more consensus terms

      allpairs := combinat:-choose(e,2): # all combos of 2 terms of e
      for pair in allpairs do;

        if (consensusPossible(pair[1],pair[2])) then
          # May take consensus of terms, useful if consensus is not already a term in e
          t := takeConsensus(pair[1],pair[2]);
          if not `subset`({t},e) then
            moreToCheck := true;
<Font encoding="UTF-8">            verbose_printf(&quot;Adding consensus term of %s and %s --&gt; %s\134n&quot;,
</Font>                             externalTerm(pair[1]),externalTerm(pair[2]),externalTerm(t));
            e := e union {t}; # add consensus term - modifies e, breaks indexes into e
            added := added + 1;
            break;  # added term -- break from while i loop
          end if; # not subset
        end if; # consenusPossible

      end do; # for nextpair

      # Guard against infinite loop
      loops := loops + 1;
      if (loops &gt;= 1500) then
<Font encoding="UTF-8">          printf(&quot;*** Max loops in concensusStep2, terminating ***\134n&quot;); return(e);
</Font>      end if;

    end do; # while moreToCheck

    if (added &gt; 0) then
<Font encoding="UTF-8">      verbose_printf(&quot;Result: %s\134n&quot;,externalExpression(e));
</Font>    end if;

<Font encoding="UTF-8">    # verbose_printf(&quot;Step2 end: %s\134n&quot;, externalExpression(e));
</Font>
    return e;
  end proc: # consensusStep2

end module: # Minimize_Boolean_Expression

with(Minimize_Boolean_Expression);
</Text-field>
</Input>
<Output>
<Text-field style="2D Output" layout="Maple Output"><Equation executable="false" style="2D Output">NiM3JEkqY29uc2Vuc3VzRzYiSShtaW5ib29sRzYi</Equation></Text-field>
</Output>
</Group>
</Section>
<Section collapsed="false" MultipleChoiceAnswerIndex="-1" MultipleChoiceRandomizeChoices="false" TrueFalseAnswerIndex="-1" EssayAnswerRows="5" EssayAnswerColumns="60"><Title>
<Text-field style="Heading 1" layout="Heading 1"><Font family="Arial">Example Usage</Font></Text-field></Title>
<Group labelreference="L6">
<Input>
<Text-field prompt="&gt; " style="Maple Input" layout="Normal"># Examine standard boolean expression properties</Text-field>
</Input>
</Group>
<Group labelreference="L7">
<Input>
<Text-field prompt="&gt; " style="Maple Input" layout="Normal">minbool(&quot;A + T&quot;); # A + 1</Text-field>
</Input>
<Output>
<Text-field style="Line Printed Output" layout="Normal">Minimal sum: (TRUE)
</Text-field>
</Output>
</Group>
<Group labelreference="L8">
<Input>
<Text-field prompt="&gt; " style="Maple Input" layout="Normal">minbool(&quot;A + T'&quot;); # A * 0</Text-field>
</Input>
<Output>
<Text-field style="Line Printed Output" layout="Normal">Minimal sum: A
</Text-field>
</Output>
</Group>
<Group labelreference="L9">
<Input>
<Text-field prompt="&gt; " style="Maple Input" layout="Normal">minbool(&quot;A + A&quot;); # (Idempotent)</Text-field>
</Input>
<Output>
<Text-field style="Line Printed Output" layout="Normal">Minimal sum: A
</Text-field>
</Output>
</Group>
<Group labelreference="L10">
<Input>
<Text-field prompt="&gt; " style="Maple Input" layout="Normal">minbool(&quot;AA&quot;); # A AND A (Idempotent)</Text-field>
</Input>
<Output>
<Text-field style="Line Printed Output" layout="Normal">Minimal sum: A
</Text-field>
</Output>
</Group>
<Group labelreference="L11">
<Input>
<Text-field prompt="&gt; " style="Maple Input" layout="Normal">minbool(&quot;A + A'&quot;); # A + NOT A (Complement)</Text-field>
</Input>
<Output>
<Text-field style="Line Printed Output" layout="Normal">Minimal sum: (TRUE)
</Text-field>
</Output>
</Group>
<Group labelreference="L12">
<Input>
<Text-field prompt="&gt; " style="Maple Input" layout="Normal">minbool(&quot;AA'&quot;); # A * not A (Complement)</Text-field>
</Input>
<Output>
<Text-field style="Line Printed Output" layout="Normal">Minimal sum: (FALSE)
</Text-field>
</Output>
</Group>
<Group labelreference="L13">
<Input>
<Text-field prompt="&gt; " style="Maple Input" layout="Normal">minbool(&quot;A + AB&quot;); # (Absorption)</Text-field>
</Input>
<Output>
<Text-field style="Line Printed Output" layout="Normal">Minimal sum: A
</Text-field>
</Output>
</Group>
<Group labelreference="L14">
<Input>
<Text-field prompt="&gt; " style="Maple Input" layout="Normal"># Determine prime-implicants using &quot;consensus&quot;
consensus(&quot;xyz + x'z' + xyz' + x'y'z + x'yz'&quot;);</Text-field>
</Input>
<Output>
<Text-field style="Line Printed Output" layout="Normal">Prime implicants: X'Y' + Z'X' + XY + Z'Y
</Text-field>
</Output>
</Group>
<Group labelreference="L15">
<Input>
<Text-field prompt="&gt; " style="Maple Input" layout="Normal"># Same example with minbool to find minimal sum
minbool(&quot;xyz + x'z' + xyz' + x'y'z + x'yz'&quot;);</Text-field>
</Input>
<Output>
<Text-field style="Line Printed Output" layout="Normal">Minimal sum: X'Y' + XY + Z'Y
</Text-field>
</Output>
</Group>
<Group labelreference="L16">
<Input>
<Text-field prompt="&gt; " style="Maple Input" layout="Normal"># 4 variable example, could be solved with a Karnaugh map
minbool(&quot;xyza' + xy'za + xy'za' + xy'z'a' + xy'z'a + x'y'za + x'y'za' + x'y'z'a' + x'y'z'a&quot;);</Text-field>
</Input>
<Output>
<Text-field style="Line Printed Output" layout="Normal">Minimal sum: Y' + A'ZX
</Text-field>
</Output>
</Group>
<Group labelreference="L17">
<Input>
<Text-field prompt="&gt; " style="Maple Input" layout="Normal"># More complex absorption
minbool(&quot;X + XYZABC&quot;);</Text-field>
</Input>
<Output>
<Text-field style="Line Printed Output" layout="Normal">Minimal sum: X
</Text-field>
</Output>
</Group>
<Group labelreference="L18">
<Input>
<Text-field prompt="&gt; " style="Maple Input" layout="Normal"># Show verbose mode, where 2nd argument specified as true
minbool(&quot;AB + AB'&quot;,true);</Text-field>
</Input>
<Output>
<Text-field style="Line Printed Output" layout="Normal">Variables in expression: {A, B}
Adding consensus term of AB' and AB --&gt; A
Result: AB' + A + AB
Simplify: combine terms AB' + A --&gt; A
Simplify: combine terms A + AB --&gt; A
Prime implicants: A
Minimal sum: A
</Text-field>
</Output>
</Group>
</Section>
<Group labelreference="L21">
<Input>
<Text-field style="Text" layout="Normal"><Font italic="true">
Legal Notice: The copyright for this application is owned by the author(s). Neither Maplesoft nor the author are responsible for any errors contained within and are not liable for any damages resulting from the use of this material. This application is intended for non-commercial, non-profit use only. Contact the author for permission if you wish to use this application in for-profit activities.
</Font></Text-field>
</Input>
</Group>
<Group labelreference="L22">
<Input>
<Text-field selection-placeholder="false" executable="false" family="Times New Roman" opaque="false" foreground="[0,0,0]" superscript="false" placeholder="false" readonly="false" subscript="false" bold="false" italic="false" underline="false" background="[255,255,255]" size="12" linebreak="space" spaceabove="0" rightmargin="0" bullet="none" firstindent="0" bulletsuffix="" linespacing="0.0" pagebreak-before="false" leftmargin="0" alignment="centred" initial="0" spacebelow="0"><Image height="33" width="800" zoomable="false">TUZOV3RLVWI8b2I8Uj1NRExDZE5WWlpKOkBMPkg6VEtHeE1rSjo8T2BMb1xcbFF4bFFXZE1XcHNIcVNobVdoWW9lWE9QbVRQbVZgbXZxeXhxPVhqPXhYcXVYYXhuYVhjRVdjPVVSPVV3ZVl3RUxLRExxdFBxPFI6PXJeYXZedVJBdXJaQG5adFZhdVZiPVdiTVl0TXl2YXl2WXl1WVl4bVl4cXl4cVl5dVl5RVlzRVlwbVhweXl5eXlwcXhwPUo6Pjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjpkeTxUeXBDPnFVTENUSmNEWG9YdXNUPGF1cGtjZldNWEBKQ2VVYGROdVRtV3h5eXlwcHVQQ0RTU3VMQ2x1Pjx4VHBRbWxzYl1NaWhVT2BxVGVYU1FPO0BKeFZdd09sOkBzeUZ2PHdcXHRAdHNOblFuXFxWP3c8d1xcP0ZxSmlqWHluWlZ2bnlIRXJtaUJfX3RXaXRbTXl4WVJJSVh2V2d0U1M9O2dRTXdBSUNdSVlyR1hSb2djW0VwcVl0c3huPUJWU1VHdUVBW1d4S3JXYVNIc3NvWUJQa3luS2N0cWdteVVLQVlRWVV3X3JzPXdib1lUV1hJP0lRS3lvW1hAd3lkcXl0WVJHQXlgaXhzW1NseVhhU3lxdXk6bWVsPWRYcXlkSWZ2Z1JJZVNVa1VtVUJHd3VaaXRTO2VRP1M+QWRNYXNua3lTR2JEU3VpbWJTYWJqeXROQXlNdVhsYVRXYUNwO3k/YXQ7X3R4YVR3YXRoP2NqPUdiZ1lWR0NBW2VBa2heaWh5YUlHb1ZkR3h5V2VRYXRhbVZIWXg6U0VJZXd5YWNtY1NCQXZnT3l5c3NFeUJWV0N3UUZ0WVd4WWRNZ2NZX3leVXk/Z2NlW1dYUUNEY3dHdXdITXc/cXd4W2dhY3NjR3J3T3R1S0ZYS3NjW0ZaSUJPcUlySUlda3VJQ2ZSb3NNX3lUU0VXV2NLUXNfcUdIZUlpYVdCc3ZhQVhXb0ZzWVR5dUlZU2RXQ2V0W2ZacE9ZdHZbXFxYU012Tj1YaGx1eGVsXXlsdlVuO1BZc3F2a21tQ3hTRVFQc01PZVVwUUVLTmB5VkFxY3FSUXBZeEhyW3hVXFxBdGdQVmV4bUhIUVlEWHB0TDtleV9cXFhIeHlUcExRPXFKaEprbHFBPXdQeHFPdHBQbXdRPWtXZFNTWWp4aFF0PWxpPFg9UHJcXEhveE1LeHBwZFVQR3hsYDxSYWRXc0VNVWhuTWluYXF2eVxcdF1wSndcXFB0dHQ6bHdfaHk7UHh1RWxXcGZ5cGlReWc8SWJnSHFRP3dSd3ZGZ2NRbm10SV1sWFpvYXV2d1xcXVZpXFw/eXVJakdxeUFfXWpeY2lhXFxedmFZZm1YWXZWX2ZveWRfd1phP3lJUGZOWHBPaW1iSW53aWllUXlaQFtqZltwX2BzP1xcTkBxYXdbPGFfPXFwZEl1XT5nbkhwVWlcXF5hW0FHY1NfeV1wbkhnX29JaT1Ya01gYkteeVVXakZoaENwaWY/bGxoZWxoa0txaz1xZ0NxcUlva0phZFpAXUlPc3BIamdRZ1V2Xk1wXltha1hOb2t4Y0ZheE1YPkVmeD1HSnlZXT11S1dYdWVmY1lDVl9ETztYXW9lRHdJXVVyaElYaEtkdFlndj1zWU14eU1oRUFiZEtkRkVEO01CaW1VWWd2TnNmQnVEZ3F3XnNSWm9pZXlpWUVmRUFzWU9jVTt1Zl9DXjtnPkVJVW1XeV14WltIP1VUaXdoYXliPEVXVUFobWdoVWVlXU9ETHlma1lkT1FETk1zbGVnXW1IR2t5blVyclVoamdidnN0cklDc09pVT91cFVodE1FX2NWVWV5d1dyU2VTdkl3SHFzRVV2d2FTYG12X2tDRWdERUVWT295ZlNGWUdYaFt4ZTt3ZnN5YT9IYmN1X1NpSFVmclN0cXNnSUNVS21SO0lFR0dpRVV4U1Nld2tCUmNpYz9mW0dIc11XQkNlRlNYTWVjQHF3UVlpT0NGaTtiZF9lcGdoQ2NyU0liclVGZktYcE9FPkNkR1VWSF9zcz1HYUVGXFxNaF91REpjWGVXR1NrSUE9VGBbdWhPaUtPeTtJZG9fc0JRZ1BHYmlNeFpJeFs9Uk5RSENVd2xJaFZBcz5NeHY9dDtJZWtlY1tpVG9lQl1ZU1ZzSV1VR2tNZ0M9eE1fY3ZdckNrR2xPeUU9d1ZzeW1vUlBFUkdVV29Lcz4/ZE5HY3FPdkw9RGNnVVVpZD1TZEJZdGFjQmN5VDtzQz8/c1hzQkZFSVBLZHdVaWJVVXVvd3RDeExFUnhHVVBPYz1lZVdXREpfdEJJRmpbUk1XWG9hSW5pRkRZeXZJZkZZSDtFaWZhV0FBZGtRZ1N1SW9ZSFM/c1xcYVlua1ljQ1JYQXk7PXVyU3NVRUdYb3Zta2RVP2JJa3V2SWhmO2hIS1Jtc0lxa0drQ0lFR1NRaVV5P3JbY2h5XURXP1VKd2VvX0hJO0lbaVJQdVlDY2VdeUlRR1NSPVNGY1lASUhOYWJFeWhUO0hcXGdDW2lpRXViWElZWz9GaGtmQWFSeWNjUTtEPE1CTGtzVUd2TV1GT1NXWmFGbm1VVk9CXU1oYGd1XWV3OkNTWFtWVVtkXmlXQ0lUTWtpbmdWbWNZO0V1SWtGWmdldGFTbGtlRF9TbFVkP1NVW1doYF9JSGt1TmFJQkVZQEtoUVtJYlNmbF9DcGdWXUlCZ2NmOkNyT1dXbGlWUFNETXVFa3dCWVFiZ0t4R2lXZmNkZ19jQ29YRHlGb0FGPENZZF9mWlNVS09YbVVFcm12cFdnYVFJZVdHeU1pdU9maGVGWVtVV2dkR3dlWztYQFloPG93c2tUd1VnallkdkVoblRQYExKYXRVbXlvXXhsa1VwZ1BTSG1TT2lTWHRNP0hzSGhXZ2xudT15cE1vc21QV1F0WG1sTERSXmVyYXBwQVBxQFR3dVxcbWY8eXRNb190TlFEbXd1VUJhbFtUS01dVVpcXFZzVVBnXFxPaFhVXWl3PmxUPlR0b2xZVWVNXFxgcTppTkZRa01ldUI8WV55cVtUcXdMeHlZa15tUERoVVRFTFtteGRZVHJVd0hZcHBgUl10c3lobTxcXHJkaE5cXF1WR2VqRXlUQkxsWGhVaWRTa2xWY0lta3VKQVxcT0ZBSnhYVEpcXG9ScFVyXFxxbkVVZjxQT2FvY2lvWHhZVVRSeGhtS0hub1V1QmF2dnh0XUBvcmR5cUlsYHR5Y0V5Zz1TdDxWO0xZYERvREVsQ2hXWWRrcElrU01vcGhuaHFrZU1XPFFYXmRvZ0VtTTxreEFZTT1tcFBLbVRUTW1YZVFMbnVLP0hNZUlVYGBUcU1TZGVOcW14SGVMSz1PVXB4XkBraVlwYHhYVmRvVUBMPVBwckFQSXVSW1FwQFlsdlBXd1FUb01wR2BqT1h5Rmh4QUVUaWVSQURLZ2lvVlBPeVhVbFhUOkl3YzxOZ2VNTnVwXFxYV3JkUUZQUXZsUD1Ub3Nlbz5xWGJpV09cXHlFPVBVaVBBQVNnTHR4WExHPVNUQVNBeGo9QFdpeHdYYFhPQXRIbG9JZW9IaUx2eXVvdU10THRUeUpzQXhCWHJAVHFXWE9zRUtvcHVBRVU8dXlPXFxMVHlQQVhtPXRPVVFuZWFORF1LT1l5THlYYnR4dWhtY1lyWE1raFxceWxMb19lcWB0U2VBT0hdbHFVd2lQbmtQd2xIUGdIcmVoWV5wS2hQd0dQSjs8TzxgcVU9dE14VVVFUFdAUmRJVGZZamphb3dUcU1RalhISlNcXE08RXZhcHBUQG1XTUpAaU9WaHlMUUtxXVQ9RXljPVVocU5hXVBKXFxYXFxMdVtEc1FAT1tYUnc8UmJgUGB0U3VlamNlWVhAVU49ckZleHVIbURta11YUkxhWUVsUm1JUF1QZWNoYHJ4bWE/YXJhYUN4dldRW1xcYVpgeWlGQWo/Z3ZWVmReQG1HeVtoaGp4UXZqSXdNVndQR3lYV19FcGpETm5zeV5FaHZFX2Q6UG5rT2FEQV5DbnhFQW9DaF9ld2M7cGJbSVtad2NVP2twR3d4dmNWVlxcT1dhWUdaV3FiR0dealZrQVFdbVhja2Z3VFZmb3ZaVm5aTHdmb0llUz5lQEh0Y3ZzZ1BuPFlxRE94Y3FiZE5tUHh0cXdoc2ZhZz5teU9lZGhxQ0ZrTldxc3B5XUBfVlFySUl1XW5jTEliPl94ZFFeW3l3XmBeWXFiU3hleWdhPk9rVkBmcFZmZU5obXhlU3duXj9fR09rbGZgUXFnS195Sz95akBweHZ3Ykh0SWB5WWFpP0h2Sl53dlF2WW5nQVZvPVhod2NSZUJJTWZsS1RVX2JgcXJGUUM8VUdSV1k9a1ZXQWl2XVg8Q1N5TXljeXdlb0U+P3R0a3NWZ0JUbXRHSVh2S0RUO0RgYXRwYUdRRVZBPWVmb0hAXVRnc3dzQ2ZXR0ViQ0NMSVl0U3dHO3RSYUM/XWhpW1Rmd1NQVWNTUVlaQ3Vsb0VbS1RuT1NUdURQcWZwUVVfWXhbP1VaPWJgeUN1RVRVZWN0Y3JzYVdJR2hQVVZkQ1hvW0RuO0dUb2Y9QVZCY1lSR2dhYVlic3Z0PVVCdVZJT2VaS2dHbWhIUXJdXXVtc2lmeVRQV3RuZXlaS3lkbUhqb1dSQXNTUUhld0RTPUhqXUM+cWRIW1hISWdrd1RHdXZJX3NnWURnYWJTc2lMWXJiXUljW3VaVXVDZUdOXUlueXlqaVZuTXVKaWJxXUU+PXNIW3RoUURYZ1RcXHFoTndUVm1HZG9TaUtzRF1ERF1VT2tzTz1mWDtYdklkYlV3Umlpc0NFdj90RUFTP2VIW0VIaU95W21jRT9oWTtld0tDclt4O0VDcFVFYUl0Uk1VZU1JQHdGPUd1cUlkcmlYbUFpSG91Ql1VRWt2Ym9EYF1iRGV1XlVIT3N4d0tTb2dWRV9HTlFiQkFkdU1ZUTtZX11YYnFCZVtGRllHRj10WGd4cnlZcEFGRG9pZElSSGdVZj91WEdnXVdndUdpZ11VUlFycDt1PU1IWUlYeGNJYW1zcUVsPHVSPFBNd3R3Tk1xTllNQj9cXGFJaXF2Ym94aGtud0RPdl1ecjphXFxbV2hFeHNuX2NkUW9ATmddb3JMUG5DcHRFP3dKcWk6YWRgP2dqWFxcQm9sOkBkSmlzW3ZlbF5wSz5dVHBjSUhob1Nab1hKT2h3W1dnc2VzdUJmRWddPXV1VVk9cVhaV1ZZTVNaRUNIV0hxZVg8U3VeRXV2WVg7QUZRUUNdXUZsXVNOcUlPPUlMUXdoSXdab2VxRW9PcVZZQFRUcHJXQU5xWXN1eE5BQFdqbHB1YVh5dG1YTVJrZHBJXUtcXExUQD1QZFxcU3hISlNYTmh1bEZZUW10d0poV0k8UXN1UlVwd21cXHJRREx5dU1nTXY+QHBTQHBmdFJpVW5pVFY6dVJSaWw8bFJZPHdsdFNWaUxoSEtEQHZWaVNgRE9mYVR2QXN5TXVLbVFVaHZxbFF1TFdAcWxyYFJkZFJLSW1eUVlBYVh4ZFBcXFR1VmxrdE1ZbXlQQWB4Uml2UlVvTHhLbUFOYWxMYHFWYGVURElPO01ZXFxIb1FpWW5Na0hMTnFoeWxVSlxcdFNedUtKSU1LQVlbcXVmTXJ4QVhmeEp5WHhlYFJQcXhPaW9ybEpXXVhFSFh3XFxsSnFyPVh3TjxUPmBuRlBrbEh2XkxUZF1rdml1Oll3bGhXa1R5RHBMU1VWVXFRQ0F1VFRsaVBvcHVvVEhOU1F5UnRzPklxS1lLaFROUU1zZUFqb2FsclF2YklzbE1wPVxcb2pMVU1EdURReW1hb2lRdWxtUE1FTHdocHVwbG5JdnlwUGBYbENETT5MWUBgcmRxdG95bkBNTEZUVVVQb1xcVVdSXFxXTWV0T0FvRWV3TElVY3RSd0B0XUVSR0BYdHFLdUhRV3FqV0xxWmBMVFVPVHVzbUhQY1lrP0ROPXVUXFxhWFNlTE51S3J0dGZAa0l1blVUWENNdFl5UlVRcGxYd2BYdj1pWHBwdUxtUlVxd1RNbVtdcXhoTEVsdD5sTmlAcVE9UV9sUkw8TmdlcmhoWHdBcnlBTD1pd11JeFlUVXloajtwb3FYUG1VZ0hHXFxnYW5mV2ZGPmhyQXd0d3lbWXM8VnVHWGhTR3hlUGpNXmV4blxcdmFiSE5qVGZmRll3RE5yZUBxb2hlSFdtb1dgXVBcXGdmcV1Ja3h4XFw/dmtubmNcXGdpdXBvdkloTWFaT0lraklkVnF0dj9lZm5oZWBpPU9peFZ1ZVZvcHhqSk91TllgW1dcXGpYXFxTTmtlcXJRX3BVZ2hqTmlOUXRwR1xcQ0llX0lhYllzQHd3QndcXExgeE8/cmBxWmk/Y0BXc1dgXkBmam9nZXBwamtJcG5Ya0tQbmRHYWRHaWRvY0U+bT9GamZfYllmXFxcXD9wXUhpZU5xV2dnZUl1Q0FuaGlad2FlcFlua2dlRnlqdk9odV9bR1FrcGlvU05hP25kaXByVUZqY1ZcXHBRbmd3XVI/XVdGZVd4YD5pX0hAdEF3ZGJueTx4X19PYEZ5Z2dxdWpBdEpoYWlBblNBcz14d3RwXmFZbmxvbG4/ZVlRdEFebUp2d0Q/a1xcUWxdeHFNUGNgX3NqVl1ndnJlT3NJT2twUF5WeV5bVndgT1tnd21McWldTm1aQGhCQXJpUF1PPltASGRtWVp5aXJbTm48WXBlTmZvbnNvXl1kbmZJWXVYd2tFQWNVeW5eQWBdVmV5WXVsUG9nQW47P1xcSz9tdF5ncF5qWEd4Zj55c2Zac2d1PWBzZWJfYUlFU1NKY1dld3RtQ3JFQ2ZnRVJhcUVOQ2hCO2ZeSXZ4WUw9UFNdPXlLWG1HZU1ZTG1yVFNCcExfYFVBbG1YbVhsVVRYRW5eRXNTbW1meVJFWHNERXdlbHZRcWxRYVhAQHRqPHBrVFlrRFNOcXhQUWpsdXNpVEpFTFhRXFxSd2BzUGFTVVlKd1BqZGVzX1FzS2BqQElqX0R1Rm1KbVBMbWxsaDxTU1BLVjxXW2VPYWFUTkB3TGx0dj1xZEBPT0hyYzxLPmh1aFBQPUFwU1VSUF1tYklWU3VybERMcXBLdWFWbGlWPklvT3hKeEx5R1hPaHF0PVFQQlFWSXRSamRWP11QRlBQQ3l2c11ZQl1SWEFzUEx5c1FUXk11TFVPRE11ZURQPVVQcEhzRlV4OlhKYGhObEVZS3lrcVFMUUhTRXVyXmFYX1hKSF1VeXh0Z01SQ1h0anVvP0VRV01MW2FSU2lraWRvZUxzVWR1V0VNdGhZWnlRW3F3eEhUW3RPdTxWR3hxYmBxcDxPUUFXT2VZSUl3XlR2YEhyTnlQO0VLaERMaVRxY1hMcTxOWGVqc0VLc2VUO01ZQTxvc211ZkBVQHR4VU1KWWFNRnV2VmFqVWVsdl14WGBuY3VUaFR4Qlxcd3h0dkNpdUBIc1FVUTptc0p5VVZYTE9lVUFMbWRhWV1UTW91cUVFeFdgeEs9UVFMeUdBeWlIUFxceE9mXXRHPmNKd2BneHdeZl1tSWRKd2dYaXliWF1fXlxcXXhdd1hvb3ZmSmB2Z1FrbFdyaHFgc3hxVGhkX0F1WEhvdGF1eHF2VlBzPmZYUUVHX1lHeXVqR1dxYUNPeUU+V1hbd3VFd3lzTUhzQUNhd1lmc0lpcXZXaVdwV0dvR1ltcXdBZWg7X1hxR1N5W1lRVVc8a0ZhVUdtdWhxZVlFO3hkd2JEVURkV1Y8T1lqbXdjXXJMP1RwdXdGX3NuV3VtaWlhQUlueUJbYVVieXhcXHl5YGNTTG1IeHNJbndZTHdmPW9iX2t0eGdVSldUQl1UdEl2S2tERE1JQ01WWkNIPFdXRjt2WGV1T0dlXlFlTHdpa11Ia0NmclVYdV9EZ29DW09JeXVoX0l5YltlRWhxcnlRP013VGV4SXVOYnVtdjxzT2l3eV11Tz5pZT9vTlhwbkZiXWl5a3l2QHBuTT9eYlFiY09wXUBwTV93T0laXFxpXXRWcEdJdT1QZGJIZk14Y3hYYXQ/YVdQWnN3dz54YUR2djx3cVF2eWtecGlBcl9AZmRZeWZveHNhY3RXX3V2Z0JQbXF2bUtfWk1BclpXWnlBdkNQbXVZZFxcQWJacF1aTmdYd3J5WGF4dmE+d2ZZcGNaZ2VtPnV4aXVbR2lZbnV3UXU8YWlKbnM/XFxVTnBxSGdqZndocVtiYWhiQHhDR2JIVmtrX25UUGVpb2JmeWNVZmBYbmF4aWRsd2lUSGptaGVGP3N3PnFXWHhUV3lnUWJ1cFp0WXBncXBrd3dmV3ZjSFpjQXdbaXVNaXliXm1FZnloX3l5WHNJSW9zWGRKZnh2cV0+eWFSX1pWeHlcXGJTP0ViQXdzXXddd3ZjT0ZvTWh3U1VSYWd5Q1lkaVR3QUJ1QUVHV0Z1U0lHb0VrS1lJR0ZZVVlddXdgdXdYb0d1QUZWV2tHd3F5ZmJAcXJyaWZqP3NZcHU9QF9db249Z1tRQGx0UWJRTlpEZlxcRldlXFx5cXV3WzxwdV4+bHZReFxcWXc8d1xcPFZ4UlBuPXl4aU5bQ05nQl5pck9wd0duRWZ5eVdudHF3Omd3RWZaU3BpX0dcXDw/YFFueFY/d3lnbTxOWl5xeWFHcHh4aU1wa19PaHFZcld4XFx0QHQ/QHZBQVxcZXFfclFxdj51eUB0eWFgV3l5Onh2bXlzWHd5WWZbTVd4b1dtSWd2b0U6O0I6TVRLV0RLV2dKO2VaMzpcIlx7XH0=<Drawing-Root>LSUlUk9PVEc2Jy0lKUJPVU5EU19YRzYjJCIiISEiIi0lKUJPVU5EU19ZR0YnLSUtQk9VTkRTX1dJRFRIRzYjJCIlKyEpRiotJS5CT1VORFNfSEVJR0hURzYjJCIkSSRGKi0lKUNISUxEUkVORzYi</Drawing-Root></Image></Text-field>
</Input>
</Group>
</Worksheet>