text:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">
<eagle version="9.5.0">
<drawing>
<settings>
<setting alwaysvectorfont="yes"/>
<setting keepoldvectorfont="yes"/>
<setting verticaltext="up"/>
</settings>
<grid distance="0.05" unitdist="mm" unit="mm" style="lines" multiple="1" display="no" altdistance="0.01" altunitdist="mm" altunit="mm"/>
<layers>
<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>
<layer number="2" name="Route2" color="1" fill="3" visible="yes" active="yes"/>
<layer number="15" name="Route15" color="4" fill="6" visible="yes" active="yes"/>
<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>
<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>
<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>
<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>
<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>
<layer number="21" name="tPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="28" name="bValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="29" name="tStop" color="7" fill="3" visible="yes" active="yes"/>
<layer number="30" name="bStop" color="7" fill="6" visible="yes" active="yes"/>
<layer number="31" name="tCream" color="7" fill="4" visible="yes" active="yes"/>
<layer number="32" name="bCream" color="7" fill="5" visible="yes" active="yes"/>
<layer number="33" name="tFinish" color="6" fill="3" visible="yes" active="yes"/>
<layer number="34" name="bFinish" color="6" fill="6" visible="yes" active="yes"/>
<layer number="35" name="tGlue" color="7" fill="4" visible="yes" active="yes"/>
<layer number="36" name="bGlue" color="7" fill="5" visible="yes" active="yes"/>
<layer number="37" name="tTest" color="7" fill="1" visible="yes" active="yes"/>
<layer number="38" name="bTest" color="7" fill="1" visible="yes" active="yes"/>
<layer number="39" name="tKeepout" color="4" fill="11" visible="yes" active="yes"/>
<layer number="40" name="bKeepout" color="1" fill="11" visible="yes" active="yes"/>
<layer number="41" name="tRestrict" color="4" fill="10" visible="yes" active="yes"/>
<layer number="42" name="bRestrict" color="1" fill="10" visible="yes" active="yes"/>
<layer number="43" name="vRestrict" color="2" fill="10" visible="yes" active="yes"/>
<layer number="44" name="Drills" color="7" fill="1" visible="yes" active="yes"/>
<layer number="45" name="Holes" color="7" fill="1" visible="yes" active="yes"/>
<layer number="46" name="Milling" color="3" fill="1" visible="yes" active="yes"/>
<layer number="47" name="Measures" color="7" fill="1" visible="yes" active="yes"/>
<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/>
<layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes"/>
<layer number="50" name="dxf" color="7" fill="1" visible="no" active="no"/>
<layer number="51" name="tDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="52" name="bDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="53" name="tGND_GNDA" color="7" fill="1" visible="no" active="no"/>
<layer number="54" name="bGND_GNDA" color="7" fill="1" visible="no" active="no"/>
<layer number="56" name="wert" color="7" fill="1" visible="no" active="no"/>
<layer number="57" name="tCAD" color="7" fill="1" visible="no" active="no"/>
<layer number="59" name="tCarbon" color="7" fill="1" visible="no" active="no"/>
<layer number="60" name="bCarbon" color="7" fill="1" visible="no" active="no"/>
<layer number="90" name="Modules" color="5" fill="1" visible="no" active="no"/>
<layer number="91" name="Nets" color="2" fill="1" visible="no" active="no"/>
<layer number="92" name="Busses" color="1" fill="1" visible="no" active="no"/>
<layer number="93" name="Pins" color="2" fill="1" visible="no" active="no"/>
<layer number="94" name="Symbols" color="4" fill="1" visible="no" active="no"/>
<layer number="95" name="Names" color="7" fill="1" visible="no" active="no"/>
<layer number="96" name="Values" color="7" fill="1" visible="no" active="no"/>
<layer number="97" name="Info" color="7" fill="1" visible="no" active="no"/>
<layer number="98" name="Guide" color="6" fill="1" visible="no" active="no"/>
<layer number="99" name="SpiceOrder" color="5" fill="1" visible="no" active="no"/>
<layer number="100" name="Muster" color="7" fill="1" visible="yes" active="yes"/>
<layer number="101" name="Patch_Top" color="7" fill="1" visible="yes" active="yes"/>
<layer number="102" name="Vscore" color="7" fill="1" visible="yes" active="yes"/>
<layer number="103" name="tMap" color="7" fill="1" visible="yes" active="yes"/>
<layer number="104" name="Name" color="7" fill="1" visible="yes" active="yes"/>
<layer number="105" name="tPlate" color="7" fill="1" visible="yes" active="yes"/>
<layer number="106" name="bPlate" color="7" fill="1" visible="yes" active="yes"/>
<layer number="107" name="Crop" color="7" fill="1" visible="yes" active="yes"/>
<layer number="108" name="centerline" color="7" fill="1" visible="yes" active="yes"/>
<layer number="109" name="fp9" color="7" fill="1" visible="no" active="no"/>
<layer number="110" name="110" color="7" fill="1" visible="no" active="no"/>
<layer number="111" name="111" color="7" fill="1" visible="no" active="no"/>
<layer number="112" name="tSilk" color="7" fill="1" visible="no" active="no"/>
<layer number="113" name="ReferenceLS" color="7" fill="1" visible="no" active="no"/>
<layer number="114" name="Panel" color="11" fill="1" visible="yes" active="yes"/>
<layer number="116" name="Patch_BOT" color="7" fill="1" visible="yes" active="yes"/>
<layer number="118" name="Rect_Pads" color="7" fill="1" visible="no" active="no"/>
<layer number="121" name="_tsilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="122" name="_bsilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="123" name="tTestmark" color="7" fill="1" visible="no" active="no"/>
<layer number="124" name="bTestmark" color="7" fill="1" visible="no" active="no"/>
<layer number="125" name="_tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="126" name="_bNames" color="7" fill="1" visible="no" active="no"/>
<layer number="127" name="_tValues" color="7" fill="1" visible="no" active="no"/>
<layer number="128" name="_bValues" color="7" fill="1" visible="no" active="no"/>
<layer number="129" name="Mask" color="7" fill="1" visible="yes" active="yes"/>
<layer number="131" name="prix" color="7" fill="1" visible="yes" active="yes"/>
<layer number="132" name="test" color="7" fill="1" visible="yes" active="yes"/>
<layer number="144" name="Drill_legend" color="7" fill="1" visible="yes" active="yes"/>
<layer number="150" name="Notes" color="7" fill="1" visible="yes" active="yes"/>
<layer number="151" name="HeatSink" color="7" fill="1" visible="yes" active="yes"/>
<layer number="152" name="_bDocu" color="7" fill="1" visible="no" active="no"/>
<layer number="153" name="FabDoc1" color="6" fill="1" visible="no" active="no"/>
<layer number="154" name="FabDoc2" color="2" fill="1" visible="no" active="no"/>
<layer number="155" name="FabDoc3" color="7" fill="15" visible="no" active="no"/>
<layer number="199" name="Contour" color="7" fill="1" visible="no" active="no"/>
<layer number="200" name="200bmp" color="1" fill="10" visible="yes" active="yes"/>
<layer number="201" name="201bmp" color="2" fill="10" visible="yes" active="yes"/>
<layer number="202" name="202bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="203" name="203bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="204" name="204bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="205" name="205bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="206" name="206bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="207" name="207bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="208" name="208bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="209" name="209bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="210" name="210bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="211" name="211bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="212" name="212bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="213" name="213bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="214" name="214bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="215" name="215bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="216" name="216bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="217" name="217bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="218" name="218bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="219" name="219bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="220" name="220bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="221" name="221bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="222" name="222bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="223" name="223bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="224" name="224bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="225" name="225bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="226" name="226bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="227" name="227bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="228" name="228bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="229" name="229bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="230" name="230bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="231" name="Eagle3D_PG1" color="7" fill="1" visible="no" active="no"/>
<layer number="232" name="Eagle3D_PG2" color="7" fill="1" visible="no" active="no"/>
<layer number="233" name="Eagle3D_PG3" color="7" fill="1" visible="no" active="no"/>
<layer number="248" name="Housing" color="7" fill="1" visible="no" active="no"/>
<layer number="249" name="Edge" color="7" fill="1" visible="no" active="no"/>
<layer number="250" name="Descript" color="7" fill="1" visible="yes" active="yes"/>
<layer number="251" name="SMDround" color="7" fill="1" visible="yes" active="yes"/>
<layer number="254" name="cooling" color="7" fill="1" visible="yes" active="yes"/>
<layer number="255" name="routoute" color="7" fill="1" visible="yes" active="yes"/>
</layers>
<board>
<plain>
<text x="17.122" y="7.5256" size="1.778" layer="21">1</text>
<text x="32.8276" y="16.9224" size="1.778" layer="21">24</text>
<text x="45.015" y="17.4978" size="1.778" layer="22" rot="MR0">1</text>
<text x="4.1902" y="17.6542" size="1.778" layer="22" rot="MR0">32</text>
<hole x="44.45" y="4.064" drill="2.8"/>
<hole x="44.45" y="43.942" drill="2.8"/>
<hole x="3.937" y="43.942" drill="2.8"/>
<hole x="3.937" y="4.064" drill="2.8"/>
<wire x1="0" y1="0" x2="0" y2="47.752" width="0.1524" layer="20"/>
<wire x1="0" y1="47.752" x2="48.26" y2="47.752" width="0.1524" layer="20"/>
<wire x1="48.26" y1="47.752" x2="48.26" y2="0" width="0.1524" layer="20"/>
<wire x1="48.26" y1="0" x2="0" y2="0" width="0.1524" layer="20"/>
<wire x1="18.542" y1="40.132" x2="18.542" y2="41.148" width="0.1524" layer="21"/>
<wire x1="21.209" y1="40.132" x2="21.209" y2="41.148" width="0.1524" layer="21"/>
<wire x1="23.495" y1="40.132" x2="23.495" y2="41.148" width="0.1524" layer="21"/>
<wire x1="33.782" y1="40.132" x2="33.782" y2="41.148" width="0.1524" layer="21"/>
<wire x1="26.035" y1="40.132" x2="26.035" y2="41.148" width="0.1524" layer="21"/>
<wire x1="28.702" y1="40.132" x2="28.702" y2="41.148" width="0.1524" layer="21"/>
<wire x1="31.115" y1="40.132" x2="31.115" y2="41.148" width="0.1524" layer="21"/>
<wire x1="36.322" y1="40.132" x2="36.322" y2="41.148" width="0.1524" layer="21"/>
<wire x1="38.862" y1="40.132" x2="38.862" y2="41.148" width="0.1524" layer="21"/>
<wire x1="41.402" y1="40.132" x2="41.402" y2="41.148" width="0.1524" layer="21"/>
<wire x1="25.654" y1="36.449" x2="24.638" y2="36.449" width="0.1524" layer="21"/>
<wire x1="19.939" y1="36.449" x2="18.923" y2="36.449" width="0.1524" layer="21"/>
<wire x1="13.335" y1="21.59" x2="13.335" y2="22.606" width="0.1524" layer="21"/>
<wire x1="16.002" y1="21.59" x2="16.002" y2="22.606" width="0.1524" layer="21"/>
<wire x1="18.415" y1="21.59" x2="18.415" y2="22.606" width="0.1524" layer="21"/>
<wire x1="20.955" y1="21.59" x2="20.955" y2="22.606" width="0.1524" layer="21"/>
<wire x1="23.622" y1="21.59" x2="23.622" y2="22.606" width="0.1524" layer="21"/>
<wire x1="26.162" y1="21.59" x2="26.162" y2="22.606" width="0.1524" layer="21"/>
<wire x1="28.702" y1="21.59" x2="28.702" y2="22.606" width="0.1524" layer="21"/>
<wire x1="31.242" y1="21.59" x2="31.242" y2="22.606" width="0.1524" layer="21"/>
<wire x1="33.782" y1="21.59" x2="33.782" y2="22.606" width="0.1524" layer="21"/>
<wire x1="36.322" y1="21.59" x2="36.322" y2="22.606" width="0.1524" layer="21"/>
<wire x1="38.862" y1="21.59" x2="38.862" y2="22.606" width="0.1524" layer="21"/>
<wire x1="41.402" y1="21.59" x2="41.402" y2="22.606" width="0.1524" layer="21"/>
<wire x1="16.002" y1="40.259" x2="16.002" y2="41.148" width="0.1524" layer="22"/>
<wire x1="18.542" y1="40.259" x2="18.542" y2="41.148" width="0.1524" layer="22"/>
<wire x1="21.082" y1="40.259" x2="21.082" y2="41.148" width="0.1524" layer="22"/>
<wire x1="23.622" y1="40.259" x2="23.622" y2="41.148" width="0.1524" layer="22"/>
<wire x1="26.162" y1="40.259" x2="26.162" y2="41.148" width="0.1524" layer="22"/>
<wire x1="28.702" y1="40.259" x2="28.702" y2="41.148" width="0.1524" layer="22"/>
<wire x1="31.115" y1="40.259" x2="31.115" y2="41.148" width="0.1524" layer="22"/>
<wire x1="33.782" y1="40.259" x2="33.782" y2="41.148" width="0.1524" layer="22"/>
<wire x1="36.322" y1="40.259" x2="36.322" y2="41.148" width="0.1524" layer="22"/>
<wire x1="41.402" y1="21.59" x2="41.402" y2="22.479" width="0.1524" layer="22"/>
<wire x1="38.862" y1="21.59" x2="38.862" y2="22.479" width="0.1524" layer="22"/>
<wire x1="36.322" y1="21.59" x2="36.322" y2="22.479" width="0.1524" layer="22"/>
<wire x1="33.782" y1="21.59" x2="33.782" y2="22.479" width="0.1524" layer="22"/>
<wire x1="31.242" y1="21.59" x2="31.242" y2="22.479" width="0.1524" layer="22"/>
<wire x1="28.702" y1="21.59" x2="28.702" y2="22.479" width="0.1524" layer="22"/>
<wire x1="26.162" y1="21.59" x2="26.162" y2="22.479" width="0.1524" layer="22"/>
<wire x1="23.622" y1="21.59" x2="23.622" y2="22.479" width="0.1524" layer="22"/>
<wire x1="21.082" y1="21.59" x2="21.082" y2="22.479" width="0.1524" layer="22"/>
<wire x1="18.542" y1="21.59" x2="18.542" y2="22.479" width="0.1524" layer="22"/>
<wire x1="15.875" y1="21.59" x2="15.875" y2="22.479" width="0.1524" layer="22"/>
<wire x1="13.335" y1="21.59" x2="13.335" y2="22.479" width="0.1524" layer="22"/>
<wire x1="10.795" y1="21.59" x2="10.795" y2="22.479" width="0.1524" layer="22"/>
<wire x1="23.495" y1="26.797" x2="23.495" y2="27.686" width="0.1524" layer="22"/>
<wire x1="21.209" y1="26.797" x2="21.209" y2="27.686" width="0.1524" layer="22"/>
<wire x1="18.542" y1="26.797" x2="18.542" y2="27.686" width="0.1524" layer="22"/>
<wire x1="16.002" y1="26.797" x2="16.002" y2="27.686" width="0.1524" layer="22"/>
<wire x1="13.462" y1="26.797" x2="13.462" y2="27.686" width="0.1524" layer="22"/>
<wire x1="23.622" y1="31.877" x2="23.622" y2="32.766" width="0.1524" layer="22"/>
<wire x1="21.082" y1="31.877" x2="21.082" y2="32.766" width="0.1524" layer="22"/>
<wire x1="18.542" y1="31.877" x2="18.542" y2="32.766" width="0.1524" layer="22"/>
<wire x1="15.875" y1="31.877" x2="15.875" y2="32.766" width="0.1524" layer="22"/>
<wire x1="13.462" y1="31.877" x2="13.462" y2="32.766" width="0.1524" layer="22"/>
<text x="6.576" y="43.773" size="1.6764" layer="21">Dual LC Keyboard Scanner</text>
<text x="42.252" y="43.873" size="1.6764" layer="22" rot="MR0">Dual 3.2 Keyboard Scanner</text>
<text x="24.6276" y="16.8724" size="1.778" layer="21">17</text>
<text x="32.4276" y="7.3724" size="1.778" layer="21">16</text>
<text x="19.9902" y="17.6042" size="1.778" layer="22" rot="MR0">17</text>
<text x="30.665" y="17.4478" size="1.778" layer="22" rot="MR0">16</text>
</plain>
<libraries>
<library name="Teensy_Combo">
<packages>
<package name="TEENSY_COMBO">
<pad name="C" x="-11.43" y="-7.62" drill="0.9652"/>
<pad name="D" x="-8.89" y="-7.62" drill="0.9652"/>
<pad name="E" x="-6.35" y="-7.62" drill="0.9652"/>
<pad name="F" x="-3.81" y="-7.62" drill="0.9652" rot="R180"/>
<pad name="G" x="-1.27" y="-7.62" drill="0.9652"/>
<pad name="H" x="1.27" y="-7.62" drill="0.9652"/>
<pad name="I" x="3.81" y="-7.62" drill="0.9652"/>
<pad name="J" x="6.35" y="-7.62" drill="0.9652"/>
<pad name="K" x="8.89" y="-7.62" drill="0.9652"/>
<pad name="L" x="11.43" y="-7.62" drill="0.9652"/>
<pad name="M" x="13.97" y="-7.62" drill="0.9652"/>
<pad name="N" x="16.51" y="-7.62" drill="0.9652"/>
<pad name="P" x="16.51" y="7.62" drill="0.9652"/>
<pad name="Q" x="13.97" y="7.62" drill="0.9652"/>
<pad name="R" x="11.43" y="7.62" drill="0.9652"/>
<pad name="S" x="8.89" y="7.62" drill="0.9652"/>
<pad name="T" x="6.35" y="7.62" drill="0.9652"/>
<pad name="U" x="3.81" y="7.62" drill="0.9652"/>
<pad name="V" x="1.27" y="7.62" drill="0.9652"/>
<pad name="W" x="-1.27" y="7.62" drill="0.9652"/>
<pad name="X" x="-3.81" y="7.62" drill="0.9652"/>
<pad name="Y" x="-6.35" y="7.62" drill="0.9652"/>
<pad name="Z" x="-8.89" y="7.62" drill="0.9652"/>
<pad name="B" x="-13.97" y="-7.62" drill="0.9652"/>
<pad name="1" x="-11.43" y="7.62" drill="0.9652"/>
<pad name="2" x="-13.97" y="7.62" drill="0.9652"/>
<pad name="A" x="-16.51" y="-7.62" drill="0.9652"/>
<pad name="3" x="-16.51" y="7.62" drill="0.9652"/>
<pad name="O" x="16.51" y="5.08" drill="0.9652" rot="R180"/>
<wire x1="-17.78" y1="8.89" x2="17.78" y2="8.89" width="0.3048" layer="21"/>
<wire x1="17.78" y1="-8.89" x2="-17.78" y2="-8.89" width="0.3048" layer="21"/>
<wire x1="17.78" y1="8.89" x2="17.78" y2="-8.89" width="0.3048" layer="21"/>
<wire x1="-17.78" y1="8.89" x2="-17.78" y2="3.81" width="0.3048" layer="21"/>
<wire x1="-17.78" y1="-8.89" x2="-17.78" y2="-3.81" width="0.3048" layer="21"/>
<pad name="4" x="-6.35" y="5.08" drill="0.9652" rot="R180"/>
<pad name="5" x="-3.81" y="5.08" drill="0.9652" rot="R180"/>
<text x="0" y="1.27" size="1.27" layer="21">TEENSY LC</text>
<pad name="10" x="-13.97" y="2.54" drill="0.9652"/>
<pad name="9" x="-11.43" y="2.54" drill="0.9652"/>
<pad name="8" x="-8.89" y="2.54" drill="0.9652"/>
<pad name="7" x="-6.35" y="2.54" drill="0.9652"/>
<pad name="6" x="-3.81" y="2.54" drill="0.9652"/>
<wire x1="-19.685" y1="3.81" x2="-19.685" y2="-3.81" width="0.127" layer="21"/>
<wire x1="-15.875" y1="3.81" x2="-15.875" y2="-3.81" width="0.127" layer="21"/>
<wire x1="-19.685" y1="3.81" x2="-15.875" y2="3.81" width="0.127" layer="21"/>
<wire x1="-19.685" y1="-3.81" x2="-15.875" y2="-3.81" width="0.127" layer="21"/>
<text x="-16.129" y="1.27" size="1.27" layer="21" rot="R180">USB</text>
<pad name="11" x="-13.97" y="-2.54" drill="0.9652"/>
<pad name="12" x="-11.43" y="-2.54" drill="0.9652"/>
<pad name="13" x="-8.89" y="-2.54" drill="0.9652"/>
<pad name="14" x="-6.35" y="-2.54" drill="0.9652"/>
<pad name="15" x="-3.81" y="-2.54" drill="0.9652"/>
<text x="8.89" y="-2.54" size="1.27" layer="22" rot="MR0">TEENSY 3.2</text>
<wire x1="-17.78" y1="8.89" x2="17.78" y2="8.89" width="0.127" layer="22"/>
<wire x1="17.78" y1="8.89" x2="17.78" y2="3.81" width="0.127" layer="22"/>
<wire x1="-17.78" y1="8.89" x2="-17.78" y2="-8.89" width="0.127" layer="22"/>
<wire x1="-17.78" y1="-8.89" x2="17.78" y2="-8.89" width="0.127" layer="22"/>
<wire x1="17.78" y1="-8.89" x2="17.78" y2="-3.81" width="0.127" layer="22"/>
<wire x1="16.51" y1="3.81" x2="20.32" y2="3.81" width="0.127" layer="22"/>
<wire x1="20.32" y1="3.81" x2="20.32" y2="-3.81" width="0.127" layer="22"/>
<wire x1="20.32" y1="-3.81" x2="16.51" y2="-3.81" width="0.127" layer="22"/>
<wire x1="16.51" y1="-3.81" x2="16.51" y2="3.81" width="0.127" layer="22"/>
<text x="20.066" y="-0.635" size="1.27" layer="22" rot="MR0">USB</text>
</package>
</packages>
</library>
<library name="oshw">
<description><p><strong>Open Source Hardware PCB Logos</strong>
<p>A simple polygon based version of the OSHWA logos for use on Eagle PCB's
<p>For use please refer to the OSHWA definition at <a href="http://www.oshwa.org/definition/">http://www.oshwa.org/definition/</a>
<p>Based on the NBitWonder version (<a href="http://nbitwonder.com">http://nbitwonder.com</a>)
<p><strong>Andrew Cooper</strong><br>28Nov2016<br><a href="http://www.darkerview.com">www.DarkerView.com</a></description>
<packages>
<package name="OSHW_5MM">
<polygon width="0.0508" layer="25">
<vertex x="-0.2413" y="-0.6096" curve="-160.717601"/>
<vertex x="0" y="0.6604" curve="-152.950596"/>
<vertex x="0.2794" y="-0.6096"/>
<vertex x="0.6731" y="-1.6002"/>
<vertex x="0.8255" y="-1.5367"/>
<vertex x="0.9779" y="-1.4351"/>
<vertex x="1.4859" y="-1.7907"/>
<vertex x="1.5875" y="-1.7018"/>
<vertex x="1.6764" y="-1.6129"/>
<vertex x="1.778" y="-1.4986"/>
<vertex x="1.8669" y="-1.3843"/>
<vertex x="1.4986" y="-0.8509"/>
<vertex x="1.5875" y="-0.6985"/>
<vertex x="1.6383" y="-0.5461"/>
<vertex x="1.6891" y="-0.3429"/>
<vertex x="2.3114" y="-0.2286"/>
<vertex x="2.3114" y="-0.0508"/>
<vertex x="2.3114" y="0.0635"/>
<vertex x="2.2987" y="0.2032"/>
<vertex x="2.286" y="0.3302"/>
<vertex x="1.6637" y="0.4445"/>
<vertex x="1.6129" y="0.6096"/>
<vertex x="1.5494" y="0.7493"/>
<vertex x="1.4605" y="0.9017"/>
<vertex x="1.4478" y="0.9271"/>
<vertex x="1.8034" y="1.4224"/>
<vertex x="1.7018" y="1.5494"/>
<vertex x="1.5748" y="1.6764"/>
<vertex x="1.4732" y="1.7653"/>
<vertex x="1.3843" y="1.8288"/>
<vertex x="0.8636" y="1.4605"/>
<vertex x="0.7493" y="1.524"/>
<vertex x="0.635" y="1.5748"/>
<vertex x="0.5207" y="1.6256"/>
<vertex x="0.4064" y="1.651"/>
<vertex x="0.2921" y="2.2733"/>
<vertex x="0.1397" y="2.286"/>
<vertex x="-0.0381" y="2.286"/>
<vertex x="-0.1524" y="2.286"/>
<vertex x="-0.2794" y="2.2733"/>
<vertex x="-0.381" y="1.6637"/>
<vertex x="-0.5715" y="1.6002"/>
<vertex x="-0.6985" y="1.5494"/>
<vertex x="-0.8763" y="1.4478"/>
<vertex x="-1.3843" y="1.8161"/>
<vertex x="-1.4986" y="1.7272"/>
<vertex x="-1.6256" y="1.6002"/>
<vertex x="-1.7272" y="1.4859"/>
<vertex x="-1.7907" y="1.4224"/>
<vertex x="-1.4351" y="0.9017"/>
<vertex x="-1.5113" y="0.7747"/>
<vertex x="-1.5875" y="0.6096"/>
<vertex x="-1.6256" y="0.4699"/>
<vertex x="-1.6637" y="0.381"/>
<vertex x="-2.286" y="0.2794"/>
<vertex x="-2.286" y="-0.2794"/>
<vertex x="-1.6637" y="-0.381"/>
<vertex x="-1.6129" y="-0.5588"/>
<vertex x="-1.5748" y="-0.6858"/>
<vertex x="-1.524" y="-0.7874"/>
<vertex x="-1.4351" y="-0.9398"/>
<vertex x="-1.8034" y="-1.4478"/>
<vertex x="-1.7018" y="-1.5621"/>
<vertex x="-1.6129" y="-1.651"/>
<vertex x="-1.4986" y="-1.7526"/>
<vertex x="-1.4097" y="-1.8288"/>
<vertex x="-0.889" y="-1.4732"/>
<vertex x="-0.5969" y="-1.6256"/>
</polygon>
<text x="2.921" y="-2.032" size="0.762" layer="25" rot="R180">open source</text>
<text x="1.651" y="-3.302" size="0.762" layer="25" rot="R180">hardware</text>
</package>
</packages>
</library>
<library name="FPC_twin_front">
<packages>
<package name="FPC_DUAL">
<smd name="1" x="8.0264" y="4.699" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="2" x="7.025640625" y="4.699" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="3" x="6.02488125" y="4.699" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="4" x="5.02411875" y="4.699" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="5" x="4.023359375" y="4.699" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="6" x="3.0226" y="4.699" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="7" x="2.021840625" y="4.699" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="8" x="1.02108125" y="4.699" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="9" x="0.02031875" y="4.699" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="10" x="-0.980440625" y="4.699" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="11" x="-1.9812" y="4.699" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="12" x="-2.981959375" y="4.699" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="13" x="-3.98271875" y="4.699" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="14" x="-4.98348125" y="4.699" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="15" x="-5.984240625" y="4.699" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="16" x="-6.985" y="4.699" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="17" x="8.0264" y="-4.191" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="18" x="7.025640625" y="-4.191" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="19" x="6.02488125" y="-4.191" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="20" x="5.02411875" y="-4.191" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="21" x="4.023359375" y="-4.191" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="22" x="3.0226" y="-4.191" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="23" x="2.021840625" y="-4.191" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="24" x="1.02108125" y="-4.191" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="25" x="0.02031875" y="-4.191" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="26" x="-0.980440625" y="-4.191" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="27" x="-1.9812" y="-4.191" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="28" x="-2.981959375" y="-4.191" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="29" x="-3.98271875" y="-4.191" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="30" x="-4.98348125" y="-4.191" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="31" x="-5.984240625" y="-4.191" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
<smd name="32" x="-6.985" y="-4.191" dx="1.905" dy="0.6096" layer="1" rot="R270"/>
</package>
</packages>
</library>
<library name="FPC_single_back_1mm">
<packages>
<package name="FPC_DUAL_FRONT">
<smd name="1" x="8.0264" y="0.889" dx="1.905" dy="0.6096" layer="16" rot="R270"/>
<smd name="2" x="7.025640625" y="0.889" dx="1.905" dy="0.6096" layer="16" rot="R270"/>
<smd name="3" x="6.02488125" y="0.889" dx="1.905" dy="0.6096" layer="16" rot="R270"/>
<smd name="4" x="5.02411875" y="0.889" dx="1.905" dy="0.6096" layer="16" rot="R270"/>
<smd name="5" x="4.023359375" y="0.889" dx="1.905" dy="0.6096" layer="16" rot="R270"/>
<smd name="6" x="3.0226" y="0.889" dx="1.905" dy="0.6096" layer="16" rot="R270"/>
<smd name="7" x="2.021840625" y="0.889" dx="1.905" dy="0.6096" layer="16" rot="R270"/>
<smd name="8" x="1.02108125" y="0.889" dx="1.905" dy="0.6096" layer="16" rot="R270"/>
<smd name="9" x="0.02031875" y="0.889" dx="1.905" dy="0.6096" layer="16" rot="R270"/>
<smd name="10" x="-0.980440625" y="0.889" dx="1.905" dy="0.6096" layer="16" rot="R270"/>
<smd name="11" x="-1.9812" y="0.889" dx="1.905" dy="0.6096" layer="16" rot="R270"/>
<smd name="12" x="-2.981959375" y="0.889" dx="1.905" dy="0.6096" layer="16" rot="R270"/>
<smd name="13" x="-3.98271875" y="0.889" dx="1.905" dy="0.6096" layer="16" rot="R270"/>
<smd name="14" x="-4.98348125" y="0.889" dx="1.905" dy="0.6096" layer="16" rot="R270"/>
<smd name="15" x="-5.984240625" y="0.889" dx="1.905" dy="0.6096" layer="16" rot="R270"/>
<smd name="16" x="-6.985" y="0.889" dx="1.905" dy="0.6096" layer="16" rot="R270"/>
</package>
</packages>
</library>
<library name="FPC_single_back_0p8mm">
<packages>
<package name="FPC_DUAL_FRONT">
<smd name="27" x="6.6802" y="0.889" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="28" x="5.8801" y="0.889" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="29" x="5.08" y="0.889" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="30" x="4.2799" y="0.889" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="31" x="3.4798" y="0.889" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="32" x="2.6797" y="0.889" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="33" x="1.8796" y="0.889" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="34" x="1.0795" y="0.889" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="35" x="0.2794" y="0.889" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="36" x="-0.5207" y="0.889" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="37" x="-1.3208" y="0.889" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="38" x="-2.1209" y="0.889" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="39" x="-2.921" y="0.889" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="40" x="-3.7211" y="0.889" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="41" x="-4.5212" y="0.889" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="42" x="-5.3213" y="0.889" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="63" x="-5.3213" y="0.127" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="64" x="-4.5212" y="0.127" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="65" x="-3.7211" y="0.127" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="66" x="-2.921" y="0.127" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="67" x="-2.1209" y="0.127" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="68" x="-1.3208" y="0.127" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="69" x="-0.5207" y="0.127" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="70" x="0.2794" y="0.127" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="71" x="1.0795" y="0.127" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="72" x="1.8796" y="0.127" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="73" x="2.6797" y="0.127" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="74" x="3.4798" y="0.127" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="75" x="4.2799" y="0.127" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="76" x="5.08" y="0.127" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="77" x="5.8801" y="0.127" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
<smd name="78" x="6.6802" y="0.127" dx="0.8128" dy="0.4064" layer="16" rot="R270"/>
</package>
</packages>
</library>
</libraries>
<attributes>
</attributes>
<variantdefs>
</variantdefs>
<classes>
<class number="0" name="default" width="0" drill="0">
</class>
</classes>
<designrules name="default">
<description language="de"><b>EAGLE Design Rules</b>
<p>
Die Standard-Design-Rules sind so gewählt, dass sie für
die meisten Anwendungen passen. Sollte ihre Platine
besondere Anforderungen haben, treffen Sie die erforderlichen
Einstellungen hier und speichern die Design Rules unter
einem neuen Namen ab.</description>
<description language="en"><b>EAGLE Design Rules</b>
<p>
The default Design Rules have been set to cover
a wide range of applications. Your particular design
may have different requirements, so please make the
necessary adjustments and save your customized
design rules under a new name.</description>
<param name="layerSetup" value="(1*16)"/>
<param name="mtCopper" value="0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm 0.035mm"/>
<param name="mtIsolate" value="1.5mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm 0.15mm 0.2mm"/>
<param name="mdWireWire" value="6mil"/>
<param name="mdWirePad" value="6mil"/>
<param name="mdWireVia" value="6mil"/>
<param name="mdPadPad" value="6mil"/>
<param name="mdPadVia" value="6mil"/>
<param name="mdViaVia" value="6mil"/>
<param name="mdSmdPad" value="6mil"/>
<param name="mdSmdVia" value="6mil"/>
<param name="mdSmdSmd" value="6mil"/>
<param name="mdViaViaSameLayer" value="6mil"/>
<param name="mnLayersViaInSmd" value="2"/>
<param name="mdCopperDimension" value="40mil"/>
<param name="mdDrill" value="6mil"/>
<param name="mdSmdStop" value="0mil"/>
<param name="msWidth" value="6mil"/>
<param name="msDrill" value="0.35mm"/>
<param name="msMicroVia" value="9.99mm"/>
<param name="msBlindViaRatio" value="0.5"/>
<param name="rvPadTop" value="0.25"/>
<param name="rvPadInner" value="0.25"/>
<param name="rvPadBottom" value="0.25"/>
<param name="rvViaOuter" value="0.25"/>
<param name="rvViaInner" value="0.25"/>
<param name="rvMicroViaOuter" value="0.25"/>
<param name="rvMicroViaInner" value="0.25"/>
<param name="rlMinPadTop" value="10mil"/>
<param name="rlMaxPadTop" value="20mil"/>
<param name="rlMinPadInner" value="10mil"/>
<param name="rlMaxPadInner" value="20mil"/>
<param name="rlMinPadBottom" value="10mil"/>
<param name="rlMaxPadBottom" value="20mil"/>
<param name="rlMinViaOuter" value="8mil"/>
<param name="rlMaxViaOuter" value="20mil"/>
<param name="rlMinViaInner" value="8mil"/>
<param name="rlMaxViaInner" value="20mil"/>
<param name="rlMinMicroViaOuter" value="4mil"/>
<param name="rlMaxMicroViaOuter" value="20mil"/>
<param name="rlMinMicroViaInner" value="4mil"/>
<param name="rlMaxMicroViaInner" value="20mil"/>
<param name="psTop" value="-1"/>
<param name="psBottom" value="-1"/>
<param name="psFirst" value="-1"/>
<param name="psElongationLong" value="100"/>
<param name="psElongationOffset" value="100"/>
<param name="mvStopFrame" value="1"/>
<param name="mvCreamFrame" value="0"/>
<param name="mlMinStopFrame" value="4mil"/>
<param name="mlMaxStopFrame" value="4mil"/>
<param name="mlMinCreamFrame" value="0mil"/>
<param name="mlMaxCreamFrame" value="0mil"/>
<param name="mlViaStopLimit" value="0mil"/>
<param name="srRoundness" value="0"/>
<param name="srMinRoundness" value="0mil"/>
<param name="srMaxRoundness" value="0mil"/>
<param name="slThermalIsolate" value="10mil"/>
<param name="slThermalsForVias" value="0"/>
<param name="dpMaxLengthDifference" value="10mm"/>
<param name="dpGapFactor" value="2.5"/>
<param name="checkAngle" value="0"/>
<param name="checkFont" value="1"/>
<param name="checkRestrict" value="1"/>
<param name="checkStop" value="0"/>
<param name="checkValues" value="0"/>
<param name="checkNames" value="1"/>
<param name="checkWireStubs" value="1"/>
<param name="checkPolygonWidth" value="0"/>
<param name="useDiameter" value="13"/>
<param name="maxErrors" value="50"/>
</designrules>
<autorouter>
<pass name="Default">
<param name="RoutingGrid" value="50mil"/>
<param name="AutoGrid" value="1"/>
<param name="Efforts" value="0"/>
<param name="TopRouterVariant" value="1"/>
<param name="tpViaShape" value="round"/>
<param name="PrefDir.1" value="a"/>
<param name="PrefDir.2" value="0"/>
<param name="PrefDir.3" value="0"/>
<param name="PrefDir.4" value="0"/>
<param name="PrefDir.5" value="0"/>
<param name="PrefDir.6" value="0"/>
<param name="PrefDir.7" value="0"/>
<param name="PrefDir.8" value="0"/>
<param name="PrefDir.9" value="0"/>
<param name="PrefDir.10" value="0"/>
<param name="PrefDir.11" value="0"/>
<param name="PrefDir.12" value="0"/>
<param name="PrefDir.13" value="0"/>
<param name="PrefDir.14" value="0"/>
<param name="PrefDir.15" value="0"/>
<param name="PrefDir.16" value="a"/>
<param name="cfVia" value="8"/>
<param name="cfNonPref" value="5"/>
<param name="cfChangeDir" value="2"/>
<param name="cfOrthStep" value="2"/>
<param name="cfDiagStep" value="3"/>
<param name="cfExtdStep" value="0"/>
<param name="cfBonusStep" value="1"/>
<param name="cfMalusStep" value="1"/>
<param name="cfPadImpact" value="4"/>
<param name="cfSmdImpact" value="4"/>
<param name="cfBusImpact" value="0"/>
<param name="cfHugging" value="3"/>
<param name="cfAvoid" value="4"/>
<param name="cfPolygon" value="10"/>
<param name="cfBase.1" value="0"/>
<param name="cfBase.2" value="1"/>
<param name="cfBase.3" value="1"/>
<param name="cfBase.4" value="1"/>
<param name="cfBase.5" value="1"/>
<param name="cfBase.6" value="1"/>
<param name="cfBase.7" value="1"/>
<param name="cfBase.8" value="1"/>
<param name="cfBase.9" value="1"/>
<param name="cfBase.10" value="1"/>
<param name="cfBase.11" value="1"/>
<param name="cfBase.12" value="1"/>
<param name="cfBase.13" value="1"/>
<param name="cfBase.14" value="1"/>
<param name="cfBase.15" value="1"/>
<param name="cfBase.16" value="0"/>
<param name="mnVias" value="20"/>
<param name="mnSegments" value="9999"/>
<param name="mnExtdSteps" value="9999"/>
<param name="mnRipupLevel" value="10"/>
<param name="mnRipupSteps" value="100"/>
<param name="mnRipupTotal" value="100"/>
</pass>
<pass name="Follow-me" refer="Default" active="yes">
</pass>
<pass name="Busses" refer="Default" active="yes">
<param name="cfNonPref" value="4"/>
<param name="cfBusImpact" value="4"/>
<param name="cfHugging" value="0"/>
<param name="mnVias" value="0"/>
</pass>
<pass name="Route" refer="Default" active="yes">
</pass>
<pass name="Optimize1" refer="Default" active="yes">
<param name="cfVia" value="99"/>
<param name="cfExtdStep" value="10"/>
<param name="cfHugging" value="1"/>
<param name="mnExtdSteps" value="1"/>
<param name="mnRipupLevel" value="0"/>
</pass>
<pass name="Optimize2" refer="Optimize1" active="yes">
<param name="cfNonPref" value="0"/>
<param name="cfChangeDir" value="6"/>
<param name="cfExtdStep" value="0"/>
<param name="cfBonusStep" value="2"/>
<param name="cfMalusStep" value="2"/>
<param name="cfPadImpact" value="2"/>
<param name="cfSmdImpact" value="2"/>
<param name="cfHugging" value="0"/>
</pass>
<pass name="Optimize3" refer="Optimize2" active="yes">
<param name="cfChangeDir" value="8"/>
<param name="cfPadImpact" value="0"/>
<param name="cfSmdImpact" value="0"/>
</pass>
<pass name="Optimize4" refer="Optimize3" active="yes">
<param name="cfChangeDir" value="25"/>
</pass>
</autorouter>
<elements>
<element name="E$1" library="Teensy_Combo" package="TEENSY_COMBO" value="" x="27.3812" y="31.369" smashed="yes"/>
<element name="E$4" library="oshw" package="OSHW_5MM" value="" x="5.207" y="38.862" smashed="yes"/>
<element name="E$2" library="FPC_twin_front" package="FPC_DUAL" value="" x="24.65" y="8.8" smashed="yes"/>
<element name="E$3" library="FPC_single_back_1mm" package="FPC_DUAL_FRONT" value="" x="10.65" y="13.8" smashed="yes"/>
<element name="E$5" library="FPC_single_back_1mm" package="FPC_DUAL_FRONT" value="" x="36.45" y="13.8" smashed="yes"/>
<element name="E$6" library="FPC_single_back_0p8mm" package="FPC_DUAL_FRONT" value="" x="10.6" y="8.9" smashed="yes"/>
<element name="E$7" library="FPC_single_back_0p8mm" package="FPC_DUAL_FRONT" value="" x="36.35" y="8.9" smashed="yes"/>
</elements>
<signals>
<signal name="S$28">
<wire x1="43.9166" y1="36.3982" x2="43.7388" y2="36.3982" width="0.1524" layer="1"/>
</signal>
<signal name="S$31">
<wire x1="41.3258" y1="38.9128" x2="41.1988" y2="38.9128" width="0.1524" layer="1"/>
<wire x1="41.1988" y1="38.9128" x2="40.082" y2="37.796" width="0.1524" layer="1"/>
<wire x1="40.082" y1="37.796" x2="40.082" y2="15.3682" width="0.1524" layer="1"/>
</signal>
<signal name="S$33">
<contactref element="E$1" pad="R"/>
<wire x1="38.8112" y1="38.989" x2="37.5666" y2="37.7444" width="0.1524" layer="1"/>
<wire x1="37.5666" y1="37.7444" x2="37.5666" y2="16.034" width="0.1524" layer="1"/>
</signal>
<signal name="S$35">
<wire x1="36.2204" y1="38.9128" x2="36.195" y2="38.9128" width="0.1524" layer="1"/>
<wire x1="36.195" y1="38.9128" x2="35.0012" y2="37.719" width="0.1524" layer="1"/>
<wire x1="35.0012" y1="37.719" x2="35.0012" y2="16.7514" width="0.1524" layer="1"/>
</signal>
<signal name="S$37">
<wire x1="33.7312" y1="38.9128" x2="33.655" y2="38.9128" width="0.1524" layer="1"/>
</signal>
<signal name="S$39">
<wire x1="33.7312" y1="38.9382" x2="33.7058" y2="38.9382" width="0.1524" layer="1"/>
<wire x1="33.7058" y1="38.9382" x2="32.4866" y2="37.719" width="0.1524" layer="1"/>
<wire x1="32.4866" y1="37.719" x2="32.4866" y2="17.418" width="0.1524" layer="1"/>
</signal>
<signal name="S$41">
<wire x1="31.115" y1="38.9382" x2="31.115" y2="38.9128" width="0.1524" layer="1"/>
<wire x1="31.115" y1="38.9128" x2="29.9712" y2="37.769" width="0.1524" layer="1"/>
<wire x1="29.9712" y1="37.769" x2="29.9712" y2="18.2592" width="0.1524" layer="1"/>
</signal>
<signal name="S$43">
<wire x1="28.6512" y1="39.0144" x2="27.3812" y2="37.7444" width="0.1524" layer="1"/>
<wire x1="27.3812" y1="37.7444" x2="27.3812" y2="18.9798" width="0.1524" layer="1"/>
</signal>
<signal name="S$45">
<wire x1="26.162" y1="38.9128" x2="26.162" y2="26.289" width="0.1524" layer="1"/>
<wire x1="26.162" y1="26.289" x2="24.8674" y2="24.9944" width="0.1524" layer="1"/>
<wire x1="24.8674" y1="24.9944" x2="24.8674" y2="19.7044" width="0.1524" layer="1"/>
</signal>
<signal name="S$47">
<wire x1="23.6474" y1="36.449" x2="23.6474" y2="36.3474" width="0.1524" layer="1"/>
<wire x1="23.6474" y1="36.3474" x2="25.3238" y2="34.671" width="0.1524" layer="1"/>
<wire x1="25.3238" y1="34.671" x2="25.3238" y2="27.8892" width="0.1524" layer="1"/>
<wire x1="25.3238" y1="27.8892" x2="22.2774" y2="24.8428" width="0.1524" layer="1"/>
<wire x1="22.2774" y1="24.8428" x2="22.2774" y2="20.3774" width="0.1524" layer="1"/>
</signal>
<signal name="S$49">
<wire x1="23.5712" y1="38.9128" x2="23.5204" y2="38.9128" width="0.1524" layer="1"/>
<wire x1="23.5204" y1="38.9128" x2="22.352" y2="37.7444" width="0.1524" layer="1"/>
<wire x1="22.352" y1="37.7444" x2="22.352" y2="27.4574" width="0.1524" layer="1"/>
<wire x1="22.352" y1="27.4574" x2="19.7374" y2="24.8428" width="0.1524" layer="1"/>
<wire x1="19.7374" y1="24.8428" x2="19.7374" y2="21.0346" width="0.1524" layer="1"/>
</signal>
<signal name="S$51">
<wire x1="21.082" y1="36.3728" x2="21.082" y2="36.2966" width="0.1524" layer="1"/>
<wire x1="21.082" y1="36.2966" x2="19.812" y2="35.0266" width="0.1524" layer="1"/>
<wire x1="19.812" y1="35.0266" x2="19.812" y2="27.5336" width="0.1524" layer="1"/>
<wire x1="19.812" y1="27.5336" x2="17.222" y2="24.9436" width="0.1524" layer="1"/>
<wire x1="17.222" y1="24.9436" x2="17.222" y2="21.818" width="0.1524" layer="1"/>
</signal>
<signal name="S$53">
<wire x1="21.0566" y1="38.9382" x2="21.0058" y2="38.9382" width="0.1524" layer="1"/>
<wire x1="21.0058" y1="38.9382" x2="17.272" y2="35.2044" width="0.1524" layer="1"/>
<wire x1="17.272" y1="35.2044" x2="17.272" y2="27.4574" width="0.1524" layer="1"/>
<wire x1="17.272" y1="27.4574" x2="14.682" y2="24.8674" width="0.1524" layer="1"/>
<wire x1="14.682" y1="24.8674" x2="14.682" y2="22.4506" width="0.1524" layer="1"/>
</signal>
<signal name="S$55">
<wire x1="18.4404" y1="38.9128" x2="18.3642" y2="38.9128" width="0.1524" layer="1"/>
<wire x1="18.3642" y1="38.9128" x2="14.7066" y2="35.2552" width="0.1524" layer="1"/>
<wire x1="14.7066" y1="35.2552" x2="14.7066" y2="27.2796" width="0.1524" layer="1"/>
<wire x1="14.7066" y1="27.2796" x2="13.5364" y2="26.1094" width="0.1524" layer="1"/>
<wire x1="13.5364" y1="26.1094" x2="9.3666" y2="26.1094" width="0.1524" layer="1"/>
</signal>
<signal name="S$90">
<wire x1="36.322" y1="38.9128" x2="36.322" y2="37.3634" width="0.1524" layer="16"/>
<wire x1="36.322" y1="37.3634" x2="42.6474" y2="31.038" width="0.1524" layer="16"/>
<wire x1="42.6474" y1="31.038" x2="42.6474" y2="21.738" width="0.1524" layer="16"/>
</signal>
<signal name="S$92">
<wire x1="33.7312" y1="38.9128" x2="33.7312" y2="37.4396" width="0.1524" layer="16"/>
<wire x1="33.7312" y1="37.4396" x2="40.082" y2="31.0888" width="0.1524" layer="16"/>
<wire x1="40.082" y1="31.0888" x2="40.082" y2="21.4078" width="0.1524" layer="16"/>
</signal>
<signal name="S$94">
<wire x1="31.2674" y1="38.9636" x2="31.2674" y2="37.1094" width="0.1524" layer="16"/>
<wire x1="31.2674" y1="37.1094" x2="37.542" y2="30.8348" width="0.1524" layer="16"/>
<wire x1="37.542" y1="30.8348" x2="37.542" y2="21.999" width="0.1524" layer="16"/>
</signal>
<signal name="S$96">
<wire x1="28.6766" y1="38.9128" x2="28.6766" y2="36.957" width="0.1524" layer="16"/>
<wire x1="28.6766" y1="36.957" x2="35.002" y2="30.6316" width="0.1524" layer="16"/>
<wire x1="35.002" y1="30.6316" x2="35.002" y2="22.5918" width="0.1524" layer="16"/>
</signal>
<signal name="S$98">
<wire x1="26.1874" y1="38.9128" x2="26.1874" y2="37.4142" width="0.1524" layer="16"/>
<wire x1="26.1874" y1="37.4142" x2="32.462" y2="31.1396" width="0.1524" layer="16"/>
<wire x1="32.462" y1="31.1396" x2="32.462" y2="22.733" width="0.1524" layer="16"/>
</signal>
<signal name="S$100">
<wire x1="23.6474" y1="38.9636" x2="23.6474" y2="38.7096" width="0.1524" layer="16"/>
<wire x1="23.6474" y1="38.7096" x2="29.9974" y2="32.3596" width="0.1524" layer="16"/>
</signal>
<signal name="S$102">
<wire x1="21.0312" y1="38.9636" x2="21.082" y2="38.9636" width="0.1524" layer="16"/>
<wire x1="21.082" y1="38.9636" x2="22.352" y2="37.6936" width="0.1524" layer="16"/>
<wire x1="22.352" y1="37.6936" x2="22.352" y2="35.2044" width="0.1524" layer="16"/>
<wire x1="22.352" y1="35.2044" x2="22.4028" y2="35.1536" width="0.1524" layer="16"/>
<wire x1="22.4028" y1="35.1536" x2="24.6126" y2="35.1536" width="0.1524" layer="16"/>
<wire x1="24.6126" y1="35.1536" x2="27.3566" y2="32.4096" width="0.1524" layer="16"/>
<wire x1="27.3566" y1="32.4096" x2="27.3566" y2="22.9306" width="0.1524" layer="16"/>
</signal>
<signal name="S$104">
<wire x1="23.5458" y1="28.7528" x2="23.5458" y2="26.8732" width="0.1524" layer="16"/>
<wire x1="23.5458" y1="26.8732" x2="24.8666" y2="25.5524" width="0.1524" layer="16"/>
<wire x1="24.8666" y1="25.5524" x2="24.8666" y2="22.5878" width="0.1524" layer="16"/>
</signal>
<signal name="S$106">
<wire x1="21.1328" y1="28.7528" x2="21.1328" y2="26.924" width="0.1524" layer="16"/>
<wire x1="21.1328" y1="26.924" x2="22.2528" y2="25.804" width="0.1524" layer="16"/>
<wire x1="22.2528" y1="25.804" x2="22.2528" y2="21.6696" width="0.1524" layer="16"/>
</signal>
<signal name="S$108">
<wire x1="23.6474" y1="33.8328" x2="23.6474" y2="31.7246" width="0.1524" layer="16"/>
<wire x1="23.6474" y1="31.7246" x2="22.4536" y2="30.5308" width="0.1524" layer="16"/>
<wire x1="22.4536" y1="30.5308" x2="19.8628" y2="30.5308" width="0.1524" layer="16"/>
<wire x1="19.8628" y1="30.5308" x2="19.762" y2="30.6316" width="0.1524" layer="16"/>
<wire x1="19.762" y1="30.6316" x2="19.762" y2="21.6554" width="0.1524" layer="16"/>
</signal>
<signal name="S$110">
<wire x1="18.542" y1="28.7528" x2="18.542" y2="26.162" width="0.1524" layer="16"/>
<wire x1="18.542" y1="26.162" x2="17.1728" y2="24.7928" width="0.1524" layer="16"/>
<wire x1="17.1728" y1="24.7928" x2="17.1728" y2="21.511" width="0.1524" layer="16"/>
</signal>
<signal name="S$112">
<wire x1="16.002" y1="28.8036" x2="16.002" y2="26.3144" width="0.1524" layer="16"/>
<wire x1="16.002" y1="26.3144" x2="14.6328" y2="24.9452" width="0.1524" layer="16"/>
<wire x1="14.6328" y1="24.9452" x2="14.6328" y2="21.3674" width="0.1524" layer="16"/>
</signal>
<signal name="S$114">
<wire x1="13.4366" y1="28.6512" x2="13.3858" y2="28.6512" width="0.1524" layer="16"/>
<wire x1="13.3858" y1="28.6512" x2="12.1174" y2="27.3828" width="0.1524" layer="16"/>
<wire x1="12.1174" y1="27.3828" x2="12.1174" y2="21.4524" width="0.1524" layer="16"/>
</signal>
<signal name="S$116">
<wire x1="21.082" y1="33.8328" x2="21.0312" y2="33.8328" width="0.1524" layer="16"/>
<wire x1="21.0312" y1="33.8328" x2="17.2212" y2="30.0228" width="0.1524" layer="16"/>
<wire x1="17.2212" y1="30.0228" x2="11.1506" y2="30.0228" width="0.1524" layer="16"/>
<wire x1="11.1506" y1="30.0228" x2="8.6774" y2="27.5496" width="0.1524" layer="16"/>
<wire x1="8.6774" y1="27.5496" x2="8.6774" y2="15.5612" width="0.1524" layer="16"/>
</signal>
<signal name="S$117">
<wire x1="18.542" y1="33.8328" x2="15.8496" y2="31.1404" width="0.1524" layer="16"/>
<wire x1="15.8496" y1="31.1404" x2="11.2014" y2="31.1404" width="0.1524" layer="16"/>
<wire x1="11.2014" y1="31.1404" x2="7.7106" y2="27.6496" width="0.1524" layer="16"/>
<wire x1="7.7106" y1="27.6496" x2="7.7106" y2="15.4882" width="0.1524" layer="16"/>
</signal>
<signal name="S$118">
<wire x1="16.002" y1="33.8328" x2="16.002" y2="33.7312" width="0.1524" layer="16"/>
<wire x1="16.002" y1="33.7312" x2="14.3764" y2="32.1056" width="0.1524" layer="16"/>
<wire x1="14.3764" y1="32.1056" x2="11.0998" y2="32.1056" width="0.1524" layer="16"/>
<wire x1="11.0998" y1="32.1056" x2="6.6962" y2="27.702" width="0.1524" layer="16"/>
<wire x1="6.6962" y1="27.702" x2="6.6962" y2="15.4858" width="0.1524" layer="16"/>
</signal>
<signal name="S$119">
<wire x1="13.335" y1="33.8328" x2="11.6586" y2="33.8328" width="0.1524" layer="16"/>
<wire x1="11.6586" y1="33.8328" x2="5.681" y2="27.8552" width="0.1524" layer="16"/>
<wire x1="5.681" y1="27.8552" x2="5.681" y2="15.485" width="0.1524" layer="16"/>
</signal>
<signal name="S$120">
<wire x1="18.5928" y1="38.9636" x2="18.5928" y2="36.9316" width="0.1524" layer="16"/>
<wire x1="18.5928" y1="36.9316" x2="16.9164" y2="35.2552" width="0.1524" layer="16"/>
<wire x1="16.9164" y1="35.2552" x2="11.9634" y2="35.2552" width="0.1524" layer="16"/>
<wire x1="11.9634" y1="35.2552" x2="4.6698" y2="27.9616" width="0.1524" layer="16"/>
<wire x1="4.6698" y1="27.9616" x2="4.6698" y2="15.4818" width="0.1524" layer="16"/>
</signal>
<signal name="S$121">
<wire x1="16.002" y1="38.9128" x2="16.002" y2="37.846" width="0.1524" layer="16"/>
<wire x1="16.002" y1="37.846" x2="14.478" y2="36.322" width="0.1524" layer="16"/>
<wire x1="14.478" y1="36.322" x2="11.9634" y2="36.322" width="0.1524" layer="16"/>
<wire x1="11.9634" y1="36.322" x2="3.6586" y2="28.0172" width="0.1524" layer="16"/>
<wire x1="3.6586" y1="28.0172" x2="3.6586" y2="15.4778" width="0.1524" layer="16"/>
</signal>
<signal name="S$124">
<polygon width="0.1524" layer="1" isolate="0.3048">
<vertex x="0" y="0"/>
<vertex x="0" y="47.752"/>
<vertex x="48.26" y="47.752"/>
<vertex x="48.26" y="0"/>
</polygon>
</signal>
<signal name="S$125">
<polygon width="0.1524" layer="16" isolate="0.3048">
<vertex x="0" y="0"/>
<vertex x="0" y="47.752"/>
<vertex x="48.26" y="47.752"/>
<vertex x="48.26" y="0"/>
</polygon>
</signal>
<signal name="S$12">
<wire x1="18.5" y1="23.4" x2="18.5" y2="21.4" width="0.1524" layer="1"/>
</signal>
<signal name="S$13">
<wire x1="15.95" y1="23.65" x2="15.95" y2="22.1" width="0.1524" layer="1"/>
<wire x1="12.4" y1="22.1" x2="15.95" y2="22.1" width="0.1524" layer="1"/>
<wire x1="12.4" y1="22.1" x2="12.4" y2="7.8" width="0.1524" layer="1"/>
<wire x1="12.4" y1="7.8" x2="20.7" y2="7.8" width="0.1524" layer="1"/>
<wire x1="20.7" y1="7.8" x2="20.7" y2="5.5" width="0.1524" layer="1"/>
</signal>
<signal name="S$1">
<wire x1="13.45" y1="23.8" x2="13.4" y2="23.8" width="0.1524" layer="1"/>
<wire x1="13.4" y1="23.8" x2="13.4" y2="25.15" width="0.1524" layer="1"/>
<wire x1="13.4" y1="25.15" x2="9.7" y2="25.15" width="0.1524" layer="1"/>
<wire x1="9.7" y1="25.15" x2="9.7" y2="7.1" width="0.1524" layer="1"/>
<wire x1="9.7" y1="7.1" x2="18.75" y2="7.1" width="0.1524" layer="1"/>
<wire x1="18.75" y1="7.1" x2="18.75" y2="5.5" width="0.1524" layer="1"/>
</signal>
<signal name="S$15">
<wire x1="14.7" y1="22.45" x2="12.05" y2="22.45" width="0.1524" layer="1"/>
<wire x1="12.05" y1="22.45" x2="12.05" y2="7.45" width="0.1524" layer="1"/>
<wire x1="12.05" y1="7.45" x2="19.65" y2="7.45" width="0.1524" layer="1"/>
<wire x1="19.65" y1="7.45" x2="19.65" y2="5.55" width="0.1524" layer="1"/>
</signal>
<signal name="S$16">
<wire x1="12.75" y1="8.15" x2="12.75" y2="21.75" width="0.1524" layer="1"/>
<wire x1="12.75" y1="21.75" x2="17.25" y2="21.75" width="0.1524" layer="1"/>
<wire x1="12.75" y1="8.15" x2="21.7" y2="8.15" width="0.1524" layer="1"/>
<wire x1="21.7" y1="8.15" x2="21.7" y2="5.5" width="0.1524" layer="1"/>
</signal>
<signal name="S$17">
<wire x1="13.1" y1="8.5" x2="13.1" y2="21.4" width="0.1524" layer="1"/>
<wire x1="13.1" y1="21.4" x2="18.5" y2="21.4" width="0.1524" layer="1"/>
<wire x1="13.1" y1="8.5" x2="22.7" y2="8.5" width="0.1524" layer="1"/>
<wire x1="22.7" y1="8.5" x2="22.7" y2="5.45" width="0.1524" layer="1"/>
</signal>
<signal name="S$18">
<wire x1="13.45" y1="8.85" x2="13.45" y2="21.05" width="0.1524" layer="1"/>
<wire x1="13.45" y1="21.05" x2="19.75" y2="21.05" width="0.1524" layer="1"/>
<wire x1="13.45" y1="8.85" x2="23.7" y2="8.85" width="0.1524" layer="1"/>
<wire x1="23.7" y1="8.85" x2="23.7" y2="5.35" width="0.1524" layer="1"/>
</signal>
<signal name="S$19">
<wire x1="13.8" y1="9.2" x2="13.8" y2="20.7" width="0.1524" layer="1"/>
<wire x1="13.8" y1="20.7" x2="21.05" y2="20.7" width="0.1524" layer="1"/>
<wire x1="21.05" y1="23.65" x2="21.05" y2="20.7" width="0.1524" layer="1"/>
<wire x1="13.8" y1="9.2" x2="24.7" y2="9.2" width="0.1524" layer="1"/>
<wire x1="24.7" y1="9.2" x2="24.7" y2="5.35" width="0.1524" layer="1"/>
</signal>
<signal name="S$20">
<wire x1="14.15" y1="9.55" x2="14.15" y2="20.35" width="0.1524" layer="1"/>
<wire x1="14.15" y1="20.35" x2="22.3" y2="20.35" width="0.1524" layer="1"/>
<wire x1="14.15" y1="9.55" x2="25.65" y2="9.55" width="0.1524" layer="1"/>
<wire x1="25.65" y1="9.55" x2="25.65" y2="5.4" width="0.1524" layer="1"/>
</signal>
<signal name="S$11">
<wire x1="14.5" y1="9.9" x2="14.5" y2="20" width="0.1524" layer="1"/>
<wire x1="14.5" y1="20" x2="23.65" y2="20" width="0.1524" layer="1"/>
<wire x1="23.6" y1="23.6" x2="23.65" y2="23.6" width="0.1524" layer="1"/>
<wire x1="23.65" y1="23.6" x2="23.65" y2="20" width="0.1524" layer="1"/>
<wire x1="14.5" y1="9.9" x2="26.65" y2="9.9" width="0.1524" layer="1"/>
<wire x1="26.65" y1="9.9" x2="26.65" y2="5.5" width="0.1524" layer="1"/>
</signal>
<signal name="S$21">
<wire x1="14.85" y1="10.3" x2="14.85" y2="19.65" width="0.1524" layer="1"/>
<wire x1="14.85" y1="19.65" x2="24.9" y2="19.65" width="0.1524" layer="1"/>
<wire x1="14.85" y1="10.3" x2="27.7" y2="10.3" width="0.1524" layer="1"/>
<wire x1="27.7" y1="10.3" x2="27.7" y2="5.5" width="0.1524" layer="1"/>
</signal>
<signal name="S$10">
<wire x1="15.2" y1="10.65" x2="15.2" y2="19.3" width="0.1524" layer="1"/>
<wire x1="15.2" y1="19.3" x2="26.1" y2="19.3" width="0.1524" layer="1"/>
<wire x1="26.1" y1="23.55" x2="26.1" y2="19.3" width="0.1524" layer="1"/>
<wire x1="15.2" y1="10.65" x2="28.65" y2="10.65" width="0.1524" layer="1"/>
<wire x1="28.65" y1="10.65" x2="28.65" y2="5.5" width="0.1524" layer="1"/>
</signal>
<signal name="S$9">
<wire x1="15.55" y1="11" x2="15.55" y2="18.95" width="0.1524" layer="1"/>
<wire x1="15.55" y1="18.95" x2="27.4" y2="18.95" width="0.1524" layer="1"/>
<wire x1="15.55" y1="11" x2="29.7" y2="11" width="0.1524" layer="1"/>
<wire x1="29.7" y1="11" x2="29.7" y2="5.45" width="0.1524" layer="1"/>
</signal>
<signal name="S$2">
<wire x1="28.65" y1="23.45" x2="28.65" y2="18.6" width="0.1524" layer="1"/>
<wire x1="15.9" y1="11.35" x2="15.9" y2="18.6" width="0.1524" layer="1"/>
<wire x1="15.9" y1="18.6" x2="28.65" y2="18.6" width="0.1524" layer="1"/>
</signal>
<signal name="S$3">
<wire x1="16.25" y1="11.75" x2="16.25" y2="18.25" width="0.1524" layer="1"/>
<wire x1="16.25" y1="18.25" x2="30" y2="18.25" width="0.1524" layer="1"/>
</signal>
<signal name="S$22">
<wire x1="16.6" y1="12.05" x2="16.6" y2="17.9" width="0.1524" layer="1"/>
<wire x1="16.6" y1="17.9" x2="31.25" y2="17.9" width="0.1524" layer="1"/>
<wire x1="31.25" y1="17.9" x2="31.25" y2="23.65" width="0.1524" layer="1"/>
</signal>
<signal name="S$23">
<wire x1="25.65" y1="14.3" x2="25.65" y2="17.45" width="0.1524" layer="1"/>
<wire x1="25.65" y1="17.45" x2="32.55" y2="17.45" width="0.1524" layer="1"/>
</signal>
<signal name="S$4">
<wire x1="26.7" y1="14.35" x2="26.7" y2="17.1" width="0.1524" layer="1"/>
<wire x1="26.7" y1="17.1" x2="33.8" y2="17.1" width="0.1524" layer="1"/>
<wire x1="33.8" y1="17.1" x2="33.8" y2="23.5" width="0.1524" layer="1"/>
</signal>
<signal name="S$24">
<wire x1="27.7" y1="14.3" x2="27.7" y2="16.75" width="0.1524" layer="1"/>
<wire x1="27.7" y1="16.75" x2="35" y2="16.75" width="0.1524" layer="1"/>
</signal>
<signal name="S$5">
<wire x1="28.7" y1="14.35" x2="28.7" y2="16.4" width="0.1524" layer="1"/>
<wire x1="28.7" y1="16.4" x2="36.3" y2="16.4" width="0.1524" layer="1"/>
<wire x1="36.3" y1="16.4" x2="36.3" y2="23.6" width="0.1524" layer="1"/>
</signal>
<signal name="S$25">
<wire x1="29.65" y1="14.3" x2="29.65" y2="16.05" width="0.1524" layer="1"/>
<wire x1="29.65" y1="16.05" x2="37.45" y2="16.05" width="0.1524" layer="1"/>
</signal>
<signal name="S$6">
<wire x1="30.7" y1="14.35" x2="30.7" y2="15.7" width="0.1524" layer="1"/>
<wire x1="30.7" y1="15.7" x2="38.85" y2="15.7" width="0.1524" layer="1"/>
<wire x1="38.85" y1="15.7" x2="38.85" y2="23.55" width="0.1524" layer="1"/>
</signal>
<signal name="S$26">
<wire x1="31.65" y1="14.35" x2="31.65" y2="15.35" width="0.1524" layer="1"/>
<wire x1="31.65" y1="15.35" x2="40.1" y2="15.35" width="0.1524" layer="1"/>
</signal>
<signal name="S$27">
<wire x1="32.7" y1="14.15" x2="32.7" y2="15" width="0.1524" layer="1"/>
<wire x1="32.7" y1="15" x2="41.35" y2="15" width="0.1524" layer="1"/>
</signal>
<signal name="S$7">
<wire x1="41.35" y1="23.55" x2="41.35" y2="15" width="0.1524" layer="1"/>
</signal>
<signal name="S$8">
<wire x1="16.6" y1="12.05" x2="32.7" y2="12.05" width="0.1524" layer="1"/>
<wire x1="32.7" y1="12.05" x2="32.7" y2="5.4" width="0.1524" layer="1"/>
</signal>
<signal name="S$29">
<wire x1="16.25" y1="11.7" x2="31.7" y2="11.7" width="0.1524" layer="1"/>
<wire x1="31.7" y1="11.7" x2="31.7" y2="5.45" width="0.1524" layer="1"/>
</signal>
<signal name="S$30">
<wire x1="15.9" y1="11.35" x2="30.65" y2="11.35" width="0.1524" layer="1"/>
<wire x1="30.65" y1="11.35" x2="30.65" y2="5.45" width="0.1524" layer="1"/>
</signal>
<signal name="S$32">
<wire x1="17.7" y1="5.4" x2="17.7" y2="6.7" width="0.1524" layer="1"/>
<wire x1="9.3" y1="26.1" x2="9.3" y2="16.85" width="0.1524" layer="1"/>
<wire x1="9.3" y1="16.85" x2="9.3" y2="16.75" width="0.1524" layer="1"/>
<wire x1="17.7" y1="6.7" x2="9.3" y2="6.7" width="0.1524" layer="1"/>
<wire x1="9.3" y1="6.7" x2="9.3" y2="16.75" width="0.1524" layer="1"/>
</signal>
<signal name="S$14">
<wire x1="30" y1="22.7" x2="34.5" y2="18.2" width="0.1524" layer="16"/>
<wire x1="34.5" y1="18.2" x2="34.5" y2="15.45" width="0.1524" layer="16"/>
<wire x1="30" y1="32.35" x2="30" y2="22.7" width="0.1524" layer="16"/>
</signal>
<signal name="S$34">
<wire x1="10.85" y1="23.7" x2="9.7" y2="22.55" width="0.1524" layer="16"/>
<wire x1="9.7" y1="22.55" x2="9.7

gha_license_id: NOASSERTION


text:
" y2="15.45" width="0.1524" layer="16"/>
</signal>
<signal name="S$36">
<wire x1="12.15" y1="21.45" x2="10.7" y2="20" width="0.1524" layer="16"/>
<wire x1="10.7" y1="20" x2="10.7" y2="15.5" width="0.1524" layer="16"/>
</signal>
<signal name="S$38">
<wire x1="13.4" y1="23.7" x2="13.4" y2="21.3" width="0.1524" layer="16"/>
<wire x1="13.4" y1="21.3" x2="11.7" y2="19.6" width="0.1524" layer="16"/>
<wire x1="11.7" y1="19.6" x2="11.7" y2="15.5" width="0.1524" layer="16"/>
<wire x1="11.7" y1="15.5" x2="11.75" y2="15.45" width="0.1524" layer="16"/>
</signal>
<signal name="S$40">
<wire x1="14.65" y1="21.4" x2="14.65" y2="21.3" width="0.1524" layer="16"/>
<wire x1="14.65" y1="21.3" x2="12.7" y2="19.35" width="0.1524" layer="16"/>
<wire x1="12.7" y1="19.35" x2="12.7" y2="15.45" width="0.1524" layer="16"/>
</signal>
<signal name="S$42">
<wire x1="15.95" y1="23.7" x2="15.95" y2="21.4" width="0.1524" layer="16"/>
<wire x1="15.95" y1="21.4" x2="13.65" y2="19.1" width="0.1524" layer="16"/>
<wire x1="13.65" y1="19.1" x2="13.65" y2="15.45" width="0.1524" layer="16"/>
</signal>
<signal name="S$44">
<wire x1="17.2" y1="21.5" x2="14.65" y2="18.95" width="0.1524" layer="16"/>
<wire x1="14.65" y1="18.95" x2="14.65" y2="15.5" width="0.1524" layer="16"/>
</signal>
<signal name="S$46">
<wire x1="18.5" y1="23.75" x2="18.5" y2="21.2" width="0.1524" layer="16"/>
<wire x1="18.5" y1="21.2" x2="15.7" y2="18.4" width="0.1524" layer="16"/>
<wire x1="15.7" y1="18.4" x2="15.7" y2="15.5" width="0.1524" layer="16"/>
</signal>
<signal name="S$48">
<wire x1="19.75" y1="21.65" x2="19.75" y2="21.2" width="0.1524" layer="16"/>
<wire x1="19.75" y1="21.2" x2="16.7" y2="18.15" width="0.1524" layer="16"/>
<wire x1="16.7" y1="18.15" x2="16.7" y2="15.5" width="0.1524" layer="16"/>
</signal>
<signal name="S$50">
<wire x1="21.05" y1="23.75" x2="21.05" y2="21.25" width="0.1524" layer="16"/>
<wire x1="21.05" y1="21.25" x2="17.65" y2="17.85" width="0.1524" layer="16"/>
<wire x1="17.65" y1="17.85" x2="17.65" y2="15.5" width="0.1524" layer="16"/>
</signal>
<signal name="S$52">
<wire x1="22.25" y1="21.7" x2="22.25" y2="21.1" width="0.1524" layer="16"/>
<wire x1="22.25" y1="21.1" x2="18.7" y2="17.55" width="0.1524" layer="16"/>
<wire x1="18.7" y1="17.55" x2="18.7" y2="15.5" width="0.1524" layer="16"/>
</signal>
<signal name="S$54">
<wire x1="42.65" y1="21.75" x2="44.5" y2="19.9" width="0.1524" layer="16"/>
<wire x1="44.5" y1="19.9" x2="44.5" y2="15.4" width="0.1524" layer="16"/>
<wire x1="44.5" y1="15.35" x2="44.5" y2="15.4" width="0.1524" layer="16"/>
</signal>
<signal name="S$56">
<wire x1="41.35" y1="23.75" x2="41.35" y2="21.7" width="0.1524" layer="16"/>
<wire x1="41.35" y1="21.7" x2="43.5" y2="19.55" width="0.1524" layer="16"/>
<wire x1="43.5" y1="19.55" x2="43.5" y2="15.45" width="0.1524" layer="16"/>
</signal>
<signal name="S$57">
<wire x1="40.05" y1="21.4" x2="42.5" y2="18.95" width="0.1524" layer="16"/>
<wire x1="42.5" y1="18.95" x2="42.5" y2="15.4" width="0.1524" layer="16"/>
</signal>
<signal name="S$58">
<wire x1="38.8" y1="23.75" x2="38.8" y2="21.9" width="0.1524" layer="16"/>
<wire x1="38.8" y1="21.9" x2="41.55" y2="19.15" width="0.1524" layer="16"/>
<wire x1="41.55" y1="19.15" x2="41.55" y2="15.55" width="0.1524" layer="16"/>
<wire x1="41.55" y1="15.45" x2="41.55" y2="15.55" width="0.1524" layer="16"/>
</signal>
<signal name="S$59">
<wire x1="37.55" y1="22" x2="40.5" y2="19.05" width="0.1524" layer="16"/>
<wire x1="40.5" y1="19.05" x2="40.5" y2="15.5" width="0.1524" layer="16"/>
</signal>
<signal name="S$60">
<wire x1="36.3" y1="23.75" x2="36.3" y2="22.5" width="0.1524" layer="16"/>
<wire x1="36.3" y1="22.5" x2="39.5" y2="19.3" width="0.1524" layer="16"/>
<wire x1="39.5" y1="19.3" x2="39.5" y2="15.55" width="0.1524" layer="16"/>
<wire x1="39.5" y1="15.55" x2="39.55" y2="15.5" width="0.1524" layer="16"/>
</signal>
<signal name="S$61">
<wire x1="35" y1="22.65" x2="38.5" y2="19.15" width="0.1524" layer="16"/>
<wire x1="38.5" y1="19.15" x2="38.5" y2="15.45" width="0.1524" layer="16"/>
</signal>
<signal name="S$62">
<wire x1="33.75" y1="23.75" x2="33.75" y2="23.2" width="0.1524" layer="16"/>
<wire x1="33.75" y1="23.2" x2="37.55" y2="19.4" width="0.1524" layer="16"/>
<wire x1="37.55" y1="19.4" x2="37.55" y2="15.5" width="0.1524" layer="16"/>
</signal>
<signal name="S$63">
<wire x1="32.5" y1="22.75" x2="36.5" y2="18.75" width="0.1524" layer="16"/>
<wire x1="36.5" y1="18.75" x2="36.5" y2="15.55" width="0.1524" layer="16"/>
<wire x1="36.5" y1="15.5" x2="36.5" y2="15.55" width="0.1524" layer="16"/>
</signal>
<signal name="S$64">
<wire x1="31.25" y1="23.75" x2="31.25" y2="23.3" width="0.1524" layer="16"/>
<wire x1="31.25" y1="23.3" x2="35.5" y2="19.05" width="0.1524" layer="16"/>
<wire x1="35.5" y1="19.05" x2="35.5" y2="15.45" width="0.1524" layer="16"/>
</signal>
<signal name="S$65">
<wire x1="28.6" y1="23.75" x2="28.6" y2="23.35" width="0.1524" layer="16"/>
<wire x1="28.6" y1="23.35" x2="33.5" y2="18.45" width="0.1524" layer="16"/>
<wire x1="33.5" y1="18.45" x2="33.5" y2="15.35" width="0.1524" layer="16"/>
</signal>
<signal name="S$66">
<wire x1="27.4" y1="22.95" x2="32.5" y2="17.85" width="0.1524" layer="16"/>
<wire x1="32.5" y1="17.85" x2="32.5" y2="15.45" width="0.1524" layer="16"/>
</signal>
<signal name="S$67">
<wire x1="26.15" y1="23.7" x2="26.15" y2="23.1" width="0.1524" layer="16"/>
<wire x1="26.15" y1="23.1" x2="31.55" y2="17.7" width="0.1524" layer="16"/>
<wire x1="31.55" y1="17.7" x2="31.55" y2="15.35" width="0.1524" layer="16"/>
<wire x1="31.55" y1="15.35" x2="31.45" y2="15.25" width="0.1524" layer="16"/>
</signal>
<signal name="S$68">
<wire x1="24.85" y1="22.65" x2="30.5" y2="17" width="0.1524" layer="16"/>
<wire x1="30.5" y1="17" x2="30.5" y2="15.4" width="0.1524" layer="16"/>
</signal>
<signal name="S$69">
<wire x1="23.6" y1="23.75" x2="23.6" y2="23.05" width="0.1524" layer="16"/>
<wire x1="23.6" y1="23.05" x2="29.5" y2="17.15" width="0.1524" layer="16"/>
<wire x1="29.5" y1="17.15" x2="29.5" y2="15.3" width="0.1524" layer="16"/>
</signal>
<signal name="S$70">
<wire x1="3.65" y1="13.8" x2="5.3" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$71">
<wire x1="4.7" y1="13.8" x2="6.15" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$72">
<wire x1="5.7" y1="13.8" x2="6.9" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$73">
<wire x1="6.7" y1="13.85" x2="7.7" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$74">
<wire x1="7.7" y1="13.75" x2="8.5" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$75">
<wire x1="8.7" y1="13.75" x2="9.3" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$76">
<wire x1="9.65" y1="13.8" x2="10.1" y2="9.9" width="0.1524" layer="16"/>
<wire x1="10.1" y1="9.9" x2="10.1" y2="9.95" width="0.1524" layer="16"/>
</signal>
<signal name="S$77">
<wire x1="10.7" y1="13.85" x2="10.9" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$78">
<wire x1="11.7" y1="13.8" x2="11.7" y2="10.05" width="0.1524" layer="16"/>
<wire x1="11.7" y1="10" x2="11.7" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$79">
<wire x1="12.7" y1="13.8" x2="12.5" y2="10" width="0.1524" layer="16"/>
</signal>
<signal name="S$80">
<wire x1="13.7" y1="13.8" x2="13.3" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$81">
<wire x1="14.7" y1="13.85" x2="14.1" y2="10.1" width="0.1524" layer="16"/>
</signal>
<signal name="S$82">
<wire x1="15.75" y1="13.85" x2="14.9" y2="10.1" width="0.1524" layer="16"/>
</signal>
<signal name="S$83">
<wire x1="16.7" y1="13.8" x2="15.65" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$84">
<wire x1="17.7" y1="13.8" x2="16.5" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$85">
<wire x1="18.7" y1="13.8" x2="17.25" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$86">
<wire x1="29.45" y1="13.8" x2="31.05" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$87">
<wire x1="30.5" y1="13.8" x2="31.85" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$88">
<wire x1="31.45" y1="13.8" x2="32.65" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$89">
<wire x1="32.45" y1="13.85" x2="33.45" y2="9.95" width="0.1524" layer="16"/>
</signal>
<signal name="S$91">
<wire x1="33.5" y1="13.8" x2="34.25" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$93">
<wire x1="34.45" y1="13.8" x2="35.05" y2="9.95" width="0.1524" layer="16"/>
</signal>
<signal name="S$95">
<wire x1="35.45" y1="13.8" x2="35.85" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$97">
<wire x1="36.45" y1="13.8" x2="36.7" y2="10" width="0.1524" layer="16"/>
</signal>
<signal name="S$99">
<wire x1="37.45" y1="13.8" x2="37.4" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$101">
<wire x1="38.5" y1="13.8" x2="38.2" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$103">
<wire x1="39.45" y1="13.8" x2="39" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$105">
<wire x1="40.5" y1="13.8" x2="39.8" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$107">
<wire x1="41.45" y1="13.8" x2="40.55" y2="10.1" width="0.1524" layer="16"/>
</signal>
<signal name="S$109">
<wire x1="42.45" y1="13.8" x2="41.4" y2="10.05" width="0.1524" layer="16"/>
<wire x1="41.4" y1="10.05" x2="41.45" y2="10.1" width="0.1524" layer="16"/>
</signal>
<signal name="S$111">
<wire x1="43.5" y1="13.75" x2="42.2" y2="10.05" width="0.1524" layer="16"/>
</signal>
<signal name="S$113">
<wire x1="44.5" y1="13.8" x2="43.05" y2="10.1" width="0.1524" layer="16"/>
</signal>
</signals>
<mfgpreviewcolors>
<mfgpreviewcolor name="soldermaskcolor" color="0xC8008000"/>
<mfgpreviewcolor name="silkscreencolor" color="0xFFFEFEFE"/>
<mfgpreviewcolor name="backgroundcolor" color="0xFF282828"/>
<mfgpreviewcolor name="coppercolor" color="0xFFFFBF00"/>
<mfgpreviewcolor name="substratecolor" color="0xFF786E46"/>
</mfgpreviewcolors>
</board>
</drawing>
</eagle>

license_type: permissive

branch_name: refs/heads/master

extension: brd


text:
CAMNAME = "oscam"
DESCRIPTION = "${CAMNAME} ${PV} Open Source Softcam"
RDEPENDS = "oscam"
PACKAGE_ARCH = "all"
PN = "enigma2-plugin-softcams-${CAMNAME}"
PV = "1.0"
PR = "r3"

SRC_URI = "\
        file://config/oscam.* \
	"

S = "${WORKDIR}/${CAMNAME}"

INHIBIT_PACKAGE_STRIP = "1"

CAMSTART = "exec start-stop-daemon -S -x /usr/bin/${CAMNAME} -- -b -c /etc/tuxbox/config"

require softcam.inc

CONFFILES = "/etc/tuxbox/config/oscam.conf /etc/tuxbox/config/oscam.server /etc/tuxbox/config/oscam.srvid /etc/tuxbox/config/oscam.user"

do_install() {
	install -d ${D}/etc/tuxbox/config
	install -m 0644 ${WORKDIR}/config/* ${D}/etc/tuxbox/config/
}

license: MIT

repository: libo/openembedded

repo_name: libo/openembedded

branch_name: HEAD

extension: bb


text:
package main

import (
	"os"
	"os/signal"
	"syscall"

	"github.com/Akagi201/udplb/config"
	"github.com/Akagi201/udplb/log"
	"github.com/Akagi201/udplb/server"
	"github.com/Akagi201/udplb/upstream"
)

func main() {
	var upstreams []*upstream.Upstream
	var servers []*server.Server

	log.Info("Loading configuration file")
	settings, err := config.Load(config.Opts.Conf)
	if err != nil {
		log.Errorf("Can't read configuration file: %s\n", err.Error())
	}

	// Parse upstreams first
	// TODO: Kill AutoUpdate gracefully
	upstreams = make([]*upstream.Upstream, len(settings.Upstreams))
	for i := range settings.Upstreams {
		ups := upstream.MustNewUpstream(&settings.Upstreams[i])

		if ups.IsDynamic {
			go upstream.AutoUpdatePeer(ups, 300)
		}

		upstreams[i] = ups
	}

	// Then parse servers
	servers = make([]*server.Server, len(settings.Servers))
	for i := range settings.Servers {
		server, err := server.NewServer(&settings.Servers[i], upstreams)

		if err != nil {
			log.Error(err)
			return
		}

		log.Infof("Starting server on port: %d\n", server.Config.Port)
		server.MustStart()
		servers[i] = server
	}

	// Wait for a termination signal
	ch := make(chan os.Signal)
	signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)
	<-ch

	// Stop the service gracefully.
	for _, s := range servers {
		s.Stop()
	}
}

extension: go


text:
/******************************************************************************
* The MIT License
* Copyright (c) 2003 Novell Inc.  www.novell.com
*
* Permission is hereby granted, free of charge, to any person obtaining  a copy
* of this software and associated documentation files (the Software), to deal
* in the Software without restriction, including  without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to  permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*******************************************************************************/

using System.Collections.Generic;

namespace Novell.Directory.Ldap.Utilclass
{
    /// <summary>
    ///     This class contains strings that may be associated with Exceptions generated
    ///     by the Ldap API libraries.
    ///     Two entries are made for each message, a String identifier, and the
    ///     actual error string.  Parameters are identified as {0}, {1}, etc.
    /// </summary>
    public static class ExceptionMessages // : System.Resources.ResourceManager
    {
        // static strings to aide lookup and guarantee accuracy:
        // DO NOT include these strings in other Locales
        public const string Tostring = "TOSTRING";

        public const string ServerMsg = "SERVER_MSG";
        public const string MatchedDn = "MATCHED_DN";
        public const string FailedReferral = "FAILED_REFERRAL";
        public const string ReferralItem = "REFERRAL_ITEM";
        public const string ConnectionError = "CONNECTION_ERROR";
        public const string ConnectionImpossible = "CONNECTION_IMPOSSIBLE";
        public const string ConnectionWait = "CONNECTION_WAIT";
        public const string ConnectionFinalized = "CONNECTION_FINALIZED";
        public const string ConnectionClosed = "CONNECTION_CLOSED";
        public const string ConnectionReader = "CONNECTION_READER";
        public const string DupError = "DUP_ERROR";
        public const string ReferralError = "REFERRAL_ERROR";
        public const string ReferralLocal = "REFERRAL_LOCAL";
        public const string ReferenceError = "REFERENCE_ERROR";
        public const string ReferralSend = "REFERRAL_SEND";
        public const string ReferenceNofollow = "REFERENCE_NOFOLLOW";
        public const string ReferralBind = "REFERRAL_BIND";
        public const string ReferralBindMatch = "REFERRAL_BIND_MATCH";
        public const string NoDupRequest = "NO_DUP_REQUEST";
        public const string ServerConnectError = "SERVER_CONNECT_ERROR";
        public const string NoSupProperty = "NO_SUP_PROPERTY";
        public const string EntryParamError = "ENTRY_PARAM_ERROR";
        public const string DnParamError = "DN_PARAM_ERROR";
        public const string RdnParamError = "RDN_PARAM_ERROR";
        public const string OpParamError = "OP_PARAM_ERROR";
        public const string ParamError = "PARAM_ERROR";
        public const string DecodingError = "DECODING_ERROR";
        public const string EncodingError = "ENCODING_ERROR";
        public const string IoException = "IO_EXCEPTION";
        public const string InvalidEscape = "INVALID_ESCAPE";
        public const string ShortEscape = "SHORT_ESCAPE";
        public const string InvalidCharInFilter = "INVALID_CHAR_IN_FILTER";
        public const string InvalidCharInDescr = "INVALID_CHAR_IN_DESCR";
        public const string InvalidEscInDescr = "INVALID_ESC_IN_DESCR";
        public const string UnexpectedEnd = "UNEXPECTED_END";
        public const string MissingLeftParen = "MISSING_LEFT_PAREN";
        public const string MissingRightParen = "MISSING_RIGHT_PAREN";
        public const string ExpectingRightParen = "EXPECTING_RIGHT_PAREN";
        public const string ExpectingLeftParen = "EXPECTING_LEFT_PAREN";
        public const string NoOption = "NO_OPTION";
        public const string InvalidFilterComparison = "INVALID_FILTER_COMPARISON";
        public const string NoMatchingRule = "NO_MATCHING_RULE";
        public const string NoAttributeName = "NO_ATTRIBUTE_NAME";
        public const string NoDnNorMatchingRule = "NO_DN_NOR_MATCHING_RULE";
        public const string NotAnAttribute = "NOT_AN_ATTRIBUTE";
        public const string UnequalLengths = "UNEQUAL_LENGTHS";
        public const string ImproperReferral = "IMPROPER_REFERRAL";
        public const string NotImplemented = "NOT_IMPLEMENTED";
        public const string NoMemory = "NO_MEMORY";
        public const string ServerShutdownReq = "SERVER_SHUTDOWN_REQ";
        public const string InvalidAddress = "INVALID_ADDRESS";
        public const string UnknownResult = "UNKNOWN_RESULT";
        public const string OutstandingOperations = "OUTSTANDING_OPERATIONS";
        public const string WrongFactory = "WRONG_FACTORY";
        public const string NoTlsFactory = "NO_TLS_FACTORY";
        public const string NoStarttls = "NO_STARTTLS";
        public const string StoptlsError = "STOPTLS_ERROR";
        public const string MultipleSchema = "MULTIPLE_SCHEMA";
        public const string NoSchema = "NO_SCHEMA";
        public const string ReadMultiple = "READ_MULTIPLE";
        public const string CannotBind = "CANNOT_BIND";
        public const string SslProviderMissing = "SSL_PROVIDER_MISSING";

        internal static readonly Dictionary<string, string> MessageMap = new Dictionary<string, string>
        {
            { Tostring, "{0}: {1} ({2}) {3}" },
            { ServerMsg, "{0}: Server Message: {1}" },
            { MatchedDn, "{0}: Matched DN: {1}" },
            { FailedReferral, "{0}: Failed Referral: {1}" },
            { ReferralItem, "{0}: Referral: {1}" },
            { ConnectionError, "Unable to connect to server {0}:{1}" },
            { ConnectionImpossible, "Unable to reconnect to server, application has never called connect()" },
            { ConnectionWait, "Connection lost waiting for results from {0}:{1}" },
            { ConnectionFinalized, "Connection closed by the application finalizing the object" },
            { ConnectionClosed, "Connection closed by the application disconnecting" },
            { ConnectionReader, "Reader thread terminated" },
            { DupError, "RfcLdapMessage: Cannot duplicate message built from the input stream" },
            { ReferenceError, "Error attempting to follow a search continuation reference" },
            { ReferralError, "Error attempting to follow a referral" },
            { ReferralLocal, "LdapSearchResults.{0}(): No entry found & request is not complete" },
            { ReferralSend, "Error sending request to referred server" },
            { ReferenceNofollow, "Search result reference received, and referral following is off" },
            { ReferralBind, "LdapBind.bind() function returned null" },
            { ReferralBindMatch, "Could not match LdapBind.bind() connection with Server Referral URL list" },
            { NoDupRequest, "Cannot duplicate message to follow referral for {0} request, not allowed" },
            { ServerConnectError, "Error connecting to server {0} while attempting to follow a referral" },
            { NoSupProperty, "Requested property is not supported." },
            { EntryParamError, "Invalid Entry parameter" },
            { DnParamError, "Invalid DN parameter" },
            { RdnParamError, "Invalid DN or RDN parameter" },
            { OpParamError, "Invalid extended operation parameter, no OID specified" },
            { ParamError, "Invalid parameter" },
            { DecodingError, "Error Decoding responseValue" },
            { EncodingError, "Encoding Error" },
            { IoException, "I/O Exception on host {0}, port {1}" },
            { InvalidEscape, "Invalid value in escape sequence \"{0}\"" },
            { ShortEscape, "Incomplete escape sequence" },
            { UnexpectedEnd, "Unexpected end of filter" },
            { MissingLeftParen, "Unmatched parentheses, left parenthesis missing" },
            { NoOption, "Semicolon present, but no option specified" },
            { MissingRightParen, "Unmatched parentheses, right parenthesis missing" },
            { ExpectingRightParen, "Expecting right parenthesis, found \"{0}\"" },
            { ExpectingLeftParen, "Expecting left parenthesis, found \"{0}\"" },
            { NoAttributeName, "Missing attribute description" },
            { NoDnNorMatchingRule, "DN and matching rule not specified" },
            { NoMatchingRule, "Missing matching rule" },
            { InvalidFilterComparison, "Invalid comparison operator" },
            { InvalidCharInFilter, "The invalid character \"{0}\" needs to be escaped as \"{1}\"" },
            { InvalidEscInDescr, "Escape sequence not allowed in attribute description" },
            { InvalidCharInDescr, "Invalid character \"{0}\" in attribute description" },
            { NotAnAttribute, "Schema element is not an LdapAttributeSchema object" },
            { UnequalLengths, "Length of attribute Name array does not equal length of Flags array" },
            { ImproperReferral, "Referral not supported for command {0}" },
            { NotImplemented, "Method LdapConnection.startTLS not implemented" },
            { NoMemory, "All results could not be stored in memory, sort failed" },
            { ServerShutdownReq, "Received unsolicited notification from server {0}:{1} to shutdown" },
            { InvalidAddress, "Invalid syntax for address with port; {0}" },
            { UnknownResult, "Unknown Ldap result code {0}" },
            {
                OutstandingOperations,
                "Cannot start or stop TLS because outstanding Ldap operations exist on this connection"
            },
            {
                WrongFactory,
                "StartTLS cannot use the set socket factory because it does not implement LdapTLSSocketFactory"
            },
            { NoTlsFactory, "StartTLS failed because no LdapTLSSocketFactory has been set for this Connection" },
            { NoStarttls, "An attempt to stopTLS on a connection where startTLS had not been called" },
            { StoptlsError, "Error stopping TLS: Error getting input & output streams from the original socket" },
            { MultipleSchema, "Multiple schema found when reading the subschemaSubentry for {0}" },
            { NoSchema, "No schema found when reading the subschemaSubentry for {0}" },
            { ReadMultiple, "Read response is ambiguous, multiple entries returned" },
            { CannotBind, "Cannot bind. Use PoolManager.getBoundConnection()" },
            { SslProviderMissing, "Please ensure that SSL Provider is properly installed." },
        };

        public static string GetErrorMessage(string code)
        {
            if (MessageMap.ContainsKey(code))
            {
                return MessageMap[code];
            }

            return code;
        }
    } // End ExceptionMessages
}

gha_license_id: MIT

gha_language: C#

extension: cs


text:
package cp_go

const (
	ReferToCardIssuer = 5001 // Отказ эмитента проводить онлайн операцию

	// DoNotHonor Отказ эмитента без объяснения причин
	// Данный код возвращается по следующим причинам:
	// — неверно указан код CVV на картах MasterCard;
	// — внутренние ограничения банка, выпустившего карту;
	// — карта заблокирована или еще не активирована;
	// — на карте не включены интернет-платежи или не подключен 3DS.
	DoNotHonor = 5005

	Error                    = 5006 // Отказ сети проводить операцию или неправильный CVV код
	InvalidTransaction       = 5012 // Карта не предназначена для онлайн платежей
	AmountError              = 5013 // Слишком маленькая или слишком большая сумма операции
	FormatError              = 5030 // Ошибка на стороне эквайера — неверно сформирована транзакция
	BankNotSupportedBySwitch = 5031 // Неизвестный эмитент карты
	SuspectedFraud           = 5034 // Отказ эмитента — подозрение на мошенничество
	LostCard                 = 5041 // Карта потеряна
	StolenCard               = 5043 // Карта украдена
	InsufficientFunds        = 5051 // Недостаточно средств
	ExpiredCard              = 5054 // Карта просрочена или неверно указан срок действия

	// TransactionNotPermitted Ограничение на карте
	// Данный код возвращается по следующим причинам:
	//  — внутренние ограничения банка, выпустившего карту;
	//  — карта заблокирована или еще не активирована;
	//  — на карте не включены интернет-платежи или не подключен 3DS.
	TransactionNotPermitted = 5057

	ExceedWithdrawalFrequency = 5065 // Превышен лимит операций по карте
	IncorrectCVV              = 5082 // Неверный CVV код
	Timeout                   = 5091 // Эмитент недоступен
	CannotReachNetwork        = 5092 // Эмитент недоступен
	SystemError               = 5096 // Ошибка банка-эквайера или сети
	UnableToProcess           = 5204 // Операция не может быть обработана по прочим причинам
	AuthenticationFailed      = 5206 // 3-D Secure авторизация не пройдена
	AuthenticationUnavailable = 5207 // 3-D Secure авторизация недоступна
	AntiFraud                 = 5300 // Лимиты эквайера на проведение операций
)

var statusText = map[int]string{
	ReferToCardIssuer:         "Свяжитесь с вашим банком или воспользуйтесь другой картой",
	DoNotHonor:                "Свяжитесь с вашим банком или воспользуйтесь другой картой",
	Error:                     "Проверьте правильность введенных данных карты или воспользуйтесь другой картой",
	InvalidTransaction:        "Воспользуйтесь другой картой или свяжитесь с банком, выпустившим карту",
	AmountError:               "Проверьте корректность суммы",
	FormatError:               "Повторите попытку позже",
	BankNotSupportedBySwitch:  "Воспользуйтесь другой картой",
	SuspectedFraud:            "Свяжитесь с вашим банком или воспользуйтесь другой картой",
	LostCard:                  "Свяжитесь с вашим банком или воспользуйтесь другой картой",
	StolenCard:                "Свяжитесь с вашим банком или воспользуйтесь другой картой",
	InsufficientFunds:         "Недостаточно средств на карте",
	ExpiredCard:               "Проверьте правильность введенных данных карты или воспользуйтесь другой картой",
	TransactionNotPermitted:   "Свяжитесь с вашим банком или воспользуйтесь другой картой",
	ExceedWithdrawalFrequency: "Свяжитесь с вашим банком или воспользуйтесь другой картой",
	IncorrectCVV:              "Неверно указан код CVV",
	Timeout:                   "Повторите попытку позже или воспользуйтесь другой картой",
	CannotReachNetwork:        "Повторите попытку позже или воспользуйтесь другой картой",
	SystemError:               "Повторите попытку позже",
	UnableToProcess:           "Свяжитесь с вашим банком или воспользуйтесь другой картой",
	AuthenticationFailed:      "Свяжитесь с вашим банком или воспользуйтесь другой картой",
	AuthenticationUnavailable: "Свяжитесь с вашим банком или воспользуйтесь другой картой",
	AntiFraud:                 "Воспользуйтесь другой картой",
}

// ErrorStatusText returns a text of error codes that determine the reason for the refusal to make a payment
// string if the code is unknown.
func ErrorStatusText(code int) string {
	return statusText[code]
}

const (
	SUCCESS            = 0
	UNKNOWN_INVOICE_ID = 10
	INVALID_ACCOUNT_ID = 11
	INVALID_AMOUNT     = 12
	REJECTED           = 13
	EXPIRED            = 20
)

const (
	KZT = "KZT"
	RUB = "RUB"
	EUR = "EUR"
	USD = "USD"
	GBP = "GBP"
	UAH = "UAH"
	BYR = "BYR"
	BYN = "BYN"
	AZN = "AZN"
	CHF = "CHF"
	CZK = "CZK"
	CAD = "CAD"
	PLN = "PLN"
	SEK = "SEK"
	TRY = "TRY"
	CNY = "CNY"
	INR = "INR"
)

repository: raymayemir/cp-go

repo_name: raymayemir/cp-go


text:
package cluster

import (
	"context"
	"fmt"
	"hash/fnv"
	"net/http"
	"sync"
	"time"

	"github.com/go-kit/log"
	"github.com/go-kit/log/level"
	"github.com/gorilla/mux"
	pb "github.com/grafana/agent/pkg/agentproto"
	"github.com/grafana/agent/pkg/metrics/cluster/client"
	"github.com/grafana/agent/pkg/util"
	"github.com/grafana/dskit/backoff"
	"github.com/grafana/dskit/kv"
	"github.com/grafana/dskit/ring"
	"github.com/grafana/dskit/services"
	"github.com/prometheus/client_golang/prometheus"
	"github.com/weaveworks/common/user"
)

const (
	// agentKey is the key used for storing the hash ring.
	agentKey = "agent"
)

var backoffConfig = backoff.Config{
	MinBackoff: time.Second,
	MaxBackoff: 2 * time.Minute,
	MaxRetries: 10,
}

// node manages membership within a ring. when a node joins or leaves the ring,
// it will inform other nodes to reshard their workloads. After a node joins
// the ring, it will inform the local service to reshard.
type node struct {
	log log.Logger
	reg *util.Unregisterer
	srv pb.ScrapingServiceServer

	mut  sync.RWMutex
	cfg  Config
	ring *ring.Ring
	lc   *ring.Lifecycler

	exited bool
	reload chan struct{}
}

// newNode creates a new node and registers it to the ring.
func newNode(reg prometheus.Registerer, log log.Logger, cfg Config, s pb.ScrapingServiceServer) (*node, error) {
	n := &node{
		reg: util.WrapWithUnregisterer(reg),
		srv: s,
		log: log,

		reload: make(chan struct{}, 1),
	}
	if err := n.ApplyConfig(cfg); err != nil {
		return nil, err
	}
	go n.run()
	return n, nil
}

func (n *node) ApplyConfig(cfg Config) error {
	n.mut.Lock()
	defer n.mut.Unlock()

	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
	defer cancel()

	// Detect if the config changed.
	if util.CompareYAML(n.cfg, cfg) {
		return nil
	}

	if n.exited {
		return fmt.Errorf("node already exited")
	}

	level.Info(n.log).Log("msg", "applying config")

	// Shut down old components before re-creating the updated ones.
	n.reg.UnregisterAll()

	if n.lc != nil {
		// Note that this will call performClusterReshard and will block until it
		// completes.
		err := services.StopAndAwaitTerminated(ctx, n.lc)
		if err != nil {
			return fmt.Errorf("failed to stop lifecycler: %w", err)
		}
		n.lc = nil
	}

	if n.ring != nil {
		err := services.StopAndAwaitTerminated(ctx, n.ring)
		if err != nil {
			return fmt.Errorf("failed to stop ring: %w", err)
		}
		n.ring = nil
	}

	if !cfg.Enabled {
		n.cfg = cfg
		return nil
	}

	r, err := newRing(cfg.Lifecycler.RingConfig, "agent_viewer", agentKey, n.reg, n.log)
	if err != nil {
		return fmt.Errorf("failed to create ring: %w", err)
	}

	if err := services.StartAndAwaitRunning(context.Background(), r); err != nil {
		return fmt.Errorf("failed to start ring: %w", err)
	}
	n.ring = r

	lc, err := ring.NewLifecycler(cfg.Lifecycler.LifecyclerConfig, n, "agent", agentKey, false, n.log, prometheus.WrapRegistererWithPrefix("agent_dskit_", n.reg))
	if err != nil {
		return fmt.Errorf("failed to create lifecycler: %w", err)
	}
	if err := services.StartAndAwaitRunning(context.Background(), lc); err != nil {
		if err := services.StopAndAwaitTerminated(ctx, r); err != nil {
			level.Error(n.log).Log("msg", "failed to stop ring when returning error. next config reload will fail", "err", err)
		}
		return fmt.Errorf("failed to start lifecycler: %w", err)
	}
	n.lc = lc

	n.cfg = cfg

	// Reload and reshard the cluster.
	n.reload <- struct{}{}
	return nil
}

// newRing creates a new Cortex Ring that ignores unhealthy nodes.
func newRing(cfg ring.Config, name, key string, reg prometheus.Registerer, log log.Logger) (*ring.Ring, error) {
	codec := ring.GetCodec()
	store, err := kv.NewClient(
		cfg.KVStore,
		codec,
		kv.RegistererWithKVName(reg, name+"-ring"),
		log,
	)
	if err != nil {
		return nil, err
	}
	return ring.NewWithStoreClientAndStrategy(cfg, name, key, store, ring.NewIgnoreUnhealthyInstancesReplicationStrategy(), prometheus.WrapRegistererWithPrefix("agent_dskit_", reg), log)
}

// run waits for connection to the ring and kickstarts the join process.
func (n *node) run() {
	for range n.reload {
		n.mut.RLock()

		if err := n.performClusterReshard(context.Background(), true); err != nil {
			level.Warn(n.log).Log("msg", "dynamic cluster reshard did not succeed", "err", err)
		}

		n.mut.RUnlock()
	}

	level.Info(n.log).Log("msg", "node run loop exiting")
}

// performClusterReshard informs the cluster to immediately trigger a reshard
// of their workloads. if joining is true, the server provided to newNode will
// also be informed.
func (n *node) performClusterReshard(ctx context.Context, joining bool) error {
	if n.ring == nil || n.lc == nil {
		level.Info(n.log).Log("msg", "node disabled, not resharding")
		return nil
	}

	if n.cfg.ClusterReshardEventTimeout > 0 {
		var cancel context.CancelFunc
		ctx, cancel = context.WithTimeout(ctx, n.cfg.ClusterReshardEventTimeout)
		defer cancel()
	}

	var (
		rs  ring.ReplicationSet
		err error
	)

	backoff := backoff.New(ctx, backoffConfig)
	for backoff.Ongoing() {
		if ctx.Err() != nil {
			return ctx.Err()
		}
		rs, err = n.ring.GetAllHealthy(ring.Read)
		if err == nil {
			break
		}
		backoff.Wait()
	}

	if len(rs.Instances) > 0 {
		level.Info(n.log).Log("msg", "informing remote nodes to reshard")
	}

	// These are not in the go routine below due to potential race condition with n.lc.addr
	_, err = rs.Do(ctx, 500*time.Millisecond, func(c context.Context, id *ring.InstanceDesc) (interface{}, error) {
		// Skip over ourselves.
		if id.Addr == n.lc.Addr {
			return nil, nil
		}

		notifyCtx := user.InjectOrgID(c, "fake")
		return nil, n.notifyReshard(notifyCtx, id)
	})

	if err != nil {
		level.Error(n.log).Log("msg", "notifying other nodes failed", "err", err)
	}

	if joining {
		level.Info(n.log).Log("msg", "running local reshard")
		if _, err := n.srv.Reshard(ctx, &pb.ReshardRequest{}); err != nil {
			level.Warn(n.log).Log("msg", "dynamic local reshard did not succeed", "err", err)
		}
	}
	return err
}

// notifyReshard informs an individual node to reshard.
func (n *node) notifyReshard(ctx context.Context, id *ring.InstanceDesc) error {
	cli, err := client.New(n.cfg.Client, id.Addr)
	if err != nil {
		return err
	}
	defer cli.Close()

	level.Info(n.log).Log("msg", "attempting to notify remote agent to reshard", "addr", id.Addr)

	backoff := backoff.New(ctx, backoffConfig)
	for backoff.Ongoing() {
		if ctx.Err() != nil {
			return ctx.Err()
		}
		_, err := cli.Reshard(ctx, &pb.ReshardRequest{})
		if err == nil {
			break
		}

		level.Warn(n.log).Log("msg", "reshard notification attempt failed", "addr", id.Addr, "err", err, "attempt", backoff.NumRetries())
		backoff.Wait()
	}

	return backoff.Err()
}

// WaitJoined waits for the node the join the cluster and enter the
// ACTIVE state.
func (n *node) WaitJoined(ctx context.Context) error {
	n.mut.RLock()
	defer n.mut.RUnlock()

	level.Info(n.log).Log("msg", "waiting for the node to join the cluster")
	defer level.Info(n.log).Log("msg", "node has joined the cluster")

	if n.ring == nil || n.lc == nil {
		return fmt.Errorf("node disabled")
	}

	return waitJoined(ctx, agentKey, n.ring.KVClient, n.lc.ID)
}

func waitJoined(ctx context.Context, key string, kvClient kv.Client, id string) error {
	kvClient.WatchKey(ctx, key, func(value interface{}) bool {
		if value == nil {
			return true
		}

		desc := value.(*ring.Desc)
		for ingID, ing := range desc.Ingesters {
			if ingID == id && ing.State == ring.ACTIVE {
				return false
			}
		}

		return true
	})

	return ctx.Err()
}

func (n *node) WireAPI(r *mux.Router) {
	r.HandleFunc("/debug/ring", func(rw http.ResponseWriter, r *http.Request) {
		n.mut.RLock()
		defer n.mut.RUnlock()

		if n.ring == nil {
			http.NotFoundHandler().ServeHTTP(rw, r)
			return
		}

		n.ring.ServeHTTP(rw, r)
	})
}

// Stop stops the node and cancels it from running. The node cannot be used
// again once Stop is called.
func (n *node) Stop() error {
	n.mut.Lock()
	defer n.mut.Unlock()

	if n.exited {
		return fmt.Errorf("node already exited")
	}
	n.exited = true

	level.Info(n.log).Log("msg", "shutting down node")

	// Shut down dependencies. The lifecycler *MUST* be shut down first since n.ring is
	// used during the shutdown process to inform other nodes to reshard.
	//
	// Note that stopping the lifecycler will call performClusterReshard and will block
	// until it completes.
	var (
		firstError error
		deps       []services.Service
	)

	if n.lc != nil {
		deps = append(deps, n.lc)
	}
	if n.ring != nil {
		deps = append(deps, n.ring)
	}
	for _, dep := range deps {
		err := services.StopAndAwaitTerminated(context.Background(), dep)
		if err != nil && firstError == nil {
			firstError = err
		}
	}

	close(n.reload)
	level.Info(n.log).Log("msg", "node shut down")
	return firstError
}

// Flush implements ring.FlushTransferer. It's a no-op.
func (n *node) Flush() {}

// TransferOut implements ring.FlushTransferer. It connects to all other healthy agents and
// tells them to reshard. TransferOut should NOT be called manually unless the mutex is
// held.
func (n *node) TransferOut(ctx context.Context) error {
	return n.performClusterReshard(ctx, false)
}

// Owns checks to see if a key is owned by this node. owns will return
// an error if the ring is empty or if there aren't enough healthy nodes.
func (n *node) Owns(key string) (bool, error) {
	n.mut.RLock()
	defer n.mut.RUnlock()

	rs, err := n.ring.Get(keyHash(key), ring.Write, nil, nil, nil)
	if err != nil {
		return false, err
	}
	for _, r := range rs.Instances {
		if r.Addr == n.lc.Addr {
			return true, nil
		}
	}
	return false, nil
}

func keyHash(key string) uint32 {
	h := fnv.New32()
	_, _ = h.Write([]byte(key))
	return h.Sum32()
}

repository: grafana/agent

repo_name: grafana/agent

branch_name: refs/heads/main

gha_language: Go


text:
@InProceedings{10.1007/978-3-030-43680-3_9,
author="Pruvost, Geoffrey
and Derbel, Bilel
and Liefooghe, Arnaud
and Li, Ke
and Zhang, Qingfu",
editor="Paquete, Lu{\'i}s
and Zarges, Christine",
title="On the Combined Impact of Population Size and Sub-problem Selection in MOEA/D",
booktitle="Evolutionary Computation in Combinatorial Optimization",
year="2020",
publisher="Springer International Publishing",
address="Cham",
pages="131--147",
abstract="This paper intends to understand and to improve the working principle of decomposition-based multi-objective evolutionary algorithms. We review the design of the well-established Moea/d framework to support the smooth integration of different strategies for sub-problem selection, while emphasizing the role of the population size and of the number of offspring created at each generation. By conducting a comprehensive empirical analysis on a wide range of multi- and many-objective combinatorial NK landscapes, we provide new insights into the combined effect of those parameters on the anytime performance of the underlying search process. In particular, we show that even a simple random strategy selecting sub-problems at random outperforms existing sophisticated strategies. We also study the sensitivity of such strategies with respect to the ruggedness and the objective space dimension of the target problem.",
isbn="978-3-030-43680-3"
}

gha_language: JavaScript

extension: bib