blob: 837f52253cfa34641d48916e6a9ef1800497ca0d [file] [log] [blame] [edit]
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.43.0 (0)
-->
<!-- Title: %3 Pages: 1 -->
<svg width="1089pt" height="772pt"
viewBox="0.00 0.00 1088.50 772.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 768)">
<title>%3</title>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-768 1084.5,-768 1084.5,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_host</title>
<polygon fill="none" stroke="black" points="887.5,-436 887.5,-598 1072.5,-598 1072.5,-436 887.5,-436"/>
<text text-anchor="middle" x="980" y="-443.8" font-family="Times,serif" font-size="14.00">cuttlefish&#45;user Debian package</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_android</title>
<polygon fill="none" stroke="black" points="410.5,-8 410.5,-156 856.5,-156 856.5,-8 410.5,-8"/>
<text text-anchor="middle" x="633.5" y="-15.8" font-family="Times,serif" font-size="14.00">Cuttlefish VM</text>
</g>
<!-- audio_server -->
<g id="node1" class="node">
<title>audio_server</title>
<polygon fill="none" stroke="black" points="985,-308 826,-308 826,-272 985,-272 985,-308"/>
<text text-anchor="middle" x="905.5" y="-286.3" font-family="Times,serif" font-size="14.00">internal/audio_server.sock</text>
</g>
<!-- webrtc -->
<g id="node16" class="node">
<title>webrtc</title>
<ellipse fill="none" stroke="black" stroke-width="2" cx="592.5" cy="-377" rx="41.69" ry="18"/>
<text text-anchor="start" x="568.5" y="-374.3" font-family="Times,serif" font-size="14.00"> </text>
<text text-anchor="start" x="572.5" y="-374.3" font-family="Times,serif" font-weight="bold" font-size="14.00">webrtc</text>
<text text-anchor="start" x="612.5" y="-374.3" font-family="Times,serif" font-size="14.00"> </text>
</g>
<!-- audio_server&#45;&gt;webrtc -->
<g id="edge15" class="edge">
<title>audio_server&#45;&gt;webrtc</title>
<path fill="none" stroke="black" d="M840.59,-311.02C809.24,-320.48 771.02,-331.7 736.5,-341 703.86,-349.79 666.8,-358.77 638.45,-365.44"/>
<polygon fill="black" stroke="black" points="841.96,-314.26 850.51,-308.01 839.93,-307.56 841.96,-314.26"/>
<polygon fill="black" stroke="black" points="637.37,-362.1 628.43,-367.79 638.96,-368.91 637.37,-362.1"/>
</g>
<!-- browser -->
<g id="node2" class="node">
<title>browser</title>
<ellipse fill="none" stroke="black" cx="865.5" cy="-746" rx="40.09" ry="18"/>
<text text-anchor="middle" x="865.5" y="-742.3" font-family="Times,serif" font-size="14.00">Browser</text>
</g>
<!-- confirmationui_sign -->
<g id="node3" class="node">
<title>confirmationui_sign</title>
<polygon fill="none" stroke="black" points="351.5,-503 197.5,-503 197.5,-467 351.5,-467 351.5,-503"/>
<text text-anchor="middle" x="274.5" y="-481.3" font-family="Times,serif" font-size="14.00">internal/confui_sign.sock</text>
</g>
<!-- secure_env -->
<g id="node13" class="node">
<title>secure_env</title>
<ellipse fill="none" stroke="black" cx="293.5" cy="-572" rx="50.09" ry="18"/>
<text text-anchor="middle" x="293.5" y="-568.3" font-family="Times,serif" font-size="14.00">secure_env</text>
</g>
<!-- confirmationui_sign&#45;&gt;secure_env -->
<g id="edge10" class="edge">
<title>confirmationui_sign&#45;&gt;secure_env</title>
<path fill="none" stroke="black" d="M280.59,-513.27C282.78,-523.04 285.24,-534.06 287.43,-543.83"/>
<polygon fill="black" stroke="black" points="283.94,-512.2 278.34,-503.2 277.11,-513.72 283.94,-512.2"/>
<polygon fill="black" stroke="black" points="284.06,-544.83 289.66,-553.82 290.89,-543.3 284.06,-544.83"/>
</g>
<!-- gnss_grpc_proxy -->
<g id="node4" class="node">
<title>gnss_grpc_proxy</title>
<ellipse fill="none" stroke="black" cx="433.5" cy="-572" rx="71.49" ry="18"/>
<text text-anchor="middle" x="433.5" y="-568.3" font-family="Times,serif" font-size="14.00">gnss_grpc_proxy</text>
</g>
<!-- gnss_grpc_server -->
<g id="node5" class="node">
<title>gnss_grpc_server</title>
<polygon fill="none" stroke="black" points="493.5,-503 369.5,-503 369.5,-467 493.5,-467 493.5,-503"/>
<text text-anchor="middle" x="431.5" y="-481.3" font-family="Times,serif" font-size="14.00">GNSS gRPC server</text>
</g>
<!-- gnss_grpc_server&#45;&gt;gnss_grpc_proxy -->
<g id="edge12" class="edge">
<title>gnss_grpc_server&#45;&gt;gnss_grpc_proxy</title>
<path fill="none" stroke="black" d="M432.14,-513.27C432.37,-522.94 432.63,-533.83 432.85,-543.52"/>
<polygon fill="black" stroke="black" points="435.64,-513.12 431.9,-503.2 428.64,-513.28 435.64,-513.12"/>
<polygon fill="black" stroke="black" points="429.36,-543.91 433.1,-553.82 436.36,-543.74 429.36,-543.91"/>
<text text-anchor="middle" x="445" y="-524.8" font-family="Times,serif" font-size="14.00">TCP</text>
</g>
<!-- host_bluetooth -->
<g id="node6" class="node">
<title>host_bluetooth</title>
<ellipse fill="none" stroke="black" cx="646.5" cy="-485" rx="135.38" ry="18"/>
<text text-anchor="middle" x="646.5" y="-481.3" font-family="Times,serif" font-size="14.00">Host bluetooth (netsim / rootcanal)</text>
</g>
<!-- host_confirmationui_in -->
<g id="node7" class="node">
<title>host_confirmationui_in</title>
<polygon fill="none" stroke="black" points="161,-308 0,-308 0,-272 161,-272 161,-308"/>
<text text-anchor="middle" x="80.5" y="-286.3" font-family="Times,serif" font-size="14.00">internal/confui_fifo_vm.in</text>
</g>
<!-- host_confirmationui_in&#45;&gt;webrtc -->
<g id="edge26" class="edge">
<title>host_confirmationui_in&#45;&gt;webrtc</title>
<path fill="none" stroke="black" d="M171.57,-308.16C318.89,-333.82 481.03,-358.99 553.75,-370.11"/>
<polygon fill="black" stroke="black" points="171.89,-304.67 161.43,-306.39 170.68,-311.56 171.89,-304.67"/>
</g>
<!-- host_confirmationui_out -->
<g id="node8" class="node">
<title>host_confirmationui_out</title>
<polygon fill="none" stroke="black" points="347.5,-308 179.5,-308 179.5,-272 347.5,-272 347.5,-308"/>
<text text-anchor="middle" x="263.5" y="-286.3" font-family="Times,serif" font-size="14.00">internal/confui_fifo_vm.out</text>
</g>
<!-- host_confirmationui_out&#45;&gt;webrtc -->
<g id="edge24" class="edge">
<title>host_confirmationui_out&#45;&gt;webrtc</title>
<path fill="none" stroke="black" d="M329.68,-308.1C394.51,-324.85 491.52,-349.91 547.76,-364.44"/>
<polygon fill="black" stroke="black" points="547.21,-367.91 557.77,-367.03 548.97,-361.14 547.21,-367.91"/>
</g>
<!-- keyboard_server -->
<g id="node9" class="node">
<title>keyboard_server</title>
<polygon fill="none" stroke="black" points="505.5,-308 365.5,-308 365.5,-272 505.5,-272 505.5,-308"/>
<text text-anchor="middle" x="435.5" y="-286.3" font-family="Times,serif" font-size="14.00">internal/keyboard.sock</text>
</g>
<!-- keyboard_server&#45;&gt;webrtc -->
<g id="edge20" class="edge">
<title>keyboard_server&#45;&gt;webrtc</title>
<path fill="none" stroke="black" d="M476.3,-313.09C505.18,-328.72 542.97,-349.18 567.49,-362.46"/>
<polygon fill="black" stroke="black" points="477.73,-309.88 467.27,-308.2 474.4,-316.04 477.73,-309.88"/>
</g>
<!-- touch_server -->
<g id="node10" class="node">
<title>touch_server</title>
<polygon fill="none" stroke="black" points="661,-308 524,-308 524,-272 661,-272 661,-308"/>
<text text-anchor="middle" x="592.5" y="-286.3" font-family="Times,serif" font-size="14.00">internal/touch_N.sock</text>
</g>
<!-- touch_server&#45;&gt;webrtc -->
<g id="edge22" class="edge">
<title>touch_server&#45;&gt;webrtc</title>
<path fill="none" stroke="black" d="M592.5,-318.27C592.5,-331.58 592.5,-347.19 592.5,-358.82"/>
<polygon fill="black" stroke="black" points="596,-318.2 592.5,-308.2 589,-318.2 596,-318.2"/>
</g>
<!-- run_cvd -->
<g id="node11" class="node">
<title>run_cvd</title>
<ellipse fill="none" stroke="black" cx="839.5" cy="-485" rx="39.79" ry="18"/>
<text text-anchor="middle" x="839.5" y="-481.3" font-family="Times,serif" font-size="14.00">run_cvd</text>
</g>
<!-- operator_proxy -->
<g id="node12" class="node">
<title>operator_proxy</title>
<ellipse fill="none" stroke="black" cx="866.5" cy="-659" rx="64.99" ry="18"/>
<text text-anchor="middle" x="866.5" y="-655.3" font-family="Times,serif" font-size="14.00">operator_proxy</text>
</g>
<!-- operator_proxy&#45;&gt;browser -->
<g id="edge3" class="edge">
<title>operator_proxy&#45;&gt;browser</title>
<path fill="none" stroke="black" d="M866.18,-687.27C866.07,-696.94 865.94,-707.83 865.82,-717.52"/>
<polygon fill="black" stroke="black" points="869.68,-687.24 866.3,-677.2 862.68,-687.16 869.68,-687.24"/>
<polygon fill="black" stroke="black" points="862.32,-717.78 865.7,-727.82 869.32,-717.87 862.32,-717.78"/>
<text text-anchor="start" x="865.5" y="-699.8" font-family="Times,serif" font-size="14.00"> </text>
<text text-anchor="start" x="869.5" y="-699.8" font-family="Times,serif" font-style="italic" font-size="14.00">HTTPS</text>
<text text-anchor="start" x="909.5" y="-699.8" font-family="Times,serif" font-size="14.00"> (8443) </text>
</g>
<!-- socket_vsock_proxy -->
<g id="node14" class="node">
<title>socket_vsock_proxy</title>
<ellipse fill="none" stroke="black" cx="991.5" cy="-130" rx="83.39" ry="18"/>
<text text-anchor="middle" x="991.5" y="-126.3" font-family="Times,serif" font-size="14.00">socket_vsock_proxy</text>
</g>
<!-- socket_vsock_proxy&#45;&gt;webrtc -->
<g id="edge14" class="edge">
<title>socket_vsock_proxy&#45;&gt;webrtc</title>
<path fill="none" stroke="black" d="M1001.76,-157.9C1014.37,-196.06 1030.04,-265.94 994.5,-308 950.21,-360.41 742.41,-372.44 644.19,-375.19"/>
<polygon fill="black" stroke="black" points="1004.91,-156.33 998.32,-148.03 998.3,-158.62 1004.91,-156.33"/>
<polygon fill="black" stroke="black" points="644.09,-371.69 634.18,-375.45 644.27,-378.69 644.09,-371.69"/>
</g>
<!-- wayland_socket -->
<g id="node15" class="node">
<title>wayland_socket</title>
<polygon fill="none" stroke="black" points="807.5,-308 679.5,-308 679.5,-272 807.5,-272 807.5,-308"/>
<text text-anchor="middle" x="743.5" y="-286.3" font-family="Times,serif" font-size="14.00">internal/frames.sock</text>
</g>
<!-- wayland_socket&#45;&gt;webrtc -->
<g id="edge18" class="edge">
<title>wayland_socket&#45;&gt;webrtc</title>
<path fill="none" stroke="black" d="M703.95,-313.26C679.64,-326.95 648.83,-344.29 625.77,-357.27"/>
<polygon fill="black" stroke="black" points="705.95,-316.16 712.94,-308.2 702.51,-310.06 705.95,-316.16"/>
<polygon fill="black" stroke="black" points="624.03,-354.23 617.03,-362.19 627.46,-360.33 624.03,-354.23"/>
<text text-anchor="start" x="676.5" y="-330.8" font-family="Times,serif" font-size="14.00"> </text>
<text text-anchor="start" x="680.5" y="-330.8" font-family="Times,serif" font-style="italic" font-size="14.00">Wayland</text>
<text text-anchor="start" x="728.5" y="-330.8" font-family="Times,serif" font-size="14.00"> </text>
</g>
<!-- webrtc&#45;&gt;browser -->
<g id="edge2" class="edge">
<title>webrtc&#45;&gt;browser</title>
<path fill="none" stroke="black" d="M540.91,-379.2C444.66,-382.42 242.54,-394.12 188.5,-436 170.23,-450.16 168.5,-460.89 168.5,-484 168.5,-484 168.5,-484 168.5,-660 168.5,-725.2 655.23,-740.79 815.21,-744.15"/>
<polygon fill="black" stroke="black" points="541.12,-382.7 551,-378.88 540.9,-375.7 541.12,-382.7"/>
<polygon fill="black" stroke="black" points="815.2,-747.65 825.27,-744.35 815.34,-740.65 815.2,-747.65"/>
<text text-anchor="start" x="168.5" y="-569.3" font-family="Times,serif" font-size="14.00"> </text>
<text text-anchor="start" x="172.5" y="-569.3" font-family="Times,serif" font-style="italic" font-size="14.00">WebRTC</text>
<text text-anchor="start" x="221.5" y="-569.3" font-family="Times,serif" font-size="14.00"> </text>
</g>
<!-- webrtc&#45;&gt;confirmationui_sign -->
<g id="edge9" class="edge">
<title>webrtc&#45;&gt;confirmationui_sign</title>
<path fill="none" stroke="black" d="M544.11,-386.23C496.36,-395.24 421.82,-411.72 360.5,-436 342.96,-442.95 324.56,-452.82 309.3,-461.81"/>
<polygon fill="black" stroke="black" points="544.98,-389.63 554.17,-384.37 543.7,-382.75 544.98,-389.63"/>
<polygon fill="black" stroke="black" points="307.48,-458.82 300.71,-466.97 311.09,-464.82 307.48,-458.82"/>
</g>
<!-- webrtc&#45;&gt;gnss_grpc_server -->
<g id="edge11" class="edge">
<title>webrtc&#45;&gt;gnss_grpc_server</title>
<path fill="none" stroke="black" d="M561.23,-397.92C543.87,-409.03 521.92,-423.18 502.5,-436 490.11,-444.18 476.59,-453.27 464.71,-461.33"/>
<polygon fill="black" stroke="black" points="563.31,-400.74 569.85,-392.4 559.54,-394.84 563.31,-400.74"/>
<polygon fill="black" stroke="black" points="462.69,-458.47 456.38,-466.98 466.62,-464.26 462.69,-458.47"/>
<text text-anchor="middle" x="549" y="-416.8" font-family="Times,serif" font-size="14.00">TCP</text>
</g>
<!-- webrtc&#45;&gt;host_bluetooth -->
<g id="edge8" class="edge">
<title>webrtc&#45;&gt;host_bluetooth</title>
<path fill="none" stroke="black" d="M601.18,-395.03C609.84,-412.03 623.26,-438.38 633.25,-457.99"/>
<polygon fill="black" stroke="black" points="630.19,-459.69 637.85,-467.01 636.42,-456.51 630.19,-459.69"/>
</g>
<!-- webrtc&#45;&gt;run_cvd -->
<g id="edge7" class="edge">
<title>webrtc&#45;&gt;run_cvd</title>
<path fill="none" stroke="black" d="M641.51,-385.46C683.29,-393.38 743.82,-408.65 790.5,-436 804.47,-444.19 817.43,-457.22 826.5,-467.64"/>
<polygon fill="black" stroke="black" points="642.05,-382 631.58,-383.65 640.79,-388.89 642.05,-382"/>
</g>
<!-- operator_socket -->
<g id="node19" class="node">
<title>operator_socket</title>
<polygon fill="none" stroke="black" points="1038,-503 897,-503 897,-467 1038,-467 1038,-503"/>
<text text-anchor="middle" x="967.5" y="-481.3" font-family="Times,serif" font-size="14.00">/run/cuttlefish/operator</text>
</g>
<!-- webrtc&#45;&gt;operator_socket -->
<g id="edge6" class="edge">
<title>webrtc&#45;&gt;operator_socket</title>
<path fill="none" stroke="black" d="M643.01,-382.43C703.17,-388.93 805.89,-403.95 888.5,-436 904.95,-442.38 921.83,-452.13 935.75,-461.18"/>
<polygon fill="black" stroke="black" points="643.32,-378.94 633.01,-381.38 642.59,-385.9 643.32,-378.94"/>
<polygon fill="black" stroke="black" points="934.18,-464.34 944.44,-466.99 938.07,-458.52 934.18,-464.34"/>
<text text-anchor="start" x="865.5" y="-417.8" font-family="Times,serif" font-size="14.00"> </text>
<text text-anchor="start" x="869.5" y="-417.8" font-family="Times,serif" font-style="italic" font-size="14.00">JSON</text>
<text text-anchor="start" x="901.5" y="-417.8" font-family="Times,serif" font-size="14.00"> </text>
</g>
<!-- vmm -->
<g id="node17" class="node">
<title>vmm</title>
<ellipse fill="none" stroke="black" cx="592.5" cy="-203" rx="37.09" ry="18"/>
<text text-anchor="middle" x="592.5" y="-199.3" font-family="Times,serif" font-size="14.00">crosvm</text>
</g>
<!-- vmm&#45;&gt;audio_server -->
<g id="edge16" class="edge">
<title>vmm&#45;&gt;audio_server</title>
<path fill="none" stroke="black" d="M635.32,-213.82C664.03,-220.56 702.65,-229.88 736.5,-239 771.02,-248.3 809.24,-259.52 840.59,-268.98"/>
<polygon fill="black" stroke="black" points="635.75,-210.33 625.22,-211.47 634.16,-217.15 635.75,-210.33"/>
<polygon fill="black" stroke="black" points="839.93,-272.44 850.51,-271.99 841.96,-265.74 839.93,-272.44"/>
</g>
<!-- vmm&#45;&gt;host_confirmationui_in -->
<g id="edge25" class="edge">
<title>vmm&#45;&gt;host_confirmationui_in</title>
<path fill="none" stroke="black" d="M547.38,-210.86C470.11,-222.71 307.51,-248.03 170.5,-272 167.52,-272.52 164.49,-273.06 161.43,-273.61"/>
<polygon fill="black" stroke="black" points="548.35,-214.25 557.71,-209.28 547.3,-207.33 548.35,-214.25"/>
</g>
<!-- vmm&#45;&gt;host_confirmationui_out -->
<g id="edge23" class="edge">
<title>vmm&#45;&gt;host_confirmationui_out</title>
<path fill="none" stroke="black" d="M560.66,-212.23C510.01,-225.31 409.69,-251.23 339.69,-269.31"/>
<polygon fill="black" stroke="black" points="338.4,-266.03 329.6,-271.92 340.15,-272.81 338.4,-266.03"/>
</g>
<!-- vmm&#45;&gt;keyboard_server -->
<g id="edge19" class="edge">
<title>vmm&#45;&gt;keyboard_server</title>
<path fill="none" stroke="black" d="M559.54,-221.84C532.35,-236.57 494.02,-257.32 467.18,-271.85"/>
<polygon fill="black" stroke="black" points="561.53,-224.75 568.66,-216.91 558.19,-218.59 561.53,-224.75"/>
</g>
<!-- vmm&#45;&gt;touch_server -->
<g id="edge21" class="edge">
<title>vmm&#45;&gt;touch_server</title>
<path fill="none" stroke="black" d="M592.5,-231.27C592.5,-244.58 592.5,-260.19 592.5,-271.82"/>
<polygon fill="black" stroke="black" points="596,-231.2 592.5,-221.2 589,-231.2 596,-231.2"/>
</g>
<!-- vmm&#45;&gt;wayland_socket -->
<g id="edge17" class="edge">
<title>vmm&#45;&gt;wayland_socket</title>
<path fill="none" stroke="black" d="M624.55,-222.04C647.86,-235.16 679.55,-253 704.37,-266.97"/>
<polygon fill="black" stroke="black" points="626.19,-218.95 615.76,-217.09 622.76,-225.05 626.19,-218.95"/>
<polygon fill="black" stroke="black" points="702.74,-270.07 713.17,-271.93 706.17,-263.97 702.74,-270.07"/>
<text text-anchor="start" x="676.5" y="-243.8" font-family="Times,serif" font-size="14.00"> </text>
<text text-anchor="start" x="680.5" y="-243.8" font-family="Times,serif" font-style="italic" font-size="14.00">Wayland</text>
<text text-anchor="start" x="728.5" y="-243.8" font-family="Times,serif" font-size="14.00"> </text>
</g>
<!-- operator -->
<g id="node18" class="node">
<title>operator</title>
<ellipse fill="none" stroke="black" cx="968.5" cy="-572" rx="73.39" ry="18"/>
<text text-anchor="middle" x="968.5" y="-568.3" font-family="Times,serif" font-size="14.00">Host Orchestrator</text>
</g>
<!-- operator&#45;&gt;browser -->
<g id="edge1" class="edge">
<title>operator&#45;&gt;browser</title>
<path fill="none" stroke="black" d="M973.44,-600.35C977.26,-630.36 978.44,-678.45 954.5,-710 944.54,-723.13 928.92,-731.34 913.54,-736.47"/>
<polygon fill="black" stroke="black" points="976.87,-599.57 971.96,-590.18 969.94,-600.58 976.87,-599.57"/>
<polygon fill="black" stroke="black" points="912.12,-733.24 903.52,-739.42 914.1,-739.95 912.12,-733.24"/>
<text text-anchor="start" x="974.5" y="-656.3" font-family="Times,serif" font-size="14.00"> </text>
<text text-anchor="start" x="978.5" y="-656.3" font-family="Times,serif" font-style="italic" font-size="14.00">HTTPS</text>
<text text-anchor="start" x="1018.5" y="-656.3" font-family="Times,serif" font-size="14.00"> (1443) </text>
</g>
<!-- operator&#45;&gt;operator_proxy -->
<g id="edge4" class="edge">
<title>operator&#45;&gt;operator_proxy</title>
<path fill="none" stroke="black" d="M900.95,-586.79C890.03,-591.81 879.9,-598.66 872.5,-608 867.52,-614.29 865.33,-622.49 864.59,-630.43"/>
<polygon fill="black" stroke="black" points="902.33,-590.01 910.26,-582.99 899.68,-583.53 902.33,-590.01"/>
<polygon fill="black" stroke="black" points="861.08,-630.45 864.31,-640.54 868.08,-630.63 861.08,-630.45"/>
<text text-anchor="start" x="872.5" y="-612.8" font-family="Times,serif" font-size="14.00"> </text>
<text text-anchor="start" x="876.5" y="-612.8" font-family="Times,serif" font-style="italic" font-size="14.00">HTTP</text>
<text text-anchor="start" x="910.5" y="-612.8" font-family="Times,serif" font-size="14.00"> (1080) </text>
</g>
<!-- operator_socket&#45;&gt;operator -->
<g id="edge5" class="edge">
<title>operator_socket&#45;&gt;operator</title>
<path fill="none" stroke="black" d="M967.82,-513.27C967.93,-522.94 968.06,-533.83 968.18,-543.52"/>
<polygon fill="black" stroke="black" points="971.32,-513.16 967.7,-503.2 964.32,-513.24 971.32,-513.16"/>
<polygon fill="black" stroke="black" points="964.68,-543.87 968.3,-553.82 971.68,-543.78 964.68,-543.87"/>
<text text-anchor="start" x="967.5" y="-525.8" font-family="Times,serif" font-size="14.00"> </text>
<text text-anchor="start" x="971.5" y="-525.8" font-family="Times,serif" font-style="italic" font-size="14.00">JSON</text>
<text text-anchor="start" x="1003.5" y="-525.8" font-family="Times,serif" font-size="14.00"> </text>
</g>
<!-- confirmationui_console -->
<g id="node20" class="node">
<title>confirmationui_console</title>
<polygon fill="none" stroke="black" points="848.5,-148 778.5,-148 778.5,-112 848.5,-112 848.5,-148"/>
<text text-anchor="middle" x="813.5" y="-126.3" font-family="Times,serif" font-size="14.00">/dev/hvc8</text>
</g>
<!-- confirmationui_console&#45;&gt;vmm -->
<g id="edge28" class="edge">
<title>confirmationui_console&#45;&gt;vmm</title>
<path fill="none" stroke="black" d="M777.08,-152.64C774.55,-153.85 772.01,-154.98 769.5,-156 725.67,-173.79 672.9,-186.45 636.45,-193.93"/>
<polygon fill="black" stroke="black" points="778.81,-155.68 786.12,-148.01 775.62,-149.45 778.81,-155.68"/>
<polygon fill="black" stroke="black" points="635.74,-190.5 626.62,-195.9 637.11,-197.37 635.74,-190.5"/>
</g>
<!-- keyboard_input -->
<g id="node21" class="node">
<title>keyboard_input</title>
<polygon fill="none" stroke="black" points="590.5,-148 418.5,-148 418.5,-112 590.5,-112 590.5,-148"/>
<text text-anchor="middle" x="504.5" y="-126.3" font-family="Times,serif" font-size="14.00">/dev/input/event3 | keyboard</text>
</g>
<!-- keyboard_input&#45;&gt;vmm -->
<g id="edge29" class="edge">
<title>keyboard_input&#45;&gt;vmm</title>
<path fill="none" stroke="black" d="M525.8,-148.19C537.9,-157.95 553.16,-170.26 566.02,-180.64"/>
<polygon fill="black" stroke="black" points="564.1,-183.58 574.08,-187.13 568.49,-178.13 564.1,-183.58"/>
</g>
<!-- touch_input -->
<g id="node22" class="node">
<title>touch_input</title>
<polygon fill="none" stroke="black" points="760.5,-148 608.5,-148 608.5,-112 760.5,-112 760.5,-148"/>
<text text-anchor="middle" x="684.5" y="-126.3" font-family="Times,serif" font-size="14.00">/dev/input/event2 | touch</text>
</g>
<!-- touch_input&#45;&gt;vmm -->
<g id="edge30" class="edge">
<title>touch_input&#45;&gt;vmm</title>
<path fill="none" stroke="black" d="M662.23,-148.19C649.37,-158.11 633.1,-170.66 619.52,-181.15"/>
<polygon fill="black" stroke="black" points="617.24,-178.49 611.46,-187.37 621.51,-184.03 617.24,-178.49"/>
</g>
<!-- adb_daemon -->
<g id="node23" class="node">
<title>adb_daemon</title>
<ellipse fill="none" stroke="black" cx="786.5" cy="-57" rx="61.99" ry="18"/>
<text text-anchor="middle" x="786.5" y="-53.3" font-family="Times,serif" font-size="14.00">ADB Daemon</text>
</g>
<!-- adb_daemon&#45;&gt;socket_vsock_proxy -->
<g id="edge13" class="edge">
<title>adb_daemon&#45;&gt;socket_vsock_proxy</title>
<path fill="none" stroke="black" d="M834.07,-74.48C865.68,-85.42 907.17,-99.79 939.63,-111.03"/>
<polygon fill="black" stroke="black" points="835.17,-71.15 824.58,-71.19 832.88,-77.77 835.17,-71.15"/>
<polygon fill="black" stroke="black" points="938.79,-114.45 949.39,-114.41 941.08,-107.83 938.79,-114.45"/>
</g>
<!-- confirmationui -->
<g id="node24" class="node">
<title>confirmationui</title>
<ellipse fill="none" stroke="black" cx="618.5" cy="-57" rx="88.28" ry="18"/>
<text text-anchor="middle" x="618.5" y="-53.3" font-family="Times,serif" font-size="14.00">ConfirmationUI HAL</text>
</g>
<!-- confirmationui&#45;&gt;confirmationui_console -->
<g id="edge27" class="edge">
<title>confirmationui&#45;&gt;confirmationui_console</title>
<path fill="none" stroke="black" d="M670.49,-76.23C697.38,-85.74 730.94,-97.74 768.76,-111.76"/>
<polygon fill="black" stroke="black" points="671.51,-72.87 660.91,-72.84 669.17,-79.48 671.51,-72.87"/>
<polygon fill="black" stroke="black" points="767.87,-115.17 778.47,-115.37 770.31,-108.61 767.87,-115.17"/>
</g>
</g>
</svg>