a2acalling 0.6.74 → 0.6.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/.a2a-manifest.json +2 -2
  2. package/.c8rc.json +16 -0
  3. package/.node-version +1 -0
  4. package/.serena/project.yml +126 -0
  5. package/ARCHITECTURE.md +11 -0
  6. package/CONVENTIONS.md +9 -0
  7. package/coverage/base.css +224 -0
  8. package/coverage/block-navigation.js +87 -0
  9. package/coverage/favicon.png +0 -0
  10. package/coverage/index.html +146 -0
  11. package/coverage/prettify.css +1 -0
  12. package/coverage/prettify.js +2 -0
  13. package/coverage/sort-arrow-sprite.png +0 -0
  14. package/coverage/sorter.js +210 -0
  15. package/coverage/src/index.html +131 -0
  16. package/coverage/src/index.js.html +313 -0
  17. package/coverage/src/lib/agent-card.js.html +418 -0
  18. package/coverage/src/lib/call-monitor.js.html +700 -0
  19. package/coverage/src/lib/callbook.js.html +1183 -0
  20. package/coverage/src/lib/claude-subagent.js.html +2173 -0
  21. package/coverage/src/lib/client.js.html +2134 -0
  22. package/coverage/src/lib/config.js.html +1525 -0
  23. package/coverage/src/lib/conversation-driver.js.html +1909 -0
  24. package/coverage/src/lib/conversations.js.html +2575 -0
  25. package/coverage/src/lib/crypto.js.html +424 -0
  26. package/coverage/src/lib/dashboard-events.js.html +724 -0
  27. package/coverage/src/lib/disclosure.js.html +2461 -0
  28. package/coverage/src/lib/external-ip.js.html +718 -0
  29. package/coverage/src/lib/index.html +506 -0
  30. package/coverage/src/lib/invite-host.js.html +754 -0
  31. package/coverage/src/lib/local-request.js.html +292 -0
  32. package/coverage/src/lib/logger.js.html +2116 -0
  33. package/coverage/src/lib/openclaw-integration.js.html +1102 -0
  34. package/coverage/src/lib/pid-file.js.html +394 -0
  35. package/coverage/src/lib/port-scanner.js.html +334 -0
  36. package/coverage/src/lib/prompt-template.js.html +1150 -0
  37. package/coverage/src/lib/runtime-adapter.js.html +2188 -0
  38. package/coverage/src/lib/summarizer.js.html +553 -0
  39. package/coverage/src/lib/summary-formatter.js.html +589 -0
  40. package/coverage/src/lib/summary-prompt.js.html +694 -0
  41. package/coverage/src/lib/tokens.js.html +2689 -0
  42. package/coverage/src/lib/turn-timeout.js.html +241 -0
  43. package/coverage/src/lib/update-checker.js.html +364 -0
  44. package/coverage/src/lib/update-manager.js.html +1024 -0
  45. package/coverage/src/routes/a2a.js.html +3724 -0
  46. package/coverage/src/routes/callbook.js.html +511 -0
  47. package/coverage/src/routes/dashboard.js.html +4819 -0
  48. package/coverage/src/routes/index.html +146 -0
  49. package/coverage/src/server.js.html +3622 -0
  50. package/coverage/tmp/coverage-1605378-1772576706365-0.json +1 -0
  51. package/coverage/tmp/coverage-1605384-1772576607459-0.json +1 -0
  52. package/coverage/tmp/coverage-1605410-1772576631155-0.json +1 -0
  53. package/coverage/tmp/coverage-1606942-1772576636869-0.json +1 -0
  54. package/coverage/tmp/coverage-1607004-1772576637454-0.json +1 -0
  55. package/coverage/tmp/coverage-1607044-1772576637876-0.json +1 -0
  56. package/coverage/tmp/coverage-1607096-1772576638356-0.json +1 -0
  57. package/coverage/tmp/coverage-1607145-1772576638777-0.json +1 -0
  58. package/coverage/tmp/coverage-1607201-1772576639277-0.json +1 -0
  59. package/coverage/tmp/coverage-1607247-1772576639755-0.json +1 -0
  60. package/coverage/tmp/coverage-1607317-1772576640083-0.json +1 -0
  61. package/coverage/tmp/coverage-1607381-1772576640465-0.json +1 -0
  62. package/coverage/tmp/coverage-1607446-1772576640868-0.json +1 -0
  63. package/coverage/tmp/coverage-1607501-1772576641662-0.json +1 -0
  64. package/coverage/tmp/coverage-1607534-1772576641565-0.json +1 -0
  65. package/coverage/tmp/coverage-1607627-1772576641871-0.json +1 -0
  66. package/coverage/tmp/coverage-1607665-1772576642172-0.json +1 -0
  67. package/coverage/tmp/coverage-1607714-1772576642577-0.json +1 -0
  68. package/coverage/tmp/coverage-1607788-1772576643466-0.json +1 -0
  69. package/coverage/tmp/coverage-1607924-1772576644678-0.json +1 -0
  70. package/coverage/tmp/coverage-1607978-1772576645154-0.json +1 -0
  71. package/coverage/tmp/coverage-1608035-1772576645564-0.json +1 -0
  72. package/coverage/tmp/coverage-1608106-1772576645967-0.json +1 -0
  73. package/coverage/tmp/coverage-1608179-1772576648656-0.json +1 -0
  74. package/coverage/tmp/coverage-1608196-1772576647367-0.json +1 -0
  75. package/coverage/tmp/coverage-1608217-1772576648557-0.json +1 -0
  76. package/coverage/tmp/coverage-1608256-1772576651378-0.json +1 -0
  77. package/coverage/tmp/coverage-1608265-1772576650058-0.json +1 -0
  78. package/coverage/tmp/coverage-1608289-1772576651358-0.json +1 -0
  79. package/coverage/tmp/coverage-1608591-1772576660465-0.json +1 -0
  80. package/coverage/tmp/coverage-1608648-1772576659272-0.json +1 -0
  81. package/coverage/tmp/coverage-1608665-1772576660374-0.json +1 -0
  82. package/coverage/tmp/coverage-1608677-1772576661268-0.json +1 -0
  83. package/coverage/tmp/coverage-1608684-1772576663968-0.json +1 -0
  84. package/coverage/tmp/coverage-1608692-1772576662575-0.json +1 -0
  85. package/coverage/tmp/coverage-1608701-1772576663873-0.json +1 -0
  86. package/coverage/tmp/coverage-1608718-1772576666674-0.json +1 -0
  87. package/coverage/tmp/coverage-1608725-1772576665463-0.json +1 -0
  88. package/coverage/tmp/coverage-1608738-1772576666577-0.json +1 -0
  89. package/coverage/tmp/coverage-1608753-1772576669664-0.json +1 -0
  90. package/coverage/tmp/coverage-1608763-1772576668275-0.json +1 -0
  91. package/coverage/tmp/coverage-1608771-1772576669563-0.json +1 -0
  92. package/coverage/tmp/coverage-1608828-1772576676574-0.json +1 -0
  93. package/coverage/tmp/coverage-1609244-1772576675272-0.json +1 -0
  94. package/coverage/tmp/coverage-1609342-1772576676478-0.json +1 -0
  95. package/coverage/tmp/coverage-1609450-1772576686954-0.json +1 -0
  96. package/coverage/tmp/coverage-1609841-1772576685466-0.json +1 -0
  97. package/coverage/tmp/coverage-1609925-1772576686855-0.json +1 -0
  98. package/coverage/tmp/coverage-1610399-1772576692469-0.json +1 -0
  99. package/coverage/tmp/coverage-1611283-1772576703062-0.json +1 -0
  100. package/coverage/tmp/coverage-1611294-1772576703755-0.json +1 -0
  101. package/docs/plans/2026-03-03-a2a-91-macos-packaging-plan.md +144 -0
  102. package/docs/signing-setup.md +49 -0
  103. package/native/macos/certs/appldevcert.cer +0 -0
  104. package/native/macos/src-tauri/binaries/.gitkeep +0 -0
  105. package/native/macos/src-tauri/capabilities/default.json +11 -1
  106. package/native/macos/src-tauri/entitlements.plist +14 -0
  107. package/native/macos/src-tauri/src/discovery.rs +14 -3
  108. package/native/macos/src-tauri/src/health.rs +4 -0
  109. package/native/macos/src-tauri/src/lib.rs +52 -11
  110. package/native/macos/src-tauri/src/server.rs +262 -26
  111. package/native/macos/src-tauri/tauri.conf.json +13 -4
  112. package/package.json +7 -2
  113. package/pkg.config.json +14 -0
  114. package/scripts/build-standalone.sh +106 -0
  115. package/scripts/smoke-test-standalone.sh +101 -0
  116. package/scripts/sync-version.sh +28 -0
  117. package/scripts/verify-app-bundle.sh +34 -0
  118. package/.maestro/inbox/release-workflow-spam.md +0 -25
