@marktoflow/gui 2.0.3 → 2.0.4

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 (155) hide show
  1. package/README.md +5 -3
  2. package/client.log +0 -0
  3. package/dist/client/assets/{index-DtX_BPDj.js → index-iXI2YSzR.js} +47 -47
  4. package/dist/client/assets/index-iXI2YSzR.js.map +1 -0
  5. package/dist/client/index.html +1 -1
  6. package/dist/server/routes/tools.js +29 -884
  7. package/dist/server/routes/tools.js.map +1 -1
  8. package/dist/server/services/WorkflowService.js +4 -1
  9. package/dist/server/services/WorkflowService.js.map +1 -1
  10. package/dist/server/services/agents/openai-provider.js +31 -1
  11. package/dist/server/services/agents/openai-provider.js.map +1 -1
  12. package/dist/shared/constants.js +5 -0
  13. package/dist/shared/constants.js.map +1 -1
  14. package/package.json +20 -6
  15. package/server.log +0 -0
  16. package/coverage/base.css +0 -224
  17. package/coverage/block-navigation.js +0 -87
  18. package/coverage/client/App.tsx.html +0 -2230
  19. package/coverage/client/components/Accessibility/LiveRegion.tsx.html +0 -166
  20. package/coverage/client/components/Accessibility/SkipNav.tsx.html +0 -106
  21. package/coverage/client/components/Accessibility/index.html +0 -131
  22. package/coverage/client/components/Admin/AuditViewer.tsx.html +0 -214
  23. package/coverage/client/components/Admin/EnvironmentSwitcher.tsx.html +0 -187
  24. package/coverage/client/components/Admin/RoleManager.tsx.html +0 -250
  25. package/coverage/client/components/Admin/SecretsVault.tsx.html +0 -241
  26. package/coverage/client/components/Admin/index.html +0 -161
  27. package/coverage/client/components/Canvas/AlignmentTools.tsx.html +0 -694
  28. package/coverage/client/components/Canvas/Canvas.tsx.html +0 -1513
  29. package/coverage/client/components/Canvas/DataPreviewBadge.tsx.html +0 -307
  30. package/coverage/client/components/Canvas/ExecutionInputDialog.tsx.html +0 -769
  31. package/coverage/client/components/Canvas/ExecutionOverlay.tsx.html +0 -2938
  32. package/coverage/client/components/Canvas/ForEachNode.tsx.html +0 -568
  33. package/coverage/client/components/Canvas/GroupNode.tsx.html +0 -421
  34. package/coverage/client/components/Canvas/IfElseNode.tsx.html +0 -508
  35. package/coverage/client/components/Canvas/InlineEditor.tsx.html +0 -472
  36. package/coverage/client/components/Canvas/NodeContextMenu.tsx.html +0 -661
  37. package/coverage/client/components/Canvas/NodeTooltip.tsx.html +0 -316
  38. package/coverage/client/components/Canvas/OutputNode.tsx.html +0 -418
  39. package/coverage/client/components/Canvas/ParallelNode.tsx.html +0 -556
  40. package/coverage/client/components/Canvas/StepNode.tsx.html +0 -463
  41. package/coverage/client/components/Canvas/StickyNoteNode.tsx.html +0 -442
  42. package/coverage/client/components/Canvas/SubWorkflowNode.tsx.html +0 -508
  43. package/coverage/client/components/Canvas/SwitchNode.tsx.html +0 -640
  44. package/coverage/client/components/Canvas/Toolbar.tsx.html +0 -1030
  45. package/coverage/client/components/Canvas/TransformNode.tsx.html +0 -667
  46. package/coverage/client/components/Canvas/TriggerNode.tsx.html +0 -469
  47. package/coverage/client/components/Canvas/TryCatchNode.tsx.html +0 -577
  48. package/coverage/client/components/Canvas/WhileNode.tsx.html +0 -595
  49. package/coverage/client/components/Canvas/index.html +0 -446
  50. package/coverage/client/components/Canvas/index.ts.html +0 -157
  51. package/coverage/client/components/Collaboration/ActivityFeed.tsx.html +0 -253
  52. package/coverage/client/components/Collaboration/CommentThread.tsx.html +0 -397
  53. package/coverage/client/components/Collaboration/LockIndicator.tsx.html +0 -172
  54. package/coverage/client/components/Collaboration/PresenceIndicator.tsx.html +0 -214
  55. package/coverage/client/components/Collaboration/index.html +0 -161
  56. package/coverage/client/components/CommandPalette/CommandItem.tsx.html +0 -313
  57. package/coverage/client/components/CommandPalette/CommandPalette.tsx.html +0 -685
  58. package/coverage/client/components/CommandPalette/index.html +0 -131
  59. package/coverage/client/components/Debug/VariableInspector.tsx.html +0 -529
  60. package/coverage/client/components/Debug/index.html +0 -116
  61. package/coverage/client/components/Editor/InputsEditor.tsx.html +0 -1459
  62. package/coverage/client/components/Editor/NewStepWizard.tsx.html +0 -1117
  63. package/coverage/client/components/Editor/StepEditor.tsx.html +0 -1681
  64. package/coverage/client/components/Editor/YamlEditor.tsx.html +0 -565
  65. package/coverage/client/components/Editor/index.html +0 -161
  66. package/coverage/client/components/Execution/TimelineView.tsx.html +0 -397
  67. package/coverage/client/components/Execution/index.html +0 -116
  68. package/coverage/client/components/Onboarding/OnboardingTour.tsx.html +0 -265
  69. package/coverage/client/components/Onboarding/index.html +0 -116
  70. package/coverage/client/components/Panels/PropertiesPanel.tsx.html +0 -2035
  71. package/coverage/client/components/Panels/ValidationPanel.tsx.html +0 -856
  72. package/coverage/client/components/Panels/index.html +0 -131
  73. package/coverage/client/components/Prompt/ChangePreview.tsx.html +0 -928
  74. package/coverage/client/components/Prompt/PromptHistoryPanel.tsx.html +0 -712
  75. package/coverage/client/components/Prompt/PromptInput.tsx.html +0 -415
  76. package/coverage/client/components/Prompt/index.html +0 -146
  77. package/coverage/client/components/Settings/ProviderSwitcher.tsx.html +0 -1306
  78. package/coverage/client/components/Settings/SettingsPanel.tsx.html +0 -355
  79. package/coverage/client/components/Settings/controls/SettingNumber.tsx.html +0 -211
  80. package/coverage/client/components/Settings/controls/SettingSelect.tsx.html +0 -196
  81. package/coverage/client/components/Settings/controls/SettingToggle.tsx.html +0 -199
  82. package/coverage/client/components/Settings/controls/index.html +0 -146
  83. package/coverage/client/components/Settings/index.html +0 -131
  84. package/coverage/client/components/Settings/sections/AISettings.tsx.html +0 -154
  85. package/coverage/client/components/Settings/sections/CanvasSettings.tsx.html +0 -220
  86. package/coverage/client/components/Settings/sections/EditorSettings.tsx.html +0 -208
  87. package/coverage/client/components/Settings/sections/ExecutionSettings.tsx.html +0 -172
  88. package/coverage/client/components/Settings/sections/GeneralSettings.tsx.html +0 -151
  89. package/coverage/client/components/Settings/sections/NotificationSettings.tsx.html +0 -190
  90. package/coverage/client/components/Settings/sections/index.html +0 -191
  91. package/coverage/client/components/Sidebar/ImportDialog.tsx.html +0 -856
  92. package/coverage/client/components/Sidebar/NewWorkflowDialog.tsx.html +0 -694
  93. package/coverage/client/components/Sidebar/Sidebar.tsx.html +0 -1456
  94. package/coverage/client/components/Sidebar/index.html +0 -146
  95. package/coverage/client/components/Templates/TemplateCard.tsx.html +0 -181
  96. package/coverage/client/components/Templates/TemplateGallery.tsx.html +0 -307
  97. package/coverage/client/components/Templates/index.html +0 -131
  98. package/coverage/client/components/Versions/DiffViewer.tsx.html +0 -220
  99. package/coverage/client/components/Versions/VersionHistory.tsx.html +0 -352
  100. package/coverage/client/components/Versions/index.html +0 -131
  101. package/coverage/client/components/common/Breadcrumb.tsx.html +0 -205
  102. package/coverage/client/components/common/Button.tsx.html +0 -289
  103. package/coverage/client/components/common/ContextMenu.tsx.html +0 -691
  104. package/coverage/client/components/common/KeyboardShortcuts.tsx.html +0 -541
  105. package/coverage/client/components/common/Modal.tsx.html +0 -364
  106. package/coverage/client/components/common/Tabs.tsx.html +0 -256
  107. package/coverage/client/components/common/ThemeToggle.tsx.html +0 -301
  108. package/coverage/client/components/common/index.html +0 -206
  109. package/coverage/client/components/index.html +0 -116
  110. package/coverage/client/components/index.ts.html +0 -181
  111. package/coverage/client/hooks/index.html +0 -176
  112. package/coverage/client/hooks/index.ts.html +0 -97
  113. package/coverage/client/hooks/useAIPrompt.ts.html +0 -409
  114. package/coverage/client/hooks/useCanvas.ts.html +0 -739
  115. package/coverage/client/hooks/useWebSocket.ts.html +0 -580
  116. package/coverage/client/hooks/useWorkflow.ts.html +0 -502
  117. package/coverage/client/index.html +0 -131
  118. package/coverage/client/main.tsx.html +0 -115
  119. package/coverage/client/stores/agentStore.ts.html +0 -421
  120. package/coverage/client/stores/canvasStore.ts.html +0 -1129
  121. package/coverage/client/stores/collaborationStore.ts.html +0 -544
  122. package/coverage/client/stores/commandStore.ts.html +0 -610
  123. package/coverage/client/stores/editorStore.ts.html +0 -484
  124. package/coverage/client/stores/executionStore.ts.html +0 -1594
  125. package/coverage/client/stores/governanceStore.ts.html +0 -493
  126. package/coverage/client/stores/index.html +0 -341
  127. package/coverage/client/stores/index.ts.html +0 -112
  128. package/coverage/client/stores/layoutStore.ts.html +0 -439
  129. package/coverage/client/stores/navigationStore.ts.html +0 -232
  130. package/coverage/client/stores/onboardingStore.ts.html +0 -247
  131. package/coverage/client/stores/promptStore.ts.html +0 -430
  132. package/coverage/client/stores/settingsStore.ts.html +0 -472
  133. package/coverage/client/stores/themeStore.ts.html +0 -271
  134. package/coverage/client/stores/versionStore.ts.html +0 -340
  135. package/coverage/client/stores/workflowStore.ts.html +0 -739
  136. package/coverage/client/utils/applyDagreLayout.ts.html +0 -286
  137. package/coverage/client/utils/cn.ts.html +0 -112
  138. package/coverage/client/utils/index.html +0 -206
  139. package/coverage/client/utils/index.ts.html +0 -97
  140. package/coverage/client/utils/platform.ts.html +0 -223
  141. package/coverage/client/utils/serviceIcons.tsx.html +0 -376
  142. package/coverage/client/utils/stepValidation.ts.html +0 -550
  143. package/coverage/client/utils/workflowToGraph.ts.html +0 -1624
  144. package/coverage/coverage-final.json +0 -107
  145. package/coverage/favicon.png +0 -0
  146. package/coverage/index.html +0 -461
  147. package/coverage/prettify.css +0 -1
  148. package/coverage/prettify.js +0 -2
  149. package/coverage/shared/constants.ts.html +0 -655
  150. package/coverage/shared/index.html +0 -146
  151. package/coverage/shared/settings.ts.html +0 -406
  152. package/coverage/shared/types.ts.html +0 -622
  153. package/coverage/sort-arrow-sprite.png +0 -0
  154. package/coverage/sorter.js +0 -210
  155. package/dist/client/assets/index-DtX_BPDj.js.map +0 -1
