diff options
| author | J08nY | 2025-08-06 15:34:58 +0200 |
|---|---|---|
| committer | J08nY | 2025-08-06 15:55:02 +0200 |
| commit | cd064d67da2a44d5e42cdbe36c58ed005d0e186f (patch) | |
| tree | 2eb39964795a2091f0c3ed033139eb1726651e7d | |
| parent | 8ff2846df2388984a7954584218a200904a3ed1f (diff) | |
| download | ECTester-cd064d67da2a44d5e42cdbe36c58ed005d0e186f.tar.gz ECTester-cd064d67da2a44d5e42cdbe36c58ed005d0e186f.tar.zst ECTester-cd064d67da2a44d5e42cdbe36c58ed005d0e186f.zip | |
Add unravelling diagram.
| -rw-r--r-- | analysis/scalarmults/README.md | 2 | ||||
| -rw-r--r-- | analysis/scalarmults/simulate.ipynb | 5 | ||||
| -rw-r--r-- | analysis/scalarmults/unravelling.svg | 618 |
3 files changed, 624 insertions, 1 deletions
diff --git a/analysis/scalarmults/README.md b/analysis/scalarmults/README.md new file mode 100644 index 0000000..d66b113 --- /dev/null +++ b/analysis/scalarmults/README.md @@ -0,0 +1,2 @@ +# Unravelling scalar multipliers + diff --git a/analysis/scalarmults/simulate.ipynb b/analysis/scalarmults/simulate.ipynb index cad0c2a..3db4307 100644 --- a/analysis/scalarmults/simulate.ipynb +++ b/analysis/scalarmults/simulate.ipynb @@ -17,7 +17,10 @@ "This notebook explores the statistical differences in error rates of scalar multipliers computing on low-order base points\n", "to reverse-engineer the scalar multipliers and countermeasures, even in the presence of scalar randomization. This\n", "is possible because we do not care about the actual multiples that happen for any given scalar, but rather the statistical\n", - "properties, i.e.: For random scalars, how probable is an error for a point of low order, for example, 5?" + "properties, i.e.: For random scalars, how probable is an error for a point of low order, for example, 5?\n", + "\n", + "Examine the figure below that shows the big picture.\n", + "" ] }, { diff --git a/analysis/scalarmults/unravelling.svg b/analysis/scalarmults/unravelling.svg new file mode 100644 index 0000000..9c6aaf7 --- /dev/null +++ b/analysis/scalarmults/unravelling.svg @@ -0,0 +1,618 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="210mm" + height="148mm" + viewBox="0 0 210 148" + version="1.1" + id="svg1" + inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" + sodipodi:docname="unravelling.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview + id="namedview1" + pagecolor="#ffffff" + bordercolor="#111111" + borderopacity="1" + inkscape:showpageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="1" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="mm" + inkscape:zoom="2.1813126" + inkscape:cx="85.040539" + inkscape:cy="110.71315" + inkscape:window-width="1440" + inkscape:window-height="829" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="g3" + showguides="false" /> + <defs + id="defs1"> + <marker + style="overflow:visible" + id="marker15" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Wide arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:butt" + d="M 3,-3 0,0 3,3" + transform="rotate(180,0.125,0)" + sodipodi:nodetypes="ccc" + id="path15" /> + </marker> + <marker + style="overflow:visible" + id="ArrowWide" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Wide arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:butt" + d="M 3,-3 0,0 3,3" + transform="rotate(180,0.125,0)" + sodipodi:nodetypes="ccc" + id="path1" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-9" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-3" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-9-7" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-3-5" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-9-1" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-3-2" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-9-7-6" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-3-5-1" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-9-0" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-3-6" /> + </marker> + </defs> + <path + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;marker-end:url(#Triangle-9);paint-order:normal" + d="m 36.162513,107.2091 c -10e-6,-9.397124 -10e-6,-9.397124 -10e-6,-9.397124" + id="path8-4" /> + <path + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;marker-end:url(#Triangle-9-0);paint-order:normal" + d="m 121.83629,107.2091 c -1e-5,-9.397122 -1e-5,-9.397122 -1e-5,-9.397122" + id="path8-4-5" /> + <path + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;marker-end:url(#Triangle-9-7);paint-order:normal" + d="m 36.162493,43.785996 c 1e-5,9.397125 1e-5,9.397125 1e-5,9.397125" + id="path8-4-6" /> + <path + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;marker-end:url(#Triangle-9-7-6);paint-order:normal" + d="m 121.83627,43.785996 c 1e-5,9.397125 1e-5,9.397125 1e-5,9.397125" + id="path8-4-6-3" /> + <path + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;marker-end:url(#Triangle-9-1);paint-order:normal" + d="m 72.942541,76.354443 c 9.397124,-1e-5 9.397124,-1e-5 9.397124,-1e-5" + id="path8-4-9" /> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <g + id="g3" + transform="translate(7.7874229,3.2630488)" + inkscape:label="scalarmult + ctr"> + <rect + style="fill:none;stroke:#000000;stroke-width:0.765;stroke-dasharray:none" + id="rect3" + width="56.486214" + height="32.202419" + x="-0.26395428" + y="5.015131" + inkscape:label="rect3" /> + <text + xml:space="preserve" + style="font-size:2.82223px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';text-align:start;letter-spacing:0px;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dashoffset:4.62614" + x="27.950924" + y="16.177456" + id="text1"><tspan + sodipodi:role="line" + id="tspan1" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;text-anchor:middle;stroke-width:0.265" + x="27.950924" + y="16.177456">Scalar multiplier</tspan><tspan + sodipodi:role="line" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;text-anchor:middle;stroke-width:0.265" + x="27.950924" + y="23.233006" + id="tspan2">+</tspan><tspan + sodipodi:role="line" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;letter-spacing:0px;text-anchor:middle;stroke-width:0.265" + x="27.950924" + y="30.288557" + id="tspan3">Countermeasure</tspan></text> + </g> + <g + id="g3-7" + transform="translate(93.857123,3.2630488)" + inkscape:label="error model"> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;white-space:pre;inline-size:46.4756;display:inline;fill:#000000;stroke-width:0.264583" + x="42.141571" + y="22.172159" + id="text1-5" + transform="translate(-30.047743,1.0608465)"><tspan + x="42.141571" + y="22.172159" + id="tspan4">Error model</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.765;stroke-dasharray:none" + id="rect3-9" + width="56.486214" + height="32.202419" + x="-0.26395428" + y="5.015131" + inkscape:label="rect3" /> + </g> + <g + id="g8" + transform="translate(-55.033702,56.139921)" + inkscape:label="scalars + masks"> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.765;stroke-dasharray:none" + x="91.179276" + y="65.765251" + id="text4"><tspan + sodipodi:role="line" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.765" + x="91.179276" + y="65.765251" + id="tspan7">Random</tspan><tspan + sodipodi:role="line" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.765" + x="91.179276" + y="72.820801" + id="tspan8">scalars & masks</tspan><tspan + sodipodi:role="line" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.765" + x="91.179276" + y="79.87635" + id="tspan5" /></text> + <rect + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.765;stroke-dasharray:none" + id="rect8" + width="55.694355" + height="25.603561" + x="63.34903" + y="54.37458" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;paint-order:normal" + x="70.961243" + y="59.899075" + id="text12-3"><tspan + sodipodi:role="line" + id="tspan12-6" + style="font-size:4.23333px;fill:#000000;stroke:none;stroke-width:0.765" + x="70.961243" + y="59.899075">1000x</tspan></text> + <rect + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.704251;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;paint-order:normal" + id="rect11-4-9" + width="15.585739" + height="8.0221586" + x="63.34903" + y="54.37458" /> + </g> + <g + id="g8-8" + transform="translate(30.640072,56.139921)" + inkscape:label="base point orders"> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.765;stroke-dasharray:none" + x="91.049454" + y="68.643913" + id="text4-4"><tspan + sodipodi:role="line" + style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.765" + x="91.049454" + y="68.643913" + id="tspan5-3">Base point orders</tspan></text> + <rect + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.765;stroke-dasharray:none" + id="rect8-6" + width="55.694355" + height="25.603561" + x="63.34903" + y="54.37458" /> + </g> + <g + id="g11" + transform="translate(-74.189837,58.82259)" + inkscape:label="multiples graph"> + <rect + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.764999;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;paint-order:normal" + id="rect9" + width="64.380333" + height="32.584919" + x="78.16217" + y="0.38249949" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;paint-order:normal" + x="110.437" + y="11.086965" + id="text9"><tspan + sodipodi:role="line" + id="tspan9" + style="fill:#000000;stroke:none;stroke-width:0.765" + x="110.437" + y="11.086965">Symbolic</tspan><tspan + sodipodi:role="line" + style="fill:#000000;stroke:none;stroke-width:0.765" + x="110.437" + y="18.142515" + id="tspan10">scalar multiplication</tspan><tspan + sodipodi:role="line" + style="fill:#000000;stroke:none;stroke-width:0.765" + x="110.437" + y="25.198065" + id="tspan11">graphs</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;paint-order:normal" + x="85.774384" + y="5.9069943" + id="text12"><tspan + sodipodi:role="line" + id="tspan12" + style="font-size:4.23333px;fill:#000000;stroke:none;stroke-width:0.765" + x="85.774384" + y="5.9069943">1000x</tspan></text> + <rect + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.704251;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;paint-order:normal" + id="rect11-4-2" + width="15.585739" + height="8.0221586" + x="78.16217" + y="0.38249949" /> + </g> + <g + id="g11-6" + transform="translate(11.483942,59.679476)" + inkscape:label="error probs"> + <path + style="fill:none;stroke:#808080;stroke-width:0.765;stroke-linejoin:round;stroke-dasharray:2.29499996,2.29499996;stroke-dashoffset:1.22399998;stroke-opacity:1" + d="M 153.70476,92.52261 V 60.186257" + id="path13" + transform="translate(-11.483942,-59.679476)" /> + <rect + style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.780219;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;paint-order:normal" + id="rect9-5" + width="118.51546" + height="32.321133" + x="78.29406" + y="0.51439196" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';text-align:center;writing-mode:lr-tb;direction:ltr;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;paint-order:normal" + x="110.54989" + y="14.614739" + id="text17"><tspan + sodipodi:role="line" + id="tspan17" + style="font-size:5.64444px;stroke-width:0.765" + x="110.54989" + y="14.614739">Error probability</tspan><tspan + sodipodi:role="line" + style="font-size:5.64444px;stroke-width:0.765" + x="110.54989" + y="21.67029" + id="tspan18">for base point order q</tspan></text> + <g + id="g17" + transform="translate(6.2227239,-1.2849752)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.447839;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:1.224;stroke-opacity:1;marker-start:url(#marker15);marker-end:url(#ArrowWide)" + d="m 147.13481,5.5377021 c 0,0 0,0 0,21.1584829 h 40.26656" + id="path14" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.265;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + d="m 149.03178,9.5726997 3.99037,0.2574423 4.18345,0.901049 2.25263,10.362083 1.60902,-8.881784 3.86164,1.158494 1.41594,7.980733 1.73774,-6.114272 2.31699,0.965411 1.67338,3.797284 v 0 l 2.33154,1.806072 2.81732,1.21974 6.8866,0.707112" + id="path16" + sodipodi:nodetypes="cccccccccccccc" /> + <circle + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + id="path17-9" + cx="153.02216" + cy="9.830142" + r="0.32199472" /> + <circle + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + id="path17-8" + cx="157.2056" + cy="10.731191" + r="0.32199472" /> + <circle + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + id="path17-85" + cx="159.45824" + cy="21.093273" + r="0.32199472" /> + <circle + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + id="path17-88" + cx="161.06725" + cy="12.21149" + r="0.32199472" /> + <circle + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + id="path17-6" + cx="164.92889" + cy="13.369984" + r="0.32199472" /> + <circle + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + id="path17-86" + cx="166.34483" + cy="21.350718" + r="0.32199472" /> + <circle + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + id="path17-89" + cx="168.08257" + cy="15.236445" + r="0.32199472" /> + <circle + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + id="path17-3" + cx="170.39957" + cy="16.201857" + r="0.32199472" /> + <circle + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + id="path17-2" + cx="172.07294" + cy="19.99914" + r="0.32199472" /> + <circle + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + id="path17-94" + cx="174.40448" + cy="21.805212" + r="0.32199472" /> + <circle + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + id="path17-4" + cx="177.2218" + cy="23.024952" + r="0.32199472" /> + <circle + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + id="path17-81" + cx="180.6651" + cy="23.378508" + r="0.32199472" /> + <circle + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + id="path17-68" + cx="184.1084" + cy="23.732063" + r="0.32199472" /> + <circle + style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + id="path17-5" + cx="149.03178" + cy="9.5726995" + r="0.32199472" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + x="141.81168" + y="25.582594" + id="text19"><tspan + sodipodi:role="line" + id="tspan19" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;stroke:none;stroke-width:0.265" + x="141.81168" + y="25.582594">0%</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + x="144.97337" + y="10.40079" + id="text19-5" + transform="translate(-6.0966364,-0.02140396)"><tspan + sodipodi:role="line" + id="tspan19-0" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;stroke:none;stroke-width:0.265" + x="144.97337" + y="10.40079"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px" + id="tspan20" + dx="0 0 0"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:-0.293687px" + id="tspan22">1</tspan>00</tspan>%</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + x="164.39456" + y="31.797026" + id="text19-58"><tspan + sodipodi:role="line" + id="tspan19-6" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;stroke:none;stroke-width:0.265" + x="164.39456" + y="31.797026">q</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + x="152.23193" + y="29.905777" + id="text19-9"><tspan + sodipodi:role="line" + id="tspan19-08" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;stroke:none;stroke-width:0.265" + x="152.23193" + y="29.905777">3</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + x="156.5733" + y="29.877554" + id="text19-9-1"><tspan + sodipodi:role="line" + id="tspan19-08-9" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;stroke:none;stroke-width:0.265" + x="156.5733" + y="29.877554">5</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + x="148.22174" + y="29.905777" + id="text19-2"><tspan + sodipodi:role="line" + id="tspan19-4" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;stroke:none;stroke-width:0.265" + x="148.22174" + y="29.905777">2</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:4.62614;stroke-opacity:1" + x="159.93271" + y="29.877554" + id="text19-9-1-8"><tspan + sodipodi:role="line" + id="tspan19-08-9-0" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;stroke:none;stroke-width:0.265" + x="159.93271" + y="29.877554">...</tspan></text> + </g> + </g> + <g + id="g13" + inkscape:label="impl"> + <rect + style="fill:none;stroke:#808080;stroke-width:0.865;stroke-linejoin:round;stroke-dasharray:2.595, 2.595;stroke-dashoffset:0;stroke-opacity:1" + id="rect6" + width="210" + height="49.842842" + x="-11.483942" + y="-59.679478" + ry="4.7425818" + transform="translate(11.483942,59.679475)" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#757575;stroke-width:0.865;stroke-linejoin:round;stroke-dasharray:2.595, 2.595;stroke-dashoffset:0;stroke-opacity:1" + x="155.13759" + y="45.436996" + id="text6"><tspan + sodipodi:role="line" + id="tspan6" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.35px;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#808080;stroke:none;stroke-width:0.865" + x="155.13759" + y="45.436996">Implementation</tspan></text> + </g> + </g> +</svg> |