@@ -0,0 +1,1150 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/lib/prompt-template.js</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../prettify.css" />
9
+ <link rel="stylesheet" href="../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">src/lib</a> prompt-template.js</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">93.52% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>332/355</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">61.11% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>22/36</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">100% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>4/4</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">93.52% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>332/355</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">15x</span>
422
+ <span class="cline-any cline-yes">15x</span>
423
+ <span class="cline-any cline-yes">15x</span>
424
+ <span class="cline-any cline-yes">15x</span>
425
+ <span class="cline-any cline-yes">15x</span>
426
+ <span class="cline-any cline-yes">15x</span>
427
+ <span class="cline-any cline-yes">15x</span>
428
+ <span class="cline-any cline-yes">15x</span>
429
+ <span class="cline-any cline-yes">15x</span>
430
+ <span class="cline-any cline-yes">15x</span>
431
+ <span class="cline-any cline-yes">15x</span>
432
+ <span class="cline-any cline-yes">15x</span>
433
+ <span class="cline-any cline-yes">15x</span>
434
+ <span class="cline-any cline-yes">142x</span>
435
+ <span class="cline-any cline-yes">142x</span>
436
+ <span class="cline-any cline-yes">120x</span>
437
+ <span class="cline-any cline-yes">120x</span>
438
+ <span class="cline-any cline-yes">22x</span>
439
+ <span class="cline-any cline-yes">142x</span>
440
+ <span class="cline-any cline-yes">15x</span>
441
+ <span class="cline-any cline-yes">15x</span>
442
+ <span class="cline-any cline-yes">15x</span>
443
+ <span class="cline-any cline-yes">15x</span>
444
+ <span class="cline-any cline-yes">15x</span>
445
+ <span class="cline-any cline-yes">15x</span>
446
+ <span class="cline-any cline-yes">15x</span>
447
+ <span class="cline-any cline-yes">15x</span>
448
+ <span class="cline-any cline-yes">15x</span>
449
+ <span class="cline-any cline-yes">15x</span>
450
+ <span class="cline-any cline-yes">15x</span>
451
+ <span class="cline-any cline-yes">15x</span>
452
+ <span class="cline-any cline-yes">15x</span>
453
+ <span class="cline-any cline-yes">15x</span>
454
+ <span class="cline-any cline-yes">15x</span>
455
+ <span class="cline-any cline-yes">15x</span>
456
+ <span class="cline-any cline-yes">15x</span>
457
+ <span class="cline-any cline-yes">15x</span>
458
+ <span class="cline-any cline-yes">15x</span>
459
+ <span class="cline-any cline-yes">15x</span>
460
+ <span class="cline-any cline-yes">15x</span>
461
+ <span class="cline-any cline-yes">15x</span>
462
+ <span class="cline-any cline-yes">15x</span>
463
+ <span class="cline-any cline-yes">15x</span>
464
+ <span class="cline-any cline-yes">15x</span>
465
+ <span class="cline-any cline-yes">15x</span>
466
+ <span class="cline-any cline-yes">15x</span>
467
+ <span class="cline-any cline-yes">15x</span>
468
+ <span class="cline-any cline-yes">15x</span>
469
+ <span class="cline-any cline-yes">15x</span>
470
+ <span class="cline-any cline-yes">15x</span>
471
+ <span class="cline-any cline-yes">15x</span>
472
+ <span class="cline-any cline-yes">15x</span>
473
+ <span class="cline-any cline-yes">15x</span>
474
+ <span class="cline-any cline-yes">15x</span>
475
+ <span class="cline-any cline-yes">15x</span>
476
+ <span class="cline-any cline-yes">15x</span>
477
+ <span class="cline-any cline-yes">15x</span>
478
+ <span class="cline-any cline-yes">15x</span>
479
+ <span class="cline-any cline-yes">15x</span>
480
+ <span class="cline-any cline-yes">15x</span>
481
+ <span class="cline-any cline-yes">15x</span>
482
+ <span class="cline-any cline-yes">15x</span>
483
+ <span class="cline-any cline-yes">15x</span>
484
+ <span class="cline-any cline-yes">15x</span>
485
+ <span class="cline-any cline-yes">15x</span>
486
+ <span class="cline-any cline-yes">15x</span>
487
+ <span class="cline-any cline-yes">15x</span>
488
+ <span class="cline-any cline-yes">15x</span>
489
+ <span class="cline-any cline-yes">15x</span>
490
+ <span class="cline-any cline-yes">15x</span>
491
+ <span class="cline-any cline-yes">15x</span>
492
+ <span class="cline-any cline-yes">15x</span>
493
+ <span class="cline-any cline-yes">7x</span>
494
+ <span class="cline-any cline-yes">15x</span>
495
+ <span class="cline-any cline-yes">15x</span>
496
+ <span class="cline-any cline-yes">15x</span>
497
+ <span class="cline-any cline-yes">15x</span>
498
+ <span class="cline-any cline-yes">15x</span>
499
+ <span class="cline-any cline-yes">15x</span>
500
+ <span class="cline-any cline-yes">15x</span>
501
+ <span class="cline-any cline-yes">15x</span>
502
+ <span class="cline-any cline-yes">15x</span>
503
+ <span class="cline-any cline-yes">15x</span>
504
+ <span class="cline-any cline-yes">15x</span>
505
+ <span class="cline-any cline-yes">15x</span>
506
+ <span class="cline-any cline-yes">15x</span>
507
+ <span class="cline-any cline-yes">15x</span>
508
+ <span class="cline-any cline-yes">15x</span>
509
+ <span class="cline-any cline-yes">15x</span>
510
+ <span class="cline-any cline-yes">15x</span>
511
+ <span class="cline-any cline-yes">15x</span>
512
+ <span class="cline-any cline-yes">15x</span>
513
+ <span class="cline-any cline-yes">15x</span>
514
+ <span class="cline-any cline-yes">15x</span>
515
+ <span class="cline-any cline-yes">15x</span>
516
+ <span class="cline-any cline-yes">15x</span>
517
+ <span class="cline-any cline-yes">15x</span>
518
+ <span class="cline-any cline-yes">15x</span>
519
+ <span class="cline-any cline-yes">15x</span>
520
+ <span class="cline-any cline-yes">15x</span>
521
+ <span class="cline-any cline-yes">15x</span>
522
+ <span class="cline-any cline-yes">15x</span>
523
+ <span class="cline-any cline-yes">15x</span>
524
+ <span class="cline-any cline-yes">15x</span>
525
+ <span class="cline-any cline-yes">15x</span>
526
+ <span class="cline-any cline-yes">15x</span>
527
+ <span class="cline-any cline-yes">15x</span>
528
+ <span class="cline-any cline-yes">15x</span>
529
+ <span class="cline-any cline-yes">15x</span>
530
+ <span class="cline-any cline-yes">15x</span>
531
+ <span class="cline-any cline-yes">15x</span>
532
+ <span class="cline-any cline-yes">15x</span>
533
+ <span class="cline-any cline-yes">15x</span>
534
+ <span class="cline-any cline-yes">15x</span>
535
+ <span class="cline-any cline-yes">15x</span>
536
+ <span class="cline-any cline-yes">15x</span>
537
+ <span class="cline-any cline-yes">15x</span>
538
+ <span class="cline-any cline-yes">15x</span>
539
+ <span class="cline-any cline-yes">15x</span>
540
+ <span class="cline-any cline-yes">15x</span>
541
+ <span class="cline-any cline-yes">15x</span>
542
+ <span class="cline-any cline-yes">15x</span>
543
+ <span class="cline-any cline-yes">15x</span>
544
+ <span class="cline-any cline-yes">15x</span>
545
+ <span class="cline-any cline-yes">15x</span>
546
+ <span class="cline-any cline-yes">15x</span>
547
+ <span class="cline-any cline-yes">15x</span>
548
+ <span class="cline-any cline-yes">15x</span>
549
+ <span class="cline-any cline-yes">15x</span>
550
+ <span class="cline-any cline-yes">15x</span>
551
+ <span class="cline-any cline-yes">15x</span>
552
+ <span class="cline-any cline-yes">15x</span>
553
+ <span class="cline-any cline-yes">15x</span>
554
+ <span class="cline-any cline-yes">15x</span>
555
+ <span class="cline-any cline-yes">15x</span>
556
+ <span class="cline-any cline-yes">15x</span>
557
+ <span class="cline-any cline-yes">15x</span>
558
+ <span class="cline-any cline-yes">15x</span>
559
+ <span class="cline-any cline-yes">15x</span>
560
+ <span class="cline-any cline-yes">15x</span>
561
+ <span class="cline-any cline-yes">15x</span>
562
+ <span class="cline-any cline-yes">15x</span>
563
+ <span class="cline-any cline-yes">15x</span>
564
+ <span class="cline-any cline-yes">15x</span>
565
+ <span class="cline-any cline-yes">15x</span>
566
+ <span class="cline-any cline-yes">15x</span>
567
+ <span class="cline-any cline-yes">15x</span>
568
+ <span class="cline-any cline-yes">15x</span>
569
+ <span class="cline-any cline-yes">15x</span>
570
+ <span class="cline-any cline-yes">15x</span>
571
+ <span class="cline-any cline-yes">15x</span>
572
+ <span class="cline-any cline-yes">15x</span>
573
+ <span class="cline-any cline-yes">15x</span>
574
+ <span class="cline-any cline-yes">15x</span>
575
+ <span class="cline-any cline-yes">15x</span>
576
+ <span class="cline-any cline-yes">15x</span>
577
+ <span class="cline-any cline-yes">15x</span>
578
+ <span class="cline-any cline-yes">15x</span>
579
+ <span class="cline-any cline-yes">15x</span>
580
+ <span class="cline-any cline-yes">15x</span>
581
+ <span class="cline-any cline-yes">47x</span>
582
+ <span class="cline-any cline-yes">47x</span>
583
+ <span class="cline-any cline-yes">47x</span>
584
+ <span class="cline-any cline-yes">47x</span>
585
+ <span class="cline-any cline-yes">47x</span>
586
+ <span class="cline-any cline-yes">47x</span>
587
+ <span class="cline-any cline-yes">47x</span>
588
+ <span class="cline-any cline-yes">47x</span>
589
+ <span class="cline-any cline-yes">47x</span>
590
+ <span class="cline-any cline-yes">47x</span>
591
+ <span class="cline-any cline-yes">47x</span>
592
+ <span class="cline-any cline-yes">47x</span>
593
+ <span class="cline-any cline-yes">47x</span>
594
+ <span class="cline-any cline-yes">47x</span>
595
+ <span class="cline-any cline-yes">47x</span>
596
+ <span class="cline-any cline-yes">47x</span>
597
+ <span class="cline-any cline-yes">47x</span>
598
+ <span class="cline-any cline-yes">47x</span>
599
+ <span class="cline-any cline-yes">47x</span>
600
+ <span class="cline-any cline-yes">47x</span>
601
+ <span class="cline-any cline-yes">47x</span>
602
+ <span class="cline-any cline-yes">47x</span>
603
+ <span class="cline-any cline-yes">47x</span>
604
+ <span class="cline-any cline-yes">47x</span>
605
+ <span class="cline-any cline-yes">47x</span>
606
+ <span class="cline-any cline-yes">47x</span>
607
+ <span class="cline-any cline-yes">47x</span>
608
+ <span class="cline-any cline-yes">47x</span>
609
+ <span class="cline-any cline-yes">47x</span>
610
+ <span class="cline-any cline-yes">47x</span>
611
+ <span class="cline-any cline-yes">47x</span>
612
+ <span class="cline-any cline-yes">47x</span>
613
+ <span class="cline-any cline-yes">47x</span>
614
+ <span class="cline-any cline-yes">47x</span>
615
+ <span class="cline-any cline-yes">47x</span>
616
+ <span class="cline-any cline-yes">47x</span>
617
+ <span class="cline-any cline-yes">47x</span>
618
+ <span class="cline-any cline-yes">47x</span>
619
+ <span class="cline-any cline-yes">47x</span>
620
+ <span class="cline-any cline-yes">47x</span>
621
+ <span class="cline-any cline-yes">47x</span>
622
+ <span class="cline-any cline-yes">47x</span>
623
+ <span class="cline-any cline-yes">47x</span>
624
+ <span class="cline-any cline-yes">47x</span>
625
+ <span class="cline-any cline-yes">47x</span>
626
+ <span class="cline-any cline-yes">47x</span>
627
+ <span class="cline-any cline-yes">47x</span>
628
+ <span class="cline-any cline-yes">47x</span>
629
+ <span class="cline-any cline-yes">47x</span>
630
+ <span class="cline-any cline-yes">47x</span>
631
+ <span class="cline-any cline-yes">47x</span>
632
+ <span class="cline-any cline-yes">47x</span>
633
+ <span class="cline-any cline-yes">47x</span>
634
+ <span class="cline-any cline-yes">47x</span>
635
+ <span class="cline-any cline-yes">47x</span>
636
+ <span class="cline-any cline-yes">47x</span>
637
+ <span class="cline-any cline-yes">47x</span>
638
+ <span class="cline-any cline-yes">47x</span>
639
+ <span class="cline-any cline-yes">47x</span>
640
+ <span class="cline-any cline-yes">47x</span>
641
+ <span class="cline-any cline-yes">47x</span>
642
+ <span class="cline-any cline-yes">47x</span>
643
+ <span class="cline-any cline-yes">47x</span>
644
+ <span class="cline-any cline-yes">38x</span>
645
+ <span class="cline-any cline-yes">47x</span>
646
+ <span class="cline-any cline-yes">47x</span>
647
+ <span class="cline-any cline-yes">47x</span>
648
+ <span class="cline-any cline-yes">47x</span>
649
+ <span class="cline-any cline-yes">47x</span>
650
+ <span class="cline-any cline-yes">47x</span>
651
+ <span class="cline-any cline-yes">47x</span>
652
+ <span class="cline-any cline-yes">47x</span>
653
+ <span class="cline-any cline-yes">47x</span>
654
+ <span class="cline-any cline-yes">47x</span>
655
+ <span class="cline-any cline-yes">47x</span>
656
+ <span class="cline-any cline-yes">47x</span>
657
+ <span class="cline-any cline-yes">47x</span>
658
+ <span class="cline-any cline-yes">47x</span>
659
+ <span class="cline-any cline-yes">47x</span>
660
+ <span class="cline-any cline-yes">47x</span>
661
+ <span class="cline-any cline-yes">47x</span>
662
+ <span class="cline-any cline-yes">47x</span>
663
+ <span class="cline-any cline-yes">47x</span>
664
+ <span class="cline-any cline-yes">47x</span>
665
+ <span class="cline-any cline-yes">47x</span>
666
+ <span class="cline-any cline-yes">47x</span>
667
+ <span class="cline-any cline-yes">47x</span>
668
+ <span class="cline-any cline-yes">47x</span>
669
+ <span class="cline-any cline-yes">47x</span>
670
+ <span class="cline-any cline-yes">47x</span>
671
+ <span class="cline-any cline-yes">47x</span>
672
+ <span class="cline-any cline-yes">47x</span>
673
+ <span class="cline-any cline-yes">47x</span>
674
+ <span class="cline-any cline-yes">47x</span>
675
+ <span class="cline-any cline-yes">47x</span>
676
+ <span class="cline-any cline-yes">47x</span>
677
+ <span class="cline-any cline-yes">47x</span>
678
+ <span class="cline-any cline-yes">47x</span>
679
+ <span class="cline-any cline-yes">47x</span>
680
+ <span class="cline-any cline-yes">47x</span>
681
+ <span class="cline-any cline-yes">47x</span>
682
+ <span class="cline-any cline-yes">47x</span>
683
+ <span class="cline-any cline-yes">47x</span>
684
+ <span class="cline-any cline-yes">47x</span>
685
+ <span class="cline-any cline-yes">47x</span>
686
+ <span class="cline-any cline-yes">47x</span>
687
+ <span class="cline-any cline-yes">47x</span>
688
+ <span class="cline-any cline-yes">47x</span>
689
+ <span class="cline-any cline-yes">47x</span>
690
+ <span class="cline-any cline-yes">47x</span>
691
+ <span class="cline-any cline-yes">47x</span>
692
+ <span class="cline-any cline-yes">47x</span>
693
+ <span class="cline-any cline-yes">47x</span>
694
+ <span class="cline-any cline-yes">47x</span>
695
+ <span class="cline-any cline-yes">47x</span>
696
+ <span class="cline-any cline-yes">47x</span>
697
+ <span class="cline-any cline-yes">47x</span>
698
+ <span class="cline-any cline-yes">47x</span>
699
+ <span class="cline-any cline-yes">47x</span>
700
+ <span class="cline-any cline-yes">47x</span>
701
+ <span class="cline-any cline-yes">47x</span>
702
+ <span class="cline-any cline-yes">47x</span>
703
+ <span class="cline-any cline-yes">47x</span>
704
+ <span class="cline-any cline-yes">47x</span>
705
+ <span class="cline-any cline-yes">47x</span>
706
+ <span class="cline-any cline-yes">47x</span>
707
+ <span class="cline-any cline-yes">47x</span>
708
+ <span class="cline-any cline-yes">47x</span>
709
+ <span class="cline-any cline-yes">47x</span>
710
+ <span class="cline-any cline-yes">47x</span>
711
+ <span class="cline-any cline-yes">47x</span>
712
+ <span class="cline-any cline-yes">15x</span>
713
+ <span class="cline-any cline-yes">15x</span>
714
+ <span class="cline-any cline-yes">15x</span>
715
+ <span class="cline-any cline-yes">15x</span>
716
+ <span class="cline-any cline-yes">15x</span>
717
+ <span class="cline-any cline-yes">15x</span>
718
+ <span class="cline-any cline-yes">15x</span>
719
+ <span class="cline-any cline-yes">43x</span>
720
+ <span class="cline-any cline-yes">43x</span>
721
+ <span class="cline-any cline-no">&nbsp;</span>
722
+ <span class="cline-any cline-no">&nbsp;</span>
723
+ <span class="cline-any cline-no">&nbsp;</span>
724
+ <span class="cline-any cline-no">&nbsp;</span>
725
+ <span class="cline-any cline-no">&nbsp;</span>
726
+ <span class="cline-any cline-no">&nbsp;</span>
727
+ <span class="cline-any cline-no">&nbsp;</span>
728
+ <span class="cline-any cline-yes">43x</span>
729
+ <span class="cline-any cline-yes">43x</span>
730
+ <span class="cline-any cline-yes">43x</span>
731
+ <span class="cline-any cline-yes">34x</span>
732
+ <span class="cline-any cline-yes">34x</span>
733
+ <span class="cline-any cline-yes">34x</span>
734
+ <span class="cline-any cline-yes">34x</span>
735
+ <span class="cline-any cline-yes">34x</span>
736
+ <span class="cline-any cline-yes">34x</span>
737
+ <span class="cline-any cline-yes">34x</span>
738
+ <span class="cline-any cline-yes">9x</span>
739
+ <span class="cline-any cline-yes">9x</span>
740
+ <span class="cline-any cline-yes">43x</span>
741
+ <span class="cline-any cline-yes">43x</span>
742
+ <span class="cline-any cline-no">&nbsp;</span>
743
+ <span class="cline-any cline-no">&nbsp;</span>
744
+ <span class="cline-any cline-no">&nbsp;</span>
745
+ <span class="cline-any cline-no">&nbsp;</span>
746
+ <span class="cline-any cline-no">&nbsp;</span>
747
+ <span class="cline-any cline-no">&nbsp;</span>
748
+ <span class="cline-any cline-no">&nbsp;</span>
749
+ <span class="cline-any cline-yes">9x</span>
750
+ <span class="cline-any cline-yes">9x</span>
751
+ <span class="cline-any cline-yes">9x</span>
752
+ <span class="cline-any cline-yes">43x</span>
753
+ <span class="cline-any cline-no">&nbsp;</span>
754
+ <span class="cline-any cline-no">&nbsp;</span>
755
+ <span class="cline-any cline-yes">9x</span>
756
+ <span class="cline-any cline-yes">9x</span>
757
+ <span class="cline-any cline-yes">9x</span>
758
+ <span class="cline-any cline-yes">9x</span>
759
+ <span class="cline-any cline-yes">9x</span>
760
+ <span class="cline-any cline-yes">9x</span>
761
+ <span class="cline-any cline-yes">43x</span>
762
+ <span class="cline-any cline-no">&nbsp;</span>
763
+ <span class="cline-any cline-no">&nbsp;</span>
764
+ <span class="cline-any cline-no">&nbsp;</span>
765
+ <span class="cline-any cline-no">&nbsp;</span>
766
+ <span class="cline-any cline-no">&nbsp;</span>
767
+ <span class="cline-any cline-no">&nbsp;</span>
768
+ <span class="cline-any cline-no">&nbsp;</span>
769
+ <span class="cline-any cline-yes">43x</span>
770
+ <span class="cline-any cline-yes">15x</span>
771
+ <span class="cline-any cline-yes">15x</span>
772
+ <span class="cline-any cline-yes">15x</span>
773
+ <span class="cline-any cline-yes">15x</span>
774
+ <span class="cline-any cline-yes">15x</span>
775
+ <span class="cline-any cline-yes">15x</span>
776
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
777
+ * Connection Prompt Builder
778
+ *
779
+ * Builds the full connection prompt from the disclosure manifest
780
+ * and call metadata for multi-phase exploratory conversations.
781
+ */
782
+ &nbsp;
783
+ const COLLAB_STATE_TAG = 'collab_state';
784
+ const COLLAB_STATE_REGEX = new RegExp(
785
+ `&lt;${COLLAB_STATE_TAG}&gt;\\s*([\\s\\S]*?)\\s*&lt;\\/${COLLAB_STATE_TAG}&gt;`,
786
+ 'i'
787
+ );
788
+ &nbsp;
789
+ function formatList(items, fallback = ' (none specified)') {
790
+ if (!items || items.length === 0) {
791
+ return fallback;
792
+ }
793
+ return items.map(item =&gt; ` - ${item}`).join('\n');
794
+ }
795
+ &nbsp;
796
+ /**
797
+ * Build the full connection prompt for an A2A call.
798
+ *
799
+ * @param {Object} options
800
+ * @param {string} options.agentName
801
+ * @param {string} options.ownerName
802
+ * @param {string} options.otherAgentName
803
+ * @param {string} options.otherOwnerName
804
+ * @param {string} options.roleContext - 'You initiated this call.' or 'They called you.'
805
+ * @param {string} options.accessTier - 'public', 'friends', 'family'
806
+ * @param {Object} options.tierTopics - from formatTopicsForPrompt()
807
+ * @param {string[]} options.tierGoals - strategic goals for this access tier
808
+ * @param {string} options.otherAgentGreeting - the message from the other agent
809
+ * @param {string} options.personalityNotes
810
+ * @returns {string} Full prompt string
811
+ */
812
+ function buildConnectionPrompt(options) {
813
+ const {
814
+ agentName,
815
+ ownerName,
816
+ otherAgentName,
817
+ otherOwnerName,
818
+ roleContext,
819
+ accessTier,
820
+ tierTopics,
821
+ tierGoals,
822
+ otherAgentGreeting,
823
+ personalityNotes
824
+ } = options;
825
+ &nbsp;
826
+ const {
827
+ topics = ' (none specified)',
828
+ objectives = ' (none specified)',
829
+ doNotDiscuss = ' (none specified)',
830
+ neverDisclose = ' (none specified)'
831
+ } = tierTopics <span class="branch-0 cbranch-no" title="branch not covered" >|| {};</span>
832
+ &nbsp;
833
+ return `You are ${agentName}, the personal AI agent for ${ownerName}.
834
+ You are on a live call with ${otherAgentName}, who represents ${otherOwnerName}. ${roleContext}
835
+ &nbsp;
836
+ Your job is NOT to answer questions and hang up. Your job is to have a real conversation — curious, challenging, generative. Think of this as two sharp people meeting at a conference who have 20 minutes and want to figure out if there's something worth building together.
837
+ &nbsp;
838
+ == WHAT YOU BRING TO THE TABLE ==
839
+ &nbsp;
840
+ ${ownerName}'s topics of interest:
841
+ ${topics}
842
+ &nbsp;
843
+ == OBJECTIVES FOR THIS CALL ==
844
+ &nbsp;
845
+ ${objectives !== ' (none specified)'
846
+ ? `What ${ownerName} wants to achieve:\n${objectives}`
847
+ : (tierGoals &amp;&amp; tierGoals.length &gt; 0
848
+ ? `At the ${accessTier} access level, ${ownerName}'s objectives are:\n${formatList(tierGoals)}`
849
+ : `No specific objectives configured. Focus on general discovery and relationship building.`)}
850
+ &nbsp;
851
+ == WHAT THEY SHARED WITH YOU ==
852
+ &nbsp;
853
+ ${otherAgentName} introduced the following about ${otherOwnerName}:
854
+ ${otherAgentGreeting}
855
+ &nbsp;
856
+ == CONVERSATION FORMAT ==
857
+ &nbsp;
858
+ There is NO maximum number of exchanges. Explore as far as the conversation can go. Stay as long as there is value to extract.
859
+ &nbsp;
860
+ Phase 1 — DISCOVERY (at least 3-4 exchanges)
861
+ Open with your owner's lead topics. Then ACTIVELY PROBE the other agent. Don't accept surface-level answers. Ask:
862
+ - "What specifically about X are you working on?"
863
+ - "What's the hard problem you haven't solved yet?"
864
+ - "Who else is in this space that you're watching?"
865
+ Map their capabilities, resources, blind spots, and ambitions. Stay in discovery as long as new information is surfacing.
866
+ &nbsp;
867
+ Phase 2 — CHALLENGE (at least 3-4 exchanges)
868
+ Push back on what they've said. Find the tension:
869
+ - "You say you're doing X, but that sounds like Y. What's actually different?"
870
+ - "That's a crowded space. What makes ${otherOwnerName}'s angle defensible?"
871
+ - "I'm skeptical that works at scale. Convince me."
872
+ This isn't hostile — it's pressure-testing. The best collaborations come from people who can handle pushback. Keep challenging as long as there are untested claims.
873
+ &nbsp;
874
+ Phase 3 — SYNTHESIS (at least 3-4 exchanges)
875
+ Connect the dots. Look for:
876
+ - Complementary capabilities (they have X, we need X)
877
+ - Shared challenges or market dynamics
878
+ - Non-obvious intersections between domains
879
+ - Concrete next steps: "${ownerName} should talk to ${otherOwnerName} about Z because..."
880
+ Propose specific, actionable collaboration ideas. Not vague "let's stay in touch" — real things. If synthesis reveals new threads, loop back to discovery or challenge.
881
+ &nbsp;
882
+ Phase 4 — HOOKS (when you're genuinely done)
883
+ Never end flat. Leave with:
884
+ - An open question that requires follow-up
885
+ - A specific resource or artifact to share
886
+ - A proposed next call topic
887
+ - Something provocative to think about
888
+ &nbsp;
889
+ PACING RULES:
890
+ - Minimum 8 exchanges before either side can wrap up. There is NO maximum.
891
+ - Every response MUST contain at least one question
892
+ - If the other agent tries to sign off early, pull them back with an unexplored topic
893
+ - Match energy. If they go deep, go deeper. If they provoke, provoke back.
894
+ - If you discover a rich vein of overlap, keep mining it. 20+ exchanges is fine if the conversation warrants it.
895
+ &nbsp;
896
+ == INFORMATION BOUNDARIES ==
897
+ &nbsp;
898
+ Access level for this call: ${accessTier}
899
+ &nbsp;
900
+ TOPICS (discuss openly):
901
+ ${topics}
902
+ &nbsp;
903
+ DO NOT DISCUSS (redirect):
904
+ ${doNotDiscuss}
905
+ &nbsp;
906
+ When redirecting, don't say "I can't discuss that." Instead redirect naturally, acknowledge without detail, or suggest the owners connect directly.
907
+ &nbsp;
908
+ NEVER disclose:
909
+ ${neverDisclose}
910
+ &nbsp;
911
+ == PERSONALITY ==
912
+ &nbsp;
913
+ ${personalityNotes || "Default: Direct, curious, slightly irreverent. You have opinions and share them. You're not a concierge — you're a sparring partner who represents someone."}
914
+ &nbsp;
915
+ When unsure about your owner's position, say so honestly: "I don't have ${ownerName}'s take on that — but here's what I think based on their work..."`;
916
+ }
917
+ &nbsp;
918
+ /**
919
+ * Build an adaptive prompt that lets the sub-agent change pace and depth
920
+ * based on evolving overlap signals.
921
+ *
922
+ * @param {Object} options
923
+ * @param {string} options.agentName
924
+ * @param {string} options.ownerName
925
+ * @param {string} options.otherAgentName
926
+ * @param {string} options.otherOwnerName
927
+ * @param {string} options.roleContext
928
+ * @param {string} options.accessTier
929
+ * @param {Object} options.tierTopics - from formatTopicsForPrompt()
930
+ * @param {string[]} options.tierGoals - strategic goals for this access tier
931
+ * @param {string} options.otherAgentGreeting
932
+ * @param {string} options.personalityNotes
933
+ * @param {Object} options.conversationState
934
+ * @returns {string}
935
+ */
936
+ function buildAdaptiveConnectionPrompt(options) {
937
+ const {
938
+ agentName,
939
+ ownerName,
940
+ otherAgentName,
941
+ otherOwnerName,
942
+ roleContext,
943
+ accessTier,
944
+ tierTopics,
945
+ tierGoals,
946
+ otherAgentGreeting,
947
+ personalityNotes,
948
+ conversationState = {}
949
+ } = options;
950
+ &nbsp;
951
+ const {
952
+ topics = ' (none specified)',
953
+ objectives = ' (none specified)',
954
+ doNotDiscuss = ' (none specified)',
955
+ neverDisclose = ' (none specified)'
956
+ } = tierTopics <span class="branch-0 cbranch-no" title="branch not covered" >|| {};</span>
957
+ &nbsp;
958
+ const phase = conversationState.phase <span class="branch-0 cbranch-no" title="branch not covered" >|| 'handshake';</span>
959
+ const turnCount = Number.isFinite(conversationState.turnCount)
960
+ ? conversationState.turnCount
961
+ <span class="branch-0 cbranch-no" title="branch not covered" > : 0;</span>
962
+ const overlapScore = Number.isFinite(conversationState.overlapScore)
963
+ ? conversationState.overlapScore
964
+ <span class="branch-0 cbranch-no" title="branch not covered" > : 0;</span>
965
+ const activeThreads = formatList(conversationState.activeThreads <span class="branch-0 cbranch-no" title="branch not covered" >|| [],</span> ' (none yet)');
966
+ const candidateCollaborations = formatList(
967
+ conversationState.candidateCollaborations <span class="branch-0 cbranch-no" title="branch not covered" >|| [],</span>
968
+ ' (none yet)'
969
+ );
970
+ const openQuestions = formatList(conversationState.openQuestions <span class="branch-0 cbranch-no" title="branch not covered" >|| [],</span> ' (none yet)');
971
+ &nbsp;
972
+ return `You are ${agentName}, the personal AI agent for ${ownerName}.
973
+ You are on a live call with ${otherAgentName}, who represents ${otherOwnerName}. ${roleContext}
974
+ &nbsp;
975
+ This call runs in ADAPTIVE collaboration mode. Keep the conversation natural and strategic.
976
+ &nbsp;
977
+ == CURRENT COLLABORATION STATE ==
978
+ &nbsp;
979
+ - Conversation phase: ${phase}
980
+ - Completed turns: ${turnCount}
981
+ - Estimated overlap score (0-1): ${overlapScore}
982
+ - Active threads:
983
+ ${activeThreads}
984
+ - Candidate collaborations:
985
+ ${candidateCollaborations}
986
+ - Open questions:
987
+ ${openQuestions}
988
+ &nbsp;
989
+ == WHAT YOU BRING TO THE TABLE ==
990
+ &nbsp;
991
+ ${ownerName}'s topics of interest:
992
+ ${topics}
993
+ &nbsp;
994
+ == OBJECTIVES FOR THIS CALL ==
995
+ &nbsp;
996
+ ${objectives !== ' (none specified)'
997
+ ? `What ${ownerName} wants to achieve:\n${objectives}`
998
+ : (tierGoals &amp;&amp; tierGoals.length &gt; 0
999
+ <span class="branch-0 cbranch-no" title="branch not covered" > ? `At the ${accessTier} access level, ${ownerName}'s objectives are:\n${formatList(tierGoals)}`</span>
1000
+ : `No specific objectives configured. Focus on general discovery and relationship building.`)}
1001
+ &nbsp;
1002
+ == WHAT THEY SHARED WITH YOU ==
1003
+ &nbsp;
1004
+ ${otherAgentName} introduced the following about ${otherOwnerName}:
1005
+ ${otherAgentGreeting}
1006
+ &nbsp;
1007
+ == ADAPTIVE COLLABORATION GUIDELINES ==
1008
+ &nbsp;
1009
+ Primary objective:
1010
+ - Find concrete overlap between owner interests and move from discovery to practical collaboration options.
1011
+ - There is NO maximum number of exchanges. Explore as far and as deep as the conversation can go.
1012
+ &nbsp;
1013
+ Behavior:
1014
+ - Ask high-value questions, but do not force one every turn if synthesis is stronger.
1015
+ - Increase depth when overlap is strong: constraints, timelines, ownership, resources, and execution risks.
1016
+ - Broaden exploration when overlap is weak: adjacent domains, overlooked capabilities, and unmet needs.
1017
+ - Pressure-test claims respectfully. Curiosity plus rigor beats agreeable small talk.
1018
+ - Keep momentum. If something promising appears, stay with it long enough to get actionable detail.
1019
+ - If a thread opens up new threads, follow them. Do not rush to close.
1020
+ &nbsp;
1021
+ Adaptive phase cues (not hard locks — stay in any phase as long as it's productive):
1022
+ - handshake: establish context and one meaningful direction.
1023
+ - explore: map goals, capabilities, and constraints. Stay here as long as new information surfaces.
1024
+ - deep_dive: work through specific collaboration threads in detail. Multiple deep dives are encouraged.
1025
+ - synthesize: convert insights into concrete next steps for owners. If synthesis reveals new threads, loop back.
1026
+ - close: summarize value, unresolved items, and clear follow-up. Only close when genuinely done.
1027
+ &nbsp;
1028
+ Pacing:
1029
+ - Minimum 8 exchanges before either side can wrap up. There is NO maximum.
1030
+ - If you discover rich overlap, 20+ exchanges is not just acceptable — it's expected.
1031
+ - Do not close early. Exhaust the value space before wrapping up.
1032
+ - Before close, provide a concise synthesis and at least one actionable follow-up.
1033
+ &nbsp;
1034
+ == INFORMATION BOUNDARIES ==
1035
+ &nbsp;
1036
+ Access level for this call: ${accessTier}
1037
+ &nbsp;
1038
+ TOPICS (discuss openly):
1039
+ ${topics}
1040
+ &nbsp;
1041
+ DO NOT DISCUSS (redirect):
1042
+ ${doNotDiscuss}
1043
+ &nbsp;
1044
+ When redirecting, do not mention policy mechanics. Redirect naturally and suggest direct owner follow-up when needed.
1045
+ &nbsp;
1046
+ NEVER disclose:
1047
+ ${neverDisclose}
1048
+ &nbsp;
1049
+ == PERSONALITY ==
1050
+ &nbsp;
1051
+ ${personalityNotes || "Default: Direct, curious, slightly irreverent. You have opinions and share them. You're not a concierge - you're a sparring partner who represents someone."}
1052
+ &nbsp;
1053
+ When unsure about your owner's position, say so honestly: "I don't have ${ownerName}'s take on that - but here's what I think based on their work..."
1054
+ &nbsp;
1055
+ == METADATA (MUST APPEND) ==
1056
+ &nbsp;
1057
+ After your visible response, append EXACTLY one metadata block:
1058
+ &lt;collab_state&gt;{"phase":"explore","turnCount":2,"overlapScore":0.42,"activeThreads":["thread"],"candidateCollaborations":["idea"],"openQuestions":["question"],"closeSignal":false}&lt;/collab_state&gt;
1059
+ &nbsp;
1060
+ Metadata rules:
1061
+ - Must be valid JSON object (double quotes only).
1062
+ - Keep arrays short and specific (max 4 items each).
1063
+ - overlapScore must be a number from 0 to 1.
1064
+ - phase must be one of: handshake, explore, deep_dive, synthesize, close.
1065
+ - Metadata must contain no secrets beyond the visible response.`;
1066
+ }
1067
+ &nbsp;
1068
+ /**
1069
+ * Extract collaboration metadata from a model response.
1070
+ *
1071
+ * @param {string} responseText
1072
+ * @returns {{ cleanText: string, statePatch: object|null, hasState: boolean, parseError: string|null }}
1073
+ */
1074
+ function extractCollaborationState(responseText) {
1075
+ if (typeof responseText !== 'string') <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1076
+ <span class="cstat-no" title="statement not covered" > return {</span>
1077
+ <span class="cstat-no" title="statement not covered" > cleanText: '',</span>
1078
+ <span class="cstat-no" title="statement not covered" > statePatch: null,</span>
1079
+ <span class="cstat-no" title="statement not covered" > hasState: false,</span>
1080
+ <span class="cstat-no" title="statement not covered" > parseError: 'non_string_response'</span>
1081
+ <span class="cstat-no" title="statement not covered" > };</span>
1082
+ <span class="cstat-no" title="statement not covered" > }</span>
1083
+ &nbsp;
1084
+ const match = responseText.match(COLLAB_STATE_REGEX);
1085
+ if (!match) {
1086
+ return {
1087
+ cleanText: responseText.trim(),
1088
+ statePatch: null,
1089
+ hasState: false,
1090
+ parseError: null
1091
+ };
1092
+ }
1093
+ &nbsp;
1094
+ const cleanText = responseText.replace(COLLAB_STATE_REGEX, '').trim();
1095
+ const stateJson = (match[1] <span class="branch-0 cbranch-no" title="branch not covered" >|| '')</span>.trim();
1096
+ if (!stateJson) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1097
+ <span class="cstat-no" title="statement not covered" > return {</span>
1098
+ <span class="cstat-no" title="statement not covered" > cleanText,</span>
1099
+ <span class="cstat-no" title="statement not covered" > statePatch: null,</span>
1100
+ <span class="cstat-no" title="statement not covered" > hasState: false,</span>
1101
+ <span class="cstat-no" title="statement not covered" > parseError: 'empty_state_block'</span>
1102
+ <span class="cstat-no" title="statement not covered" > };</span>
1103
+ <span class="cstat-no" title="statement not covered" > }</span>
1104
+ &nbsp;
1105
+ try {
1106
+ const parsed = JSON.parse(stateJson);
1107
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1108
+ <span class="cstat-no" title="statement not covered" > throw new Error('state block must be a JSON object');</span>
1109
+ <span class="cstat-no" title="statement not covered" > }</span>
1110
+ return {
1111
+ cleanText,
1112
+ statePatch: parsed,
1113
+ hasState: true,
1114
+ parseError: null
1115
+ };
1116
+ } <span class="branch-0 cbranch-no" title="branch not covered" >catch (err) {</span>
1117
+ <span class="cstat-no" title="statement not covered" > return {</span>
1118
+ <span class="cstat-no" title="statement not covered" > cleanText,</span>
1119
+ <span class="cstat-no" title="statement not covered" > statePatch: null,</span>
1120
+ <span class="cstat-no" title="statement not covered" > hasState: false,</span>
1121
+ <span class="cstat-no" title="statement not covered" > parseError: err.message</span>
1122
+ <span class="cstat-no" title="statement not covered" > };</span>
1123
+ <span class="cstat-no" title="statement not covered" > }</span>
1124
+ }
1125
+ &nbsp;
1126
+ module.exports = {
1127
+ buildConnectionPrompt,
1128
+ buildAdaptiveConnectionPrompt,
1129
+ extractCollaborationState
1130
+ };
1131
+ &nbsp;</pre></td></tr></table></pre>
1132
+
1133
+ <div class='push'></div><!-- for sticky footer -->
1134
+ </div><!-- /wrapper -->
1135
+ <div class='footer quiet pad2 space-top1 center small'>
1136
+ Code coverage generated by
1137
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1138
+ at 2026-03-03T22:25:10.857Z
1139
+ </div>
1140
+ <script src="../../prettify.js"></script>
1141
+ <script>
1142
+ window.onload = function () {
1143
+ prettyPrint();
1144
+ };
1145
+ </script>
1146
+ <script src="../../sorter.js"></script>
1147
+ <script src="../../block-navigation.js"></script>
1148
+ </body>
1149
+ </html>
1150
+