@@ -1,2230 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for client/App.tsx</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">client</a> App.tsx</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">0% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>0/502</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>0/1</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>0/1</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">0% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>0/502</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 low'></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>
422
- <a name='L357'></a><a href='#L357'>357</a>
423
- <a name='L358'></a><a href='#L358'>358</a>
424
- <a name='L359'></a><a href='#L359'>359</a>
425
- <a name='L360'></a><a href='#L360'>360</a>
426
- <a name='L361'></a><a href='#L361'>361</a>
427
- <a name='L362'></a><a href='#L362'>362</a>
428
- <a name='L363'></a><a href='#L363'>363</a>
429
- <a name='L364'></a><a href='#L364'>364</a>
430
- <a name='L365'></a><a href='#L365'>365</a>
431
- <a name='L366'></a><a href='#L366'>366</a>
432
- <a name='L367'></a><a href='#L367'>367</a>
433
- <a name='L368'></a><a href='#L368'>368</a>
434
- <a name='L369'></a><a href='#L369'>369</a>
435
- <a name='L370'></a><a href='#L370'>370</a>
436
- <a name='L371'></a><a href='#L371'>371</a>
437
- <a name='L372'></a><a href='#L372'>372</a>
438
- <a name='L373'></a><a href='#L373'>373</a>
439
- <a name='L374'></a><a href='#L374'>374</a>
440
- <a name='L375'></a><a href='#L375'>375</a>
441
- <a name='L376'></a><a href='#L376'>376</a>
442
- <a name='L377'></a><a href='#L377'>377</a>
443
- <a name='L378'></a><a href='#L378'>378</a>
444
- <a name='L379'></a><a href='#L379'>379</a>
445
- <a name='L380'></a><a href='#L380'>380</a>
446
- <a name='L381'></a><a href='#L381'>381</a>
447
- <a name='L382'></a><a href='#L382'>382</a>
448
- <a name='L383'></a><a href='#L383'>383</a>
449
- <a name='L384'></a><a href='#L384'>384</a>
450
- <a name='L385'></a><a href='#L385'>385</a>
451
- <a name='L386'></a><a href='#L386'>386</a>
452
- <a name='L387'></a><a href='#L387'>387</a>
453
- <a name='L388'></a><a href='#L388'>388</a>
454
- <a name='L389'></a><a href='#L389'>389</a>
455
- <a name='L390'></a><a href='#L390'>390</a>
456
- <a name='L391'></a><a href='#L391'>391</a>
457
- <a name='L392'></a><a href='#L392'>392</a>
458
- <a name='L393'></a><a href='#L393'>393</a>
459
- <a name='L394'></a><a href='#L394'>394</a>
460
- <a name='L395'></a><a href='#L395'>395</a>
461
- <a name='L396'></a><a href='#L396'>396</a>
462
- <a name='L397'></a><a href='#L397'>397</a>
463
- <a name='L398'></a><a href='#L398'>398</a>
464
- <a name='L399'></a><a href='#L399'>399</a>
465
- <a name='L400'></a><a href='#L400'>400</a>
466
- <a name='L401'></a><a href='#L401'>401</a>
467
- <a name='L402'></a><a href='#L402'>402</a>
468
- <a name='L403'></a><a href='#L403'>403</a>
469
- <a name='L404'></a><a href='#L404'>404</a>
470
- <a name='L405'></a><a href='#L405'>405</a>
471
- <a name='L406'></a><a href='#L406'>406</a>
472
- <a name='L407'></a><a href='#L407'>407</a>
473
- <a name='L408'></a><a href='#L408'>408</a>
474
- <a name='L409'></a><a href='#L409'>409</a>
475
- <a name='L410'></a><a href='#L410'>410</a>
476
- <a name='L411'></a><a href='#L411'>411</a>
477
- <a name='L412'></a><a href='#L412'>412</a>
478
- <a name='L413'></a><a href='#L413'>413</a>
479
- <a name='L414'></a><a href='#L414'>414</a>
480
- <a name='L415'></a><a href='#L415'>415</a>
481
- <a name='L416'></a><a href='#L416'>416</a>
482
- <a name='L417'></a><a href='#L417'>417</a>
483
- <a name='L418'></a><a href='#L418'>418</a>
484
- <a name='L419'></a><a href='#L419'>419</a>
485
- <a name='L420'></a><a href='#L420'>420</a>
486
- <a name='L421'></a><a href='#L421'>421</a>
487
- <a name='L422'></a><a href='#L422'>422</a>
488
- <a name='L423'></a><a href='#L423'>423</a>
489
- <a name='L424'></a><a href='#L424'>424</a>
490
- <a name='L425'></a><a href='#L425'>425</a>
491
- <a name='L426'></a><a href='#L426'>426</a>
492
- <a name='L427'></a><a href='#L427'>427</a>
493
- <a name='L428'></a><a href='#L428'>428</a>
494
- <a name='L429'></a><a href='#L429'>429</a>
495
- <a name='L430'></a><a href='#L430'>430</a>
496
- <a name='L431'></a><a href='#L431'>431</a>
497
- <a name='L432'></a><a href='#L432'>432</a>
498
- <a name='L433'></a><a href='#L433'>433</a>
499
- <a name='L434'></a><a href='#L434'>434</a>
500
- <a name='L435'></a><a href='#L435'>435</a>
501
- <a name='L436'></a><a href='#L436'>436</a>
502
- <a name='L437'></a><a href='#L437'>437</a>
503
- <a name='L438'></a><a href='#L438'>438</a>
504
- <a name='L439'></a><a href='#L439'>439</a>
505
- <a name='L440'></a><a href='#L440'>440</a>
506
- <a name='L441'></a><a href='#L441'>441</a>
507
- <a name='L442'></a><a href='#L442'>442</a>
508
- <a name='L443'></a><a href='#L443'>443</a>
509
- <a name='L444'></a><a href='#L444'>444</a>
510
- <a name='L445'></a><a href='#L445'>445</a>
511
- <a name='L446'></a><a href='#L446'>446</a>
512
- <a name='L447'></a><a href='#L447'>447</a>
513
- <a name='L448'></a><a href='#L448'>448</a>
514
- <a name='L449'></a><a href='#L449'>449</a>
515
- <a name='L450'></a><a href='#L450'>450</a>
516
- <a name='L451'></a><a href='#L451'>451</a>
517
- <a name='L452'></a><a href='#L452'>452</a>
518
- <a name='L453'></a><a href='#L453'>453</a>
519
- <a name='L454'></a><a href='#L454'>454</a>
520
- <a name='L455'></a><a href='#L455'>455</a>
521
- <a name='L456'></a><a href='#L456'>456</a>
522
- <a name='L457'></a><a href='#L457'>457</a>
523
- <a name='L458'></a><a href='#L458'>458</a>
524
- <a name='L459'></a><a href='#L459'>459</a>
525
- <a name='L460'></a><a href='#L460'>460</a>
526
- <a name='L461'></a><a href='#L461'>461</a>
527
- <a name='L462'></a><a href='#L462'>462</a>
528
- <a name='L463'></a><a href='#L463'>463</a>
529
- <a name='L464'></a><a href='#L464'>464</a>
530
- <a name='L465'></a><a href='#L465'>465</a>
531
- <a name='L466'></a><a href='#L466'>466</a>
532
- <a name='L467'></a><a href='#L467'>467</a>
533
- <a name='L468'></a><a href='#L468'>468</a>
534
- <a name='L469'></a><a href='#L469'>469</a>
535
- <a name='L470'></a><a href='#L470'>470</a>
536
- <a name='L471'></a><a href='#L471'>471</a>
537
- <a name='L472'></a><a href='#L472'>472</a>
538
- <a name='L473'></a><a href='#L473'>473</a>
539
- <a name='L474'></a><a href='#L474'>474</a>
540
- <a name='L475'></a><a href='#L475'>475</a>
541
- <a name='L476'></a><a href='#L476'>476</a>
542
- <a name='L477'></a><a href='#L477'>477</a>
543
- <a name='L478'></a><a href='#L478'>478</a>
544
- <a name='L479'></a><a href='#L479'>479</a>
545
- <a name='L480'></a><a href='#L480'>480</a>
546
- <a name='L481'></a><a href='#L481'>481</a>
547
- <a name='L482'></a><a href='#L482'>482</a>
548
- <a name='L483'></a><a href='#L483'>483</a>
549
- <a name='L484'></a><a href='#L484'>484</a>
550
- <a name='L485'></a><a href='#L485'>485</a>
551
- <a name='L486'></a><a href='#L486'>486</a>
552
- <a name='L487'></a><a href='#L487'>487</a>
553
- <a name='L488'></a><a href='#L488'>488</a>
554
- <a name='L489'></a><a href='#L489'>489</a>
555
- <a name='L490'></a><a href='#L490'>490</a>
556
- <a name='L491'></a><a href='#L491'>491</a>
557
- <a name='L492'></a><a href='#L492'>492</a>
558
- <a name='L493'></a><a href='#L493'>493</a>
559
- <a name='L494'></a><a href='#L494'>494</a>
560
- <a name='L495'></a><a href='#L495'>495</a>
561
- <a name='L496'></a><a href='#L496'>496</a>
562
- <a name='L497'></a><a href='#L497'>497</a>
563
- <a name='L498'></a><a href='#L498'>498</a>
564
- <a name='L499'></a><a href='#L499'>499</a>
565
- <a name='L500'></a><a href='#L500'>500</a>
566
- <a name='L501'></a><a href='#L501'>501</a>
567
- <a name='L502'></a><a href='#L502'>502</a>
568
- <a name='L503'></a><a href='#L503'>503</a>
569
- <a name='L504'></a><a href='#L504'>504</a>
570
- <a name='L505'></a><a href='#L505'>505</a>
571
- <a name='L506'></a><a href='#L506'>506</a>
572
- <a name='L507'></a><a href='#L507'>507</a>
573
- <a name='L508'></a><a href='#L508'>508</a>
574
- <a name='L509'></a><a href='#L509'>509</a>
575
- <a name='L510'></a><a href='#L510'>510</a>
576
- <a name='L511'></a><a href='#L511'>511</a>
577
- <a name='L512'></a><a href='#L512'>512</a>
578
- <a name='L513'></a><a href='#L513'>513</a>
579
- <a name='L514'></a><a href='#L514'>514</a>
580
- <a name='L515'></a><a href='#L515'>515</a>
581
- <a name='L516'></a><a href='#L516'>516</a>
582
- <a name='L517'></a><a href='#L517'>517</a>
583
- <a name='L518'></a><a href='#L518'>518</a>
584
- <a name='L519'></a><a href='#L519'>519</a>
585
- <a name='L520'></a><a href='#L520'>520</a>
586
- <a name='L521'></a><a href='#L521'>521</a>
587
- <a name='L522'></a><a href='#L522'>522</a>
588
- <a name='L523'></a><a href='#L523'>523</a>
589
- <a name='L524'></a><a href='#L524'>524</a>
590
- <a name='L525'></a><a href='#L525'>525</a>
591
- <a name='L526'></a><a href='#L526'>526</a>
592
- <a name='L527'></a><a href='#L527'>527</a>
593
- <a name='L528'></a><a href='#L528'>528</a>
594
- <a name='L529'></a><a href='#L529'>529</a>
595
- <a name='L530'></a><a href='#L530'>530</a>
596
- <a name='L531'></a><a href='#L531'>531</a>
597
- <a name='L532'></a><a href='#L532'>532</a>
598
- <a name='L533'></a><a href='#L533'>533</a>
599
- <a name='L534'></a><a href='#L534'>534</a>
600
- <a name='L535'></a><a href='#L535'>535</a>
601
- <a name='L536'></a><a href='#L536'>536</a>
602
- <a name='L537'></a><a href='#L537'>537</a>
603
- <a name='L538'></a><a href='#L538'>538</a>
604
- <a name='L539'></a><a href='#L539'>539</a>
605
- <a name='L540'></a><a href='#L540'>540</a>
606
- <a name='L541'></a><a href='#L541'>541</a>
607
- <a name='L542'></a><a href='#L542'>542</a>
608
- <a name='L543'></a><a href='#L543'>543</a>
609
- <a name='L544'></a><a href='#L544'>544</a>
610
- <a name='L545'></a><a href='#L545'>545</a>
611
- <a name='L546'></a><a href='#L546'>546</a>
612
- <a name='L547'></a><a href='#L547'>547</a>
613
- <a name='L548'></a><a href='#L548'>548</a>
614
- <a name='L549'></a><a href='#L549'>549</a>
615
- <a name='L550'></a><a href='#L550'>550</a>
616
- <a name='L551'></a><a href='#L551'>551</a>
617
- <a name='L552'></a><a href='#L552'>552</a>
618
- <a name='L553'></a><a href='#L553'>553</a>
619
- <a name='L554'></a><a href='#L554'>554</a>
620
- <a name='L555'></a><a href='#L555'>555</a>
621
- <a name='L556'></a><a href='#L556'>556</a>
622
- <a name='L557'></a><a href='#L557'>557</a>
623
- <a name='L558'></a><a href='#L558'>558</a>
624
- <a name='L559'></a><a href='#L559'>559</a>
625
- <a name='L560'></a><a href='#L560'>560</a>
626
- <a name='L561'></a><a href='#L561'>561</a>
627
- <a name='L562'></a><a href='#L562'>562</a>
628
- <a name='L563'></a><a href='#L563'>563</a>
629
- <a name='L564'></a><a href='#L564'>564</a>
630
- <a name='L565'></a><a href='#L565'>565</a>
631
- <a name='L566'></a><a href='#L566'>566</a>
632
- <a name='L567'></a><a href='#L567'>567</a>
633
- <a name='L568'></a><a href='#L568'>568</a>
634
- <a name='L569'></a><a href='#L569'>569</a>
635
- <a name='L570'></a><a href='#L570'>570</a>
636
- <a name='L571'></a><a href='#L571'>571</a>
637
- <a name='L572'></a><a href='#L572'>572</a>
638
- <a name='L573'></a><a href='#L573'>573</a>
639
- <a name='L574'></a><a href='#L574'>574</a>
640
- <a name='L575'></a><a href='#L575'>575</a>
641
- <a name='L576'></a><a href='#L576'>576</a>
642
- <a name='L577'></a><a href='#L577'>577</a>
643
- <a name='L578'></a><a href='#L578'>578</a>
644
- <a name='L579'></a><a href='#L579'>579</a>
645
- <a name='L580'></a><a href='#L580'>580</a>
646
- <a name='L581'></a><a href='#L581'>581</a>
647
- <a name='L582'></a><a href='#L582'>582</a>
648
- <a name='L583'></a><a href='#L583'>583</a>
649
- <a name='L584'></a><a href='#L584'>584</a>
650
- <a name='L585'></a><a href='#L585'>585</a>
651
- <a name='L586'></a><a href='#L586'>586</a>
652
- <a name='L587'></a><a href='#L587'>587</a>
653
- <a name='L588'></a><a href='#L588'>588</a>
654
- <a name='L589'></a><a href='#L589'>589</a>
655
- <a name='L590'></a><a href='#L590'>590</a>
656
- <a name='L591'></a><a href='#L591'>591</a>
657
- <a name='L592'></a><a href='#L592'>592</a>
658
- <a name='L593'></a><a href='#L593'>593</a>
659
- <a name='L594'></a><a href='#L594'>594</a>
660
- <a name='L595'></a><a href='#L595'>595</a>
661
- <a name='L596'></a><a href='#L596'>596</a>
662
- <a name='L597'></a><a href='#L597'>597</a>
663
- <a name='L598'></a><a href='#L598'>598</a>
664
- <a name='L599'></a><a href='#L599'>599</a>
665
- <a name='L600'></a><a href='#L600'>600</a>
666
- <a name='L601'></a><a href='#L601'>601</a>
667
- <a name='L602'></a><a href='#L602'>602</a>
668
- <a name='L603'></a><a href='#L603'>603</a>
669
- <a name='L604'></a><a href='#L604'>604</a>
670
- <a name='L605'></a><a href='#L605'>605</a>
671
- <a name='L606'></a><a href='#L606'>606</a>
672
- <a name='L607'></a><a href='#L607'>607</a>
673
- <a name='L608'></a><a href='#L608'>608</a>
674
- <a name='L609'></a><a href='#L609'>609</a>
675
- <a name='L610'></a><a href='#L610'>610</a>
676
- <a name='L611'></a><a href='#L611'>611</a>
677
- <a name='L612'></a><a href='#L612'>612</a>
678
- <a name='L613'></a><a href='#L613'>613</a>
679
- <a name='L614'></a><a href='#L614'>614</a>
680
- <a name='L615'></a><a href='#L615'>615</a>
681
- <a name='L616'></a><a href='#L616'>616</a>
682
- <a name='L617'></a><a href='#L617'>617</a>
683
- <a name='L618'></a><a href='#L618'>618</a>
684
- <a name='L619'></a><a href='#L619'>619</a>
685
- <a name='L620'></a><a href='#L620'>620</a>
686
- <a name='L621'></a><a href='#L621'>621</a>
687
- <a name='L622'></a><a href='#L622'>622</a>
688
- <a name='L623'></a><a href='#L623'>623</a>
689
- <a name='L624'></a><a href='#L624'>624</a>
690
- <a name='L625'></a><a href='#L625'>625</a>
691
- <a name='L626'></a><a href='#L626'>626</a>
692
- <a name='L627'></a><a href='#L627'>627</a>
693
- <a name='L628'></a><a href='#L628'>628</a>
694
- <a name='L629'></a><a href='#L629'>629</a>
695
- <a name='L630'></a><a href='#L630'>630</a>
696
- <a name='L631'></a><a href='#L631'>631</a>
697
- <a name='L632'></a><a href='#L632'>632</a>
698
- <a name='L633'></a><a href='#L633'>633</a>
699
- <a name='L634'></a><a href='#L634'>634</a>
700
- <a name='L635'></a><a href='#L635'>635</a>
701
- <a name='L636'></a><a href='#L636'>636</a>
702
- <a name='L637'></a><a href='#L637'>637</a>
703
- <a name='L638'></a><a href='#L638'>638</a>
704
- <a name='L639'></a><a href='#L639'>639</a>
705
- <a name='L640'></a><a href='#L640'>640</a>
706
- <a name='L641'></a><a href='#L641'>641</a>
707
- <a name='L642'></a><a href='#L642'>642</a>
708
- <a name='L643'></a><a href='#L643'>643</a>
709
- <a name='L644'></a><a href='#L644'>644</a>
710
- <a name='L645'></a><a href='#L645'>645</a>
711
- <a name='L646'></a><a href='#L646'>646</a>
712
- <a name='L647'></a><a href='#L647'>647</a>
713
- <a name='L648'></a><a href='#L648'>648</a>
714
- <a name='L649'></a><a href='#L649'>649</a>
715
- <a name='L650'></a><a href='#L650'>650</a>
716
- <a name='L651'></a><a href='#L651'>651</a>
717
- <a name='L652'></a><a href='#L652'>652</a>
718
- <a name='L653'></a><a href='#L653'>653</a>
719
- <a name='L654'></a><a href='#L654'>654</a>
720
- <a name='L655'></a><a href='#L655'>655</a>
721
- <a name='L656'></a><a href='#L656'>656</a>
722
- <a name='L657'></a><a href='#L657'>657</a>
723
- <a name='L658'></a><a href='#L658'>658</a>
724
- <a name='L659'></a><a href='#L659'>659</a>
725
- <a name='L660'></a><a href='#L660'>660</a>
726
- <a name='L661'></a><a href='#L661'>661</a>
727
- <a name='L662'></a><a href='#L662'>662</a>
728
- <a name='L663'></a><a href='#L663'>663</a>
729
- <a name='L664'></a><a href='#L664'>664</a>
730
- <a name='L665'></a><a href='#L665'>665</a>
731
- <a name='L666'></a><a href='#L666'>666</a>
732
- <a name='L667'></a><a href='#L667'>667</a>
733
- <a name='L668'></a><a href='#L668'>668</a>
734
- <a name='L669'></a><a href='#L669'>669</a>
735
- <a name='L670'></a><a href='#L670'>670</a>
736
- <a name='L671'></a><a href='#L671'>671</a>
737
- <a name='L672'></a><a href='#L672'>672</a>
738
- <a name='L673'></a><a href='#L673'>673</a>
739
- <a name='L674'></a><a href='#L674'>674</a>
740
- <a name='L675'></a><a href='#L675'>675</a>
741
- <a name='L676'></a><a href='#L676'>676</a>
742
- <a name='L677'></a><a href='#L677'>677</a>
743
- <a name='L678'></a><a href='#L678'>678</a>
744
- <a name='L679'></a><a href='#L679'>679</a>
745
- <a name='L680'></a><a href='#L680'>680</a>
746
- <a name='L681'></a><a href='#L681'>681</a>
747
- <a name='L682'></a><a href='#L682'>682</a>
748
- <a name='L683'></a><a href='#L683'>683</a>
749
- <a name='L684'></a><a href='#L684'>684</a>
750
- <a name='L685'></a><a href='#L685'>685</a>
751
- <a name='L686'></a><a href='#L686'>686</a>
752
- <a name='L687'></a><a href='#L687'>687</a>
753
- <a name='L688'></a><a href='#L688'>688</a>
754
- <a name='L689'></a><a href='#L689'>689</a>
755
- <a name='L690'></a><a href='#L690'>690</a>
756
- <a name='L691'></a><a href='#L691'>691</a>
757
- <a name='L692'></a><a href='#L692'>692</a>
758
- <a name='L693'></a><a href='#L693'>693</a>
759
- <a name='L694'></a><a href='#L694'>694</a>
760
- <a name='L695'></a><a href='#L695'>695</a>
761
- <a name='L696'></a><a href='#L696'>696</a>
762
- <a name='L697'></a><a href='#L697'>697</a>
763
- <a name='L698'></a><a href='#L698'>698</a>
764
- <a name='L699'></a><a href='#L699'>699</a>
765
- <a name='L700'></a><a href='#L700'>700</a>
766
- <a name='L701'></a><a href='#L701'>701</a>
767
- <a name='L702'></a><a href='#L702'>702</a>
768
- <a name='L703'></a><a href='#L703'>703</a>
769
- <a name='L704'></a><a href='#L704'>704</a>
770
- <a name='L705'></a><a href='#L705'>705</a>
771
- <a name='L706'></a><a href='#L706'>706</a>
772
- <a name='L707'></a><a href='#L707'>707</a>
773
- <a name='L708'></a><a href='#L708'>708</a>
774
- <a name='L709'></a><a href='#L709'>709</a>
775
- <a name='L710'></a><a href='#L710'>710</a>
776
- <a name='L711'></a><a href='#L711'>711</a>
777
- <a name='L712'></a><a href='#L712'>712</a>
778
- <a name='L713'></a><a href='#L713'>713</a>
779
- <a name='L714'></a><a href='#L714'>714</a>
780
- <a name='L715'></a><a href='#L715'>715</a>
781
- <a name='L716'></a><a href='#L716'>716</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
782
- <span class="cline-any cline-neutral">&nbsp;</span>
783
- <span class="cline-any cline-neutral">&nbsp;</span>
784
- <span class="cline-any cline-neutral">&nbsp;</span>
785
- <span class="cline-any cline-neutral">&nbsp;</span>
786
- <span class="cline-any cline-neutral">&nbsp;</span>
787
- <span class="cline-any cline-neutral">&nbsp;</span>
788
- <span class="cline-any cline-neutral">&nbsp;</span>
789
- <span class="cline-any cline-neutral">&nbsp;</span>
790
- <span class="cline-any cline-neutral">&nbsp;</span>
791
- <span class="cline-any cline-neutral">&nbsp;</span>
792
- <span class="cline-any cline-neutral">&nbsp;</span>
793
- <span class="cline-any cline-neutral">&nbsp;</span>
794
- <span class="cline-any cline-neutral">&nbsp;</span>
795
- <span class="cline-any cline-neutral">&nbsp;</span>
796
- <span class="cline-any cline-neutral">&nbsp;</span>
797
- <span class="cline-any cline-neutral">&nbsp;</span>
798
- <span class="cline-any cline-neutral">&nbsp;</span>
799
- <span class="cline-any cline-neutral">&nbsp;</span>
800
- <span class="cline-any cline-neutral">&nbsp;</span>
801
- <span class="cline-any cline-neutral">&nbsp;</span>
802
- <span class="cline-any cline-neutral">&nbsp;</span>
803
- <span class="cline-any cline-neutral">&nbsp;</span>
804
- <span class="cline-any cline-neutral">&nbsp;</span>
805
- <span class="cline-any cline-neutral">&nbsp;</span>
806
- <span class="cline-any cline-neutral">&nbsp;</span>
807
- <span class="cline-any cline-neutral">&nbsp;</span>
808
- <span class="cline-any cline-neutral">&nbsp;</span>
809
- <span class="cline-any cline-neutral">&nbsp;</span>
810
- <span class="cline-any cline-neutral">&nbsp;</span>
811
- <span class="cline-any cline-neutral">&nbsp;</span>
812
- <span class="cline-any cline-neutral">&nbsp;</span>
813
- <span class="cline-any cline-neutral">&nbsp;</span>
814
- <span class="cline-any cline-neutral">&nbsp;</span>
815
- <span class="cline-any cline-neutral">&nbsp;</span>
816
- <span class="cline-any cline-neutral">&nbsp;</span>
817
- <span class="cline-any cline-neutral">&nbsp;</span>
818
- <span class="cline-any cline-neutral">&nbsp;</span>
819
- <span class="cline-any cline-no">&nbsp;</span>
820
- <span class="cline-any cline-neutral">&nbsp;</span>
821
- <span class="cline-any cline-no">&nbsp;</span>
822
- <span class="cline-any cline-no">&nbsp;</span>
823
- <span class="cline-any cline-no">&nbsp;</span>
824
- <span class="cline-any cline-no">&nbsp;</span>
825
- <span class="cline-any cline-no">&nbsp;</span>
826
- <span class="cline-any cline-no">&nbsp;</span>
827
- <span class="cline-any cline-neutral">&nbsp;</span>
828
- <span class="cline-any cline-neutral">&nbsp;</span>
829
- <span class="cline-any cline-no">&nbsp;</span>
830
- <span class="cline-any cline-no">&nbsp;</span>
831
- <span class="cline-any cline-no">&nbsp;</span>
832
- <span class="cline-any cline-no">&nbsp;</span>
833
- <span class="cline-any cline-no">&nbsp;</span>
834
- <span class="cline-any cline-no">&nbsp;</span>
835
- <span class="cline-any cline-neutral">&nbsp;</span>
836
- <span class="cline-any cline-neutral">&nbsp;</span>
837
- <span class="cline-any cline-no">&nbsp;</span>
838
- <span class="cline-any cline-neutral">&nbsp;</span>
839
- <span class="cline-any cline-neutral">&nbsp;</span>
840
- <span class="cline-any cline-no">&nbsp;</span>
841
- <span class="cline-any cline-neutral">&nbsp;</span>
842
- <span class="cline-any cline-neutral">&nbsp;</span>
843
- <span class="cline-any cline-no">&nbsp;</span>
844
- <span class="cline-any cline-no">&nbsp;</span>
845
- <span class="cline-any cline-neutral">&nbsp;</span>
846
- <span class="cline-any cline-neutral">&nbsp;</span>
847
- <span class="cline-any cline-no">&nbsp;</span>
848
- <span class="cline-any cline-neutral">&nbsp;</span>
849
- <span class="cline-any cline-no">&nbsp;</span>
850
- <span class="cline-any cline-no">&nbsp;</span>
851
- <span class="cline-any cline-no">&nbsp;</span>
852
- <span class="cline-any cline-neutral">&nbsp;</span>
853
- <span class="cline-any cline-neutral">&nbsp;</span>
854
- <span class="cline-any cline-no">&nbsp;</span>
855
- <span class="cline-any cline-no">&nbsp;</span>
856
- <span class="cline-any cline-no">&nbsp;</span>
857
- <span class="cline-any cline-no">&nbsp;</span>
858
- <span class="cline-any cline-no">&nbsp;</span>
859
- <span class="cline-any cline-neutral">&nbsp;</span>
860
- <span class="cline-any cline-no">&nbsp;</span>
861
- <span class="cline-any cline-no">&nbsp;</span>
862
- <span class="cline-any cline-no">&nbsp;</span>
863
- <span class="cline-any cline-no">&nbsp;</span>
864
- <span class="cline-any cline-no">&nbsp;</span>
865
- <span class="cline-any cline-no">&nbsp;</span>
866
- <span class="cline-any cline-no">&nbsp;</span>
867
- <span class="cline-any cline-no">&nbsp;</span>
868
- <span class="cline-any cline-no">&nbsp;</span>
869
- <span class="cline-any cline-no">&nbsp;</span>
870
- <span class="cline-any cline-no">&nbsp;</span>
871
- <span class="cline-any cline-no">&nbsp;</span>
872
- <span class="cline-any cline-neutral">&nbsp;</span>
873
- <span class="cline-any cline-neutral">&nbsp;</span>
874
- <span class="cline-any cline-no">&nbsp;</span>
875
- <span class="cline-any cline-no">&nbsp;</span>
876
- <span class="cline-any cline-no">&nbsp;</span>
877
- <span class="cline-any cline-no">&nbsp;</span>
878
- <span class="cline-any cline-no">&nbsp;</span>
879
- <span class="cline-any cline-no">&nbsp;</span>
880
- <span class="cline-any cline-no">&nbsp;</span>
881
- <span class="cline-any cline-no">&nbsp;</span>
882
- <span class="cline-any cline-no">&nbsp;</span>
883
- <span class="cline-any cline-no">&nbsp;</span>
884
- <span class="cline-any cline-no">&nbsp;</span>
885
- <span class="cline-any cline-no">&nbsp;</span>
886
- <span class="cline-any cline-no">&nbsp;</span>
887
- <span class="cline-any cline-no">&nbsp;</span>
888
- <span class="cline-any cline-neutral">&nbsp;</span>
889
- <span class="cline-any cline-neutral">&nbsp;</span>
890
- <span class="cline-any cline-no">&nbsp;</span>
891
- <span class="cline-any cline-no">&nbsp;</span>
892
- <span class="cline-any cline-no">&nbsp;</span>
893
- <span class="cline-any cline-no">&nbsp;</span>
894
- <span class="cline-any cline-no">&nbsp;</span>
895
- <span class="cline-any cline-no">&nbsp;</span>
896
- <span class="cline-any cline-neutral">&nbsp;</span>
897
- <span class="cline-any cline-neutral">&nbsp;</span>
898
- <span class="cline-any cline-no">&nbsp;</span>
899
- <span class="cline-any cline-no">&nbsp;</span>
900
- <span class="cline-any cline-no">&nbsp;</span>
901
- <span class="cline-any cline-no">&nbsp;</span>
902
- <span class="cline-any cline-no">&nbsp;</span>
903
- <span class="cline-any cline-no">&nbsp;</span>
904
- <span class="cline-any cline-neutral">&nbsp;</span>
905
- <span class="cline-any cline-neutral">&nbsp;</span>
906
- <span class="cline-any cline-no">&nbsp;</span>
907
- <span class="cline-any cline-no">&nbsp;</span>
908
- <span class="cline-any cline-no">&nbsp;</span>
909
- <span class="cline-any cline-no">&nbsp;</span>
910
- <span class="cline-any cline-no">&nbsp;</span>
911
- <span class="cline-any cline-no">&nbsp;</span>
912
- <span class="cline-any cline-no">&nbsp;</span>
913
- <span class="cline-any cline-no">&nbsp;</span>
914
- <span class="cline-any cline-no">&nbsp;</span>
915
- <span class="cline-any cline-no">&nbsp;</span>
916
- <span class="cline-any cline-no">&nbsp;</span>
917
- <span class="cline-any cline-no">&nbsp;</span>
918
- <span class="cline-any cline-neutral">&nbsp;</span>
919
- <span class="cline-any cline-no">&nbsp;</span>
920
- <span class="cline-any cline-no">&nbsp;</span>
921
- <span class="cline-any cline-no">&nbsp;</span>
922
- <span class="cline-any cline-no">&nbsp;</span>
923
- <span class="cline-any cline-no">&nbsp;</span>
924
- <span class="cline-any cline-no">&nbsp;</span>
925
- <span class="cline-any cline-no">&nbsp;</span>
926
- <span class="cline-any cline-no">&nbsp;</span>
927
- <span class="cline-any cline-no">&nbsp;</span>
928
- <span class="cline-any cline-no">&nbsp;</span>
929
- <span class="cline-any cline-no">&nbsp;</span>
930
- <span class="cline-any cline-neutral">&nbsp;</span>
931
- <span class="cline-any cline-neutral">&nbsp;</span>
932
- <span class="cline-any cline-no">&nbsp;</span>
933
- <span class="cline-any cline-no">&nbsp;</span>
934
- <span class="cline-any cline-no">&nbsp;</span>
935
- <span class="cline-any cline-no">&nbsp;</span>
936
- <span class="cline-any cline-no">&nbsp;</span>
937
- <span class="cline-any cline-no">&nbsp;</span>
938
- <span class="cline-any cline-no">&nbsp;</span>
939
- <span class="cline-any cline-no">&nbsp;</span>
940
- <span class="cline-any cline-no">&nbsp;</span>
941
- <span class="cline-any cline-no">&nbsp;</span>
942
- <span class="cline-any cline-neutral">&nbsp;</span>
943
- <span class="cline-any cline-neutral">&nbsp;</span>
944
- <span class="cline-any cline-no">&nbsp;</span>
945
- <span class="cline-any cline-no">&nbsp;</span>
946
- <span class="cline-any cline-no">&nbsp;</span>
947
- <span class="cline-any cline-neutral">&nbsp;</span>
948
- <span class="cline-any cline-neutral">&nbsp;</span>
949
- <span class="cline-any cline-no">&nbsp;</span>
950
- <span class="cline-any cline-no">&nbsp;</span>
951
- <span class="cline-any cline-no">&nbsp;</span>
952
- <span class="cline-any cline-no">&nbsp;</span>
953
- <span class="cline-any cline-neutral">&nbsp;</span>
954
- <span class="cline-any cline-neutral">&nbsp;</span>
955
- <span class="cline-any cline-no">&nbsp;</span>
956
- <span class="cline-any cline-neutral">&nbsp;</span>
957
- <span class="cline-any cline-neutral">&nbsp;</span>
958
- <span class="cline-any cline-no">&nbsp;</span>
959
- <span class="cline-any cline-no">&nbsp;</span>
960
- <span class="cline-any cline-neutral">&nbsp;</span>
961
- <span class="cline-any cline-no">&nbsp;</span>
962
- <span class="cline-any cline-no">&nbsp;</span>
963
- <span class="cline-any cline-no">&nbsp;</span>
964
- <span class="cline-any cline-no">&nbsp;</span>
965
- <span class="cline-any cline-neutral">&nbsp;</span>
966
- <span class="cline-any cline-no">&nbsp;</span>
967
- <span class="cline-any cline-no">&nbsp;</span>
968
- <span class="cline-any cline-no">&nbsp;</span>
969
- <span class="cline-any cline-no">&nbsp;</span>
970
- <span class="cline-any cline-no">&nbsp;</span>
971
- <span class="cline-any cline-neutral">&nbsp;</span>
972
- <span class="cline-any cline-no">&nbsp;</span>
973
- <span class="cline-any cline-no">&nbsp;</span>
974
- <span class="cline-any cline-neutral">&nbsp;</span>
975
- <span class="cline-any cline-no">&nbsp;</span>
976
- <span class="cline-any cline-neutral">&nbsp;</span>
977
- <span class="cline-any cline-no">&nbsp;</span>
978
- <span class="cline-any cline-no">&nbsp;</span>
979
- <span class="cline-any cline-no">&nbsp;</span>
980
- <span class="cline-any cline-no">&nbsp;</span>
981
- <span class="cline-any cline-no">&nbsp;</span>
982
- <span class="cline-any cline-no">&nbsp;</span>
983
- <span class="cline-any cline-no">&nbsp;</span>
984
- <span class="cline-any cline-no">&nbsp;</span>
985
- <span class="cline-any cline-no">&nbsp;</span>
986
- <span class="cline-any cline-no">&nbsp;</span>
987
- <span class="cline-any cline-no">&nbsp;</span>
988
- <span class="cline-any cline-neutral">&nbsp;</span>
989
- <span class="cline-any cline-neutral">&nbsp;</span>
990
- <span class="cline-any cline-no">&nbsp;</span>
991
- <span class="cline-any cline-no">&nbsp;</span>
992
- <span class="cline-any cline-no">&nbsp;</span>
993
- <span class="cline-any cline-no">&nbsp;</span>
994
- <span class="cline-any cline-no">&nbsp;</span>
995
- <span class="cline-any cline-no">&nbsp;</span>
996
- <span class="cline-any cline-no">&nbsp;</span>
997
- <span class="cline-any cline-neutral">&nbsp;</span>
998
- <span class="cline-any cline-neutral">&nbsp;</span>
999
- <span class="cline-any cline-no">&nbsp;</span>
1000
- <span class="cline-any cline-neutral">&nbsp;</span>
1001
- <span class="cline-any cline-no">&nbsp;</span>
1002
- <span class="cline-any cline-no">&nbsp;</span>
1003
- <span class="cline-any cline-no">&nbsp;</span>
1004
- <span class="cline-any cline-neutral">&nbsp;</span>
1005
- <span class="cline-any cline-neutral">&nbsp;</span>
1006
- <span class="cline-any cline-no">&nbsp;</span>
1007
- <span class="cline-any cline-no">&nbsp;</span>
1008
- <span class="cline-any cline-neutral">&nbsp;</span>
1009
- <span class="cline-any cline-neutral">&nbsp;</span>
1010
- <span class="cline-any cline-neutral">&nbsp;</span>
1011
- <span class="cline-any cline-neutral">&nbsp;</span>
1012
- <span class="cline-any cline-neutral">&nbsp;</span>
1013
- <span class="cline-any cline-no">&nbsp;</span>
1014
- <span class="cline-any cline-no">&nbsp;</span>
1015
- <span class="cline-any cline-no">&nbsp;</span>
1016
- <span class="cline-any cline-no">&nbsp;</span>
1017
- <span class="cline-any cline-neutral">&nbsp;</span>
1018
- <span class="cline-any cline-neutral">&nbsp;</span>
1019
- <span class="cline-any cline-no">&nbsp;</span>
1020
- <span class="cline-any cline-no">&nbsp;</span>
1021
- <span class="cline-any cline-neutral">&nbsp;</span>
1022
- <span class="cline-any cline-neutral">&nbsp;</span>
1023
- <span class="cline-any cline-no">&nbsp;</span>
1024
- <span class="cline-any cline-neutral">&nbsp;</span>
1025
- <span class="cline-any cline-neutral">&nbsp;</span>
1026
- <span class="cline-any cline-no">&nbsp;</span>
1027
- <span class="cline-any cline-no">&nbsp;</span>
1028
- <span class="cline-any cline-no">&nbsp;</span>
1029
- <span class="cline-any cline-neutral">&nbsp;</span>
1030
- <span class="cline-any cline-neutral">&nbsp;</span>
1031
- <span class="cline-any cline-no">&nbsp;</span>
1032
- <span class="cline-any cline-no">&nbsp;</span>
1033
- <span class="cline-any cline-no">&nbsp;</span>
1034
- <span class="cline-any cline-neutral">&nbsp;</span>
1035
- <span class="cline-any cline-neutral">&nbsp;</span>
1036
- <span class="cline-any cline-no">&nbsp;</span>
1037
- <span class="cline-any cline-no">&nbsp;</span>
1038
- <span class="cline-any cline-no">&nbsp;</span>
1039
- <span class="cline-any cline-no">&nbsp;</span>
1040
- <span class="cline-any cline-neutral">&nbsp;</span>
1041
- <span class="cline-any cline-no">&nbsp;</span>
1042
- <span class="cline-any cline-no">&nbsp;</span>
1043
- <span class="cline-any cline-no">&nbsp;</span>
1044
- <span class="cline-any cline-no">&nbsp;</span>
1045
- <span class="cline-any cline-no">&nbsp;</span>
1046
- <span class="cline-any cline-neutral">&nbsp;</span>
1047
- <span class="cline-any cline-neutral">&nbsp;</span>
1048
- <span class="cline-any cline-no">&nbsp;</span>
1049
- <span class="cline-any cline-no">&nbsp;</span>
1050
- <span class="cline-any cline-neutral">&nbsp;</span>
1051
- <span class="cline-any cline-no">&nbsp;</span>
1052
- <span class="cline-any cline-no">&nbsp;</span>
1053
- <span class="cline-any cline-no">&nbsp;</span>
1054
- <span class="cline-any cline-no">&nbsp;</span>
1055
- <span class="cline-any cline-no">&nbsp;</span>
1056
- <span class="cline-any cline-no">&nbsp;</span>
1057
- <span class="cline-any cline-no">&nbsp;</span>
1058
- <span class="cline-any cline-no">&nbsp;</span>
1059
- <span class="cline-any cline-no">&nbsp;</span>
1060
- <span class="cline-any cline-no">&nbsp;</span>
1061
- <span class="cline-any cline-no">&nbsp;</span>
1062
- <span class="cline-any cline-no">&nbsp;</span>
1063
- <span class="cline-any cline-no">&nbsp;</span>
1064
- <span class="cline-any cline-no">&nbsp;</span>
1065
- <span class="cline-any cline-no">&nbsp;</span>
1066
- <span class="cline-any cline-no">&nbsp;</span>
1067
- <span class="cline-any cline-no">&nbsp;</span>
1068
- <span class="cline-any cline-no">&nbsp;</span>
1069
- <span class="cline-any cline-neutral">&nbsp;</span>
1070
- <span class="cline-any cline-no">&nbsp;</span>
1071
- <span class="cline-any cline-neutral">&nbsp;</span>
1072
- <span class="cline-any cline-neutral">&nbsp;</span>
1073
- <span class="cline-any cline-no">&nbsp;</span>
1074
- <span class="cline-any cline-no">&nbsp;</span>
1075
- <span class="cline-any cline-no">&nbsp;</span>
1076
- <span class="cline-any cline-no">&nbsp;</span>
1077
- <span class="cline-any cline-neutral">&nbsp;</span>
1078
- <span class="cline-any cline-no">&nbsp;</span>
1079
- <span class="cline-any cline-neutral">&nbsp;</span>
1080
- <span class="cline-any cline-no">&nbsp;</span>
1081
- <span class="cline-any cline-no">&nbsp;</span>
1082
- <span class="cline-any cline-no">&nbsp;</span>
1083
- <span class="cline-any cline-neutral">&nbsp;</span>
1084
- <span class="cline-any cline-neutral">&nbsp;</span>
1085
- <span class="cline-any cline-no">&nbsp;</span>
1086
- <span class="cline-any cline-no">&nbsp;</span>
1087
- <span class="cline-any cline-no">&nbsp;</span>
1088
- <span class="cline-any cline-no">&nbsp;</span>
1089
- <span class="cline-any cline-no">&nbsp;</span>
1090
- <span class="cline-any cline-no">&nbsp;</span>
1091
- <span class="cline-any cline-no">&nbsp;</span>
1092
- <span class="cline-any cline-neutral">&nbsp;</span>
1093
- <span class="cline-any cline-neutral">&nbsp;</span>
1094
- <span class="cline-any cline-no">&nbsp;</span>
1095
- <span class="cline-any cline-no">&nbsp;</span>
1096
- <span class="cline-any cline-no">&nbsp;</span>
1097
- <span class="cline-any cline-no">&nbsp;</span>
1098
- <span class="cline-any cline-no">&nbsp;</span>
1099
- <span class="cline-any cline-no">&nbsp;</span>
1100
- <span class="cline-any cline-no">&nbsp;</span>
1101
- <span class="cline-any cline-no">&nbsp;</span>
1102
- <span class="cline-any cline-no">&nbsp;</span>
1103
- <span class="cline-any cline-no">&nbsp;</span>
1104
- <span class="cline-any cline-neutral">&nbsp;</span>
1105
- <span class="cline-any cline-no">&nbsp;</span>
1106
- <span class="cline-any cline-no">&nbsp;</span>
1107
- <span class="cline-any cline-no">&nbsp;</span>
1108
- <span class="cline-any cline-no">&nbsp;</span>
1109
- <span class="cline-any cline-neutral">&nbsp;</span>
1110
- <span class="cline-any cline-neutral">&nbsp;</span>
1111
- <span class="cline-any cline-no">&nbsp;</span>
1112
- <span class="cline-any cline-no">&nbsp;</span>
1113
- <span class="cline-any cline-neutral">&nbsp;</span>
1114
- <span class="cline-any cline-neutral">&nbsp;</span>
1115
- <span class="cline-any cline-no">&nbsp;</span>
1116
- <span class="cline-any cline-no">&nbsp;</span>
1117
- <span class="cline-any cline-no">&nbsp;</span>
1118
- <span class="cline-any cline-neutral">&nbsp;</span>
1119
- <span class="cline-any cline-neutral">&nbsp;</span>
1120
- <span class="cline-any cline-no">&nbsp;</span>
1121
- <span class="cline-any cline-neutral">&nbsp;</span>
1122
- <span class="cline-any cline-no">&nbsp;</span>
1123
- <span class="cline-any cline-no">&nbsp;</span>
1124
- <span class="cline-any cline-no">&nbsp;</span>
1125
- <span class="cline-any cline-no">&nbsp;</span>
1126
- <span class="cline-any cline-no">&nbsp;</span>
1127
- <span class="cline-any cline-no">&nbsp;</span>
1128
- <span class="cline-any cline-no">&nbsp;</span>
1129
- <span class="cline-any cline-no">&nbsp;</span>
1130
- <span class="cline-any cline-no">&nbsp;</span>
1131
- <span class="cline-any cline-no">&nbsp;</span>
1132
- <span class="cline-any cline-no">&nbsp;</span>
1133
- <span class="cline-any cline-no">&nbsp;</span>
1134
- <span class="cline-any cline-no">&nbsp;</span>
1135
- <span class="cline-any cline-no">&nbsp;</span>
1136
- <span class="cline-any cline-no">&nbsp;</span>
1137
- <span class="cline-any cline-no">&nbsp;</span>
1138
- <span class="cline-any cline-no">&nbsp;</span>
1139
- <span class="cline-any cline-no">&nbsp;</span>
1140
- <span class="cline-any cline-no">&nbsp;</span>
1141
- <span class="cline-any cline-no">&nbsp;</span>
1142
- <span class="cline-any cline-no">&nbsp;</span>
1143
- <span class="cline-any cline-no">&nbsp;</span>
1144
- <span class="cline-any cline-neutral">&nbsp;</span>
1145
- <span class="cline-any cline-neutral">&nbsp;</span>
1146
- <span class="cline-any cline-neutral">&nbsp;</span>
1147
- <span class="cline-any cline-no">&nbsp;</span>
1148
- <span class="cline-any cline-no">&nbsp;</span>
1149
- <span class="cline-any cline-no">&nbsp;</span>
1150
- <span class="cline-any cline-no">&nbsp;</span>
1151
- <span class="cline-any cline-no">&nbsp;</span>
1152
- <span class="cline-any cline-neutral">&nbsp;</span>
1153
- <span class="cline-any cline-neutral">&nbsp;</span>
1154
- <span class="cline-any cline-no">&nbsp;</span>
1155
- <span class="cline-any cline-no">&nbsp;</span>
1156
- <span class="cline-any cline-no">&nbsp;</span>
1157
- <span class="cline-any cline-no">&nbsp;</span>
1158
- <span class="cline-any cline-no">&nbsp;</span>
1159
- <span class="cline-any cline-neutral">&nbsp;</span>
1160
- <span class="cline-any cline-neutral">&nbsp;</span>
1161
- <span class="cline-any cline-no">&nbsp;</span>
1162
- <span class="cline-any cline-no">&nbsp;</span>
1163
- <span class="cline-any cline-no">&nbsp;</span>
1164
- <span class="cline-any cline-no">&nbsp;</span>
1165
- <span class="cline-any cline-no">&nbsp;</span>
1166
- <span class="cline-any cline-no">&nbsp;</span>
1167
- <span class="cline-any cline-no">&nbsp;</span>
1168
- <span class="cline-any cline-no">&nbsp;</span>
1169
- <span class="cline-any cline-neutral">&nbsp;</span>
1170
- <span class="cline-any cline-neutral">&nbsp;</span>
1171
- <span class="cline-any cline-no">&nbsp;</span>
1172
- <span class="cline-any cline-no">&nbsp;</span>
1173
- <span class="cline-any cline-no">&nbsp;</span>
1174
- <span class="cline-any cline-no">&nbsp;</span>
1175
- <span class="cline-any cline-no">&nbsp;</span>
1176
- <span class="cline-any cline-no">&nbsp;</span>
1177
- <span class="cline-any cline-no">&nbsp;</span>
1178
- <span class="cline-any cline-neutral">&nbsp;</span>
1179
- <span class="cline-any cline-neutral">&nbsp;</span>
1180
- <span class="cline-any cline-no">&nbsp;</span>
1181
- <span class="cline-any cline-no">&nbsp;</span>
1182
- <span class="cline-any cline-neutral">&nbsp;</span>
1183
- <span class="cline-any cline-no">&nbsp;</span>
1184
- <span class="cline-any cline-no">&nbsp;</span>
1185
- <span class="cline-any cline-no">&nbsp;</span>
1186
- <span class="cline-any cline-no">&nbsp;</span>
1187
- <span class="cline-any cline-no">&nbsp;</span>
1188
- <span class="cline-any cline-no">&nbsp;</span>
1189
- <span class="cline-any cline-neutral">&nbsp;</span>
1190
- <span class="cline-any cline-no">&nbsp;</span>
1191
- <span class="cline-any cline-neutral">&nbsp;</span>
1192
- <span class="cline-any cline-neutral">&nbsp;</span>
1193
- <span class="cline-any cline-no">&nbsp;</span>
1194
- <span class="cline-any cline-no">&nbsp;</span>
1195
- <span class="cline-any cline-no">&nbsp;</span>
1196
- <span class="cline-any cline-no">&nbsp;</span>
1197
- <span class="cline-any cline-no">&nbsp;</span>
1198
- <span class="cline-any cline-neutral">&nbsp;</span>
1199
- <span class="cline-any cline-neutral">&nbsp;</span>
1200
- <span class="cline-any cline-no">&nbsp;</span>
1201
- <span class="cline-any cline-no">&nbsp;</span>
1202
- <span class="cline-any cline-no">&nbsp;</span>
1203
- <span class="cline-any cline-no">&nbsp;</span>
1204
- <span class="cline-any cline-no">&nbsp;</span>
1205
- <span class="cline-any cline-neutral">&nbsp;</span>
1206
- <span class="cline-any cline-neutral">&nbsp;</span>
1207
- <span class="cline-any cline-no">&nbsp;</span>
1208
- <span class="cline-any cline-no">&nbsp;</span>
1209
- <span class="cline-any cline-no">&nbsp;</span>
1210
- <span class="cline-any cline-no">&nbsp;</span>
1211
- <span class="cline-any cline-no">&nbsp;</span>
1212
- <span class="cline-any cline-neutral">&nbsp;</span>
1213
- <span class="cline-any cline-neutral">&nbsp;</span>
1214
- <span class="cline-any cline-no">&nbsp;</span>
1215
- <span class="cline-any cline-no">&nbsp;</span>
1216
- <span class="cline-any cline-no">&nbsp;</span>
1217
- <span class="cline-any cline-no">&nbsp;</span>
1218
- <span class="cline-any cline-no">&nbsp;</span>
1219
- <span class="cline-any cline-neutral">&nbsp;</span>
1220
- <span class="cline-any cline-neutral">&nbsp;</span>
1221
- <span class="cline-any cline-no">&nbsp;</span>
1222
- <span class="cline-any cline-no">&nbsp;</span>
1223
- <span class="cline-any cline-no">&nbsp;</span>
1224
- <span class="cline-any cline-no">&nbsp;</span>
1225
- <span class="cline-any cline-neutral">&nbsp;</span>
1226
- <span class="cline-any cline-neutral">&nbsp;</span>
1227
- <span class="cline-any cline-no">&nbsp;</span>
1228
- <span class="cline-any cline-no">&nbsp;</span>
1229
- <span class="cline-any cline-no">&nbsp;</span>
1230
- <span class="cline-any cline-no">&nbsp;</span>
1231
- <span class="cline-any cline-neutral">&nbsp;</span>
1232
- <span class="cline-any cline-neutral">&nbsp;</span>
1233
- <span class="cline-any cline-no">&nbsp;</span>
1234
- <span class="cline-any cline-no">&nbsp;</span>
1235
- <span class="cline-any cline-no">&nbsp;</span>
1236
- <span class="cline-any cline-no">&nbsp;</span>
1237
- <span class="cline-any cline-neutral">&nbsp;</span>
1238
- <span class="cline-any cline-neutral">&nbsp;</span>
1239
- <span class="cline-any cline-no">&nbsp;</span>
1240
- <span class="cline-any cline-no">&nbsp;</span>
1241
- <span class="cline-any cline-no">&nbsp;</span>
1242
- <span class="cline-any cline-no">&nbsp;</span>
1243
- <span class="cline-any cline-neutral">&nbsp;</span>
1244
- <span class="cline-any cline-neutral">&nbsp;</span>
1245
- <span class="cline-any cline-no">&nbsp;</span>
1246
- <span class="cline-any cline-no">&nbsp;</span>
1247
- <span class="cline-any cline-no">&nbsp;</span>
1248
- <span class="cline-any cline-no">&nbsp;</span>
1249
- <span class="cline-any cline-neutral">&nbsp;</span>
1250
- <span class="cline-any cline-neutral">&nbsp;</span>
1251
- <span class="cline-any cline-neutral">&nbsp;</span>
1252
- <span class="cline-any cline-no">&nbsp;</span>
1253
- <span class="cline-any cline-no">&nbsp;</span>
1254
- <span class="cline-any cline-no">&nbsp;</span>
1255
- <span class="cline-any cline-no">&nbsp;</span>
1256
- <span class="cline-any cline-no">&nbsp;</span>
1257
- <span class="cline-any cline-no">&nbsp;</span>
1258
- <span class="cline-any cline-no">&nbsp;</span>
1259
- <span class="cline-any cline-no">&nbsp;</span>
1260
- <span class="cline-any cline-neutral">&nbsp;</span>
1261
- <span class="cline-any cline-neutral">&nbsp;</span>
1262
- <span class="cline-any cline-no">&nbsp;</span>
1263
- <span class="cline-any cline-no">&nbsp;</span>
1264
- <span class="cline-any cline-no">&nbsp;</span>
1265
- <span class="cline-any cline-no">&nbsp;</span>
1266
- <span class="cline-any cline-neutral">&nbsp;</span>
1267
- <span class="cline-any cline-neutral">&nbsp;</span>
1268
- <span class="cline-any cline-no">&nbsp;</span>
1269
- <span class="cline-any cline-no">&nbsp;</span>
1270
- <span class="cline-any cline-no">&nbsp;</span>
1271
- <span class="cline-any cline-no">&nbsp;</span>
1272
- <span class="cline-any cline-neutral">&nbsp;</span>
1273
- <span class="cline-any cline-neutral">&nbsp;</span>
1274
- <span class="cline-any cline-no">&nbsp;</span>
1275
- <span class="cline-any cline-no">&nbsp;</span>
1276
- <span class="cline-any cline-no">&nbsp;</span>
1277
- <span class="cline-any cline-no">&nbsp;</span>
1278
- <span class="cline-any cline-neutral">&nbsp;</span>
1279
- <span class="cline-any cline-neutral">&nbsp;</span>
1280
- <span class="cline-any cline-no">&nbsp;</span>
1281
- <span class="cline-any cline-no">&nbsp;</span>
1282
- <span class="cline-any cline-no">&nbsp;</span>
1283
- <span class="cline-any cline-no">&nbsp;</span>
1284
- <span class="cline-any cline-no">&nbsp;</span>
1285
- <span class="cline-any cline-neutral">&nbsp;</span>
1286
- <span class="cline-any cline-no">&nbsp;</span>
1287
- <span class="cline-any cline-no">&nbsp;</span>
1288
- <span class="cline-any cline-no">&nbsp;</span>
1289
- <span class="cline-any cline-neutral">&nbsp;</span>
1290
- <span class="cline-any cline-no">&nbsp;</span>
1291
- <span class="cline-any cline-no">&nbsp;</span>
1292
- <span class="cline-any cline-no">&nbsp;</span>
1293
- <span class="cline-any cline-no">&nbsp;</span>
1294
- <span class="cline-any cline-no">&nbsp;</span>
1295
- <span class="cline-any cline-no">&nbsp;</span>
1296
- <span class="cline-any cline-no">&nbsp;</span>
1297
- <span class="cline-any cline-neutral">&nbsp;</span>
1298
- <span class="cline-any cline-no">&nbsp;</span>
1299
- <span class="cline-any cline-neutral">&nbsp;</span>
1300
- <span class="cline-any cline-neutral">&nbsp;</span>
1301
- <span class="cline-any cline-no">&nbsp;</span>
1302
- <span class="cline-any cline-neutral">&nbsp;</span>
1303
- <span class="cline-any cline-no">&nbsp;</span>
1304
- <span class="cline-any cline-no">&nbsp;</span>
1305
- <span class="cline-any cline-no">&nbsp;</span>
1306
- <span class="cline-any cline-no">&nbsp;</span>
1307
- <span class="cline-any cline-no">&nbsp;</span>
1308
- <span class="cline-any cline-no">&nbsp;</span>
1309
- <span class="cline-any cline-neutral">&nbsp;</span>
1310
- <span class="cline-any cline-no">&nbsp;</span>
1311
- <span class="cline-any cline-no">&nbsp;</span>
1312
- <span class="cline-any cline-no">&nbsp;</span>
1313
- <span class="cline-any cline-no">&nbsp;</span>
1314
- <span class="cline-any cline-neutral">&nbsp;</span>
1315
- <span class="cline-any cline-no">&nbsp;</span>
1316
- <span class="cline-any cline-no">&nbsp;</span>
1317
- <span class="cline-any cline-no">&nbsp;</span>
1318
- <span class="cline-any cline-no">&nbsp;</span>
1319
- <span class="cline-any cline-no">&nbsp;</span>
1320
- <span class="cline-any cline-neutral">&nbsp;</span>
1321
- <span class="cline-any cline-no">&nbsp;</span>
1322
- <span class="cline-any cline-no">&nbsp;</span>
1323
- <span class="cline-any cline-no">&nbsp;</span>
1324
- <span class="cline-any cline-neutral">&nbsp;</span>
1325
- <span class="cline-any cline-neutral">&nbsp;</span>
1326
- <span class="cline-any cline-neutral">&nbsp;</span>
1327
- <span class="cline-any cline-no">&nbsp;</span>
1328
- <span class="cline-any cline-no">&nbsp;</span>
1329
- <span class="cline-any cline-no">&nbsp;</span>
1330
- <span class="cline-any cline-no">&nbsp;</span>
1331
- <span class="cline-any cline-no">&nbsp;</span>
1332
- <span class="cline-any cline-no">&nbsp;</span>
1333
- <span class="cline-any cline-no">&nbsp;</span>
1334
- <span class="cline-any cline-no">&nbsp;</span>
1335
- <span class="cline-any cline-no">&nbsp;</span>
1336
- <span class="cline-any cline-no">&nbsp;</span>
1337
- <span class="cline-any cline-neutral">&nbsp;</span>
1338
- <span class="cline-any cline-no">&nbsp;</span>
1339
- <span class="cline-any cline-no">&nbsp;</span>
1340
- <span class="cline-any cline-no">&nbsp;</span>
1341
- <span class="cline-any cline-no">&nbsp;</span>
1342
- <span class="cline-any cline-no">&nbsp;</span>
1343
- <span class="cline-any cline-no">&nbsp;</span>
1344
- <span class="cline-any cline-no">&nbsp;</span>
1345
- <span class="cline-any cline-no">&nbsp;</span>
1346
- <span class="cline-any cline-neutral">&nbsp;</span>
1347
- <span class="cline-any cline-neutral">&nbsp;</span>
1348
- <span class="cline-any cline-neutral">&nbsp;</span>
1349
- <span class="cline-any cline-no">&nbsp;</span>
1350
- <span class="cline-any cline-no">&nbsp;</span>
1351
- <span class="cline-any cline-no">&nbsp;</span>
1352
- <span class="cline-any cline-no">&nbsp;</span>
1353
- <span class="cline-any cline-no">&nbsp;</span>
1354
- <span class="cline-any cline-no">&nbsp;</span>
1355
- <span class="cline-any cline-no">&nbsp;</span>
1356
- <span class="cline-any cline-neutral">&nbsp;</span>
1357
- <span class="cline-any cline-neutral">&nbsp;</span>
1358
- <span class="cline-any cline-no">&nbsp;</span>
1359
- <span class="cline-any cline-no">&nbsp;</span>
1360
- <span class="cline-any cline-no">&nbsp;</span>
1361
- <span class="cline-any cline-no">&nbsp;</span>
1362
- <span class="cline-any cline-neutral">&nbsp;</span>
1363
- <span class="cline-any cline-neutral">&nbsp;</span>
1364
- <span class="cline-any cline-no">&nbsp;</span>
1365
- <span class="cline-any cline-no">&nbsp;</span>
1366
- <span class="cline-any cline-neutral">&nbsp;</span>
1367
- <span class="cline-any cline-neutral">&nbsp;</span>
1368
- <span class="cline-any cline-no">&nbsp;</span>
1369
- <span class="cline-any cline-no">&nbsp;</span>
1370
- <span class="cline-any cline-no">&nbsp;</span>
1371
- <span class="cline-any cline-no">&nbsp;</span>
1372
- <span class="cline-any cline-no">&nbsp;</span>
1373
- <span class="cline-any cline-neutral">&nbsp;</span>
1374
- <span class="cline-any cline-no">&nbsp;</span>
1375
- <span class="cline-any cline-no">&nbsp;</span>
1376
- <span class="cline-any cline-neutral">&nbsp;</span>
1377
- <span class="cline-any cline-neutral">&nbsp;</span>
1378
- <span class="cline-any cline-neutral">&nbsp;</span>
1379
- <span class="cline-any cline-no">&nbsp;</span>
1380
- <span class="cline-any cline-no">&nbsp;</span>
1381
- <span class="cline-any cline-no">&nbsp;</span>
1382
- <span class="cline-any cline-no">&nbsp;</span>
1383
- <span class="cline-any cline-no">&nbsp;</span>
1384
- <span class="cline-any cline-no">&nbsp;</span>
1385
- <span class="cline-any cline-neutral">&nbsp;</span>
1386
- <span class="cline-any cline-no">&nbsp;</span>
1387
- <span class="cline-any cline-no">&nbsp;</span>
1388
- <span class="cline-any cline-neutral">&nbsp;</span>
1389
- <span class="cline-any cline-neutral">&nbsp;</span>
1390
- <span class="cline-any cline-neutral">&nbsp;</span>
1391
- <span class="cline-any cline-no">&nbsp;</span>
1392
- <span class="cline-any cline-no">&nbsp;</span>
1393
- <span class="cline-any cline-no">&nbsp;</span>
1394
- <span class="cline-any cline-no">&nbsp;</span>
1395
- <span class="cline-any cline-no">&nbsp;</span>
1396
- <span class="cline-any cline-no">&nbsp;</span>
1397
- <span class="cline-any cline-neutral">&nbsp;</span>
1398
- <span class="cline-any cline-no">&nbsp;</span>
1399
- <span class="cline-any cline-no">&nbsp;</span>
1400
- <span class="cline-any cline-neutral">&nbsp;</span>
1401
- <span class="cline-any cline-neutral">&nbsp;</span>
1402
- <span class="cline-any cline-neutral">&nbsp;</span>
1403
- <span class="cline-any cline-no">&nbsp;</span>
1404
- <span class="cline-any cline-no">&nbsp;</span>
1405
- <span class="cline-any cline-no">&nbsp;</span>
1406
- <span class="cline-any cline-no">&nbsp;</span>
1407
- <span class="cline-any cline-no">&nbsp;</span>
1408
- <span class="cline-any cline-no">&nbsp;</span>
1409
- <span class="cline-any cline-no">&nbsp;</span>
1410
- <span class="cline-any cline-no">&nbsp;</span>
1411
- <span class="cline-any cline-no">&nbsp;</span>
1412
- <span class="cline-any cline-no">&nbsp;</span>
1413
- <span class="cline-any cline-no">&nbsp;</span>
1414
- <span class="cline-any cline-no">&nbsp;</span>
1415
- <span class="cline-any cline-no">&nbsp;</span>
1416
- <span class="cline-any cline-no">&nbsp;</span>
1417
- <span class="cline-any cline-no">&nbsp;</span>
1418
- <span class="cline-any cline-no">&nbsp;</span>
1419
- <span class="cline-any cline-no">&nbsp;</span>
1420
- <span class="cline-any cline-no">&nbsp;</span>
1421
- <span class="cline-any cline-no">&nbsp;</span>
1422
- <span class="cline-any cline-no">&nbsp;</span>
1423
- <span class="cline-any cline-no">&nbsp;</span>
1424
- <span class="cline-any cline-no">&nbsp;</span>
1425
- <span class="cline-any cline-neutral">&nbsp;</span>
1426
- <span class="cline-any cline-no">&nbsp;</span>
1427
- <span class="cline-any cline-no">&nbsp;</span>
1428
- <span class="cline-any cline-no">&nbsp;</span>
1429
- <span class="cline-any cline-no">&nbsp;</span>
1430
- <span class="cline-any cline-no">&nbsp;</span>
1431
- <span class="cline-any cline-no">&nbsp;</span>
1432
- <span class="cline-any cline-no">&nbsp;</span>
1433
- <span class="cline-any cline-no">&nbsp;</span>
1434
- <span class="cline-any cline-no">&nbsp;</span>
1435
- <span class="cline-any cline-no">&nbsp;</span>
1436
- <span class="cline-any cline-no">&nbsp;</span>
1437
- <span class="cline-any cline-no">&nbsp;</span>
1438
- <span class="cline-any cline-no">&nbsp;</span>
1439
- <span class="cline-any cline-no">&nbsp;</span>
1440
- <span class="cline-any cline-no">&nbsp;</span>
1441
- <span class="cline-any cline-no">&nbsp;</span>
1442
- <span class="cline-any cline-neutral">&nbsp;</span>
1443
- <span class="cline-any cline-neutral">&nbsp;</span>
1444
- <span class="cline-any cline-no">&nbsp;</span>
1445
- <span class="cline-any cline-no">&nbsp;</span>
1446
- <span class="cline-any cline-neutral">&nbsp;</span>
1447
- <span class="cline-any cline-neutral">&nbsp;</span>
1448
- <span class="cline-any cline-no">&nbsp;</span>
1449
- <span class="cline-any cline-neutral">&nbsp;</span>
1450
- <span class="cline-any cline-neutral">&nbsp;</span>
1451
- <span class="cline-any cline-no">&nbsp;</span>
1452
- <span class="cline-any cline-no">&nbsp;</span>
1453
- <span class="cline-any cline-no">&nbsp;</span>
1454
- <span class="cline-any cline-no">&nbsp;</span>
1455
- <span class="cline-any cline-no">&nbsp;</span>
1456
- <span class="cline-any cline-no">&nbsp;</span>
1457
- <span class="cline-any cline-no">&nbsp;</span>
1458
- <span class="cline-any cline-no">&nbsp;</span>
1459
- <span class="cline-any cline-neutral">&nbsp;</span>
1460
- <span class="cline-any cline-neutral">&nbsp;</span>
1461
- <span class="cline-any cline-no">&nbsp;</span>
1462
- <span class="cline-any cline-no">&nbsp;</span>
1463
- <span class="cline-any cline-no">&nbsp;</span>
1464
- <span class="cline-any cline-no">&nbsp;</span>
1465
- <span class="cline-any cline-no">&nbsp;</span>
1466
- <span class="cline-any cline-no">&nbsp;</span>
1467
- <span class="cline-any cline-no">&nbsp;</span>
1468
- <span class="cline-any cline-no">&nbsp;</span>
1469
- <span class="cline-any cline-no">&nbsp;</span>
1470
- <span class="cline-any cline-no">&nbsp;</span>
1471
- <span class="cline-any cline-neutral">&nbsp;</span>
1472
- <span class="cline-any cline-neutral">&nbsp;</span>
1473
- <span class="cline-any cline-neutral">&nbsp;</span>
1474
- <span class="cline-any cline-no">&nbsp;</span>
1475
- <span class="cline-any cline-no">&nbsp;</span>
1476
- <span class="cline-any cline-no">&nbsp;</span>
1477
- <span class="cline-any cline-no">&nbsp;</span>
1478
- <span class="cline-any cline-no">&nbsp;</span>
1479
- <span class="cline-any cline-no">&nbsp;</span>
1480
- <span class="cline-any cline-no">&nbsp;</span>
1481
- <span class="cline-any cline-no">&nbsp;</span>
1482
- <span class="cline-any cline-neutral">&nbsp;</span>
1483
- <span class="cline-any cline-neutral">&nbsp;</span>
1484
- <span class="cline-any cline-neutral">&nbsp;</span>
1485
- <span class="cline-any cline-no">&nbsp;</span>
1486
- <span class="cline-any cline-no">&nbsp;</span>
1487
- <span class="cline-any cline-no">&nbsp;</span>
1488
- <span class="cline-any cline-no">&nbsp;</span>
1489
- <span class="cline-any cline-neutral">&nbsp;</span>
1490
- <span class="cline-any cline-neutral">&nbsp;</span>
1491
- <span class="cline-any cline-no">&nbsp;</span>
1492
- <span class="cline-any cline-no">&nbsp;</span>
1493
- <span class="cline-any cline-no">&nbsp;</span>
1494
- <span class="cline-any cline-neutral">&nbsp;</span>
1495
- <span class="cline-any cline-no">&nbsp;</span>
1496
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import { useEffect, useCallback, useState, useRef } from 'react';</span></span></span>
1497
- import { ReactFlowProvider } from '@xyflow/react';
1498
- import { Menu, PanelRight, PanelLeft, X, Wrench } from 'lucide-react';
1499
- import { Canvas } from './components/Canvas/Canvas';
1500
- import { Toolbar } from './components/Canvas/Toolbar';
1501
- import { ExecutionOverlay } from './components/Canvas/ExecutionOverlay';
1502
- import { ExecutionInputDialog } from './components/Canvas/ExecutionInputDialog';
1503
- import { ValidationPanel } from './components/Panels/ValidationPanel';
1504
- import { Sidebar } from './components/Sidebar/Sidebar';
1505
- import { PropertiesPanel } from './components/Panels/PropertiesPanel';
1506
- import { PromptInput } from './components/Prompt/PromptInput';
1507
- import { ChangePreview } from './components/Prompt/ChangePreview';
1508
- import { NewStepWizard } from './components/Editor/NewStepWizard';
1509
- import {
1510
- KeyboardShortcuts,
1511
- KeyboardShortcutsButton,
1512
- useKeyboardShortcuts,
1513
- } from './components/common/KeyboardShortcuts';
1514
- import { ThemeToggle } from './components/common/ThemeToggle';
1515
- import { Breadcrumb, type BreadcrumbItem } from './components/common/Breadcrumb';
1516
- import { CommandPalette } from './components/CommandPalette/CommandPalette';
1517
- import { OnboardingTour } from './components/Onboarding/OnboardingTour';
1518
- import { SkipNav } from './components/Accessibility/SkipNav';
1519
- import { LiveRegion } from './components/Accessibility/LiveRegion';
1520
- import { useWorkflow } from './hooks/useWorkflow';
1521
- import { useWebSocket } from './hooks/useWebSocket';
1522
- import { usePromptStore } from './stores/promptStore';
1523
- import { useEditorStore } from './stores/editorStore';
1524
- import { useNavigationStore } from './stores/navigationStore';
1525
- import { useWorkflowStore } from './stores/workflowStore';
1526
- import { useExecutionStore } from './stores/executionStore';
1527
- import { useLayoutStore, getBreakpoint } from './stores/layoutStore';
1528
- import { useCommandStore, type Command } from './stores/commandStore';
1529
- import { useThemeStore } from './stores/themeStore';
1530
- import { useOnboardingStore } from './stores/onboardingStore';
1531
- import { useSettingsStore } from './stores/settingsStore';
1532
- import type { WorkflowStep, StepStatus, WorkflowStatus } from '@shared/types';
1533
- &nbsp;
1534
- <span class="cstat-no" title="statement not covered" >export default function App() {</span>
1535
- // Workflow management
1536
- <span class="cstat-no" title="statement not covered" > const {</span>
1537
- <span class="cstat-no" title="statement not covered" > currentWorkflow,</span>
1538
- <span class="cstat-no" title="statement not covered" > selectedWorkflow,</span>
1539
- <span class="cstat-no" title="statement not covered" > saveWorkflow,</span>
1540
- <span class="cstat-no" title="statement not covered" > refreshWorkflows,</span>
1541
- <span class="cstat-no" title="statement not covered" > } = useWorkflow();</span>
1542
- &nbsp;
1543
- // Editor state
1544
- <span class="cstat-no" title="statement not covered" > const {</span>
1545
- <span class="cstat-no" title="statement not covered" > isNewStepOpen,</span>
1546
- <span class="cstat-no" title="statement not covered" > newStepPosition,</span>
1547
- <span class="cstat-no" title="statement not covered" > openNewStepWizard,</span>
1548
- <span class="cstat-no" title="statement not covered" > closeNewStepWizard,</span>
1549
- <span class="cstat-no" title="statement not covered" > } = useEditorStore();</span>
1550
- &nbsp;
1551
- // Prompt state
1552
- <span class="cstat-no" title="statement not covered" > const { pendingChanges, acceptChanges, rejectChanges } = usePromptStore();</span>
1553
- &nbsp;
1554
- // Keyboard shortcuts
1555
- <span class="cstat-no" title="statement not covered" > const { isOpen: isShortcutsOpen, setIsOpen: setShortcutsOpen, openShortcuts } = useKeyboardShortcuts();</span>
1556
- &nbsp;
1557
- // Navigation for sub-workflow drilling
1558
- <span class="cstat-no" title="statement not covered" > const { breadcrumbs, popToIndex, resetNavigation } = useNavigationStore();</span>
1559
- <span class="cstat-no" title="statement not covered" > const { loadWorkflow } = useWorkflowStore();</span>
1560
- &nbsp;
1561
- // Handle breadcrumb navigation
1562
- <span class="cstat-no" title="statement not covered" > const handleBreadcrumbNavigate = useCallback((item: BreadcrumbItem, index: number) =&gt; {</span>
1563
- // Navigate to the clicked breadcrumb
1564
- <span class="cstat-no" title="statement not covered" > popToIndex(index);</span>
1565
- <span class="cstat-no" title="statement not covered" > loadWorkflow(item.path || '');</span>
1566
- <span class="cstat-no" title="statement not covered" > }, [popToIndex, loadWorkflow]);</span>
1567
- &nbsp;
1568
- // WebSocket for real-time updates
1569
- <span class="cstat-no" title="statement not covered" > const { connected, subscribeToExecution, unsubscribeFromExecution } = useWebSocket({</span>
1570
- <span class="cstat-no" title="statement not covered" > onWorkflowUpdated: () =&gt; {</span>
1571
- <span class="cstat-no" title="statement not covered" > refreshWorkflows();</span>
1572
- <span class="cstat-no" title="statement not covered" > },</span>
1573
- <span class="cstat-no" title="statement not covered" > onExecutionStep: (event) =&gt; {</span>
1574
- // Update execution state from WebSocket events
1575
- <span class="cstat-no" title="statement not covered" > setCurrentStepId(event.stepId);</span>
1576
- <span class="cstat-no" title="statement not covered" > setExecutionSteps((prev) =&gt;</span>
1577
- <span class="cstat-no" title="statement not covered" > prev.map((s) =&gt;</span>
1578
- <span class="cstat-no" title="statement not covered" > s.stepId === event.stepId</span>
1579
- <span class="cstat-no" title="statement not covered" > ? { ...s, status: event.status, duration: event.duration, error: event.error }</span>
1580
- <span class="cstat-no" title="statement not covered" > : s</span>
1581
- <span class="cstat-no" title="statement not covered" > )</span>
1582
- <span class="cstat-no" title="statement not covered" > );</span>
1583
- <span class="cstat-no" title="statement not covered" > setExecutionLogs((prev) =&gt; [</span>
1584
- <span class="cstat-no" title="statement not covered" > ...prev,</span>
1585
- <span class="cstat-no" title="statement not covered" > `Step "${event.stepName || event.stepId}": ${event.status}${event.error ? ` - ${event.error}` : ''}`,</span>
1586
- <span class="cstat-no" title="statement not covered" > ]);</span>
1587
- &nbsp;
1588
- // Update execution store
1589
- <span class="cstat-no" title="statement not covered" > if (runIdRef.current) {</span>
1590
- <span class="cstat-no" title="statement not covered" > updateStepStatus(runIdRef.current, event.stepId, event.status, event.output, event.error);</span>
1591
- <span class="cstat-no" title="statement not covered" > addLog(runIdRef.current, `Step "${event.stepName || event.stepId}": ${event.status}`);</span>
1592
- <span class="cstat-no" title="statement not covered" > }</span>
1593
- <span class="cstat-no" title="statement not covered" > },</span>
1594
- <span class="cstat-no" title="statement not covered" > onExecutionCompleted: (event) =&gt; {</span>
1595
- <span class="cstat-no" title="statement not covered" > setWorkflowStatus(event.status);</span>
1596
- <span class="cstat-no" title="statement not covered" > setCurrentStepId(null);</span>
1597
- <span class="cstat-no" title="statement not covered" > setExecutionLogs((prev) =&gt; [</span>
1598
- <span class="cstat-no" title="statement not covered" > ...prev,</span>
1599
- <span class="cstat-no" title="statement not covered" > event.status === 'completed'</span>
1600
- <span class="cstat-no" title="statement not covered" > ? 'Workflow completed successfully!'</span>
1601
- <span class="cstat-no" title="statement not covered" > : event.error || 'Workflow execution failed',</span>
1602
- <span class="cstat-no" title="statement not covered" > ]);</span>
1603
- &nbsp;
1604
- // Update execution store
1605
- <span class="cstat-no" title="statement not covered" > if (runIdRef.current) {</span>
1606
- <span class="cstat-no" title="statement not covered" > completeExecution(runIdRef.current, event.status);</span>
1607
- <span class="cstat-no" title="statement not covered" > if (event.error) {</span>
1608
- <span class="cstat-no" title="statement not covered" > addLog(runIdRef.current, `Error: ${event.error}`);</span>
1609
- <span class="cstat-no" title="statement not covered" > }</span>
1610
- <span class="cstat-no" title="statement not covered" > }</span>
1611
- &nbsp;
1612
- // Unsubscribe from WebSocket
1613
- <span class="cstat-no" title="statement not covered" > if (event.runId) {</span>
1614
- <span class="cstat-no" title="statement not covered" > unsubscribeFromExecution(event.runId);</span>
1615
- <span class="cstat-no" title="statement not covered" > }</span>
1616
- <span class="cstat-no" title="statement not covered" > runIdRef.current = null;</span>
1617
- <span class="cstat-no" title="statement not covered" > },</span>
1618
- <span class="cstat-no" title="statement not covered" > });</span>
1619
- &nbsp;
1620
- // Execution store
1621
- <span class="cstat-no" title="statement not covered" > const {</span>
1622
- <span class="cstat-no" title="statement not covered" > isExecuting,</span>
1623
- <span class="cstat-no" title="statement not covered" > isPaused,</span>
1624
- <span class="cstat-no" title="statement not covered" > currentRunId,</span>
1625
- <span class="cstat-no" title="statement not covered" > runs,</span>
1626
- <span class="cstat-no" title="statement not covered" > startExecution,</span>
1627
- <span class="cstat-no" title="statement not covered" > updateStepStatus,</span>
1628
- <span class="cstat-no" title="statement not covered" > completeExecution,</span>
1629
- <span class="cstat-no" title="statement not covered" > addLog,</span>
1630
- <span class="cstat-no" title="statement not covered" > pauseExecution,</span>
1631
- <span class="cstat-no" title="statement not covered" > resumeExecution,</span>
1632
- <span class="cstat-no" title="statement not covered" > cancelExecution,</span>
1633
- // Debug methods
1634
- <span class="cstat-no" title="statement not covered" > debug,</span>
1635
- <span class="cstat-no" title="statement not covered" > enableDebugMode,</span>
1636
- <span class="cstat-no" title="statement not covered" > disableDebugMode,</span>
1637
- <span class="cstat-no" title="statement not covered" > toggleBreakpoint,</span>
1638
- <span class="cstat-no" title="statement not covered" > clearAllBreakpoints,</span>
1639
- <span class="cstat-no" title="statement not covered" > stepOver,</span>
1640
- <span class="cstat-no" title="statement not covered" > stepInto,</span>
1641
- <span class="cstat-no" title="statement not covered" > stepOut,</span>
1642
- <span class="cstat-no" title="statement not covered" > addWatchExpression,</span>
1643
- <span class="cstat-no" title="statement not covered" > removeWatchExpression,</span>
1644
- <span class="cstat-no" title="statement not covered" > } = useExecutionStore();</span>
1645
- &nbsp;
1646
- // Layout store for responsive behavior
1647
- <span class="cstat-no" title="statement not covered" > const {</span>
1648
- <span class="cstat-no" title="statement not covered" > breakpoint,</span>
1649
- <span class="cstat-no" title="statement not covered" > setBreakpoint,</span>
1650
- <span class="cstat-no" title="statement not covered" > sidebarOpen,</span>
1651
- <span class="cstat-no" title="statement not covered" > setSidebarOpen,</span>
1652
- <span class="cstat-no" title="statement not covered" > propertiesPanelOpen,</span>
1653
- <span class="cstat-no" title="statement not covered" > setPropertiesPanelOpen,</span>
1654
- <span class="cstat-no" title="statement not covered" > toolbarVisible,</span>
1655
- <span class="cstat-no" title="statement not covered" > setToolbarVisible,</span>
1656
- <span class="cstat-no" title="statement not covered" > } = useLayoutStore();</span>
1657
- &nbsp;
1658
- // Command palette
1659
- <span class="cstat-no" title="statement not covered" > const { open: openCommandPalette, registerCommands } = useCommandStore();</span>
1660
- <span class="cstat-no" title="statement not covered" > const { toggleTheme } = useThemeStore();</span>
1661
- <span class="cstat-no" title="statement not covered" > const { openSettings } = useSettingsStore();</span>
1662
- &nbsp;
1663
- // Load settings on mount
1664
- <span class="cstat-no" title="statement not covered" > useEffect(() =&gt; {</span>
1665
- <span class="cstat-no" title="statement not covered" > useSettingsStore.getState().loadSettings();</span>
1666
- <span class="cstat-no" title="statement not covered" > }, []);</span>
1667
- <span class="cstat-no" title="statement not covered" > const { workflows } = useWorkflowStore();</span>
1668
- &nbsp;
1669
- // Status message for accessibility live region
1670
- <span class="cstat-no" title="statement not covered" > const [liveMessage, setLiveMessage] = useState('');</span>
1671
- &nbsp;
1672
- // Register commands on mount and when dependencies change
1673
- <span class="cstat-no" title="statement not covered" > useEffect(() =&gt; {</span>
1674
- <span class="cstat-no" title="statement not covered" > const commands: Command[] = [</span>
1675
- // Actions
1676
- <span class="cstat-no" title="statement not covered" > { id: 'save', label: 'Save Workflow', category: 'action', shortcut: `${breakpoint === 'mobile' ? 'Ctrl' : '⌘'} + S`, execute: () =&gt; handleSave(), keywords: ['save', 'persist'] },</span>
1677
- <span class="cstat-no" title="statement not covered" > { id: 'execute', label: 'Execute Workflow', category: 'action', shortcut: `${breakpoint === 'mobile' ? 'Ctrl' : '⌘'} + Enter`, execute: () =&gt; handleExecute(), keywords: ['run', 'start'] },</span>
1678
- <span class="cstat-no" title="statement not covered" > { id: 'validate', label: 'Validate Workflow', category: 'action', execute: () =&gt; handleValidate(), keywords: ['check', 'lint'] },</span>
1679
- <span class="cstat-no" title="statement not covered" > { id: 'add-step', label: 'Add New Step', category: 'action', shortcut: 'N', execute: () =&gt; handleAddStep(), keywords: ['create', 'new'] },</span>
1680
- // Settings
1681
- <span class="cstat-no" title="statement not covered" > { id: 'open-settings', label: 'Open Settings', category: 'setting', shortcut: `${breakpoint === 'mobile' ? 'Ctrl' : '⌘'} + ,`, execute: () =&gt; openSettings(), keywords: ['preferences', 'config'] },</span>
1682
- <span class="cstat-no" title="statement not covered" > { id: 'toggle-theme', label: 'Toggle Theme', category: 'setting', shortcut: `${breakpoint === 'mobile' ? 'Ctrl' : '⌘'} + Shift + T`, execute: () =&gt; toggleTheme(), keywords: ['dark', 'light', 'mode'] },</span>
1683
- <span class="cstat-no" title="statement not covered" > { id: 'show-shortcuts', label: 'Show Keyboard Shortcuts', category: 'setting', shortcut: `${breakpoint === 'mobile' ? 'Ctrl' : '⌘'} + /`, execute: () =&gt; setShortcutsOpen(true), keywords: ['keys', 'hotkeys'] },</span>
1684
- <span class="cstat-no" title="statement not covered" > { id: 'toggle-sidebar', label: 'Toggle Sidebar', category: 'setting', execute: () =&gt; setSidebarOpen(!sidebarOpen), keywords: ['panel', 'left'] },</span>
1685
- <span class="cstat-no" title="statement not covered" > { id: 'toggle-properties', label: 'Toggle Properties Panel', category: 'setting', execute: () =&gt; setPropertiesPanelOpen(!propertiesPanelOpen), keywords: ['panel', 'right'] },</span>
1686
- // Navigation
1687
- <span class="cstat-no" title="statement not covered" > { id: 'nav-back', label: 'Navigate Back', category: 'navigation', execute: () =&gt; handleNavigateBack(), keywords: ['parent', 'up'] },</span>
1688
- <span class="cstat-no" title="statement not covered" > { id: 'nav-root', label: 'Navigate to Root', category: 'navigation', execute: () =&gt; handleNavigateToRoot(), keywords: ['home', 'top'] },</span>
1689
- // Debug
1690
- <span class="cstat-no" title="statement not covered" > { id: 'toggle-debug', label: 'Toggle Debug Mode', category: 'action', shortcut: 'F9', execute: () =&gt; debug.enabled ? disableDebugMode() : enableDebugMode(), keywords: ['breakpoint', 'inspect'] },</span>
1691
- // Workflows
1692
- <span class="cstat-no" title="statement not covered" > ...workflows.map((w) =&gt; ({</span>
1693
- <span class="cstat-no" title="statement not covered" > id: `workflow-${w.path}`,</span>
1694
- <span class="cstat-no" title="statement not covered" > label: w.name,</span>
1695
- <span class="cstat-no" title="statement not covered" > description: w.path,</span>
1696
- <span class="cstat-no" title="statement not covered" > category: 'workflow' as const,</span>
1697
- <span class="cstat-no" title="statement not covered" > execute: () =&gt; { useWorkflowStore.getState().selectWorkflow(w.path); },</span>
1698
- <span class="cstat-no" title="statement not covered" > keywords: [w.name.toLowerCase()],</span>
1699
- <span class="cstat-no" title="statement not covered" > })),</span>
1700
- <span class="cstat-no" title="statement not covered" > ];</span>
1701
- <span class="cstat-no" title="statement not covered" > registerCommands(commands);</span>
1702
- <span class="cstat-no" title="statement not covered" > }, [workflows, sidebarOpen, propertiesPanelOpen, breakpoint, debug.enabled]);</span>
1703
- &nbsp;
1704
- // Breakpoint detection on resize
1705
- <span class="cstat-no" title="statement not covered" > useEffect(() =&gt; {</span>
1706
- <span class="cstat-no" title="statement not covered" > const handleResize = () =&gt; {</span>
1707
- <span class="cstat-no" title="statement not covered" > const newBreakpoint = getBreakpoint(window.innerWidth);</span>
1708
- <span class="cstat-no" title="statement not covered" > if (newBreakpoint !== breakpoint) {</span>
1709
- <span class="cstat-no" title="statement not covered" > setBreakpoint(newBreakpoint);</span>
1710
- <span class="cstat-no" title="statement not covered" > }</span>
1711
- <span class="cstat-no" title="statement not covered" > };</span>
1712
- &nbsp;
1713
- // Set initial breakpoint
1714
- <span class="cstat-no" title="statement not covered" > handleResize();</span>
1715
- &nbsp;
1716
- <span class="cstat-no" title="statement not covered" > window.addEventListener('resize', handleResize);</span>
1717
- <span class="cstat-no" title="statement not covered" > return () =&gt; window.removeEventListener('resize', handleResize);</span>
1718
- <span class="cstat-no" title="statement not covered" > }, [breakpoint, setBreakpoint]);</span>
1719
- &nbsp;
1720
- // Local execution state for overlay
1721
- <span class="cstat-no" title="statement not covered" > const [workflowStatus, setWorkflowStatus] = useState&lt;WorkflowStatus&gt;('pending');</span>
1722
- <span class="cstat-no" title="statement not covered" > const [executionSteps, setExecutionSteps] = useState&lt;Array&lt;{</span>
1723
- stepId: string;
1724
- stepName: string;
1725
- status: StepStatus;
1726
- duration?: number;
1727
- error?: string;
1728
- <span class="cstat-no" title="statement not covered" > }&gt;&gt;([]);</span>
1729
- <span class="cstat-no" title="statement not covered" > const [executionLogs, setExecutionLogs] = useState&lt;string[]&gt;([]);</span>
1730
- <span class="cstat-no" title="statement not covered" > const [currentStepId, setCurrentStepId] = useState&lt;string | null&gt;(null);</span>
1731
- <span class="cstat-no" title="statement not covered" > const runIdRef = useRef&lt;string | null&gt;(null);</span>
1732
- &nbsp;
1733
- // Input collection dialog state
1734
- <span class="cstat-no" title="statement not covered" > const [showInputDialog, setShowInputDialog] = useState(false);</span>
1735
- <span class="cstat-no" title="statement not covered" > const [pendingInputs, setPendingInputs] = useState&lt;Record&lt;string, any&gt;&gt;({});</span>
1736
- &nbsp;
1737
- // Validation panel state
1738
- <span class="cstat-no" title="statement not covered" > const [showValidationPanel, setShowValidationPanel] = useState(false);</span>
1739
- &nbsp;
1740
- // Handle adding a new step
1741
- <span class="cstat-no" title="statement not covered" > const handleAddStep = useCallback(() =&gt; {</span>
1742
- <span class="cstat-no" title="statement not covered" > openNewStepWizard();</span>
1743
- <span class="cstat-no" title="statement not covered" > }, [openNewStepWizard]);</span>
1744
- &nbsp;
1745
- // Handle step creation
1746
- <span class="cstat-no" title="statement not covered" > const handleCreateStep = useCallback(</span>
1747
- <span class="cstat-no" title="statement not covered" > (step: WorkflowStep) =&gt; {</span>
1748
- <span class="cstat-no" title="statement not covered" > if (!currentWorkflow) return;</span>
1749
- &nbsp;
1750
- // Add step to workflow
1751
- <span class="cstat-no" title="statement not covered" > const updatedWorkflow = {</span>
1752
- <span class="cstat-no" title="statement not covered" > ...currentWorkflow,</span>
1753
- <span class="cstat-no" title="statement not covered" > steps: [...currentWorkflow.steps, step],</span>
1754
- <span class="cstat-no" title="statement not covered" > };</span>
1755
- &nbsp;
1756
- <span class="cstat-no" title="statement not covered" > saveWorkflow(updatedWorkflow);</span>
1757
- <span class="cstat-no" title="statement not covered" > console.log('Created step:', step);</span>
1758
- <span class="cstat-no" title="statement not covered" > },</span>
1759
- <span class="cstat-no" title="statement not covered" > [currentWorkflow, saveWorkflow]</span>
1760
- <span class="cstat-no" title="statement not covered" > );</span>
1761
- &nbsp;
1762
- // Handle workflow execution with input collection
1763
- <span class="cstat-no" title="statement not covered" > const handleExecute = useCallback(async (inputs?: Record&lt;string, any&gt;) =&gt; {</span>
1764
- <span class="cstat-no" title="statement not covered" > if (isExecuting) {</span>
1765
- // Stop execution via API
1766
- <span class="cstat-no" title="statement not covered" > if (runIdRef.current) {</span>
1767
- <span class="cstat-no" title="statement not covered" > try {</span>
1768
- <span class="cstat-no" title="statement not covered" > const response = await fetch(`/api/execute/cancel/${runIdRef.current}`, {</span>
1769
- <span class="cstat-no" title="statement not covered" > method: 'POST',</span>
1770
- <span class="cstat-no" title="statement not covered" > });</span>
1771
- <span class="cstat-no" title="statement not covered" > if (response.ok) {</span>
1772
- <span class="cstat-no" title="statement not covered" > cancelExecution(runIdRef.current);</span>
1773
- <span class="cstat-no" title="statement not covered" > setWorkflowStatus('cancelled');</span>
1774
- <span class="cstat-no" title="statement not covered" > setExecutionLogs((prev) =&gt; [...prev, 'Execution cancelled by user']);</span>
1775
- <span class="cstat-no" title="statement not covered" > runIdRef.current = null;</span>
1776
- <span class="cstat-no" title="statement not covered" > }</span>
1777
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1778
- <span class="cstat-no" title="statement not covered" > console.error('Failed to cancel execution:', error);</span>
1779
- <span class="cstat-no" title="statement not covered" > setExecutionLogs((prev) =&gt; [...prev, 'Failed to cancel execution']);</span>
1780
- <span class="cstat-no" title="statement not covered" > }</span>
1781
- <span class="cstat-no" title="statement not covered" > }</span>
1782
- <span class="cstat-no" title="statement not covered" > return;</span>
1783
- <span class="cstat-no" title="statement not covered" > }</span>
1784
- &nbsp;
1785
- <span class="cstat-no" title="statement not covered" > if (!currentWorkflow || !selectedWorkflow) return;</span>
1786
- &nbsp;
1787
- // If inputs are not provided and workflow has inputs, show dialog
1788
- <span class="cstat-no" title="statement not covered" > if (!inputs &amp;&amp; currentWorkflow.inputs &amp;&amp; Object.keys(currentWorkflow.inputs).length &gt; 0) {</span>
1789
- <span class="cstat-no" title="statement not covered" > setShowInputDialog(true);</span>
1790
- <span class="cstat-no" title="statement not covered" > return;</span>
1791
- <span class="cstat-no" title="statement not covered" > }</span>
1792
- &nbsp;
1793
- <span class="cstat-no" title="statement not covered" > try {</span>
1794
- // Update local state for overlay
1795
- <span class="cstat-no" title="statement not covered" > setWorkflowStatus('running');</span>
1796
- <span class="cstat-no" title="statement not covered" > setCurrentStepId(null);</span>
1797
- <span class="cstat-no" title="statement not covered" > setExecutionLogs(['Starting workflow execution...']);</span>
1798
- &nbsp;
1799
- // Initialize steps
1800
- <span class="cstat-no" title="statement not covered" > setExecutionSteps(</span>
1801
- <span class="cstat-no" title="statement not covered" > currentWorkflow.steps.map((step) =&gt; ({</span>
1802
- <span class="cstat-no" title="statement not covered" > stepId: step.id,</span>
1803
- <span class="cstat-no" title="statement not covered" > stepName: step.name || step.id,</span>
1804
- <span class="cstat-no" title="statement not covered" > status: 'pending' as StepStatus,</span>
1805
- <span class="cstat-no" title="statement not covered" > }))</span>
1806
- <span class="cstat-no" title="statement not covered" > );</span>
1807
- &nbsp;
1808
- // Call API to start execution - this returns the actual runId
1809
- <span class="cstat-no" title="statement not covered" > const response = await fetch(`/api/execute/${encodeURIComponent(selectedWorkflow)}`, {</span>
1810
- <span class="cstat-no" title="statement not covered" > method: 'POST',</span>
1811
- <span class="cstat-no" title="statement not covered" > headers: {</span>
1812
- <span class="cstat-no" title="statement not covered" > 'Content-Type': 'application/json',</span>
1813
- <span class="cstat-no" title="statement not covered" > },</span>
1814
- <span class="cstat-no" title="statement not covered" > body: JSON.stringify({</span>
1815
- <span class="cstat-no" title="statement not covered" > inputs: inputs || {},</span>
1816
- <span class="cstat-no" title="statement not covered" > dryRun: false,</span>
1817
- <span class="cstat-no" title="statement not covered" > }),</span>
1818
- <span class="cstat-no" title="statement not covered" > });</span>
1819
- &nbsp;
1820
- <span class="cstat-no" title="statement not covered" > if (!response.ok) {</span>
1821
- <span class="cstat-no" title="statement not covered" > const error = await response.json();</span>
1822
- <span class="cstat-no" title="statement not covered" > throw new Error(error.message || 'Failed to start execution');</span>
1823
- <span class="cstat-no" title="statement not covered" > }</span>
1824
- &nbsp;
1825
- // Get the actual runId from the backend response
1826
- <span class="cstat-no" title="statement not covered" > const apiResult = await response.json();</span>
1827
- <span class="cstat-no" title="statement not covered" > const runId = apiResult.runId;</span>
1828
- &nbsp;
1829
- // Store in history and subscribe to the correct runId
1830
- <span class="cstat-no" title="statement not covered" > const workflowName = currentWorkflow.metadata?.name || 'Untitled Workflow';</span>
1831
- <span class="cstat-no" title="statement not covered" > startExecution(selectedWorkflow, workflowName, {}, runId);</span>
1832
- <span class="cstat-no" title="statement not covered" > runIdRef.current = runId;</span>
1833
- &nbsp;
1834
- // Subscribe to WebSocket for real-time updates with the correct runId
1835
- <span class="cstat-no" title="statement not covered" > subscribeToExecution(runId);</span>
1836
- &nbsp;
1837
- <span class="cstat-no" title="statement not covered" > setExecutionLogs((prev) =&gt; [...prev, `Execution started: ${runId}`]);</span>
1838
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1839
- <span class="cstat-no" title="statement not covered" > const errorMessage = error instanceof Error ? error.message : 'Unknown error';</span>
1840
- <span class="cstat-no" title="statement not covered" > console.error('Failed to execute workflow:', error);</span>
1841
- <span class="cstat-no" title="statement not covered" > setWorkflowStatus('failed');</span>
1842
- <span class="cstat-no" title="statement not covered" > setExecutionLogs((prev) =&gt; [...prev, `Error: ${errorMessage}`]);</span>
1843
- <span class="cstat-no" title="statement not covered" > if (runIdRef.current) {</span>
1844
- <span class="cstat-no" title="statement not covered" > completeExecution(runIdRef.current, 'failed');</span>
1845
- <span class="cstat-no" title="statement not covered" > runIdRef.current = null;</span>
1846
- <span class="cstat-no" title="statement not covered" > }</span>
1847
- <span class="cstat-no" title="statement not covered" > }</span>
1848
- <span class="cstat-no" title="statement not covered" > }, [</span>
1849
- <span class="cstat-no" title="statement not covered" > isExecuting,</span>
1850
- <span class="cstat-no" title="statement not covered" > currentWorkflow,</span>
1851
- <span class="cstat-no" title="statement not covered" > selectedWorkflow,</span>
1852
- <span class="cstat-no" title="statement not covered" > startExecution,</span>
1853
- <span class="cstat-no" title="statement not covered" > cancelExecution,</span>
1854
- <span class="cstat-no" title="statement not covered" > subscribeToExecution,</span>
1855
- <span class="cstat-no" title="statement not covered" > updateStepStatus,</span>
1856
- <span class="cstat-no" title="statement not covered" > addLog,</span>
1857
- <span class="cstat-no" title="statement not covered" > completeExecution,</span>
1858
- <span class="cstat-no" title="statement not covered" > ]);</span>
1859
- &nbsp;
1860
- &nbsp;
1861
- // Handle save
1862
- <span class="cstat-no" title="statement not covered" > const handleSave = useCallback(() =&gt; {</span>
1863
- <span class="cstat-no" title="statement not covered" > if (currentWorkflow) {</span>
1864
- <span class="cstat-no" title="statement not covered" > saveWorkflow(currentWorkflow);</span>
1865
- <span class="cstat-no" title="statement not covered" > }</span>
1866
- <span class="cstat-no" title="statement not covered" > }, [currentWorkflow, saveWorkflow]);</span>
1867
- &nbsp;
1868
- // Handle validate
1869
- <span class="cstat-no" title="statement not covered" > const handleValidate = useCallback(() =&gt; {</span>
1870
- <span class="cstat-no" title="statement not covered" > if (selectedWorkflow) {</span>
1871
- <span class="cstat-no" title="statement not covered" > setShowValidationPanel(true);</span>
1872
- <span class="cstat-no" title="statement not covered" > }</span>
1873
- <span class="cstat-no" title="statement not covered" > }, [selectedWorkflow]);</span>
1874
- &nbsp;
1875
- // Handle navigating back to parent workflow
1876
- <span class="cstat-no" title="statement not covered" > const handleNavigateBack = useCallback(() =&gt; {</span>
1877
- <span class="cstat-no" title="statement not covered" > if (breadcrumbs.length &gt; 1) {</span>
1878
- <span class="cstat-no" title="statement not covered" > const parentIndex = breadcrumbs.length - 2;</span>
1879
- <span class="cstat-no" title="statement not covered" > const parentItem = breadcrumbs[parentIndex];</span>
1880
- <span class="cstat-no" title="statement not covered" > popToIndex(parentIndex);</span>
1881
- <span class="cstat-no" title="statement not covered" > loadWorkflow(parentItem.path);</span>
1882
- <span class="cstat-no" title="statement not covered" > }</span>
1883
- <span class="cstat-no" title="statement not covered" > }, [breadcrumbs, popToIndex, loadWorkflow]);</span>
1884
- &nbsp;
1885
- // Handle navigating to root workflow
1886
- <span class="cstat-no" title="statement not covered" > const handleNavigateToRoot = useCallback(() =&gt; {</span>
1887
- <span class="cstat-no" title="statement not covered" > if (breadcrumbs.length &gt; 1) {</span>
1888
- <span class="cstat-no" title="statement not covered" > const rootItem = breadcrumbs[0];</span>
1889
- <span class="cstat-no" title="statement not covered" > popToIndex(0);</span>
1890
- <span class="cstat-no" title="statement not covered" > loadWorkflow(rootItem.path);</span>
1891
- <span class="cstat-no" title="statement not covered" > }</span>
1892
- <span class="cstat-no" title="statement not covered" > }, [breadcrumbs, popToIndex, loadWorkflow]);</span>
1893
- &nbsp;
1894
- // Global keyboard shortcuts
1895
- <span class="cstat-no" title="statement not covered" > useEffect(() =&gt; {</span>
1896
- <span class="cstat-no" title="statement not covered" > const handleKeyDown = (e: KeyboardEvent) =&gt; {</span>
1897
- // Ignore if in an input/textarea
1898
- <span class="cstat-no" title="statement not covered" > if (</span>
1899
- <span class="cstat-no" title="statement not covered" > e.target instanceof HTMLInputElement ||</span>
1900
- <span class="cstat-no" title="statement not covered" > e.target instanceof HTMLTextAreaElement</span>
1901
- <span class="cstat-no" title="statement not covered" > ) {</span>
1902
- <span class="cstat-no" title="statement not covered" > return;</span>
1903
- <span class="cstat-no" title="statement not covered" > }</span>
1904
- &nbsp;
1905
- <span class="cstat-no" title="statement not covered" > const isMeta = e.metaKey || e.ctrlKey;</span>
1906
- &nbsp;
1907
- // Cmd/Ctrl + ,: Open settings
1908
- <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === ',') {</span>
1909
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1910
- <span class="cstat-no" title="statement not covered" > openSettings();</span>
1911
- <span class="cstat-no" title="statement not covered" > return;</span>
1912
- <span class="cstat-no" title="statement not covered" > }</span>
1913
- &nbsp;
1914
- // Cmd/Ctrl + K: Command palette
1915
- <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === 'k') {</span>
1916
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1917
- <span class="cstat-no" title="statement not covered" > openCommandPalette('commands');</span>
1918
- <span class="cstat-no" title="statement not covered" > return;</span>
1919
- <span class="cstat-no" title="statement not covered" > }</span>
1920
- &nbsp;
1921
- // Cmd/Ctrl + P: Quick workflow switcher
1922
- <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === 'p') {</span>
1923
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1924
- <span class="cstat-no" title="statement not covered" > openCommandPalette('workflows');</span>
1925
- <span class="cstat-no" title="statement not covered" > return;</span>
1926
- <span class="cstat-no" title="statement not covered" > }</span>
1927
- &nbsp;
1928
- // Cmd/Ctrl + Shift + T: Toggle theme
1929
- <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.shiftKey &amp;&amp; e.key === 't') {</span>
1930
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1931
- <span class="cstat-no" title="statement not covered" > toggleTheme();</span>
1932
- <span class="cstat-no" title="statement not covered" > return;</span>
1933
- <span class="cstat-no" title="statement not covered" > }</span>
1934
- &nbsp;
1935
- // Cmd/Ctrl + S: Save
1936
- <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === 's') {</span>
1937
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1938
- <span class="cstat-no" title="statement not covered" > handleSave();</span>
1939
- <span class="cstat-no" title="statement not covered" > }</span>
1940
- &nbsp;
1941
- // Cmd/Ctrl + Enter: Execute
1942
- <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === 'Enter') {</span>
1943
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1944
- <span class="cstat-no" title="statement not covered" > handleExecute();</span>
1945
- <span class="cstat-no" title="statement not covered" > }</span>
1946
- &nbsp;
1947
- // N: New step (when no modifier)
1948
- <span class="cstat-no" title="statement not covered" > if (e.key === 'n' &amp;&amp; !isMeta &amp;&amp; !e.shiftKey &amp;&amp; !e.altKey) {</span>
1949
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1950
- <span class="cstat-no" title="statement not covered" > handleAddStep();</span>
1951
- <span class="cstat-no" title="statement not covered" > }</span>
1952
- &nbsp;
1953
- // Cmd/Ctrl + Left Arrow: Navigate back to parent workflow
1954
- <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === 'ArrowLeft') {</span>
1955
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1956
- <span class="cstat-no" title="statement not covered" > handleNavigateBack();</span>
1957
- <span class="cstat-no" title="statement not covered" > }</span>
1958
- &nbsp;
1959
- // Cmd/Ctrl + Up Arrow: Navigate to root workflow
1960
- <span class="cstat-no" title="statement not covered" > if (isMeta &amp;&amp; e.key === 'ArrowUp') {</span>
1961
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1962
- <span class="cstat-no" title="statement not covered" > handleNavigateToRoot();</span>
1963
- <span class="cstat-no" title="statement not covered" > }</span>
1964
- &nbsp;
1965
- // Debug keyboard shortcuts
1966
- // F9: Toggle debug mode
1967
- <span class="cstat-no" title="statement not covered" > if (e.key === 'F9') {</span>
1968
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1969
- <span class="cstat-no" title="statement not covered" > if (debug.enabled) {</span>
1970
- <span class="cstat-no" title="statement not covered" > disableDebugMode();</span>
1971
- <span class="cstat-no" title="statement not covered" > } else {</span>
1972
- <span class="cstat-no" title="statement not covered" > enableDebugMode();</span>
1973
- <span class="cstat-no" title="statement not covered" > }</span>
1974
- <span class="cstat-no" title="statement not covered" > }</span>
1975
- &nbsp;
1976
- // F10: Step over (when paused in debug mode)
1977
- <span class="cstat-no" title="statement not covered" > if (e.key === 'F10' &amp;&amp; debug.enabled &amp;&amp; isPaused) {</span>
1978
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1979
- <span class="cstat-no" title="statement not covered" > stepOver();</span>
1980
- <span class="cstat-no" title="statement not covered" > }</span>
1981
- &nbsp;
1982
- // F11: Step into (when paused in debug mode)
1983
- <span class="cstat-no" title="statement not covered" > if (e.key === 'F11' &amp;&amp; !e.shiftKey &amp;&amp; debug.enabled &amp;&amp; isPaused) {</span>
1984
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1985
- <span class="cstat-no" title="statement not covered" > stepInto();</span>
1986
- <span class="cstat-no" title="statement not covered" > }</span>
1987
- &nbsp;
1988
- // Shift+F11: Step out (when paused in debug mode)
1989
- <span class="cstat-no" title="statement not covered" > if (e.key === 'F11' &amp;&amp; e.shiftKey &amp;&amp; debug.enabled &amp;&amp; isPaused) {</span>
1990
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1991
- <span class="cstat-no" title="statement not covered" > stepOut();</span>
1992
- <span class="cstat-no" title="statement not covered" > }</span>
1993
- &nbsp;
1994
- // F5: Continue execution (when paused)
1995
- <span class="cstat-no" title="statement not covered" > if (e.key === 'F5' &amp;&amp; isPaused) {</span>
1996
- <span class="cstat-no" title="statement not covered" > e.preventDefault();</span>
1997
- <span class="cstat-no" title="statement not covered" > resumeExecution();</span>
1998
- <span class="cstat-no" title="statement not covered" > }</span>
1999
- <span class="cstat-no" title="statement not covered" > };</span>
2000
- &nbsp;
2001
- <span class="cstat-no" title="statement not covered" > window.addEventListener('keydown', handleKeyDown);</span>
2002
- <span class="cstat-no" title="statement not covered" > return () =&gt; window.removeEventListener('keydown', handleKeyDown);</span>
2003
- <span class="cstat-no" title="statement not covered" > }, [handleSave, handleExecute, handleAddStep, handleNavigateBack, handleNavigateToRoot, debug.enabled, isPaused, enableDebugMode, disableDebugMode, stepOver, stepInto, stepOut, resumeExecution, openCommandPalette, toggleTheme, openSettings]);</span>
2004
- &nbsp;
2005
- <span class="cstat-no" title="statement not covered" > return (</span>
2006
- <span class="cstat-no" title="statement not covered" > &lt;ReactFlowProvider&gt;</span>
2007
- <span class="cstat-no" title="statement not covered" > &lt;SkipNav /&gt;</span>
2008
- <span class="cstat-no" title="statement not covered" > &lt;LiveRegion message={liveMessage} /&gt;</span>
2009
- <span class="cstat-no" title="statement not covered" > &lt;CommandPalette /&gt;</span>
2010
- <span class="cstat-no" title="statement not covered" > &lt;OnboardingTour /&gt;</span>
2011
- <span class="cstat-no" title="statement not covered" > &lt;div className="flex h-screen w-screen overflow-hidden bg-bg-canvas" id="main-content"&gt;</span>
2012
- {/* Left Sidebar - Workflow List &amp; Tools */}
2013
- <span class="cstat-no" title="statement not covered" > &lt;Sidebar /&gt;</span>
2014
- &nbsp;
2015
- {/* Main Canvas Area */}
2016
- <span class="cstat-no" title="statement not covered" > &lt;div className="flex flex-1 flex-col relative"&gt;</span>
2017
- {/* Mobile Header */}
2018
- <span class="cstat-no" title="statement not covered" > {breakpoint === 'mobile' &amp;&amp; (</span>
2019
- <span class="cstat-no" title="statement not covered" > &lt;div className="flex items-center justify-between p-3 border-b border-border-default bg-bg-panel"&gt;</span>
2020
- <span class="cstat-no" title="statement not covered" > &lt;button</span>
2021
- <span class="cstat-no" title="statement not covered" > onClick={() =&gt; setSidebarOpen(true)}</span>
2022
- <span class="cstat-no" title="statement not covered" > className="w-10 h-10 rounded-lg flex items-center justify-center hover:bg-bg-hover transition-colors"</span>
2023
- <span class="cstat-no" title="statement not covered" > aria-label="Open menu"</span>
2024
- &gt;
2025
- <span class="cstat-no" title="statement not covered" > &lt;Menu className="w-5 h-5 text-text-secondary" /&gt;</span>
2026
- <span class="cstat-no" title="statement not covered" > &lt;/button&gt;</span>
2027
- <span class="cstat-no" title="statement not covered" > &lt;h1 className="text-sm font-medium text-text-primary flex items-center gap-1.5"&gt;</span>
2028
- <span class="cstat-no" title="statement not covered" > &lt;img src="/marktoflow-logo.png" alt="Marktoflow" className="w-6 h-6 rounded-full object-cover" /&gt;</span>
2029
- Marktoflow
2030
- <span class="cstat-no" title="statement not covered" > &lt;/h1&gt;</span>
2031
- <span class="cstat-no" title="statement not covered" > &lt;button</span>
2032
- <span class="cstat-no" title="statement not covered" > onClick={() =&gt; setPropertiesPanelOpen(true)}</span>
2033
- <span class="cstat-no" title="statement not covered" > className="w-10 h-10 rounded-lg flex items-center justify-center hover:bg-bg-hover transition-colors"</span>
2034
- <span class="cstat-no" title="statement not covered" > aria-label="Open properties"</span>
2035
- &gt;
2036
- <span class="cstat-no" title="statement not covered" > &lt;PanelRight className="w-5 h-5 text-text-secondary" /&gt;</span>
2037
- <span class="cstat-no" title="statement not covered" > &lt;/button&gt;</span>
2038
- <span class="cstat-no" title="statement not covered" > &lt;/div&gt;</span>
2039
- )}
2040
- &nbsp;
2041
- {/* Desktop: Connection status, theme toggle &amp; shortcuts */}
2042
- <span class="cstat-no" title="statement not covered" > {breakpoint !== 'mobile' &amp;&amp; (</span>
2043
- <span class="cstat-no" title="statement not covered" > &lt;div className="absolute top-4 right-4 z-10 flex items-center gap-2"&gt;</span>
2044
- <span class="cstat-no" title="statement not covered" > &lt;ThemeToggle showLabel /&gt;</span>
2045
- <span class="cstat-no" title="statement not covered" > &lt;KeyboardShortcutsButton onClick={openShortcuts} /&gt;</span>
2046
- <span class="cstat-no" title="statement not covered" > &lt;div</span>
2047
- <span class="cstat-no" title="statement not covered" > className={`flex items-center gap-2 px-3 py-1.5 rounded-full text-xs ${</span>
2048
- <span class="cstat-no" title="statement not covered" > connected</span>
2049
- <span class="cstat-no" title="statement not covered" > ? 'bg-success/10 text-success'</span>
2050
- <span class="cstat-no" title="statement not covered" > : 'bg-error/10 text-error'</span>
2051
- <span class="cstat-no" title="statement not covered" > }`}</span>
2052
- &gt;
2053
- <span class="cstat-no" title="statement not covered" > &lt;div</span>
2054
- <span class="cstat-no" title="statement not covered" > className={`w-2 h-2 rounded-full ${</span>
2055
- <span class="cstat-no" title="statement not covered" > connected ? 'bg-success' : 'bg-error'</span>
2056
- <span class="cstat-no" title="statement not covered" > }`}</span>
2057
- <span class="cstat-no" title="statement not covered" > /&gt;</span>
2058
- <span class="cstat-no" title="statement not covered" > {connected ? 'Connected' : 'Disconnected'}</span>
2059
- <span class="cstat-no" title="statement not covered" > &lt;/div&gt;</span>
2060
- <span class="cstat-no" title="statement not covered" > &lt;/div&gt;</span>
2061
- )}
2062
- &nbsp;
2063
- {/* Toolbar */}
2064
- <span class="cstat-no" title="statement not covered" > &lt;Toolbar</span>
2065
- <span class="cstat-no" title="statement not covered" > onAddStep={handleAddStep}</span>
2066
- <span class="cstat-no" title="statement not covered" > onExecute={handleExecute}</span>
2067
- <span class="cstat-no" title="statement not covered" > onSave={handleSave}</span>
2068
- <span class="cstat-no" title="statement not covered" > onValidate={handleValidate}</span>
2069
- <span class="cstat-no" title="statement not covered" > isExecuting={isExecuting}</span>
2070
- <span class="cstat-no" title="statement not covered" > /&gt;</span>
2071
- &nbsp;
2072
- {/* Breadcrumb for sub-workflow navigation */}
2073
- <span class="cstat-no" title="statement not covered" > &lt;Breadcrumb</span>
2074
- <span class="cstat-no" title="statement not covered" > items={breadcrumbs}</span>
2075
- <span class="cstat-no" title="statement not covered" > onNavigate={handleBreadcrumbNavigate}</span>
2076
- <span class="cstat-no" title="statement not covered" > /&gt;</span>
2077
- &nbsp;
2078
- {/* Canvas */}
2079
- <span class="cstat-no" title="statement not covered" > &lt;div className="flex-1 relative"&gt;</span>
2080
- <span class="cstat-no" title="statement not covered" > &lt;Canvas /&gt;</span>
2081
- &nbsp;
2082
- {/* Show Toolbar button (when hidden) */}
2083
- <span class="cstat-no" title="statement not covered" > {!toolbarVisible &amp;&amp; breakpoint !== 'mobile' &amp;&amp; (</span>
2084
- <span class="cstat-no" title="statement not covered" > &lt;button</span>
2085
- <span class="cstat-no" title="statement not covered" > onClick={() =&gt; setToolbarVisible(true)}</span>
2086
- <span class="cstat-no" title="statement not covered" > className="absolute top-4 left-1/2 -translate-x-1/2 z-10 p-2 bg-bg-panel/90 backdrop-blur border border-border-default rounded-lg shadow-md hover:bg-bg-hover transition-colors text-text-muted hover:text-text-primary"</span>
2087
- <span class="cstat-no" title="statement not covered" > title="Show toolbar"</span>
2088
- &gt;
2089
- <span class="cstat-no" title="statement not covered" > &lt;Wrench className="w-4 h-4" /&gt;</span>
2090
- <span class="cstat-no" title="statement not covered" > &lt;/button&gt;</span>
2091
- )}
2092
- &nbsp;
2093
- {/* Left edge: toggle sidebar */}
2094
- <span class="cstat-no" title="statement not covered" > {breakpoint !== 'mobile' &amp;&amp; (</span>
2095
- <span class="cstat-no" title="statement not covered" > &lt;button</span>
2096
- <span class="cstat-no" title="statement not covered" > onClick={() =&gt; setSidebarOpen(!sidebarOpen)}</span>
2097
- <span class="cstat-no" title="statement not covered" > className="absolute left-0 top-1/2 -translate-y-1/2 z-10 p-1.5 bg-bg-panel/90 backdrop-blur border border-l-0 border-border-default rounded-r-lg shadow-sm hover:bg-bg-hover transition-colors text-text-muted hover:text-text-primary"</span>
2098
- <span class="cstat-no" title="statement not covered" > title={sidebarOpen ? 'Collapse sidebar' : 'Expand sidebar'}</span>
2099
- <span class="cstat-no" title="statement not covered" > aria-label={sidebarOpen ? 'Collapse sidebar' : 'Expand sidebar'}</span>
2100
- &gt;
2101
- <span class="cstat-no" title="statement not covered" > &lt;PanelLeft className="w-4 h-4" /&gt;</span>
2102
- <span class="cstat-no" title="statement not covered" > &lt;/button&gt;</span>
2103
- )}
2104
- &nbsp;
2105
- {/* Right edge: toggle properties panel */}
2106
- <span class="cstat-no" title="statement not covered" > {breakpoint !== 'mobile' &amp;&amp; (</span>
2107
- <span class="cstat-no" title="statement not covered" > &lt;button</span>
2108
- <span class="cstat-no" title="statement not covered" > onClick={() =&gt; setPropertiesPanelOpen(!propertiesPanelOpen)}</span>
2109
- <span class="cstat-no" title="statement not covered" > className="absolute right-0 top-1/2 -translate-y-1/2 z-10 p-1.5 bg-bg-panel/90 backdrop-blur border border-r-0 border-border-default rounded-l-lg shadow-sm hover:bg-bg-hover transition-colors text-text-muted hover:text-text-primary"</span>
2110
- <span class="cstat-no" title="statement not covered" > title={propertiesPanelOpen ? 'Collapse properties' : 'Expand properties'}</span>
2111
- <span class="cstat-no" title="statement not covered" > aria-label={propertiesPanelOpen ? 'Collapse properties' : 'Expand properties'}</span>
2112
- &gt;
2113
- <span class="cstat-no" title="statement not covered" > &lt;PanelRight className="w-4 h-4" /&gt;</span>
2114
- <span class="cstat-no" title="statement not covered" > &lt;/button&gt;</span>
2115
- )}
2116
- &nbsp;
2117
- {/* Execution Overlay */}
2118
- <span class="cstat-no" title="statement not covered" > &lt;ExecutionOverlay</span>
2119
- <span class="cstat-no" title="statement not covered" > isExecuting={isExecuting}</span>
2120
- <span class="cstat-no" title="statement not covered" > isPaused={isPaused}</span>
2121
- <span class="cstat-no" title="statement not covered" > workflowStatus={workflowStatus}</span>
2122
- <span class="cstat-no" title="statement not covered" > currentStepId={currentStepId}</span>
2123
- <span class="cstat-no" title="statement not covered" > steps={executionSteps}</span>
2124
- <span class="cstat-no" title="statement not covered" > logs={executionLogs}</span>
2125
- <span class="cstat-no" title="statement not covered" > onPause={() =&gt; pauseExecution()}</span>
2126
- <span class="cstat-no" title="statement not covered" > onResume={() =&gt; resumeExecution()}</span>
2127
- <span class="cstat-no" title="statement not covered" > onStop={() =&gt; {</span>
2128
- <span class="cstat-no" title="statement not covered" > if (runIdRef.current) {</span>
2129
- <span class="cstat-no" title="statement not covered" > cancelExecution(runIdRef.current);</span>
2130
- <span class="cstat-no" title="statement not covered" > runIdRef.current = null;</span>
2131
- <span class="cstat-no" title="statement not covered" > }</span>
2132
- <span class="cstat-no" title="statement not covered" > setWorkflowStatus('cancelled');</span>
2133
- <span class="cstat-no" title="statement not covered" > }}</span>
2134
- <span class="cstat-no" title="statement not covered" > onStepOver={() =&gt; stepOver()}</span>
2135
- <span class="cstat-no" title="statement not covered" > onClose={() =&gt; {</span>
2136
- <span class="cstat-no" title="statement not covered" > setWorkflowStatus('pending');</span>
2137
- <span class="cstat-no" title="statement not covered" > setExecutionSteps([]);</span>
2138
- <span class="cstat-no" title="statement not covered" > setExecutionLogs([]);</span>
2139
- <span class="cstat-no" title="statement not covered" > }}</span>
2140
- // Debug props
2141
- <span class="cstat-no" title="statement not covered" > debug={debug}</span>
2142
- <span class="cstat-no" title="statement not covered" > onToggleDebugMode={() =&gt; {</span>
2143
- <span class="cstat-no" title="statement not covered" > if (debug.enabled) {</span>
2144
- <span class="cstat-no" title="statement not covered" > disableDebugMode();</span>
2145
- <span class="cstat-no" title="statement not covered" > } else {</span>
2146
- <span class="cstat-no" title="statement not covered" > enableDebugMode();</span>
2147
- <span class="cstat-no" title="statement not covered" > }</span>
2148
- <span class="cstat-no" title="statement not covered" > }}</span>
2149
- <span class="cstat-no" title="statement not covered" > onToggleBreakpoint={(stepId) =&gt; toggleBreakpoint(stepId)}</span>
2150
- <span class="cstat-no" title="statement not covered" > onStepInto={() =&gt; stepInto()}</span>
2151
- <span class="cstat-no" title="statement not covered" > onStepOut={() =&gt; stepOut()}</span>
2152
- <span class="cstat-no" title="statement not covered" > onClearBreakpoints={() =&gt; clearAllBreakpoints()}</span>
2153
- <span class="cstat-no" title="statement not covered" > onAddWatchExpression={(expr) =&gt; addWatchExpression(expr)}</span>
2154
- <span class="cstat-no" title="statement not covered" > onRemoveWatchExpression={(expr) =&gt; removeWatchExpression(expr)}</span>
2155
- <span class="cstat-no" title="statement not covered" > /&gt;</span>
2156
- <span class="cstat-no" title="statement not covered" > &lt;/div&gt;</span>
2157
- &nbsp;
2158
- {/* AI Prompt Input */}
2159
- <span class="cstat-no" title="statement not covered" > &lt;PromptInput /&gt;</span>
2160
- <span class="cstat-no" title="statement not covered" > &lt;/div&gt;</span>
2161
- &nbsp;
2162
- {/* Right Panel - Properties */}
2163
- <span class="cstat-no" title="statement not covered" > &lt;PropertiesPanel /&gt;</span>
2164
- &nbsp;
2165
- {/* New Step Wizard */}
2166
- <span class="cstat-no" title="statement not covered" > &lt;NewStepWizard</span>
2167
- <span class="cstat-no" title="statement not covered" > open={isNewStepOpen}</span>
2168
- <span class="cstat-no" title="statement not covered" > onOpenChange={(open) =&gt; {</span>
2169
- <span class="cstat-no" title="statement not covered" > if (!open) closeNewStepWizard();</span>
2170
- <span class="cstat-no" title="statement not covered" > }}</span>
2171
- <span class="cstat-no" title="statement not covered" > onCreateStep={handleCreateStep}</span>
2172
- <span class="cstat-no" title="statement not covered" > position={newStepPosition || undefined}</span>
2173
- <span class="cstat-no" title="statement not covered" > /&gt;</span>
2174
- &nbsp;
2175
- {/* Change Preview Modal */}
2176
- <span class="cstat-no" title="statement not covered" > {pendingChanges &amp;&amp; (</span>
2177
- <span class="cstat-no" title="statement not covered" > &lt;ChangePreview</span>
2178
- <span class="cstat-no" title="statement not covered" > open={!!pendingChanges}</span>
2179
- <span class="cstat-no" title="statement not covered" > onOpenChange={() =&gt; rejectChanges()}</span>
2180
- <span class="cstat-no" title="statement not covered" > originalWorkflow={currentWorkflow}</span>
2181
- <span class="cstat-no" title="statement not covered" > modifiedWorkflow={pendingChanges}</span>
2182
- <span class="cstat-no" title="statement not covered" > explanation="AI has suggested the following changes to your workflow."</span>
2183
- <span class="cstat-no" title="statement not covered" > onAccept={acceptChanges}</span>
2184
- <span class="cstat-no" title="statement not covered" > onReject={rejectChanges}</span>
2185
- <span class="cstat-no" title="statement not covered" > /&gt;</span>
2186
- )}
2187
- &nbsp;
2188
- {/* Execution Input Dialog */}
2189
- <span class="cstat-no" title="statement not covered" > {currentWorkflow?.inputs &amp;&amp; (</span>
2190
- <span class="cstat-no" title="statement not covered" > &lt;ExecutionInputDialog</span>
2191
- <span class="cstat-no" title="statement not covered" > open={showInputDialog}</span>
2192
- <span class="cstat-no" title="statement not covered" > onOpenChange={setShowInputDialog}</span>
2193
- <span class="cstat-no" title="statement not covered" > inputs={currentWorkflow.inputs}</span>
2194
- <span class="cstat-no" title="statement not covered" > onExecute={handleExecute}</span>
2195
- <span class="cstat-no" title="statement not covered" > workflowName={currentWorkflow.metadata?.name}</span>
2196
- <span class="cstat-no" title="statement not covered" > /&gt;</span>
2197
- )}
2198
- &nbsp;
2199
- {/* Validation Panel */}
2200
- <span class="cstat-no" title="statement not covered" > &lt;ValidationPanel</span>
2201
- <span class="cstat-no" title="statement not covered" > workflowPath={showValidationPanel ? selectedWorkflow : null}</span>
2202
- <span class="cstat-no" title="statement not covered" > onClose={() =&gt; setShowValidationPanel(false)}</span>
2203
- <span class="cstat-no" title="statement not covered" > /&gt;</span>
2204
- &nbsp;
2205
- {/* Keyboard Shortcuts Modal */}
2206
- <span class="cstat-no" title="statement not covered" > &lt;KeyboardShortcuts open={isShortcutsOpen} onOpenChange={setShortcutsOpen} /&gt;</span>
2207
- <span class="cstat-no" title="statement not covered" > &lt;/div&gt;</span>
2208
- <span class="cstat-no" title="statement not covered" > &lt;/ReactFlowProvider&gt;</span>
2209
- );
2210
- <span class="cstat-no" title="statement not covered" >}</span>
2211
- &nbsp;</pre></td></tr></table></pre>
2212
-
2213
- <div class='push'></div><!-- for sticky footer -->
2214
- </div><!-- /wrapper -->
2215
- <div class='footer quiet pad2 space-top1 center small'>
2216
- Code coverage generated by
2217
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2218
- at 2026-02-09T21:07:24.535Z
2219
- </div>
2220
- <script src="../prettify.js"></script>
2221
- <script>
2222
- window.onload = function () {
2223
- prettyPrint();
2224
- };
2225
- </script>
2226
- <script src="../sorter.js"></script>
2227
- <script src="../block-navigation.js"></script>
2228
- </body>
2229
- </html>
2230
-