code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" x="0px" y="0px" viewBox="0 0 1000 1000" style="enable-background:new 0 0 1000 1000;" xml:space="preserve" id="svg4356" sodipodi:docname="vector source.svg" inkscape:version="0.91 r13725">
  <metadata id="metadata4362">
	<rdf:RDF>
	  <cc:Work rdf:about="">
		<dc:format>image/svg+xml</dc:format>
		<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
		<dc:title/>
	  </cc:Work>
	</rdf:RDF>
  </metadata>
  <defs id="defs4360"/>
  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1280" inkscape:window-height="952" id="namedview4358" showgrid="false" inkscape:zoom="1.2020815" inkscape:cx="434.47578" inkscape:cy="639.70571" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="svg4356" inkscape:object-nodes="true" inkscape:object-paths="false" inkscape:snap-smooth-nodes="true"/>
  <style type="text/css" id="style3680">
	.st0{fill:#FFFFFF;}
	.st1{fill:#76C043;}
	.st2{fill:#2680BC;}
	.st3{fill:#F6E0E8;}
	.st4{fill:#515351;}
	.st5{fill:#F4F1A3;}
	.st6{fill:#8E4F21;}
	.st7{fill:#BC2027;}
	.st8{fill:#60BB46;}
	.st9{fill:#4686C6;}
	.st10{fill:#D28DBD;}
	.st11{fill:#3F403F;}
	.st12{fill:#010101;}
	.st13{fill:#8F8F8E;}
	.st14{fill:#515251;}
	.st15{fill:#4F6AB2;}
	.st16{fill:#3E65B0;}
	.st17{fill:#15406D;}
	.st18{fill:#65AD45;}
	.st19{fill:#787878;}
	.st20{fill:#D76B93;}
	.st21{fill:#4DB748;}
	.st22{opacity:0.24;fill:#BF2126;enable-background:new	;}
	.st23{fill:#070505;}
	.st24{fill:#BF2126;}
</style>
  <svg:g inkscape:groupmode="layer" id="Boob_2_straps" inkscape:label="Boob_2_straps" style="display:inline">
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 510.2,215.4 c -17.19712,24.81244 -69.92394,37.12918 -72.63365,69.14594" id="path7375" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 515.7378,286.27032 C 519.6138,259.22032 510.165,241.202 510.2,215.4" id="path7377" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 514.05917,301.66813 c -0.634,6.678 6.32316,14.44794 9.38983,16.10687" id="path7381" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 438.613,295.601 c 0.61,6.791 10.93048,13.5302 23.30084,14.27656" id="path7383" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 507.58865,293.98112 C 500.10265,293.46612 495.491,292.993 490.646,290.207" id="path7385" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 441.52165,290.46212 c 13.09,1.606 35.75835,1.44788 49.12435,-0.25512" id="path7387" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 490.469,293.701 0.177,-3.494 c -0.83858,-24.50293 7.09082,-49.52162 19.554,-74.807" id="path7389" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
	<svg:path style="display:inline;fill:none;stroke:#b3b3b3;stroke-width:1.29999995;stroke-miterlimit:4;stroke-dasharray:none" inkscape:connector-curvature="0" d="m 437.15035,284.73606 c 2.0422,-0.3446 3.74092,2.62993 4.09824,4.66994 0.38247,2.18359 -0.24149,5.81825 -2.42659,6.192 -2.08027,0.35582 -3.79527,-2.70955 -4.13812,-4.792 -0.35479,-2.15496 0.31294,-5.70656 2.46647,-6.06994 z" class="st20" id="path7391" sodipodi:nodetypes="ccccc"/>
	<svg:path style="display:inline;fill:none;stroke:#b3b3b3;stroke-width:1.29999983;stroke-miterlimit:4;stroke-dasharray:none" d="m 515.2283,301.48099 c -3.28587,0.2164 -6.73211,-3.73639 -6.94851,-7.02226 -0.21427,-3.25353 2.6553,-7.58112 5.90883,-7.79539 3.28587,-0.2164 6.73212,3.73638 6.94852,7.02225 0.21427,3.25354 -2.6553,7.58113 -5.90884,7.7954 z" id="path7393" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
	<svg:path id="path9222-3" style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 521.39035,294.70259 C 534.50935,294.60359 551.681,284.278 559.686,278.986 563.61961,255.21307 514.61044,239.86827 510.2,215.4" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
  </svg:g>
</svg>


code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" x="0px" y="0px" viewBox="0 0 1000 1000" style="enable-background:new 0 0 1000 1000;" xml:space="preserve" id="svg4356" sodipodi:docname="vector source.svg" inkscape:version="0.91 r13725">
  <metadata id="metadata4362">
	<rdf:RDF>
	  <cc:Work rdf:about="">
		<dc:format>image/svg+xml</dc:format>
		<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
		<dc:title/>
	  </cc:Work>
	</rdf:RDF>
  </metadata>
  <defs id="defs4360"/>
  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1280" inkscape:window-height="952" id="namedview4358" showgrid="false" inkscape:zoom="1.2020815" inkscape:cx="434.47578" inkscape:cy="639.70571" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="svg4356" inkscape:object-nodes="true" inkscape:object-paths="false" inkscape:snap-smooth-nodes="true"/>
  <style type="text/css" id="style3680">
	.st0{fill:#FFFFFF;}
	.st1{fill:#76C043;}
	.st2{fill:#2680BC;}
	.st3{fill:#F6E0E8;}
	.st4{fill:#515351;}
	.st5{fill:#F4F1A3;}
	.st6{fill:#8E4F21;}
	.st7{fill:#BC2027;}
	.st8{fill:#60BB46;}
	.st9{fill:#4686C6;}
	.st10{fill:#D28DBD;}
	.st11{fill:#3F403F;}
	.st12{fill:#010101;}
	.st13{fill:#8F8F8E;}
	.st14{fill:#515251;}
	.st15{fill:#4F6AB2;}
	.st16{fill:#3E65B0;}
	.st17{fill:#15406D;}
	.st18{fill:#65AD45;}
	.st19{fill:#787878;}
	.st20{fill:#D76B93;}
	.st21{fill:#4DB748;}
	.st22{opacity:0.24;fill:#BF2126;enable-background:new	;}
	.st23{fill:#070505;}
	.st24{fill:#BF2126;}
</style>
  <svg:g inkscape:groupmode="layer" id="Boob_3_straps" inkscape:label="Boob_3_straps" style="display:inline">
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 512.6,212.2 C 491.836,242.159 428.12,256.975 424.848,295.633" id="path7375" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 519.238,297.973 C 523.929,265.237 512.558,243.426 512.6,212.2" id="path7377" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 517.359,315.966 C 516.585,324.111 525.21,333.506 528.951,335.53" id="path7381" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 426.147,308.804 C 426.89,317.081 439.544,325.174 454.623,326.084" id="path7383" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 509.389,306.981 C 500.356,306.36 494.678,306.332 488.832,302.97" id="path7385" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 429.591,302.714 C 445.377,304.651 472.713,305.024 488.832,302.97" id="path7387" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 488.655,306.464 L 488.832,302.97 C 487.814,273.235 497.476,242.885 512.6,212.2" id="path7389" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
	<svg:path style="display:inline;fill:none;stroke:#b3b3b3;stroke-width:1.29999995;stroke-miterlimit:4;stroke-dasharray:none" inkscape:connector-curvature="0" d="M 424.35,295.836 C 426.787,295.425 428.852,298.939 429.278,301.373 C 429.737,303.994 428.978,308.352 426.356,308.801 C 423.882,309.224 421.942,305.494 421.535,303.018 C 421.117,300.481 421.815,296.264 424.35,295.836 Z" class="st20" id="path7391" sodipodi:nodetypes="ccccc"/>
	<svg:path style="display:inline;fill:none;stroke:#b3b3b3;stroke-width:1.29999983;stroke-miterlimit:4;stroke-dasharray:none" d="M 518.729,315.778 C 514.778,316.039 510.353,311.573 510.092,307.622 C 509.833,303.681 513.548,298.625 517.488,298.366 C 521.439,298.106 525.864,302.571 526.125,306.523 C 526.384,310.463 522.669,315.519 518.729,315.778 Z" id="path7393" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
	<svg:path id="path9222-3" style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 526.378,307.866 C 542.125,307.747 562.476,294.729 572.085,288.376 C 576.803,259.86 517.89,241.551 512.6,212.2" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
  </svg:g>
</svg>

repo_name: shiro/fc

license: mit


code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" x="0px" y="0px" viewBox="0 0 1000 1000" style="enable-background:new 0 0 1000 1000;" xml:space="preserve" id="svg4356" sodipodi:docname="vector source.svg" inkscape:version="0.91 r13725">
  <metadata id="metadata4362">
	<rdf:RDF>
	  <cc:Work rdf:about="">
		<dc:format>image/svg+xml</dc:format>
		<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
		<dc:title/>
	  </cc:Work>
	</rdf:RDF>
  </metadata>
  <defs id="defs4360"/>
  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1280" inkscape:window-height="952" id="namedview4358" showgrid="false" inkscape:zoom="1.2020815" inkscape:cx="434.47578" inkscape:cy="639.70571" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="svg4356" inkscape:object-nodes="true" inkscape:object-paths="false" inkscape:snap-smooth-nodes="true"/>
  <style type="text/css" id="style3680">
	.st0{fill:#FFFFFF;}
	.st1{fill:#76C043;}
	.st2{fill:#2680BC;}
	.st3{fill:#F6E0E8;}
	.st4{fill:#515351;}
	.st5{fill:#F4F1A3;}
	.st6{fill:#8E4F21;}
	.st7{fill:#BC2027;}
	.st8{fill:#60BB46;}
	.st9{fill:#4686C6;}
	.st10{fill:#D28DBD;}
	.st11{fill:#3F403F;}
	.st12{fill:#010101;}
	.st13{fill:#8F8F8E;}
	.st14{fill:#515251;}
	.st15{fill:#4F6AB2;}
	.st16{fill:#3E65B0;}
	.st17{fill:#15406D;}
	.st18{fill:#65AD45;}
	.st19{fill:#787878;}
	.st20{fill:#D76B93;}
	.st21{fill:#4DB748;}
	.st22{opacity:0.24;fill:#BF2126;enable-background:new	;}
	.st23{fill:#070505;}
	.st24{fill:#BF2126;}
</style>
  <svg:g inkscape:groupmode="layer" id="Boob_4_straps" inkscape:label="Boob_4_straps" style="display:inline">
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 509.9,214 C 482.757,253.163 399.692,272.768 395.415,323.302" id="path7375" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 518.408,326.677 C 524.569,283.679 509.844,255.015 509.9,214" id="path7377" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 516.189,349.061 C 515.145,360.057 527.335,372.407 532.384,375.139" id="path7381" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 397.102,340.331 C 398.091,351.341 415.301,361.467 435.355,362.677" id="path7383" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 505.689,337.881 C 494.143,337.087 486.655,338.418 479.182,334.121" id="path7385" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 401.669,332.336 C 422.329,334.871 458.087,336.809 479.182,334.121" id="path7387" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 479.005,337.615 L 479.182,334.121 C 477.837,294.83 489.915,254.546 509.9,214" id="path7389" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
	<svg:path style="display:inline;fill:none;stroke:#b3b3b3;stroke-width:1.29999995;stroke-miterlimit:4;stroke-dasharray:none" inkscape:connector-curvature="0" d="M 394.75,323.536 C 397.89,323.006 400.699,327.4 401.248,330.536 C 401.855,334.001 400.779,339.735 397.311,340.328 C 394.122,340.874 391.74,335.969 391.214,332.777 C 390.678,329.523 391.498,324.085 394.75,323.536 Z" class="st20" id="path7391" sodipodi:nodetypes="ccccc"/>
	<svg:path style="display:inline;fill:none;stroke:#b3b3b3;stroke-width:1.29999983;stroke-miterlimit:4;stroke-dasharray:none" d="M 517.898,348.874 C 512.816,349.209 506.748,343.879 506.414,338.797 C 506.077,333.692 511.213,327.406 516.319,327.07 C 521.401,326.736 527.469,332.065 527.803,337.147 C 528.14,342.253 523.004,348.538 517.898,348.874 Z" id="path7393" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
	<svg:path id="path9222-3" style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 528.056,339.041 C 548.774,338.885 575.111,320.755 587.753,312.398 C 593.878,275.378 516.768,252.103 509.9,214" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
  </svg:g>
</svg>


code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" x="0px" y="0px" viewBox="0 0 1000 1000" style="enable-background:new 0 0 1000 1000;" xml:space="preserve" id="svg4356" sodipodi:docname="vector source.svg" inkscape:version="0.91 r13725">
  <metadata id="metadata4362">
	<rdf:RDF>
	  <cc:Work rdf:about="">
		<dc:format>image/svg+xml</dc:format>
		<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
		<dc:title/>
	  </cc:Work>
	</rdf:RDF>
  </metadata>
  <defs id="defs4360"/>
  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1280" inkscape:window-height="952" id="namedview4358" showgrid="false" inkscape:zoom="1.2020815" inkscape:cx="434.47578" inkscape:cy="639.70571" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="svg4356" inkscape:object-nodes="true" inkscape:object-paths="false" inkscape:snap-smooth-nodes="true"/>
  <style type="text/css" id="style3680">
	.st0{fill:#FFFFFF;}
	.st1{fill:#76C043;}
	.st2{fill:#2680BC;}
	.st3{fill:#F6E0E8;}
	.st4{fill:#515351;}
	.st5{fill:#F4F1A3;}
	.st6{fill:#8E4F21;}
	.st7{fill:#BC2027;}
	.st8{fill:#60BB46;}
	.st9{fill:#4686C6;}
	.st10{fill:#D28DBD;}
	.st11{fill:#3F403F;}
	.st12{fill:#010101;}
	.st13{fill:#8F8F8E;}
	.st14{fill:#515251;}
	.st15{fill:#4F6AB2;}
	.st16{fill:#3E65B0;}
	.st17{fill:#15406D;}
	.st18{fill:#65AD45;}
	.st19{fill:#787878;}
	.st20{fill:#D76B93;}
	.st21{fill:#4DB748;}
	.st22{opacity:0.24;fill:#BF2126;enable-background:new	;}
	.st23{fill:#070505;}
	.st24{fill:#BF2126;}
</style>
  <svg:g inkscape:groupmode="layer" id="Boob_5_straps" inkscape:label="Boob_5_straps" style="display:inline">
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 509.1,214.2 C 472.601,266.862 360.884,293.204 355.132,361.156" id="path7375" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 520.665,366.284 C 528.982,308.245 509.025,269.561 509.1,214.2" id="path7377" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 517.932,395.255 C 516.506,410.268 533.234,427.08 540.129,430.809" id="path7381" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 357.656,383.97 C 358.993,398.859 382.403,412.317 409.524,413.954" id="path7383" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 503.589,380.781 C 488.021,379.71 477.762,382.825 467.686,377.031" id="path7385" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 363.649,373.197 C 391.39,376.6 439.361,380.64 467.686,377.031" id="path7387" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 467.509,380.525 L 467.686,377.031 C 465.864,323.787 482.018,269.144 509.1,214.2" id="path7389" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
	<svg:path style="display:inline;fill:none;stroke:#b3b3b3;stroke-width:1.29999995;stroke-miterlimit:4;stroke-dasharray:none" inkscape:connector-curvature="0" d="M 354.25,361.436 C 358.444,360.729 362.352,366.45 363.086,370.638 C 363.909,375.338 362.568,383.163 357.865,383.967 C 353.588,384.699 350.473,378.058 349.768,373.777 C 349.057,369.459 349.935,362.164 354.25,361.436 Z" class="st20" id="path7391" sodipodi:nodetypes="ccccc"/>
	<svg:path style="display:inline;fill:none;stroke:#b3b3b3;stroke-width:1.29999983;stroke-miterlimit:4;stroke-dasharray:none" d="M 520.156,395.068 C 513.357,395.515 504.794,388.91 504.346,382.111 C 503.894,375.243 511.194,367.129 518.061,366.677 C 524.86,366.229 533.423,372.834 533.871,379.633 C 534.323,386.501 527.023,394.615 520.156,395.068 Z" id="path7393" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
	<svg:path id="path9222-3" style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 534.124,382.355 C 559.041,382.167 590.74,360.416 605.944,350.365 C 614.101,301.065 518.246,264.942 509.1,214.2" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
  </svg:g>
</svg>


code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" x="0px" y="0px" viewBox="0 0 1000 1000" style="enable-background:new 0 0 1000 1000;" xml:space="preserve" id="svg4356" sodipodi:docname="vector source.svg" inkscape:version="0.91 r13725">
  <metadata id="metadata4362">
	<rdf:RDF>
	  <cc:Work rdf:about="">
		<dc:format>image/svg+xml</dc:format>
		<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
		<dc:title/>
	  </cc:Work>
	</rdf:RDF>
  </metadata>
  <defs id="defs4360"/>
  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1280" inkscape:window-height="952" id="namedview4358" showgrid="false" inkscape:zoom="1.2020815" inkscape:cx="434.47578" inkscape:cy="639.70571" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="svg4356" inkscape:object-nodes="true" inkscape:object-paths="false" inkscape:snap-smooth-nodes="true"/>
  <style type="text/css" id="style3680">
	.st0{fill:#FFFFFF;}
	.st1{fill:#76C043;}
	.st2{fill:#2680BC;}
	.st3{fill:#F6E0E8;}
	.st4{fill:#515351;}
	.st5{fill:#F4F1A3;}
	.st6{fill:#8E4F21;}
	.st7{fill:#BC2027;}
	.st8{fill:#60BB46;}
	.st9{fill:#4686C6;}
	.st10{fill:#D28DBD;}
	.st11{fill:#3F403F;}
	.st12{fill:#010101;}
	.st13{fill:#8F8F8E;}
	.st14{fill:#515251;}
	.st15{fill:#4F6AB2;}
	.st16{fill:#3E65B0;}
	.st17{fill:#15406D;}
	.st18{fill:#65AD45;}
	.st19{fill:#787878;}
	.st20{fill:#D76B93;}
	.st21{fill:#4DB748;}
	.st22{opacity:0.24;fill:#BF2126;enable-background:new	;}
	.st23{fill:#070505;}
	.st24{fill:#BF2126;}
</style>
  <svg:g inkscape:groupmode="layer" id="Boob_6_straps" inkscape:label="Boob_6_straps" style="display:inline">
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 507.1,214.2 C 459.007,283.59 311.88,318.377 304.302,407.915" id="path7375" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 522.185,414.992 C 533.165,338.371 507.001,287.286 507.1,214.2" id="path7377" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 518.811,452.147 C 516.906,472.213 539.677,494.423 548.892,499.407" id="path7381" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 307.885,437.891 C 309.656,457.61 340.886,475.044 376.806,477.211" id="path7383" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 499.689,433.581 C 479.328,432.18 465.803,437.427 452.626,429.85" id="path7385" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 315.689,423.718 C 352.214,428.199 415.33,434.602 452.626,429.85" id="path7387" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 452.449,433.344 L 452.626,429.85 C 450.213,359.364 471.248,286.937 507.1,214.2" id="path7389" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
	<svg:path style="display:inline;fill:none;stroke:#b3b3b3;stroke-width:1.29999995;stroke-miterlimit:4;stroke-dasharray:none" inkscape:connector-curvature="0" d="M 303.15,408.236 C 308.67,407.305 313.959,414.696 314.924,420.21 C 316.014,426.432 314.321,436.823 308.094,437.888 C 302.454,438.853 298.419,430.037 297.489,424.392 C 296.562,418.761 297.524,409.186 303.15,408.236 Z" class="st20" id="path7391" sodipodi:nodetypes="ccccc"/>
	<svg:path style="display:inline;fill:none;stroke:#b3b3b3;stroke-width:1.29999983;stroke-miterlimit:4;stroke-dasharray:none" d="M 521.676,451.959 C 512.736,452.548 501.075,444.365 500.486,435.425 C 499.889,426.364 509.88,415.982 518.941,415.385 C 527.881,414.796 539.542,422.98 540.131,431.919 C 540.727,440.981 530.737,451.363 521.676,451.959 Z" id="path7393" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
	<svg:path id="path9222-3" style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 540.384,435.669 C 573.257,435.421 614.637,405.748 634.696,392.488 C 645.399,327.801 519.101,280.779 507.1,214.2" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
  </svg:g>
</svg>


code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" x="0px" y="0px" viewBox="0 0 1000 1000" style="enable-background:new 0 0 1000 1000;" xml:space="preserve" id="svg4356" sodipodi:docname="vector source.svg" inkscape:version="0.91 r13725">
  <metadata id="metadata4362">
	<rdf:RDF>
	  <cc:Work rdf:about="">
		<dc:format>image/svg+xml</dc:format>
		<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
		<dc:title/>
	  </cc:Work>
	</rdf:RDF>
  </metadata>
  <defs id="defs4360"/>
  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1280" inkscape:window-height="952" id="namedview4358" showgrid="false" inkscape:zoom="1.2020815" inkscape:cx="434.47578" inkscape:cy="639.70571" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="svg4356" inkscape:object-nodes="true" inkscape:object-paths="false" inkscape:snap-smooth-nodes="true"/>
  <style type="text/css" id="style3680">
	.st0{fill:#FFFFFF;}
	.st1{fill:#76C043;}
	.st2{fill:#2680BC;}
	.st3{fill:#F6E0E8;}
	.st4{fill:#515351;}
	.st5{fill:#F4F1A3;}
	.st6{fill:#8E4F21;}
	.st7{fill:#BC2027;}
	.st8{fill:#60BB46;}
	.st9{fill:#4686C6;}
	.st10{fill:#D28DBD;}
	.st11{fill:#3F403F;}
	.st12{fill:#010101;}
	.st13{fill:#8F8F8E;}
	.st14{fill:#515251;}
	.st15{fill:#4F6AB2;}
	.st16{fill:#3E65B0;}
	.st17{fill:#15406D;}
	.st18{fill:#65AD45;}
	.st19{fill:#787878;}
	.st20{fill:#D76B93;}
	.st21{fill:#4DB748;}
	.st22{opacity:0.24;fill:#BF2126;enable-background:new	;}
	.st23{fill:#070505;}
	.st24{fill:#BF2126;}
</style>
  <svg:g inkscape:groupmode="layer" id="Boob_7_straps" inkscape:label="Boob_7_straps" style="display:inline">
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 508.3,214.2 C 449.714,298.729 270.477,341.098 261.246,450.171" id="path7375" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 526.574,459.199 C 539.97,365.712 508.179,303.374 508.3,214.2" id="path7377" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 522.623,503.54 C 520.28,528.215 548.507,555.384 559.839,561.514" id="path7381" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 265.667,486.42 C 267.838,510.591 306.187,531.841 350.216,534.498" id="path7383" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 499.189,481.381 C 474.478,479.681 457.992,487.065 442,477.868" id="path7385" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 275.097,469.249 C 319.63,474.712 396.528,483.662 442,477.868" id="path7387" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 441.823,481.362 L 442,477.868 C 439.051,391.71 464.477,303.109 508.3,214.2" id="path7389" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
	<svg:path style="display:inline;fill:none;stroke:#b3b3b3;stroke-width:1.29999995;stroke-miterlimit:4;stroke-dasharray:none" inkscape:connector-curvature="0" d="M 259.85,450.536 C 266.525,449.41 273.01,458.259 274.177,464.926 C 275.502,472.49 273.446,485.122 265.876,486.417 C 259.054,487.584 254.245,476.862 253.121,470.032 C 252.004,463.249 253.071,451.68 259.85,450.536 Z" class="st20" id="path7391" sodipodi:nodetypes="ccccc"/>
	<svg:path style="display:inline;fill:none;stroke:#b3b3b3;stroke-width:1.29999983;stroke-miterlimit:4;stroke-dasharray:none" d="M 526.065,503.352 C 515.208,504.067 500.738,494.532 500.023,483.676 C 499.297,472.661 511.737,460.317 522.752,459.592 C 533.609,458.877 548.079,468.412 548.794,479.268 C 549.52,490.283 537.08,502.627 526.065,503.352 Z" id="path7393" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
	<svg:path id="path9222-3" style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 549.048,483.92 C 589.096,483.618 639.217,446.836 663.654,430.681 C 676.663,352.064 522.885,295.117 508.3,214.2" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
  </svg:g>
</svg>


path: resources/vector/outfit/boot latex.svg


path: resources/vector/outfit/boot wide.svg


path: resources/vector/outfit/chastity male fore 0.svg


path: resources/vector/outfit/chastity male fore 1.svg


path: resources/vector/outfit/chastity male fore 2.svg


path: resources/vector/outfit/chastity male fore 3.svg


path: resources/vector/outfit/chastity male fore 4.svg


path: resources/vector/outfit/chastity male fore 5.svg


path: resources/vector/outfit/chastity male fore 6.svg


path: resources/vector/outfit/dildo gag.svg


path: resources/vector/outfit/extreme heel wide latex.svg


path: resources/vector/outfit/flat latex.svg


path: resources/vector/outfit/head latex.svg


path: resources/vector/outfit/heavy gold.svg


path: resources/vector/outfit/heel latex.svg


path: resources/vector/outfit/neck corset.svg


path: resources/vector/outfit/tight steel.svg


code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" x="0px" y="0px" viewBox="0 0 1000 1000" style="enable-background:new 0 0 1000 1000;" xml:space="preserve" id="svg4356" sodipodi:docname="vector source.svg" inkscape:version="0.91 r13725">
  <metadata id="metadata4362">
	<rdf:RDF>
	  <cc:Work rdf:about="">
		<dc:format>image/svg+xml</dc:format>
		<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
		<dc:title/>
	  </cc:Work>
	</rdf:RDF>
  </metadata>
  <defs id="defs4360"/>
  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1280" inkscape:window-height="952" id="namedview4358" showgrid="false" inkscape:zoom="4.808326" inkscape:cx="531.76051" inkscape:cy="751.71421" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="Boob_Large_3_" inkscape:object-nodes="true" inkscape:object-paths="false" inkscape:snap-smooth-nodes="true" inkscape:snap-object-midpoints="true"/>
  <style type="text/css" id="style3680">
	.st0{fill:#FFFFFF;}
	.st1{fill:#76C043;}
	.st2{fill:#2680BC;}
	.st3{fill:#F6E0E8;}
	.st4{fill:#515351;}
	.st5{fill:#F4F1A3;}
	.st6{fill:#8E4F21;}
	.st7{fill:#BC2027;}
	.st8{fill:#60BB46;}
	.st9{fill:#4686C6;}
	.st10{fill:#D28DBD;}
	.st11{fill:#3F403F;}
	.st12{fill:#010101;}
	.st13{fill:#8F8F8E;}
	.st14{fill:#515251;}
	.st15{fill:#4F6AB2;}
	.st16{fill:#3E65B0;}
	.st17{fill:#15406D;}
	.st18{fill:#65AD45;}
	.st19{fill:#787878;}
	.st20{fill:#D76B93;}
	.st21{fill:#4DB748;}
	.st22{opacity:0.24;fill:#BF2126;enable-background:new	;}
	.st23{fill:#070505;}
	.st24{fill:#BF2126;}
</style>
  <svg:g inkscape:groupmode="layer" id="Torso_Hourglass_straps" inkscape:label="Torso_Hourglass_straps" style="display:inline">
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 500.97796,204.16551 c -0.71264,4.69149 3.72511,8.09539 9.22204,11.23449 12.56584,-0.1687 25.13169,-3.25605 37.69753,-9.69857" id="path9218" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
	<svg:path id="path9222" style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1" d="m 495.8,467.5 -14.5431,-61.0527 4.91522,-55.28426 5.08461,-71.0825 L 510.2,215.4 530.35082,279.04329 523.449,317.775 508.76009,353.35994 481.2569,406.4473 471.9861,352.02373 461.91384,309.87756 468.81988,275.6 510.2,215.4" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 463.2324,352.85095 8.7537,-0.82722 14.18602,-0.86069 22.58797,2.1969 37.46362,7.77538" id="path9224" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 460.59329,375.71105 c 8.26177,10.3193 15.11821,15.52324 20.66361,30.73625 14.56337,-16.56115 48.05529,-16.49869 68.44366,-26.50672" id="path9226" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
	<svg:path id="path4809" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 587.45053,268.9835 -27.76453,10.0025 -29.33518,0.0573 -39.09409,1.03724 -22.43685,-4.48053 -8.85992,-2.64861" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccc"/>
  </svg:g>
</svg>


code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" x="0px" y="0px" viewBox="0 0 1000 1000" style="enable-background:new 0 0 1000 1000;" xml:space="preserve" id="svg4356" sodipodi:docname="vector source.svg" inkscape:version="0.91 r13725">
  <metadata id="metadata4362">
	<rdf:RDF>
	  <cc:Work rdf:about="">
		<dc:format>image/svg+xml</dc:format>
		<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
		<dc:title/>
	  </cc:Work>
	</rdf:RDF>
  </metadata>
  <defs id="defs4360"/>
  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1280" inkscape:window-height="952" id="namedview4358" showgrid="false" inkscape:zoom="4.808326" inkscape:cx="531.76051" inkscape:cy="751.71421" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="Boob_Large_3_" inkscape:object-nodes="true" inkscape:object-paths="false" inkscape:snap-smooth-nodes="true" inkscape:snap-object-midpoints="true"/>
  <style type="text/css" id="style3680">
	.st0{fill:#FFFFFF;}
	.st1{fill:#76C043;}
	.st2{fill:#2680BC;}
	.st3{fill:#F6E0E8;}
	.st4{fill:#515351;}
	.st5{fill:#F4F1A3;}
	.st6{fill:#8E4F21;}
	.st7{fill:#BC2027;}
	.st8{fill:#60BB46;}
	.st9{fill:#4686C6;}
	.st10{fill:#D28DBD;}
	.st11{fill:#3F403F;}
	.st12{fill:#010101;}
	.st13{fill:#8F8F8E;}
	.st14{fill:#515251;}
	.st15{fill:#4F6AB2;}
	.st16{fill:#3E65B0;}
	.st17{fill:#15406D;}
	.st18{fill:#65AD45;}
	.st19{fill:#787878;}
	.st20{fill:#D76B93;}
	.st21{fill:#4DB748;}
	.st22{opacity:0.24;fill:#BF2126;enable-background:new	;}
	.st23{fill:#070505;}
	.st24{fill:#BF2126;}
</style>
  <svg:g inkscape:groupmode="layer" id="Torso_Normal_straps" inkscape:label="Torso_Normal_straps" style="display:inline">
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 500.903,204.256 C 500.191,208.948 504.628,212.352 510.125,215.491 C 522.07,215.33 533.649,211.074 545.594,204.95" id="path9218" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
	<svg:path id="path9222" style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1" d="M 492.779,466.2 L 479.154,404.326 L 481.969,348.317 L 491.442,278.56 L 510.125,215.491 L 531.396,274.432 L 535.475,313.426 L 525.004,352.471 L 479.154,404.326 L 467.783,349.178 L 461.718,308.021 L 469.006,274.079 L 510.125,215.491" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 459.029,350.005 L 467.783,349.178 L 481.969,348.317 L 525.004,352.471 L 562.468,360.247" id="path9224" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 458.065,372.805 C 466.525,383.372 473.476,388.748 479.154,404.326 C 495.782,385.418 536.776,393.898 560.054,382.472" id="path9226" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
	<svg:path id="path4809" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 587.622,264.803 L 560.344,274.43 L 531.396,274.432 L 491.442,278.56 L 469.006,274.079 L 460.146,271.43" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccc"/>
  </svg:g>
</svg>


code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" x="0px" y="0px" viewBox="0 0 1000 1000" style="enable-background:new 0 0 1000 1000;" xml:space="preserve" id="svg4356" sodipodi:docname="vector source.svg" inkscape:version="0.91 r13725">
  <metadata id="metadata4362">
	<rdf:RDF>
	  <cc:Work rdf:about="">
		<dc:format>image/svg+xml</dc:format>
		<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
		<dc:title/>
	  </cc:Work>
	</rdf:RDF>
  </metadata>
  <defs id="defs4360"/>
  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1280" inkscape:window-height="952" id="namedview4358" showgrid="false" inkscape:zoom="4.808326" inkscape:cx="531.76051" inkscape:cy="751.71421" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="Boob_Large_3_" inkscape:object-nodes="true" inkscape:object-paths="false" inkscape:snap-smooth-nodes="true" inkscape:snap-object-midpoints="true"/>
  <style type="text/css" id="style3680">
	.st0{fill:#FFFFFF;}
	.st1{fill:#76C043;}
	.st2{fill:#2680BC;}
	.st3{fill:#F6E0E8;}
	.st4{fill:#515351;}
	.st5{fill:#F4F1A3;}
	.st6{fill:#8E4F21;}
	.st7{fill:#BC2027;}
	.st8{fill:#60BB46;}
	.st9{fill:#4686C6;}
	.st10{fill:#D28DBD;}
	.st11{fill:#3F403F;}
	.st12{fill:#010101;}
	.st13{fill:#8F8F8E;}
	.st14{fill:#515251;}
	.st15{fill:#4F6AB2;}
	.st16{fill:#3E65B0;}
	.st17{fill:#15406D;}
	.st18{fill:#65AD45;}
	.st19{fill:#787878;}
	.st20{fill:#D76B93;}
	.st21{fill:#4DB748;}
	.st22{opacity:0.24;fill:#BF2126;enable-background:new	;}
	.st23{fill:#070505;}
	.st24{fill:#BF2126;}
</style>
  <svg:g inkscape:groupmode="layer" id="Torso_Unnatural_straps" inkscape:label="Torso_Unnatural_straps" style="display:inline">
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 501.152,204.07 C 500.44,208.762 504.877,212.166 510.374,215.305 C 523.664,215.126 537.25,213.091 550.54,206.278" id="path9218" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
	<svg:path id="path9222" style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1" d="M 496.678,465.98 L 482.188,407.3 L 491.521,353.918 L 491.181,281.745 L 510.374,215.305 L 528.877,283.779 L 512.809,320.263 L 498.229,354.208 L 482.188,407.3 L 477.335,354.779 L 462.265,311.869 L 468.744,277.264 L 510.374,215.305" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 468.581,355.606 L 477.335,354.779 L 491.521,353.918 L 498.229,354.208 L 535.693,361.984" id="path9224" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
	<svg:path style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 465.026,377.931 C 472.614,387.409 477.095,393.328 482.188,407.3 C 495.417,392.256 523.809,387.614 542.329,378.524" id="path9226" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
	<svg:path id="path4809" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 586.895,273.468 L 558.608,283.791 L 528.877,283.779 L 491.181,281.745 L 468.744,277.264 L 459.884,274.615" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccc"/>
  </svg:g>
</svg>


code:
#!/bin/bash
if [ ! -d ".git" ]; then
	#not running in git repo, so can't use git commands :-)
	echo "No .git repo found - skipping sanity checks"
	exit 0
fi

WARNING='\033[93m'

myprint() {
	while read -r data; do
		echo -n -e "[$1]$WARNING"
		echo "$data"
	done
}

GREP="git grep -n --color"

# Check for accidental assignment.  e.g.:   <<if $foo = "hello">>
$GREP "<<[ ]*if[^>=]*[^><\!=]=[^=][^>]*>>" -- 'src/*' | myprint "AccidentalAssignmentInIf"
# Check for accidental assignment.  e.g.:   <<elseif $foo = "hello">>
$GREP "<<[ ]*elseif[^>=]*[^><\!=]=[^=][^>]*>>" -- 'src/*' | myprint "AccidentalAssignmentInElseIf"
# Check for missing ".  e.g.:   <<if $foo == "hello>>
$GREP "<<[^\"<>]*\"[^\"<>]*>>" -- 'src/*' | myprint "MissingSpeechMark"
# Check for missing ".  e.g.:   <<if $foo = "hello)
$GREP -e "<<[^\"<>]*\([^\"<>]*\"[^><\"]*\"\| [<>] \)*\"\([^\"<>]*\"[^><\"]*\"\| [<>] \)*\([^\"<>]\| [<>] \)*>>" --and --not -e "*[^']*" -- 'src/*' | myprint "MissingSpeechMark2"
# Check for colors like: @@color:red   - should be @@.red
$GREP -e "@@color:" --and --not -e "@@color:rgb([0-9 ]\+,[0-9 ]\+,[0-9 ]\+)" -- "src/*" | myprint "UseCSSColors"
# Check for missing $ in activeSlave or PC
$GREP "<<[ ]*[^\$><_\[]*\(activeSlave\|PC\)[.]" -- "src/*" | myprint "MissingDollar"
# Check for closing bracket without opening bracket.  e.g.:  <<if foo)>>	  (but  <<case "foo")>>   is valid, so ignore those
$GREP -e "<<[ a-zA-Z]\+\([^()<>]\|[^()<>][<>][^()<>]\)*)" --and --not -e "<< *case" -- "src/**/*.tw" | myprint "MissingOpeningBracket"
# Check for opening bracket without closing bracket.  e.g.:  <<if (foo>>
$GREP -e "<<[ a-zA-Z]\([^<>]\|[^<>][<>][^<>]\)\+(\([^()<>]\|[^<>()][<>][^<>()]\|([^<>()]*])\)*>>" -- "src/*" | myprint "MissingClosingBracket"
# Check for two closing brackets but one opening bracket.  e.g.:  <<if (foo))>>
$GREP -e "<<[ a-zA-Z]\+[^()<>]*([^()]*)[^()]*)[^()<>]*>>" -- "src/**/*.tw" | myprint "MissingOpeningBracket2"
# Check for one closing bracket but two opening brackets.  e.g.:  <<if ((foo)>>
$GREP -e "<<[ a-zA-Z]\+[^()<>]*([^()]*([^()]*)[^()<>]*>>" -- "src/**/*.tw" | myprint "MissingClosingBracket2"
$GREP -e "<<.*[(][^<>)]*[(][^<>)]*)\?[^<>)]*>>" -- "src/**/*.tw" | myprint "MissingClosingBracket3"
# Check for too many >>>.  e.g.: <</if>>>
$GREP "<<[^<>]*[<>]\?[^<>]*>>>" -- "src/**/*.tw" | myprint "TooManyAngleBrackets"
# Check for wrong capitalization on 'activeslave' and other common typos
$GREP -e "\$act" --and --not -e "\$\(activeSlave\|activeChild\|activeArcology\|activeOrgan\|activeLimbs\|activeLurcher\|active.\)" -- "src/*" | myprint "WrongCapitalization"
# Check for strange spaces e.g.  $slaves[$i]. lips
$GREP "\$slaves\[\$i\]\. " -- 'src/*' | myprint "MissingPropertyAfterSlaves"
# Check using refreshmentType instead of refreshment
$GREP "\$PC.refreshmentType[^ =]" -- 'src/*' | grep -v src/events/intro/introSummary.tw | myprint "ShouldBeRefreshment"
# Check, e.g.  <<else $foo==4
$GREP "<<else >\?[^>]" -- 'src/*' | myprint "ShouldBeElseIf"
# Check, e.g., =to
$GREP "=to" -- 'src/*' | myprint "EqualAndTo"
# Check doing  $slaves.foo instead of $slaves[i].foo
$GREP -e "[$]slaves[.]" --and --not -e '[$]slaves[.]\(length\|random\|map\|filter\|deleteAt\|push\|find\|includes\|delete\|forEach\|some\|reduce\|splice\)' -- 'src/*' | myprint "MissingSlavesIndex"
# Try to check for accidentally mixing slaves[] and activeSlave.  This can have a lot of false matches, but has caught a lot of bugs so it's worth the pain
$GREP -e "activeSlave[.]" --and -e "slaves\[..\?\][.]" --and --not -e '[.]ID' --and --not -e 'slaves\[..\?\][.]\(slaveName\|slaveSurname\|actualAge\|relation\|assignment\|age\|devotion\|trust\|vagina\|mother\|father\|training\)' -- 'src/*' | myprint "MaybeAccidentalMixingOfSlavesAndActiveSlave"
# Check, e.g.  <<set foo == 4>>
$GREP "<<set[^{>=]*==" -- 'src/*' | myprint "DoubleEqualsInSet"
# Check for, e.g   <<if slaves[foo]>>
$GREP "<<\([^>]\|[^>]>[^>]\)*[^$]slaves\[" -- 'src/*' | myprint "MissingDollar"
# Check for missing $ or _ in variable name:
$GREP -e "<<[a-zA-Z]\([^>\"]\|[^>]>[^>]\|\"[^\"]*\"\)* [a-zA-Z]\+ * =" -- "src/**/*.tw" | myprint "MissingDollar2"
# Check for missing command, e.g.  <<foo =
$GREP -e "<<[a-zA-Z]* = *" -- "src/**/*.tw" | myprint "BadCommand"
# Check for duplicate words, e.g. with with
$GREP -e " \(\b[a-zA-Z][a-zA-Z]\+\) \1\b " --and --not -e " her her " --and --not -e " you you " --and --not -e " New New " --and --not -e "Slave Slave " --and --not -e " that that " --and --not -e " in in " --and --not -e " is is " -- 'src/*' ':!*.css' | myprint "Duplicate words"
# Check for obsolete SugarCube macros
$GREP -E "<<display |<<click|<<.*\.contains" -- "src/**/*.tw" | myprint "ObsoleteMacro"
# Check for double articles
$GREP -E "\Wa an\W" -- "src/**/*.tw" | myprint "DoubleArticle"
# Check for incorrect articles
$GREP -i -E "\Wa (a|e|i|o|u)." -- "src/**/*.tw" | grep -a -i -vE "\Wa (un|eu|us|ut|on|ur|in)." | grep -a -i -vE "(&|<<s>>|UM)." | myprint "IncorrectArticle"
$GREP -i -E "\Wan (b|c|d|f|g|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z)\w." -- "src/**/*.tw" | grep -a -i -vE "[A-Z]{3}" | myprint "IncorrectArticle"
# Check for $ sign mid-word
$GREP -i "\w$\w" -- "src/**/*.tw" | myprint "VarSignMidWord"
# check for $ sign at beginning of macro
$GREP '<<\s*\$' -- 'src/*' | myprint "VarSignAtMacroStart"
# check our custom option macro is either options,option,optionlt,optionlte,optiongt,optiongte,optiondefault,optionstyle,optionif
$GREP -e '<<option' --and --not -e "<<option\(\|s\|lt\|lte\|gt\|gte\|default\|style\|if\)[ >]" -- 'src/*' | myprint "OptionUnrecognized"
# check our custom option macro is: <<option variable "somestring"
$GREP -e "<<option[lg]te\? " --and --not -e "<<option[lg]te\?\s\+-\?[0-9]\+\s\+-\?[0-9]\+\s\+[\'\"].*[\'\"]" -- 'src/*' | grep -v src/js | myprint "OptionBadArguments1"
$GREP -e "<<optiondefault " --and --not -e "<<optiondefault\s\+\(-\?[0-9]\+\|[\'\"].*[\'\"]\|false\|true\)\s\+[\'\"].*[\'\"]" -- 'src/*' | grep -v src/js | myprint "OptionBadArguments2"
$GREP -e "<<option\([lg]t\?\|default\) *>" -- 'src/*' | grep -v src/js | myprint "OptionBadArguments3"
#$GREP -e "<<option " --and --not -e "<<option\s\+\(-\?[0-9]\+\|[\'\"].*[\'\"]\|false\|true\)\s\+[\`\'\"].*[\'\"\`]" -- 'src/*' | grep -v src/js | myprint "OptionBadArguments4" # too many false positives
$GREP -e "<<if def [^(>]*[&|]" -- 'src/*' | myprint "AddBracketsAroundDef2"
# check for missing ; before statement
$GREP 'if $ ' -- 'src/*' | myprint "Missing ; before statement"
$GREP 'elseif $ ' -- 'src/*' | myprint "Missing ; before statement"
# Check for an unrecognized letter before >>
$GREP "[^]a-zA-Z0-9 \")}'+-\*\`] *>>" -- 'src/*' | myprint "StrangeCharacterAtEndOfCommand"
# Check for a . inside a <<>>
$GREP "<<[a-zA-Z]\([^\"'>]\|[^\"'>]>[^\"'>]\)*[a-zA-Z][.][^a-zA-Z]" -- "src/**/*.tw"| myprint "StrangeCharacterAfterDot"
# Check for @@.  instead of .@@
$GREP -E "@@(\.|,|;|:)\s" -- "src/**/*.tw" | myprint "WrongSelectorPunctuation"
$GREP "@@[a-z]\+;" -- 'src/*' | myprint "SelectorMissingDot"
# Check for .  instead of .
$GREP -E "(\.|,|;|:)\s" -- src/*.js | myprint "WrongSelectorPunctuation"
# Check for missing whitespace between operators
#$GREP -E "\(.(\+|\-|\*|\/|\=)." -- src/*.js :^src/001-lib/Jquery.js,^src/js/dTree.min.js,^devTools/tweeGo/storyFormats/sugarcube-2/format.js,^src/001-lib/mousetrap.js | myprint "MissingWhitespace"		disabled until I can figure out how to exclude files
# Check for @@ selector instead of  selector
$GREP "@@\." -- src/*.js | myprint "WrongSelectorUsed"
# Check for JSdoc inside function declaration
#$GREP -e ".\=.\/\*\*" --or -e "slave\s\*\/" -- src/*.js --exclude 'src/interaction/main/mainLinks.js' | myprint "WrongJSdocFormat"	# this --exclude doesn't work # too many false positives
# Check for missing whitespace at end of /**/ style comments
#$GREP "\S\*\/" -- src/* --exclude 'src/001-lib/jquery/Jquery.js' | myprint "MissingWhitespace"		disabled until I can figure out to exclude files
# Check for var instead of let or const
#$GREP "var\s" -- src/*.js | myprint "UseLetOrConst"	disabled until I can figure out how to exclude certain files
# Check for non lethal or non-lethal instead of nonlethal
$GREP -i "non.lethal" -- 'src/*' | myprint "ShouldBeNonlethal"
# Check for missing quotation marks around selectors
$GREP "span class=[^\"\']" -- src/*.js ':!src/001-lib/Jquery/Jquery.js' | myprint "MissingQuotes"

(
	cd src/ || exit
	$GREP "\$\(PC\|activeSlave\|slaves\|tanks\)[.][^a-zA-Z]" | myprint "UnexpectedCharAfterDot"
)
# Check for lines with only "let"
$GREP '[^A-Za-z]let(\r|\n)' | myprint "WrongLetStyle"
# Check for lines with only "const"
$GREP 'const(\r|\n)' | myprint "WrongConstStyle"
# Check for events with mismatched names
$GREP -P 'App\.Events\.(.*)\s*=\s*class\s+(?!\1)(.*)(?=\s+extends\s+App\.Events\.BaseEvent)' -- src/*.js | myprint "MismatchedEventName"

# Check that all the tags are properly opened and closed & a lot of other stuff
java -jar devTools/javaSanityCheck/SanityCheck.jar


code:
# Tool(s) for hacking saved games

The script `fc_edit_save.py` can be used to read or write FC games saved with the "Save to Disk..." option.
It can convert the compressed files (usually named `free-cities-YYYYMMDD-HHMMSS.save`) to or from JSON format,
view or modify some variables, search for slaves matching some criteria to view or modify them, etc.

## Dependencies

The script `fc_edit_save.py` requires Python version 3.6 or later.

In addition, it uses a small module called `lzstring`, available via [PyPI](https://pypi.org/project/lzstring/).
If you do not have it yet, you can install it with `pip3 install lzstring` or simply `pip install lzstring` if
your default version of Python is already Python 3.x.  You can also install the module manually from PyPI
without using `pip`, but then you are on your own for copying the files in the right locations.

## Usage

To view the help message summarizing the command-line arguments, try:
```
./fc_edit_save.py --help
```

To view a longer help message including details for each command and a list of examples, try:
```
./fc_edit_save.py --long-help
```

The basic usage consists of:

 * reading an input file (compressed `*.save` file with the option `-i`, or uncompressed JSON file with the
   option `-I`),

 * optionally modifying it with various commands,

 * then saving the result in some output file (compressed `*.save` file with the option `-o`, or uncompressed
   JSON file with the option `-O`).

If the options `-i`/`-I` or `-o`/`-O` are not used, then the standard input and standard output will be used, which
allows this script to be used easily in a pipe including other commands.  If the input is a file, then the option
`-A` can also be used instead of `-o`/`-O` to set the name of the output file automatically.  Try `--help` and
`--long-help` for more details.

## Examples

The following examples assume that you already have a saved game in the file `free-cities-20200401-123456.save`.

To convert a compressed FC game file to a human-readable JSON file:
```
./fc_edit_save.py -i free-cities-20200104-123456.save -p -O free-cities-20200104-123456.json
```

To convert a JSON file to a compressed FC game file:
```
./fc_edit_save.py -I free-cities-20200104-123456.json -o free-cities-20200104-123456.save
```

To display the names and current assignments of all smart slaves (with more than 50 in intelligence):
```
./fc_edit_save.py -i free-cities-20200104-123456.save -p --get-slaves 'intelligence>50' 'name,assignment'
```

To ensure that all your slaves have at least DD-cup boobs and change the hair of Miss Lily at random:
```
./fc_edit_save.py -i free-cities-20200104-123456.save -A --set-slaves all 'boobs=atleast:900' --set-slaves 'Miss Lily' randomhair -v
```
Note that the option `-A` in this example will save the results in the file `free-cities-20200104-123456-cheat.save`.
The option `-v` will show the changes that are applied to all slaves.

For more examples, try `--long-help`.