@dashforge/tw 0.8.0-beta → 0.9.0-beta
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.
- package/CHANGELOG.md +188 -0
- package/COVERAGE.md +63 -0
- package/LICENSE +21 -0
- package/PERFORMANCE.md +59 -0
- package/REFINEMENT-NOTES.md +50 -0
- package/dist/index.esm.js +235 -160
- package/dist/src/components/DataGrid/DataGrid.d.ts.map +1 -1
- package/dist/src/components/DataGrid/filters/ColumnFilters.d.ts.map +1 -1
- package/dist/src/components/DataGrid/resize/useColumnResize.d.ts +7 -0
- package/dist/src/components/DataGrid/resize/useColumnResize.d.ts.map +1 -1
- package/dist/src/components/DataGrid/visibility/ColumnVisibilityMenu.d.ts +44 -0
- package/dist/src/components/DataGrid/visibility/ColumnVisibilityMenu.d.ts.map +1 -0
- package/dist/src/components/Dialog/Dialog.d.ts.map +1 -1
- package/dist/src/components/Table/Table.d.ts.map +1 -1
- package/dist/src/components/Table/cells/RenderChip.d.ts.map +1 -1
- package/dist/src/components/Table/table.types.d.ts +29 -6
- package/dist/src/components/Table/table.types.d.ts.map +1 -1
- package/dist/src/components/Typography/typography.variants.d.ts.map +1 -1
- package/eslint.config.mjs +16 -1
- package/package.json +11 -8
- package/src/components/Breadcrumbs/Breadcrumbs.perf.test.tsx +5 -2
- package/src/components/DataGrid/DataGrid.perf.test.tsx +114 -0
- package/src/components/DataGrid/DataGrid.test.tsx +253 -17
- package/src/components/DataGrid/DataGrid.tsx +107 -24
- package/src/components/DataGrid/filters/ColumnFilters.test.tsx +330 -0
- package/src/components/DataGrid/filters/ColumnFilters.tsx +26 -2
- package/src/components/DataGrid/reorder/useColumnReorder.test.ts +95 -3
- package/src/components/DataGrid/resize/useColumnResize.test.ts +144 -0
- package/src/components/DataGrid/resize/useColumnResize.ts +30 -1
- package/src/components/DataGrid/visibility/ColumnVisibilityMenu.tsx +186 -0
- package/src/components/Dialog/Dialog.tsx +9 -0
- package/src/components/Table/Table.perf.test.tsx +81 -0
- package/src/components/Table/Table.test.tsx +72 -1
- package/src/components/Table/Table.tsx +41 -8
- package/src/components/Table/cells/RenderChip.tsx +6 -9
- package/src/components/Table/cells/cells.test.tsx +247 -0
- package/src/components/Table/table.types.ts +29 -6
- package/src/components/Typography/Typography.test.tsx +15 -0
- package/src/components/Typography/typography.variants.ts +14 -1
- package/test-output/vitest/coverage/base.css +224 -0
- package/test-output/vitest/coverage/block-navigation.js +87 -0
- package/test-output/vitest/coverage/clover.xml +2418 -0
- package/test-output/vitest/coverage/coverage-final.json +89 -0
- package/test-output/vitest/coverage/favicon.png +0 -0
- package/test-output/vitest/coverage/index.html +746 -0
- package/test-output/vitest/coverage/prettify.css +1 -0
- package/test-output/vitest/coverage/prettify.js +2 -0
- package/test-output/vitest/coverage/sort-arrow-sprite.png +0 -0
- package/test-output/vitest/coverage/sorter.js +210 -0
- package/test-output/vitest/coverage/src/components/Accordion/Accordion.tsx.html +376 -0
- package/test-output/vitest/coverage/src/components/Accordion/accordion.variants.ts.html +181 -0
- package/test-output/vitest/coverage/src/components/Accordion/index.html +131 -0
- package/test-output/vitest/coverage/src/components/AppShell/AppShell.tsx.html +802 -0
- package/test-output/vitest/coverage/src/components/AppShell/appShell.variants.ts.html +247 -0
- package/test-output/vitest/coverage/src/components/AppShell/index.html +131 -0
- package/test-output/vitest/coverage/src/components/AspectRatio/AspectRatio.tsx.html +304 -0
- package/test-output/vitest/coverage/src/components/AspectRatio/index.html +116 -0
- package/test-output/vitest/coverage/src/components/Autocomplete/Autocomplete.tsx.html +3292 -0
- package/test-output/vitest/coverage/src/components/Autocomplete/autocomplete.variants.ts.html +508 -0
- package/test-output/vitest/coverage/src/components/Autocomplete/index.html +131 -0
- package/test-output/vitest/coverage/src/components/Box/Box.tsx.html +334 -0
- package/test-output/vitest/coverage/src/components/Box/box.variants.ts.html +775 -0
- package/test-output/vitest/coverage/src/components/Box/index.html +131 -0
- package/test-output/vitest/coverage/src/components/Breadcrumbs/Breadcrumbs.tsx.html +694 -0
- package/test-output/vitest/coverage/src/components/Breadcrumbs/breadcrumbs.variants.ts.html +247 -0
- package/test-output/vitest/coverage/src/components/Breadcrumbs/index.html +131 -0
- package/test-output/vitest/coverage/src/components/Button/Button.tsx.html +535 -0
- package/test-output/vitest/coverage/src/components/Button/button.variants.ts.html +562 -0
- package/test-output/vitest/coverage/src/components/Button/index.html +131 -0
- package/test-output/vitest/coverage/src/components/Checkbox/Checkbox.tsx.html +943 -0
- package/test-output/vitest/coverage/src/components/Checkbox/checkbox.variants.ts.html +289 -0
- package/test-output/vitest/coverage/src/components/Checkbox/index.html +131 -0
- package/test-output/vitest/coverage/src/components/ConfirmDialog/ConfirmDialog.tsx.html +841 -0
- package/test-output/vitest/coverage/src/components/ConfirmDialog/confirmDialog.variants.ts.html +313 -0
- package/test-output/vitest/coverage/src/components/ConfirmDialog/index.html +131 -0
- package/test-output/vitest/coverage/src/components/Container/Container.tsx.html +307 -0
- package/test-output/vitest/coverage/src/components/Container/container.variants.ts.html +328 -0
- package/test-output/vitest/coverage/src/components/Container/index.html +131 -0
- package/test-output/vitest/coverage/src/components/DataGrid/DataGrid.tsx.html +3937 -0
- package/test-output/vitest/coverage/src/components/DataGrid/dataGrid.variants.ts.html +541 -0
- package/test-output/vitest/coverage/src/components/DataGrid/filters/ColumnFilters.tsx.html +1453 -0
- package/test-output/vitest/coverage/src/components/DataGrid/filters/index.html +116 -0
- package/test-output/vitest/coverage/src/components/DataGrid/index.html +131 -0
- package/test-output/vitest/coverage/src/components/DataGrid/reorder/index.html +116 -0
- package/test-output/vitest/coverage/src/components/DataGrid/reorder/useColumnReorder.ts.html +517 -0
- package/test-output/vitest/coverage/src/components/DataGrid/resize/index.html +116 -0
- package/test-output/vitest/coverage/src/components/DataGrid/resize/useColumnResize.ts.html +490 -0
- package/test-output/vitest/coverage/src/components/DataGrid/visibility/ColumnVisibilityMenu.tsx.html +592 -0
- package/test-output/vitest/coverage/src/components/DataGrid/visibility/index.html +116 -0
- package/test-output/vitest/coverage/src/components/DateTimePicker/DateTimePicker.tsx.html +1042 -0
- package/test-output/vitest/coverage/src/components/DateTimePicker/dateTimePicker.variants.ts.html +337 -0
- package/test-output/vitest/coverage/src/components/DateTimePicker/index.html +131 -0
- package/test-output/vitest/coverage/src/components/Dialog/Dialog.tsx.html +391 -0
- package/test-output/vitest/coverage/src/components/Dialog/dialog.variants.ts.html +283 -0
- package/test-output/vitest/coverage/src/components/Dialog/index.html +131 -0
- package/test-output/vitest/coverage/src/components/Divider/Divider.tsx.html +505 -0
- package/test-output/vitest/coverage/src/components/Divider/divider.variants.ts.html +433 -0
- package/test-output/vitest/coverage/src/components/Divider/index.html +131 -0
- package/test-output/vitest/coverage/src/components/Grid/Grid.tsx.html +529 -0
- package/test-output/vitest/coverage/src/components/Grid/grid.variants.ts.html +484 -0
- package/test-output/vitest/coverage/src/components/Grid/index.html +131 -0
- package/test-output/vitest/coverage/src/components/LeftNav/LeftNav.tsx.html +1075 -0
- package/test-output/vitest/coverage/src/components/LeftNav/index.html +131 -0
- package/test-output/vitest/coverage/src/components/LeftNav/leftNav.variants.ts.html +406 -0
- package/test-output/vitest/coverage/src/components/NumberField/NumberField.tsx.html +1048 -0
- package/test-output/vitest/coverage/src/components/NumberField/index.html +131 -0
- package/test-output/vitest/coverage/src/components/NumberField/numberField.variants.ts.html +367 -0
- package/test-output/vitest/coverage/src/components/OTPField/OTPField.tsx.html +835 -0
- package/test-output/vitest/coverage/src/components/OTPField/index.html +131 -0
- package/test-output/vitest/coverage/src/components/OTPField/otpField.variants.ts.html +301 -0
- package/test-output/vitest/coverage/src/components/Pagination/Pagination.tsx.html +916 -0
- package/test-output/vitest/coverage/src/components/Pagination/index.html +146 -0
- package/test-output/vitest/coverage/src/components/Pagination/pagination.helpers.ts.html +391 -0
- package/test-output/vitest/coverage/src/components/Pagination/pagination.variants.ts.html +436 -0
- package/test-output/vitest/coverage/src/components/Popover/Popover.tsx.html +250 -0
- package/test-output/vitest/coverage/src/components/Popover/index.html +131 -0
- package/test-output/vitest/coverage/src/components/Popover/popover.variants.ts.html +157 -0
- package/test-output/vitest/coverage/src/components/RadioGroup/RadioGroup.tsx.html +934 -0
- package/test-output/vitest/coverage/src/components/RadioGroup/index.html +131 -0
- package/test-output/vitest/coverage/src/components/RadioGroup/radioGroup.variants.ts.html +346 -0
- package/test-output/vitest/coverage/src/components/Skeleton/Skeleton.tsx.html +232 -0
- package/test-output/vitest/coverage/src/components/Skeleton/index.html +131 -0
- package/test-output/vitest/coverage/src/components/Skeleton/skeleton.variants.ts.html +346 -0
- package/test-output/vitest/coverage/src/components/Snackbar/Snackbar.tsx.html +979 -0
- package/test-output/vitest/coverage/src/components/Snackbar/index.html +131 -0
- package/test-output/vitest/coverage/src/components/Snackbar/snackbar.variants.ts.html +307 -0
- package/test-output/vitest/coverage/src/components/Stack/Stack.tsx.html +430 -0
- package/test-output/vitest/coverage/src/components/Stack/index.html +131 -0
- package/test-output/vitest/coverage/src/components/Stack/stack.variants.ts.html +325 -0
- package/test-output/vitest/coverage/src/components/Switch/Switch.tsx.html +559 -0
- package/test-output/vitest/coverage/src/components/Switch/index.html +131 -0
- package/test-output/vitest/coverage/src/components/Switch/switch.variants.ts.html +295 -0
- package/test-output/vitest/coverage/src/components/Table/Table.tsx.html +2677 -0
- package/test-output/vitest/coverage/src/components/Table/cells/RenderButton.tsx.html +154 -0
- package/test-output/vitest/coverage/src/components/Table/cells/RenderChip.tsx.html +385 -0
- package/test-output/vitest/coverage/src/components/Table/cells/RenderText.tsx.html +196 -0
- package/test-output/vitest/coverage/src/components/Table/cells/RenderTwoLine.tsx.html +187 -0
- package/test-output/vitest/coverage/src/components/Table/cells/RowActionsMenu.tsx.html +526 -0
- package/test-output/vitest/coverage/src/components/Table/cells/index.html +191 -0
- package/test-output/vitest/coverage/src/components/Table/cells/index.ts.html +127 -0
- package/test-output/vitest/coverage/src/components/Table/index.html +131 -0
- package/test-output/vitest/coverage/src/components/Table/table.variants.ts.html +706 -0
- package/test-output/vitest/coverage/src/components/Tabs/Tabs.tsx.html +283 -0
- package/test-output/vitest/coverage/src/components/Tabs/index.html +131 -0
- package/test-output/vitest/coverage/src/components/Tabs/tabs.variants.ts.html +292 -0
- package/test-output/vitest/coverage/src/components/TextField/TextField.tsx.html +820 -0
- package/test-output/vitest/coverage/src/components/TextField/index.html +131 -0
- package/test-output/vitest/coverage/src/components/TextField/textField.variants.ts.html +400 -0
- package/test-output/vitest/coverage/src/components/Textarea/Textarea.tsx.html +655 -0
- package/test-output/vitest/coverage/src/components/Textarea/index.html +131 -0
- package/test-output/vitest/coverage/src/components/Textarea/textarea.variants.ts.html +340 -0
- package/test-output/vitest/coverage/src/components/Tooltip/Tooltip.tsx.html +295 -0
- package/test-output/vitest/coverage/src/components/Tooltip/index.html +131 -0
- package/test-output/vitest/coverage/src/components/Tooltip/tooltip.variants.ts.html +169 -0
- package/test-output/vitest/coverage/src/components/TopBar/TopBar.tsx.html +283 -0
- package/test-output/vitest/coverage/src/components/TopBar/index.html +131 -0
- package/test-output/vitest/coverage/src/components/TopBar/topBar.variants.ts.html +199 -0
- package/test-output/vitest/coverage/src/components/Typography/Typography.tsx.html +421 -0
- package/test-output/vitest/coverage/src/components/Typography/index.html +131 -0
- package/test-output/vitest/coverage/src/components/Typography/typography.variants.ts.html +436 -0
- package/test-output/vitest/coverage/src/components/VisuallyHidden/VisuallyHidden.tsx.html +262 -0
- package/test-output/vitest/coverage/src/components/VisuallyHidden/index.html +116 -0
- package/test-output/vitest/coverage/src/components/_shared/data/getNestedValue.ts.html +181 -0
- package/test-output/vitest/coverage/src/components/_shared/data/index.html +236 -0
- package/test-output/vitest/coverage/src/components/_shared/data/useColumnAutoDetect.ts.html +385 -0
- package/test-output/vitest/coverage/src/components/_shared/data/useControllableState.ts.html +229 -0
- package/test-output/vitest/coverage/src/components/_shared/data/useDebouncedValue.ts.html +157 -0
- package/test-output/vitest/coverage/src/components/_shared/data/useTableFilter.ts.html +439 -0
- package/test-output/vitest/coverage/src/components/_shared/data/useTableSearch.ts.html +283 -0
- package/test-output/vitest/coverage/src/components/_shared/data/useTableSelection.ts.html +385 -0
- package/test-output/vitest/coverage/src/components/_shared/data/useTableSort.ts.html +508 -0
- package/test-output/vitest/coverage/src/components/_shared/data/useVirtualizer.ts.html +682 -0
- package/test-output/vitest/coverage/src/components/_shared/index.html +116 -0
- package/test-output/vitest/coverage/src/components/_shared/resolveValidationState.ts.html +265 -0
- package/test-output/vitest/coverage/src/hooks/index.html +116 -0
- package/test-output/vitest/coverage/src/hooks/useAccessState.ts.html +328 -0
- package/test-output/vitest/coverage/src/index.html +116 -0
- package/test-output/vitest/coverage/src/index.ts.html +1153 -0
- package/test-output/vitest/coverage/src/utils/cn.ts.html +172 -0
- package/test-output/vitest/coverage/src/utils/index.html +116 -0
- package/dist/src/components/DataGrid/visibility/ColumnVisibilityDialog.d.ts +0 -33
- package/dist/src/components/DataGrid/visibility/ColumnVisibilityDialog.d.ts.map +0 -1
- package/src/components/DataGrid/visibility/ColumnVisibilityDialog.tsx +0 -200
|
@@ -0,0 +1,3292 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for src/components/Autocomplete/Autocomplete.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">src/components/Autocomplete</a> Autocomplete.tsx</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">74.57% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>264/354</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">68% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>238/350</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">84.61% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>44/52</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">76.19% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>240/315</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 medium'></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>
|
|
782
|
+
<a name='L717'></a><a href='#L717'>717</a>
|
|
783
|
+
<a name='L718'></a><a href='#L718'>718</a>
|
|
784
|
+
<a name='L719'></a><a href='#L719'>719</a>
|
|
785
|
+
<a name='L720'></a><a href='#L720'>720</a>
|
|
786
|
+
<a name='L721'></a><a href='#L721'>721</a>
|
|
787
|
+
<a name='L722'></a><a href='#L722'>722</a>
|
|
788
|
+
<a name='L723'></a><a href='#L723'>723</a>
|
|
789
|
+
<a name='L724'></a><a href='#L724'>724</a>
|
|
790
|
+
<a name='L725'></a><a href='#L725'>725</a>
|
|
791
|
+
<a name='L726'></a><a href='#L726'>726</a>
|
|
792
|
+
<a name='L727'></a><a href='#L727'>727</a>
|
|
793
|
+
<a name='L728'></a><a href='#L728'>728</a>
|
|
794
|
+
<a name='L729'></a><a href='#L729'>729</a>
|
|
795
|
+
<a name='L730'></a><a href='#L730'>730</a>
|
|
796
|
+
<a name='L731'></a><a href='#L731'>731</a>
|
|
797
|
+
<a name='L732'></a><a href='#L732'>732</a>
|
|
798
|
+
<a name='L733'></a><a href='#L733'>733</a>
|
|
799
|
+
<a name='L734'></a><a href='#L734'>734</a>
|
|
800
|
+
<a name='L735'></a><a href='#L735'>735</a>
|
|
801
|
+
<a name='L736'></a><a href='#L736'>736</a>
|
|
802
|
+
<a name='L737'></a><a href='#L737'>737</a>
|
|
803
|
+
<a name='L738'></a><a href='#L738'>738</a>
|
|
804
|
+
<a name='L739'></a><a href='#L739'>739</a>
|
|
805
|
+
<a name='L740'></a><a href='#L740'>740</a>
|
|
806
|
+
<a name='L741'></a><a href='#L741'>741</a>
|
|
807
|
+
<a name='L742'></a><a href='#L742'>742</a>
|
|
808
|
+
<a name='L743'></a><a href='#L743'>743</a>
|
|
809
|
+
<a name='L744'></a><a href='#L744'>744</a>
|
|
810
|
+
<a name='L745'></a><a href='#L745'>745</a>
|
|
811
|
+
<a name='L746'></a><a href='#L746'>746</a>
|
|
812
|
+
<a name='L747'></a><a href='#L747'>747</a>
|
|
813
|
+
<a name='L748'></a><a href='#L748'>748</a>
|
|
814
|
+
<a name='L749'></a><a href='#L749'>749</a>
|
|
815
|
+
<a name='L750'></a><a href='#L750'>750</a>
|
|
816
|
+
<a name='L751'></a><a href='#L751'>751</a>
|
|
817
|
+
<a name='L752'></a><a href='#L752'>752</a>
|
|
818
|
+
<a name='L753'></a><a href='#L753'>753</a>
|
|
819
|
+
<a name='L754'></a><a href='#L754'>754</a>
|
|
820
|
+
<a name='L755'></a><a href='#L755'>755</a>
|
|
821
|
+
<a name='L756'></a><a href='#L756'>756</a>
|
|
822
|
+
<a name='L757'></a><a href='#L757'>757</a>
|
|
823
|
+
<a name='L758'></a><a href='#L758'>758</a>
|
|
824
|
+
<a name='L759'></a><a href='#L759'>759</a>
|
|
825
|
+
<a name='L760'></a><a href='#L760'>760</a>
|
|
826
|
+
<a name='L761'></a><a href='#L761'>761</a>
|
|
827
|
+
<a name='L762'></a><a href='#L762'>762</a>
|
|
828
|
+
<a name='L763'></a><a href='#L763'>763</a>
|
|
829
|
+
<a name='L764'></a><a href='#L764'>764</a>
|
|
830
|
+
<a name='L765'></a><a href='#L765'>765</a>
|
|
831
|
+
<a name='L766'></a><a href='#L766'>766</a>
|
|
832
|
+
<a name='L767'></a><a href='#L767'>767</a>
|
|
833
|
+
<a name='L768'></a><a href='#L768'>768</a>
|
|
834
|
+
<a name='L769'></a><a href='#L769'>769</a>
|
|
835
|
+
<a name='L770'></a><a href='#L770'>770</a>
|
|
836
|
+
<a name='L771'></a><a href='#L771'>771</a>
|
|
837
|
+
<a name='L772'></a><a href='#L772'>772</a>
|
|
838
|
+
<a name='L773'></a><a href='#L773'>773</a>
|
|
839
|
+
<a name='L774'></a><a href='#L774'>774</a>
|
|
840
|
+
<a name='L775'></a><a href='#L775'>775</a>
|
|
841
|
+
<a name='L776'></a><a href='#L776'>776</a>
|
|
842
|
+
<a name='L777'></a><a href='#L777'>777</a>
|
|
843
|
+
<a name='L778'></a><a href='#L778'>778</a>
|
|
844
|
+
<a name='L779'></a><a href='#L779'>779</a>
|
|
845
|
+
<a name='L780'></a><a href='#L780'>780</a>
|
|
846
|
+
<a name='L781'></a><a href='#L781'>781</a>
|
|
847
|
+
<a name='L782'></a><a href='#L782'>782</a>
|
|
848
|
+
<a name='L783'></a><a href='#L783'>783</a>
|
|
849
|
+
<a name='L784'></a><a href='#L784'>784</a>
|
|
850
|
+
<a name='L785'></a><a href='#L785'>785</a>
|
|
851
|
+
<a name='L786'></a><a href='#L786'>786</a>
|
|
852
|
+
<a name='L787'></a><a href='#L787'>787</a>
|
|
853
|
+
<a name='L788'></a><a href='#L788'>788</a>
|
|
854
|
+
<a name='L789'></a><a href='#L789'>789</a>
|
|
855
|
+
<a name='L790'></a><a href='#L790'>790</a>
|
|
856
|
+
<a name='L791'></a><a href='#L791'>791</a>
|
|
857
|
+
<a name='L792'></a><a href='#L792'>792</a>
|
|
858
|
+
<a name='L793'></a><a href='#L793'>793</a>
|
|
859
|
+
<a name='L794'></a><a href='#L794'>794</a>
|
|
860
|
+
<a name='L795'></a><a href='#L795'>795</a>
|
|
861
|
+
<a name='L796'></a><a href='#L796'>796</a>
|
|
862
|
+
<a name='L797'></a><a href='#L797'>797</a>
|
|
863
|
+
<a name='L798'></a><a href='#L798'>798</a>
|
|
864
|
+
<a name='L799'></a><a href='#L799'>799</a>
|
|
865
|
+
<a name='L800'></a><a href='#L800'>800</a>
|
|
866
|
+
<a name='L801'></a><a href='#L801'>801</a>
|
|
867
|
+
<a name='L802'></a><a href='#L802'>802</a>
|
|
868
|
+
<a name='L803'></a><a href='#L803'>803</a>
|
|
869
|
+
<a name='L804'></a><a href='#L804'>804</a>
|
|
870
|
+
<a name='L805'></a><a href='#L805'>805</a>
|
|
871
|
+
<a name='L806'></a><a href='#L806'>806</a>
|
|
872
|
+
<a name='L807'></a><a href='#L807'>807</a>
|
|
873
|
+
<a name='L808'></a><a href='#L808'>808</a>
|
|
874
|
+
<a name='L809'></a><a href='#L809'>809</a>
|
|
875
|
+
<a name='L810'></a><a href='#L810'>810</a>
|
|
876
|
+
<a name='L811'></a><a href='#L811'>811</a>
|
|
877
|
+
<a name='L812'></a><a href='#L812'>812</a>
|
|
878
|
+
<a name='L813'></a><a href='#L813'>813</a>
|
|
879
|
+
<a name='L814'></a><a href='#L814'>814</a>
|
|
880
|
+
<a name='L815'></a><a href='#L815'>815</a>
|
|
881
|
+
<a name='L816'></a><a href='#L816'>816</a>
|
|
882
|
+
<a name='L817'></a><a href='#L817'>817</a>
|
|
883
|
+
<a name='L818'></a><a href='#L818'>818</a>
|
|
884
|
+
<a name='L819'></a><a href='#L819'>819</a>
|
|
885
|
+
<a name='L820'></a><a href='#L820'>820</a>
|
|
886
|
+
<a name='L821'></a><a href='#L821'>821</a>
|
|
887
|
+
<a name='L822'></a><a href='#L822'>822</a>
|
|
888
|
+
<a name='L823'></a><a href='#L823'>823</a>
|
|
889
|
+
<a name='L824'></a><a href='#L824'>824</a>
|
|
890
|
+
<a name='L825'></a><a href='#L825'>825</a>
|
|
891
|
+
<a name='L826'></a><a href='#L826'>826</a>
|
|
892
|
+
<a name='L827'></a><a href='#L827'>827</a>
|
|
893
|
+
<a name='L828'></a><a href='#L828'>828</a>
|
|
894
|
+
<a name='L829'></a><a href='#L829'>829</a>
|
|
895
|
+
<a name='L830'></a><a href='#L830'>830</a>
|
|
896
|
+
<a name='L831'></a><a href='#L831'>831</a>
|
|
897
|
+
<a name='L832'></a><a href='#L832'>832</a>
|
|
898
|
+
<a name='L833'></a><a href='#L833'>833</a>
|
|
899
|
+
<a name='L834'></a><a href='#L834'>834</a>
|
|
900
|
+
<a name='L835'></a><a href='#L835'>835</a>
|
|
901
|
+
<a name='L836'></a><a href='#L836'>836</a>
|
|
902
|
+
<a name='L837'></a><a href='#L837'>837</a>
|
|
903
|
+
<a name='L838'></a><a href='#L838'>838</a>
|
|
904
|
+
<a name='L839'></a><a href='#L839'>839</a>
|
|
905
|
+
<a name='L840'></a><a href='#L840'>840</a>
|
|
906
|
+
<a name='L841'></a><a href='#L841'>841</a>
|
|
907
|
+
<a name='L842'></a><a href='#L842'>842</a>
|
|
908
|
+
<a name='L843'></a><a href='#L843'>843</a>
|
|
909
|
+
<a name='L844'></a><a href='#L844'>844</a>
|
|
910
|
+
<a name='L845'></a><a href='#L845'>845</a>
|
|
911
|
+
<a name='L846'></a><a href='#L846'>846</a>
|
|
912
|
+
<a name='L847'></a><a href='#L847'>847</a>
|
|
913
|
+
<a name='L848'></a><a href='#L848'>848</a>
|
|
914
|
+
<a name='L849'></a><a href='#L849'>849</a>
|
|
915
|
+
<a name='L850'></a><a href='#L850'>850</a>
|
|
916
|
+
<a name='L851'></a><a href='#L851'>851</a>
|
|
917
|
+
<a name='L852'></a><a href='#L852'>852</a>
|
|
918
|
+
<a name='L853'></a><a href='#L853'>853</a>
|
|
919
|
+
<a name='L854'></a><a href='#L854'>854</a>
|
|
920
|
+
<a name='L855'></a><a href='#L855'>855</a>
|
|
921
|
+
<a name='L856'></a><a href='#L856'>856</a>
|
|
922
|
+
<a name='L857'></a><a href='#L857'>857</a>
|
|
923
|
+
<a name='L858'></a><a href='#L858'>858</a>
|
|
924
|
+
<a name='L859'></a><a href='#L859'>859</a>
|
|
925
|
+
<a name='L860'></a><a href='#L860'>860</a>
|
|
926
|
+
<a name='L861'></a><a href='#L861'>861</a>
|
|
927
|
+
<a name='L862'></a><a href='#L862'>862</a>
|
|
928
|
+
<a name='L863'></a><a href='#L863'>863</a>
|
|
929
|
+
<a name='L864'></a><a href='#L864'>864</a>
|
|
930
|
+
<a name='L865'></a><a href='#L865'>865</a>
|
|
931
|
+
<a name='L866'></a><a href='#L866'>866</a>
|
|
932
|
+
<a name='L867'></a><a href='#L867'>867</a>
|
|
933
|
+
<a name='L868'></a><a href='#L868'>868</a>
|
|
934
|
+
<a name='L869'></a><a href='#L869'>869</a>
|
|
935
|
+
<a name='L870'></a><a href='#L870'>870</a>
|
|
936
|
+
<a name='L871'></a><a href='#L871'>871</a>
|
|
937
|
+
<a name='L872'></a><a href='#L872'>872</a>
|
|
938
|
+
<a name='L873'></a><a href='#L873'>873</a>
|
|
939
|
+
<a name='L874'></a><a href='#L874'>874</a>
|
|
940
|
+
<a name='L875'></a><a href='#L875'>875</a>
|
|
941
|
+
<a name='L876'></a><a href='#L876'>876</a>
|
|
942
|
+
<a name='L877'></a><a href='#L877'>877</a>
|
|
943
|
+
<a name='L878'></a><a href='#L878'>878</a>
|
|
944
|
+
<a name='L879'></a><a href='#L879'>879</a>
|
|
945
|
+
<a name='L880'></a><a href='#L880'>880</a>
|
|
946
|
+
<a name='L881'></a><a href='#L881'>881</a>
|
|
947
|
+
<a name='L882'></a><a href='#L882'>882</a>
|
|
948
|
+
<a name='L883'></a><a href='#L883'>883</a>
|
|
949
|
+
<a name='L884'></a><a href='#L884'>884</a>
|
|
950
|
+
<a name='L885'></a><a href='#L885'>885</a>
|
|
951
|
+
<a name='L886'></a><a href='#L886'>886</a>
|
|
952
|
+
<a name='L887'></a><a href='#L887'>887</a>
|
|
953
|
+
<a name='L888'></a><a href='#L888'>888</a>
|
|
954
|
+
<a name='L889'></a><a href='#L889'>889</a>
|
|
955
|
+
<a name='L890'></a><a href='#L890'>890</a>
|
|
956
|
+
<a name='L891'></a><a href='#L891'>891</a>
|
|
957
|
+
<a name='L892'></a><a href='#L892'>892</a>
|
|
958
|
+
<a name='L893'></a><a href='#L893'>893</a>
|
|
959
|
+
<a name='L894'></a><a href='#L894'>894</a>
|
|
960
|
+
<a name='L895'></a><a href='#L895'>895</a>
|
|
961
|
+
<a name='L896'></a><a href='#L896'>896</a>
|
|
962
|
+
<a name='L897'></a><a href='#L897'>897</a>
|
|
963
|
+
<a name='L898'></a><a href='#L898'>898</a>
|
|
964
|
+
<a name='L899'></a><a href='#L899'>899</a>
|
|
965
|
+
<a name='L900'></a><a href='#L900'>900</a>
|
|
966
|
+
<a name='L901'></a><a href='#L901'>901</a>
|
|
967
|
+
<a name='L902'></a><a href='#L902'>902</a>
|
|
968
|
+
<a name='L903'></a><a href='#L903'>903</a>
|
|
969
|
+
<a name='L904'></a><a href='#L904'>904</a>
|
|
970
|
+
<a name='L905'></a><a href='#L905'>905</a>
|
|
971
|
+
<a name='L906'></a><a href='#L906'>906</a>
|
|
972
|
+
<a name='L907'></a><a href='#L907'>907</a>
|
|
973
|
+
<a name='L908'></a><a href='#L908'>908</a>
|
|
974
|
+
<a name='L909'></a><a href='#L909'>909</a>
|
|
975
|
+
<a name='L910'></a><a href='#L910'>910</a>
|
|
976
|
+
<a name='L911'></a><a href='#L911'>911</a>
|
|
977
|
+
<a name='L912'></a><a href='#L912'>912</a>
|
|
978
|
+
<a name='L913'></a><a href='#L913'>913</a>
|
|
979
|
+
<a name='L914'></a><a href='#L914'>914</a>
|
|
980
|
+
<a name='L915'></a><a href='#L915'>915</a>
|
|
981
|
+
<a name='L916'></a><a href='#L916'>916</a>
|
|
982
|
+
<a name='L917'></a><a href='#L917'>917</a>
|
|
983
|
+
<a name='L918'></a><a href='#L918'>918</a>
|
|
984
|
+
<a name='L919'></a><a href='#L919'>919</a>
|
|
985
|
+
<a name='L920'></a><a href='#L920'>920</a>
|
|
986
|
+
<a name='L921'></a><a href='#L921'>921</a>
|
|
987
|
+
<a name='L922'></a><a href='#L922'>922</a>
|
|
988
|
+
<a name='L923'></a><a href='#L923'>923</a>
|
|
989
|
+
<a name='L924'></a><a href='#L924'>924</a>
|
|
990
|
+
<a name='L925'></a><a href='#L925'>925</a>
|
|
991
|
+
<a name='L926'></a><a href='#L926'>926</a>
|
|
992
|
+
<a name='L927'></a><a href='#L927'>927</a>
|
|
993
|
+
<a name='L928'></a><a href='#L928'>928</a>
|
|
994
|
+
<a name='L929'></a><a href='#L929'>929</a>
|
|
995
|
+
<a name='L930'></a><a href='#L930'>930</a>
|
|
996
|
+
<a name='L931'></a><a href='#L931'>931</a>
|
|
997
|
+
<a name='L932'></a><a href='#L932'>932</a>
|
|
998
|
+
<a name='L933'></a><a href='#L933'>933</a>
|
|
999
|
+
<a name='L934'></a><a href='#L934'>934</a>
|
|
1000
|
+
<a name='L935'></a><a href='#L935'>935</a>
|
|
1001
|
+
<a name='L936'></a><a href='#L936'>936</a>
|
|
1002
|
+
<a name='L937'></a><a href='#L937'>937</a>
|
|
1003
|
+
<a name='L938'></a><a href='#L938'>938</a>
|
|
1004
|
+
<a name='L939'></a><a href='#L939'>939</a>
|
|
1005
|
+
<a name='L940'></a><a href='#L940'>940</a>
|
|
1006
|
+
<a name='L941'></a><a href='#L941'>941</a>
|
|
1007
|
+
<a name='L942'></a><a href='#L942'>942</a>
|
|
1008
|
+
<a name='L943'></a><a href='#L943'>943</a>
|
|
1009
|
+
<a name='L944'></a><a href='#L944'>944</a>
|
|
1010
|
+
<a name='L945'></a><a href='#L945'>945</a>
|
|
1011
|
+
<a name='L946'></a><a href='#L946'>946</a>
|
|
1012
|
+
<a name='L947'></a><a href='#L947'>947</a>
|
|
1013
|
+
<a name='L948'></a><a href='#L948'>948</a>
|
|
1014
|
+
<a name='L949'></a><a href='#L949'>949</a>
|
|
1015
|
+
<a name='L950'></a><a href='#L950'>950</a>
|
|
1016
|
+
<a name='L951'></a><a href='#L951'>951</a>
|
|
1017
|
+
<a name='L952'></a><a href='#L952'>952</a>
|
|
1018
|
+
<a name='L953'></a><a href='#L953'>953</a>
|
|
1019
|
+
<a name='L954'></a><a href='#L954'>954</a>
|
|
1020
|
+
<a name='L955'></a><a href='#L955'>955</a>
|
|
1021
|
+
<a name='L956'></a><a href='#L956'>956</a>
|
|
1022
|
+
<a name='L957'></a><a href='#L957'>957</a>
|
|
1023
|
+
<a name='L958'></a><a href='#L958'>958</a>
|
|
1024
|
+
<a name='L959'></a><a href='#L959'>959</a>
|
|
1025
|
+
<a name='L960'></a><a href='#L960'>960</a>
|
|
1026
|
+
<a name='L961'></a><a href='#L961'>961</a>
|
|
1027
|
+
<a name='L962'></a><a href='#L962'>962</a>
|
|
1028
|
+
<a name='L963'></a><a href='#L963'>963</a>
|
|
1029
|
+
<a name='L964'></a><a href='#L964'>964</a>
|
|
1030
|
+
<a name='L965'></a><a href='#L965'>965</a>
|
|
1031
|
+
<a name='L966'></a><a href='#L966'>966</a>
|
|
1032
|
+
<a name='L967'></a><a href='#L967'>967</a>
|
|
1033
|
+
<a name='L968'></a><a href='#L968'>968</a>
|
|
1034
|
+
<a name='L969'></a><a href='#L969'>969</a>
|
|
1035
|
+
<a name='L970'></a><a href='#L970'>970</a>
|
|
1036
|
+
<a name='L971'></a><a href='#L971'>971</a>
|
|
1037
|
+
<a name='L972'></a><a href='#L972'>972</a>
|
|
1038
|
+
<a name='L973'></a><a href='#L973'>973</a>
|
|
1039
|
+
<a name='L974'></a><a href='#L974'>974</a>
|
|
1040
|
+
<a name='L975'></a><a href='#L975'>975</a>
|
|
1041
|
+
<a name='L976'></a><a href='#L976'>976</a>
|
|
1042
|
+
<a name='L977'></a><a href='#L977'>977</a>
|
|
1043
|
+
<a name='L978'></a><a href='#L978'>978</a>
|
|
1044
|
+
<a name='L979'></a><a href='#L979'>979</a>
|
|
1045
|
+
<a name='L980'></a><a href='#L980'>980</a>
|
|
1046
|
+
<a name='L981'></a><a href='#L981'>981</a>
|
|
1047
|
+
<a name='L982'></a><a href='#L982'>982</a>
|
|
1048
|
+
<a name='L983'></a><a href='#L983'>983</a>
|
|
1049
|
+
<a name='L984'></a><a href='#L984'>984</a>
|
|
1050
|
+
<a name='L985'></a><a href='#L985'>985</a>
|
|
1051
|
+
<a name='L986'></a><a href='#L986'>986</a>
|
|
1052
|
+
<a name='L987'></a><a href='#L987'>987</a>
|
|
1053
|
+
<a name='L988'></a><a href='#L988'>988</a>
|
|
1054
|
+
<a name='L989'></a><a href='#L989'>989</a>
|
|
1055
|
+
<a name='L990'></a><a href='#L990'>990</a>
|
|
1056
|
+
<a name='L991'></a><a href='#L991'>991</a>
|
|
1057
|
+
<a name='L992'></a><a href='#L992'>992</a>
|
|
1058
|
+
<a name='L993'></a><a href='#L993'>993</a>
|
|
1059
|
+
<a name='L994'></a><a href='#L994'>994</a>
|
|
1060
|
+
<a name='L995'></a><a href='#L995'>995</a>
|
|
1061
|
+
<a name='L996'></a><a href='#L996'>996</a>
|
|
1062
|
+
<a name='L997'></a><a href='#L997'>997</a>
|
|
1063
|
+
<a name='L998'></a><a href='#L998'>998</a>
|
|
1064
|
+
<a name='L999'></a><a href='#L999'>999</a>
|
|
1065
|
+
<a name='L1000'></a><a href='#L1000'>1000</a>
|
|
1066
|
+
<a name='L1001'></a><a href='#L1001'>1001</a>
|
|
1067
|
+
<a name='L1002'></a><a href='#L1002'>1002</a>
|
|
1068
|
+
<a name='L1003'></a><a href='#L1003'>1003</a>
|
|
1069
|
+
<a name='L1004'></a><a href='#L1004'>1004</a>
|
|
1070
|
+
<a name='L1005'></a><a href='#L1005'>1005</a>
|
|
1071
|
+
<a name='L1006'></a><a href='#L1006'>1006</a>
|
|
1072
|
+
<a name='L1007'></a><a href='#L1007'>1007</a>
|
|
1073
|
+
<a name='L1008'></a><a href='#L1008'>1008</a>
|
|
1074
|
+
<a name='L1009'></a><a href='#L1009'>1009</a>
|
|
1075
|
+
<a name='L1010'></a><a href='#L1010'>1010</a>
|
|
1076
|
+
<a name='L1011'></a><a href='#L1011'>1011</a>
|
|
1077
|
+
<a name='L1012'></a><a href='#L1012'>1012</a>
|
|
1078
|
+
<a name='L1013'></a><a href='#L1013'>1013</a>
|
|
1079
|
+
<a name='L1014'></a><a href='#L1014'>1014</a>
|
|
1080
|
+
<a name='L1015'></a><a href='#L1015'>1015</a>
|
|
1081
|
+
<a name='L1016'></a><a href='#L1016'>1016</a>
|
|
1082
|
+
<a name='L1017'></a><a href='#L1017'>1017</a>
|
|
1083
|
+
<a name='L1018'></a><a href='#L1018'>1018</a>
|
|
1084
|
+
<a name='L1019'></a><a href='#L1019'>1019</a>
|
|
1085
|
+
<a name='L1020'></a><a href='#L1020'>1020</a>
|
|
1086
|
+
<a name='L1021'></a><a href='#L1021'>1021</a>
|
|
1087
|
+
<a name='L1022'></a><a href='#L1022'>1022</a>
|
|
1088
|
+
<a name='L1023'></a><a href='#L1023'>1023</a>
|
|
1089
|
+
<a name='L1024'></a><a href='#L1024'>1024</a>
|
|
1090
|
+
<a name='L1025'></a><a href='#L1025'>1025</a>
|
|
1091
|
+
<a name='L1026'></a><a href='#L1026'>1026</a>
|
|
1092
|
+
<a name='L1027'></a><a href='#L1027'>1027</a>
|
|
1093
|
+
<a name='L1028'></a><a href='#L1028'>1028</a>
|
|
1094
|
+
<a name='L1029'></a><a href='#L1029'>1029</a>
|
|
1095
|
+
<a name='L1030'></a><a href='#L1030'>1030</a>
|
|
1096
|
+
<a name='L1031'></a><a href='#L1031'>1031</a>
|
|
1097
|
+
<a name='L1032'></a><a href='#L1032'>1032</a>
|
|
1098
|
+
<a name='L1033'></a><a href='#L1033'>1033</a>
|
|
1099
|
+
<a name='L1034'></a><a href='#L1034'>1034</a>
|
|
1100
|
+
<a name='L1035'></a><a href='#L1035'>1035</a>
|
|
1101
|
+
<a name='L1036'></a><a href='#L1036'>1036</a>
|
|
1102
|
+
<a name='L1037'></a><a href='#L1037'>1037</a>
|
|
1103
|
+
<a name='L1038'></a><a href='#L1038'>1038</a>
|
|
1104
|
+
<a name='L1039'></a><a href='#L1039'>1039</a>
|
|
1105
|
+
<a name='L1040'></a><a href='#L1040'>1040</a>
|
|
1106
|
+
<a name='L1041'></a><a href='#L1041'>1041</a>
|
|
1107
|
+
<a name='L1042'></a><a href='#L1042'>1042</a>
|
|
1108
|
+
<a name='L1043'></a><a href='#L1043'>1043</a>
|
|
1109
|
+
<a name='L1044'></a><a href='#L1044'>1044</a>
|
|
1110
|
+
<a name='L1045'></a><a href='#L1045'>1045</a>
|
|
1111
|
+
<a name='L1046'></a><a href='#L1046'>1046</a>
|
|
1112
|
+
<a name='L1047'></a><a href='#L1047'>1047</a>
|
|
1113
|
+
<a name='L1048'></a><a href='#L1048'>1048</a>
|
|
1114
|
+
<a name='L1049'></a><a href='#L1049'>1049</a>
|
|
1115
|
+
<a name='L1050'></a><a href='#L1050'>1050</a>
|
|
1116
|
+
<a name='L1051'></a><a href='#L1051'>1051</a>
|
|
1117
|
+
<a name='L1052'></a><a href='#L1052'>1052</a>
|
|
1118
|
+
<a name='L1053'></a><a href='#L1053'>1053</a>
|
|
1119
|
+
<a name='L1054'></a><a href='#L1054'>1054</a>
|
|
1120
|
+
<a name='L1055'></a><a href='#L1055'>1055</a>
|
|
1121
|
+
<a name='L1056'></a><a href='#L1056'>1056</a>
|
|
1122
|
+
<a name='L1057'></a><a href='#L1057'>1057</a>
|
|
1123
|
+
<a name='L1058'></a><a href='#L1058'>1058</a>
|
|
1124
|
+
<a name='L1059'></a><a href='#L1059'>1059</a>
|
|
1125
|
+
<a name='L1060'></a><a href='#L1060'>1060</a>
|
|
1126
|
+
<a name='L1061'></a><a href='#L1061'>1061</a>
|
|
1127
|
+
<a name='L1062'></a><a href='#L1062'>1062</a>
|
|
1128
|
+
<a name='L1063'></a><a href='#L1063'>1063</a>
|
|
1129
|
+
<a name='L1064'></a><a href='#L1064'>1064</a>
|
|
1130
|
+
<a name='L1065'></a><a href='#L1065'>1065</a>
|
|
1131
|
+
<a name='L1066'></a><a href='#L1066'>1066</a>
|
|
1132
|
+
<a name='L1067'></a><a href='#L1067'>1067</a>
|
|
1133
|
+
<a name='L1068'></a><a href='#L1068'>1068</a>
|
|
1134
|
+
<a name='L1069'></a><a href='#L1069'>1069</a>
|
|
1135
|
+
<a name='L1070'></a><a href='#L1070'>1070</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
1136
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1137
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1138
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1139
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1140
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1141
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1142
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1143
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1144
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1145
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1146
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1147
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1148
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1149
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1150
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1151
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1152
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1153
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1154
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1155
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1156
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1157
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1158
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1159
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1160
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1161
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1162
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1163
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1164
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1165
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1166
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1167
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1168
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1169
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1170
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1171
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1172
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1173
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1174
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1175
|
+
<span class="cline-any cline-yes">55x</span>
|
|
1176
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1177
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1178
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1179
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1180
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1181
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1182
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1183
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1184
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1185
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1186
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1187
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1188
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1189
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1190
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1191
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1192
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1193
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1194
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1195
|
+
<span class="cline-any cline-yes">102x</span>
|
|
1196
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1197
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1198
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1199
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1200
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1201
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1202
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1203
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1204
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1205
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1206
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1207
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1208
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1209
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1210
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1211
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1212
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1213
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1214
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1215
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1216
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1217
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1218
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1219
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1220
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1221
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1222
|
+
<span class="cline-any cline-yes">47x</span>
|
|
1223
|
+
<span class="cline-any cline-yes">29x</span>
|
|
1224
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1225
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1226
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1227
|
+
<span class="cline-any cline-yes">18x</span>
|
|
1228
|
+
<span class="cline-any cline-yes">18x</span>
|
|
1229
|
+
<span class="cline-any cline-yes">18x</span>
|
|
1230
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1231
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1232
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1233
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1234
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1235
|
+
<span class="cline-any cline-yes">34x</span>
|
|
1236
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1237
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1238
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1239
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1240
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1241
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1242
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1243
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1244
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1245
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1246
|
+
<span class="cline-any cline-yes">4714x</span>
|
|
1247
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1248
|
+
<span class="cline-any cline-yes">2190x</span>
|
|
1249
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1250
|
+
<span class="cline-any cline-yes">380x</span>
|
|
1251
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1252
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1253
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1254
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1255
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1256
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1257
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1258
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1259
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1260
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1261
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1262
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1263
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1264
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1265
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1266
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1267
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1268
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1269
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1270
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1271
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1272
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1273
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1274
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1275
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1276
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1277
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1278
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1279
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1280
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1281
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1282
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1283
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1284
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1285
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1286
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1287
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1288
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1289
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1290
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1291
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1292
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1293
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1294
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1295
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1296
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1297
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1298
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1299
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1300
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1301
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1302
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1303
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1304
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1305
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1306
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1307
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1308
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1309
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1310
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1311
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1312
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1313
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1314
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1315
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1316
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1317
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1318
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1319
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1320
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1321
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1322
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1323
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1324
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1325
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1326
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1327
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1328
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1329
|
+
<span class="cline-any cline-yes">2039x</span>
|
|
1330
|
+
<span class="cline-any cline-yes">2039x</span>
|
|
1331
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1332
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1333
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1334
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1335
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1336
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1337
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1338
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1339
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1340
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1341
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1342
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1343
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1344
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1345
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1346
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1347
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1348
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1349
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1350
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1351
|
+
<span class="cline-any cline-yes">40x</span>
|
|
1352
|
+
<span class="cline-any cline-yes">40x</span>
|
|
1353
|
+
<span class="cline-any cline-yes">40x</span>
|
|
1354
|
+
<span class="cline-any cline-yes">40x</span>
|
|
1355
|
+
<span class="cline-any cline-yes">40x</span>
|
|
1356
|
+
<span class="cline-any cline-yes">40x</span>
|
|
1357
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1358
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1359
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1360
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1361
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1362
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1363
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1364
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1365
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1366
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1367
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1368
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1369
|
+
<span class="cline-any cline-yes">40x</span>
|
|
1370
|
+
<span class="cline-any cline-yes">29x</span>
|
|
1371
|
+
<span class="cline-any cline-yes">29x</span>
|
|
1372
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1373
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1374
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1375
|
+
<span class="cline-any cline-yes">22x</span>
|
|
1376
|
+
<span class="cline-any cline-no"> </span>
|
|
1377
|
+
<span class="cline-any cline-no"> </span>
|
|
1378
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1379
|
+
<span class="cline-any cline-yes">29x</span>
|
|
1380
|
+
<span class="cline-any cline-yes">13x</span>
|
|
1381
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1382
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1383
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1384
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1385
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1386
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1387
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1388
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1389
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1390
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1391
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1392
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1393
|
+
<span class="cline-any cline-yes">40x</span>
|
|
1394
|
+
<span class="cline-any cline-yes">31x</span>
|
|
1395
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1396
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1397
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1398
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1399
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1400
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1401
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1402
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1403
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1404
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1405
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1406
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1407
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1408
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1409
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1410
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1411
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1412
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1413
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1414
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1415
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1416
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1417
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1418
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1419
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1420
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1421
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1422
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1423
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1424
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1425
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1426
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1427
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1428
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1429
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1430
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1431
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1432
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1433
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1434
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1435
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1436
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1437
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1438
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1439
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1440
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1441
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1442
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1443
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1444
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1445
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1446
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1447
|
+
<span class="cline-any cline-no"> </span>
|
|
1448
|
+
<span class="cline-any cline-no"> </span>
|
|
1449
|
+
<span class="cline-any cline-no"> </span>
|
|
1450
|
+
<span class="cline-any cline-no"> </span>
|
|
1451
|
+
<span class="cline-any cline-no"> </span>
|
|
1452
|
+
<span class="cline-any cline-no"> </span>
|
|
1453
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1454
|
+
<span class="cline-any cline-no"> </span>
|
|
1455
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1456
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1457
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1458
|
+
<span class="cline-any cline-yes">92x</span>
|
|
1459
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1460
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1461
|
+
<span class="cline-any cline-yes">82x</span>
|
|
1462
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1463
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1464
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1465
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1466
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1467
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1468
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1469
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1470
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1471
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1472
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1473
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1474
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1475
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1476
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1477
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1478
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1479
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1480
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1481
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1482
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1483
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1484
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1485
|
+
<span class="cline-any cline-yes">41x</span>
|
|
1486
|
+
<span class="cline-any cline-yes">32x</span>
|
|
1487
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1488
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1489
|
+
<span class="cline-any cline-yes">17x</span>
|
|
1490
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1491
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1492
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1493
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1494
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1495
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1496
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1497
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1498
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1499
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1500
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1501
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1502
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1503
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1504
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1505
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1506
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1507
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1508
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1509
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1510
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1511
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1512
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1513
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1514
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1515
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1516
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1517
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1518
|
+
<span class="cline-any cline-yes">86x</span>
|
|
1519
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1520
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1521
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1522
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1523
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1524
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1525
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1526
|
+
<span class="cline-any cline-yes">66x</span>
|
|
1527
|
+
<span class="cline-any cline-yes">51x</span>
|
|
1528
|
+
<span class="cline-any cline-yes">4358x</span>
|
|
1529
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1530
|
+
<span class="cline-any cline-yes">51x</span>
|
|
1531
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1532
|
+
<span class="cline-any cline-yes">51x</span>
|
|
1533
|
+
<span class="cline-any cline-yes">51x</span>
|
|
1534
|
+
<span class="cline-any cline-yes">15x</span>
|
|
1535
|
+
<span class="cline-any cline-yes">12x</span>
|
|
1536
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1537
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1538
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1539
|
+
<span class="cline-any cline-yes">1980x</span>
|
|
1540
|
+
<span class="cline-any cline-yes">1980x</span>
|
|
1541
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1542
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1543
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1544
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1545
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1546
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1547
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1548
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1549
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1550
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1551
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1552
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1553
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1554
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1555
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1556
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1557
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1558
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1559
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1560
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1561
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1562
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1563
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1564
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1565
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1566
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1567
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1568
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1569
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1570
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1571
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1572
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1573
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1574
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1575
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1576
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1577
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1578
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1579
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1580
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1581
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1582
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1583
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1584
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1585
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1586
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1587
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1588
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1589
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1590
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1591
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1592
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1593
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1594
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1595
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1596
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1597
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1598
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1599
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1600
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1601
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1602
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1603
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1604
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1605
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1606
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1607
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1608
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1609
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1610
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1611
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1612
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1613
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1614
|
+
<span class="cline-any cline-no"> </span>
|
|
1615
|
+
<span class="cline-any cline-no"> </span>
|
|
1616
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1617
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1618
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1619
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1620
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1621
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1622
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1623
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1624
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1625
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1626
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1627
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1628
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1629
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1630
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1631
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1632
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1633
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1634
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1635
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1636
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1637
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1638
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1639
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1640
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1641
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1642
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1643
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1644
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1645
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1646
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1647
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1648
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1649
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1650
|
+
<span class="cline-any cline-yes">13x</span>
|
|
1651
|
+
<span class="cline-any cline-yes">13x</span>
|
|
1652
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1653
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1654
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1655
|
+
<span class="cline-any cline-yes">13x</span>
|
|
1656
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1657
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1658
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1659
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1660
|
+
<span class="cline-any cline-yes">13x</span>
|
|
1661
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1662
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1663
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1664
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1665
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1666
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1667
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1668
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1669
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1670
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1671
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1672
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1673
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1674
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1675
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1676
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1677
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1678
|
+
<span class="cline-any cline-yes">102x</span>
|
|
1679
|
+
<span class="cline-any cline-yes">54x</span>
|
|
1680
|
+
<span class="cline-any cline-no"> </span>
|
|
1681
|
+
<span class="cline-any cline-no"> </span>
|
|
1682
|
+
<span class="cline-any cline-no"> </span>
|
|
1683
|
+
<span class="cline-any cline-no"> </span>
|
|
1684
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1685
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1686
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1687
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1688
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1689
|
+
<span class="cline-any cline-no"> </span>
|
|
1690
|
+
<span class="cline-any cline-no"> </span>
|
|
1691
|
+
<span class="cline-any cline-no"> </span>
|
|
1692
|
+
<span class="cline-any cline-no"> </span>
|
|
1693
|
+
<span class="cline-any cline-no"> </span>
|
|
1694
|
+
<span class="cline-any cline-no"> </span>
|
|
1695
|
+
<span class="cline-any cline-no"> </span>
|
|
1696
|
+
<span class="cline-any cline-no"> </span>
|
|
1697
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1698
|
+
<span class="cline-any cline-no"> </span>
|
|
1699
|
+
<span class="cline-any cline-no"> </span>
|
|
1700
|
+
<span class="cline-any cline-no"> </span>
|
|
1701
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1702
|
+
<span class="cline-any cline-no"> </span>
|
|
1703
|
+
<span class="cline-any cline-no"> </span>
|
|
1704
|
+
<span class="cline-any cline-no"> </span>
|
|
1705
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1706
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1707
|
+
<span class="cline-any cline-no"> </span>
|
|
1708
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1709
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1710
|
+
<span class="cline-any cline-yes">54x</span>
|
|
1711
|
+
<span class="cline-any cline-yes">54x</span>
|
|
1712
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1713
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1714
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1715
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1716
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1717
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1718
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1719
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1720
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1721
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1722
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1723
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1724
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1725
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1726
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1727
|
+
<span class="cline-any cline-yes">77x</span>
|
|
1728
|
+
<span class="cline-any cline-yes">15x</span>
|
|
1729
|
+
<span class="cline-any cline-yes">15x</span>
|
|
1730
|
+
<span class="cline-any cline-yes">15x</span>
|
|
1731
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1732
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1733
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1734
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1735
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1736
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1737
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1738
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1739
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1740
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1741
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1742
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1743
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1744
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1745
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1746
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1747
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1748
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1749
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1750
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1751
|
+
<span class="cline-any cline-yes">15x</span>
|
|
1752
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1753
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1754
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1755
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1756
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1757
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1758
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1759
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1760
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1761
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1762
|
+
<span class="cline-any cline-yes">34x</span>
|
|
1763
|
+
<span class="cline-any cline-yes">34x</span>
|
|
1764
|
+
<span class="cline-any cline-yes">34x</span>
|
|
1765
|
+
<span class="cline-any cline-yes">34x</span>
|
|
1766
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1767
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1768
|
+
<span class="cline-any cline-yes">34x</span>
|
|
1769
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1770
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1771
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1772
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1773
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1774
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1775
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1776
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1777
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1778
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1779
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1780
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1781
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1782
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1783
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1784
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1785
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1786
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1787
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1788
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1789
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1790
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1791
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1792
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1793
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1794
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1795
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1796
|
+
<span class="cline-any cline-no"> </span>
|
|
1797
|
+
<span class="cline-any cline-no"> </span>
|
|
1798
|
+
<span class="cline-any cline-no"> </span>
|
|
1799
|
+
<span class="cline-any cline-no"> </span>
|
|
1800
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1801
|
+
<span class="cline-any cline-no"> </span>
|
|
1802
|
+
<span class="cline-any cline-no"> </span>
|
|
1803
|
+
<span class="cline-any cline-no"> </span>
|
|
1804
|
+
<span class="cline-any cline-no"> </span>
|
|
1805
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1806
|
+
<span class="cline-any cline-no"> </span>
|
|
1807
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1808
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1809
|
+
<span class="cline-any cline-no"> </span>
|
|
1810
|
+
<span class="cline-any cline-no"> </span>
|
|
1811
|
+
<span class="cline-any cline-no"> </span>
|
|
1812
|
+
<span class="cline-any cline-no"> </span>
|
|
1813
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1814
|
+
<span class="cline-any cline-no"> </span>
|
|
1815
|
+
<span class="cline-any cline-no"> </span>
|
|
1816
|
+
<span class="cline-any cline-no"> </span>
|
|
1817
|
+
<span class="cline-any cline-no"> </span>
|
|
1818
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1819
|
+
<span class="cline-any cline-no"> </span>
|
|
1820
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1821
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1822
|
+
<span class="cline-any cline-no"> </span>
|
|
1823
|
+
<span class="cline-any cline-no"> </span>
|
|
1824
|
+
<span class="cline-any cline-no"> </span>
|
|
1825
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1826
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1827
|
+
<span class="cline-any cline-no"> </span>
|
|
1828
|
+
<span class="cline-any cline-no"> </span>
|
|
1829
|
+
<span class="cline-any cline-no"> </span>
|
|
1830
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1831
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1832
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1833
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1834
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1835
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1836
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1837
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1838
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1839
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1840
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1841
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1842
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1843
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1844
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1845
|
+
<span class="cline-any cline-no"> </span>
|
|
1846
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1847
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1848
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1849
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1850
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1851
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1852
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1853
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1854
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1855
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1856
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1857
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1858
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1859
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1860
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1861
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1862
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1863
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1864
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1865
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1866
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1867
|
+
<span class="cline-any cline-no"> </span>
|
|
1868
|
+
<span class="cline-any cline-no"> </span>
|
|
1869
|
+
<span class="cline-any cline-no"> </span>
|
|
1870
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1871
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1872
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1873
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1874
|
+
<span class="cline-any cline-no"> </span>
|
|
1875
|
+
<span class="cline-any cline-no"> </span>
|
|
1876
|
+
<span class="cline-any cline-no"> </span>
|
|
1877
|
+
<span class="cline-any cline-no"> </span>
|
|
1878
|
+
<span class="cline-any cline-no"> </span>
|
|
1879
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1880
|
+
<span class="cline-any cline-no"> </span>
|
|
1881
|
+
<span class="cline-any cline-no"> </span>
|
|
1882
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1883
|
+
<span class="cline-any cline-no"> </span>
|
|
1884
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1885
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1886
|
+
<span class="cline-any cline-no"> </span>
|
|
1887
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1888
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1889
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1890
|
+
<span class="cline-any cline-no"> </span>
|
|
1891
|
+
<span class="cline-any cline-no"> </span>
|
|
1892
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1893
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1894
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1895
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1896
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1897
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1898
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1899
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1900
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1901
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1902
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1903
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1904
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1905
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1906
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1907
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1908
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1909
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1910
|
+
<span class="cline-any cline-no"> </span>
|
|
1911
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1912
|
+
<span class="cline-any cline-no"> </span>
|
|
1913
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1914
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1915
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1916
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1917
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1918
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1919
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1920
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1921
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1922
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1923
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1924
|
+
<span class="cline-any cline-no"> </span>
|
|
1925
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1926
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1927
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1928
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1929
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1930
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1931
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1932
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1933
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1934
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1935
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1936
|
+
<span class="cline-any cline-no"> </span>
|
|
1937
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1938
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1939
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1940
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1941
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1942
|
+
<span class="cline-any cline-no"> </span>
|
|
1943
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1944
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1945
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1946
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1947
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1948
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1949
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1950
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1951
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1952
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1953
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1954
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1955
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1956
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1957
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1958
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1959
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1960
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1961
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1962
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1963
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1964
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1965
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1966
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1967
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1968
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1969
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1970
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1971
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1972
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1973
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1974
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1975
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1976
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1977
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1978
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1979
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1980
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1981
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1982
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1983
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1984
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1985
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1986
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1987
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1988
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1989
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1990
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1991
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1992
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1993
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1994
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1995
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1996
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1997
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1998
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1999
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2000
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2001
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2002
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2003
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2004
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2005
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2006
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2007
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2008
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2009
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2010
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2011
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2012
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2013
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2014
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2015
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2016
|
+
<span class="cline-any cline-yes">40x</span>
|
|
2017
|
+
<span class="cline-any cline-yes">25x</span>
|
|
2018
|
+
<span class="cline-any cline-yes">25x</span>
|
|
2019
|
+
<span class="cline-any cline-yes">25x</span>
|
|
2020
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2021
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2022
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2023
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2024
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2025
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2026
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2027
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2028
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2029
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2030
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2031
|
+
<span class="cline-any cline-yes">1x</span>
|
|
2032
|
+
<span class="cline-any cline-yes">1x</span>
|
|
2033
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2034
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2035
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2036
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2037
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2038
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2039
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2040
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2041
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2042
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2043
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2044
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2045
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2046
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2047
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2048
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2049
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2050
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2051
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2052
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2053
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2054
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2055
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2056
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2057
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2058
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2059
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2060
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2061
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2062
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2063
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2064
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2065
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2066
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2067
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2068
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2069
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2070
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2071
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2072
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2073
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2074
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2075
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2076
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2077
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2078
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2079
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2080
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2081
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2082
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2083
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2084
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2085
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2086
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2087
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2088
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2089
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2090
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2091
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2092
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2093
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2094
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2095
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2096
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2097
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2098
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2099
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2100
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2101
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2102
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2103
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2104
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2105
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2106
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2107
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2108
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2109
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2110
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2111
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2112
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2113
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2114
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2115
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2116
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2117
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2118
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2119
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2120
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2121
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2122
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2123
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2124
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2125
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2126
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2127
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2128
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2129
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2130
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2131
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2132
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2133
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2134
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2135
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2136
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2137
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2138
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2139
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2140
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2141
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2142
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2143
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2144
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2145
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2146
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2147
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2148
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2149
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2150
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2151
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2152
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2153
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2154
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2155
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2156
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2157
|
+
<span class="cline-any cline-yes">381x</span>
|
|
2158
|
+
<span class="cline-any cline-yes">381x</span>
|
|
2159
|
+
<span class="cline-any cline-yes">381x</span>
|
|
2160
|
+
<span class="cline-any cline-yes">381x</span>
|
|
2161
|
+
<span class="cline-any cline-yes">381x</span>
|
|
2162
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2163
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2164
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2165
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2166
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2167
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2168
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2169
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2170
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2171
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2172
|
+
<span class="cline-any cline-yes">1x</span>
|
|
2173
|
+
<span class="cline-any cline-no"> </span>
|
|
2174
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2175
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2176
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2177
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2178
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2179
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2180
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2181
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2182
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2183
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2184
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2185
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2186
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2187
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2188
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2189
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2190
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2191
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2192
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2193
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2194
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2195
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2196
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2197
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2198
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2199
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2200
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2201
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2202
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2203
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2204
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import {
|
|
2205
|
+
useCallback,
|
|
2206
|
+
useContext,
|
|
2207
|
+
useEffect,
|
|
2208
|
+
useId,
|
|
2209
|
+
useMemo,
|
|
2210
|
+
useRef,
|
|
2211
|
+
useState,
|
|
2212
|
+
type KeyboardEvent,
|
|
2213
|
+
type MouseEvent,
|
|
2214
|
+
type ReactNode,
|
|
2215
|
+
} from 'react';
|
|
2216
|
+
import { DashFormContext, useEngineVisibility } from '@dashforge/ui-core';
|
|
2217
|
+
import type { DashFormBridge, FieldRegistration } from '@dashforge/ui-core';
|
|
2218
|
+
import { useDashFieldMeta } from '@dashforge/forms';
|
|
2219
|
+
import { cn } from '../../utils/cn.js';
|
|
2220
|
+
import { useAccessState } from '../../hooks/useAccessState.js';
|
|
2221
|
+
import { resolveValidationState } from '../_shared/resolveValidationState.js';
|
|
2222
|
+
import { autocompleteVariants } from './autocomplete.variants.js';
|
|
2223
|
+
import type {
|
|
2224
|
+
AutocompleteOption,
|
|
2225
|
+
AutocompleteProps,
|
|
2226
|
+
AutocompleteValue,
|
|
2227
|
+
} from './autocomplete.types.js';
|
|
2228
|
+
|
|
2229
|
+
/**
|
|
2230
|
+
* Inline SVG icons used by the Autocomplete chrome (chip remove, clear,
|
|
2231
|
+
* dropdown caret). Stroke uses `currentColor` so the parent's `text-*`
|
|
2232
|
+
* propagates — same pattern as Checkbox's CheckIcon.
|
|
2233
|
+
*
|
|
2234
|
+
* Why inline SVG (not lucide / heroicons / unicode glyphs):
|
|
2235
|
+
* - Zero icon-library dependency: keeps `@dashforge/tw` self-contained.
|
|
2236
|
+
* - Crisp at every size (the unicode `×` / `▾` glyphs we shipped pre-
|
|
2237
|
+
* 0.2.2 rendered as chunky font characters that looked unpolished
|
|
2238
|
+
* next to the rest of the design system).
|
|
2239
|
+
* - SVG scales with parent font-size cleanly via `width="1em" height="1em"`.
|
|
2240
|
+
*
|
|
2241
|
+
* @internal
|
|
2242
|
+
*/
|
|
2243
|
+
function CloseIcon({ className }: { className?: string }) {
|
|
2244
|
+
return (
|
|
2245
|
+
<svg
|
|
2246
|
+
aria-hidden="true"
|
|
2247
|
+
viewBox="0 0 16 16"
|
|
2248
|
+
width="1em"
|
|
2249
|
+
height="1em"
|
|
2250
|
+
fill="none"
|
|
2251
|
+
className={className}
|
|
2252
|
+
>
|
|
2253
|
+
<path
|
|
2254
|
+
d="M4 4l8 8M12 4l-8 8"
|
|
2255
|
+
stroke="currentColor"
|
|
2256
|
+
strokeWidth="1.75"
|
|
2257
|
+
strokeLinecap="round"
|
|
2258
|
+
/>
|
|
2259
|
+
</svg>
|
|
2260
|
+
);
|
|
2261
|
+
}
|
|
2262
|
+
|
|
2263
|
+
function ChevronDownIcon({ className }: { className?: string }) {
|
|
2264
|
+
return (
|
|
2265
|
+
<svg
|
|
2266
|
+
aria-hidden="true"
|
|
2267
|
+
viewBox="0 0 16 16"
|
|
2268
|
+
width="1em"
|
|
2269
|
+
height="1em"
|
|
2270
|
+
fill="none"
|
|
2271
|
+
className={className}
|
|
2272
|
+
>
|
|
2273
|
+
<path
|
|
2274
|
+
d="M4 6l4 4 4-4"
|
|
2275
|
+
stroke="currentColor"
|
|
2276
|
+
strokeWidth="1.75"
|
|
2277
|
+
strokeLinecap="round"
|
|
2278
|
+
strokeLinejoin="round"
|
|
2279
|
+
/>
|
|
2280
|
+
</svg>
|
|
2281
|
+
);
|
|
2282
|
+
}
|
|
2283
|
+
|
|
2284
|
+
/**
|
|
2285
|
+
* Coerce a raw value (from bridge / props) into a canonical shape:
|
|
2286
|
+
*
|
|
2287
|
+
* - Multi-select: returns `string[]` (empty for null/undefined)
|
|
2288
|
+
* - Single-select: returns `string | null`
|
|
2289
|
+
*/
|
|
2290
|
+
function coerceValue(raw: unknown, isMulti: boolean): AutocompleteValue {
|
|
2291
|
+
if (isMulti) {
|
|
2292
|
+
if (raw == null) return [];
|
|
2293
|
+
if (Array.isArray(raw)) return raw.map(String);
|
|
2294
|
+
return [String(raw)];
|
|
2295
|
+
}
|
|
2296
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (raw == null) <span class="cstat-no" title="statement not covered" >return null;</span>
|
|
2297
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (Array.isArray(raw)) return raw[0] != null ? String(raw[0]) : null;
|
|
2298
|
+
return String(raw);
|
|
2299
|
+
}
|
|
2300
|
+
|
|
2301
|
+
/** Derive a Set of selected keys from a canonical value. */
|
|
2302
|
+
function getSelectedKeys(value: AutocompleteValue): Set<string> {
|
|
2303
|
+
if (value == null) return new Set();
|
|
2304
|
+
if (Array.isArray(value)) return new Set(value);
|
|
2305
|
+
return new Set([value]);
|
|
2306
|
+
}
|
|
2307
|
+
|
|
2308
|
+
// Default accessor implementations. Assume `AutocompleteOption` shape —
|
|
2309
|
+
// safe because the generic defaults to that shape, and consumers using
|
|
2310
|
+
// a custom `TOption` must pass their own `getOptionValue` / `Label`.
|
|
2311
|
+
// We type the input as `unknown` here to keep the defaults assignable
|
|
2312
|
+
// to `(o: TOption) => …` for arbitrary `TOption` without forcing a cast
|
|
2313
|
+
// at every call site.
|
|
2314
|
+
const defaultGetOptionValue = (option: unknown): string =>
|
|
2315
|
+
(option as AutocompleteOption).value;
|
|
2316
|
+
const defaultGetOptionLabel = (option: unknown) =>
|
|
2317
|
+
(option as AutocompleteOption).label;
|
|
2318
|
+
const defaultGetOptionDisabled = (option: unknown): boolean =>
|
|
2319
|
+
Boolean((option as AutocompleteOption).disabled);
|
|
2320
|
+
|
|
2321
|
+
/**
|
|
2322
|
+
* Dashforge TW Autocomplete — bridge-integrated single-select combobox.
|
|
2323
|
+
*
|
|
2324
|
+
* **Implementation note (F5-A, rev. 2)**
|
|
2325
|
+
*
|
|
2326
|
+
* The first revision wrapped `react-aria-components`' `<ComboBox>` to get
|
|
2327
|
+
* AAA-grade a11y for free. In practice React Aria's internal state
|
|
2328
|
+
* machine fought every controlled-state pattern we tried (the input text
|
|
2329
|
+
* would not clear when `selectedKey` went to `null`, even with a forced
|
|
2330
|
+
* remount via `key` bumping). To get deterministic behaviour we own all
|
|
2331
|
+
* of the state ourselves:
|
|
2332
|
+
*
|
|
2333
|
+
* - `inputValue` — the visible text in the `<input>`
|
|
2334
|
+
* - `isOpen` — popover visibility
|
|
2335
|
+
* - `highlightedIndex` — keyboard navigation cursor
|
|
2336
|
+
*
|
|
2337
|
+
* A11y is still solid:
|
|
2338
|
+
* - `role="combobox"` + `aria-autocomplete="list"` on the input
|
|
2339
|
+
* - `aria-expanded`, `aria-controls`, `aria-activedescendant`
|
|
2340
|
+
* - `role="listbox"` / `role="option"` with `aria-selected`
|
|
2341
|
+
* - Full keyboard nav (↑/↓ navigate, Enter selects, Escape closes,
|
|
2342
|
+
* Home/End jump, Tab closes, click-outside closes)
|
|
2343
|
+
* - Required field gets `aria-required="true"`
|
|
2344
|
+
*
|
|
2345
|
+
* F5-A scope: single-select, static options, contains-substring filter
|
|
2346
|
+
* (case-insensitive). Multi-select, free-solo text, generic option
|
|
2347
|
+
* shapes, and async runtime options (`optionsFromFieldData`) are
|
|
2348
|
+
* deferred to F5-A-bis.
|
|
2349
|
+
*/
|
|
2350
|
+
export function Autocomplete<TOption = AutocompleteOption>(
|
|
2351
|
+
props: AutocompleteProps<TOption>
|
|
2352
|
+
) {
|
|
2353
|
+
const {
|
|
2354
|
+
name,
|
|
2355
|
+
rules,
|
|
2356
|
+
options,
|
|
2357
|
+
visibleWhen,
|
|
2358
|
+
layout = 'stacked',
|
|
2359
|
+
size,
|
|
2360
|
+
label,
|
|
2361
|
+
helperText,
|
|
2362
|
+
required,
|
|
2363
|
+
error,
|
|
2364
|
+
disabled,
|
|
2365
|
+
fullWidth,
|
|
2366
|
+
access,
|
|
2367
|
+
sx,
|
|
2368
|
+
slotProps,
|
|
2369
|
+
placeholder,
|
|
2370
|
+
value: explicitValue,
|
|
2371
|
+
defaultValue,
|
|
2372
|
+
onValueChange,
|
|
2373
|
+
emptyMessage = 'No matching options',
|
|
2374
|
+
getOptionValue = defaultGetOptionValue as (option: TOption) => string,
|
|
2375
|
+
getOptionLabel = defaultGetOptionLabel as (option: TOption) => ReactNode,
|
|
2376
|
+
getOptionDisabled = defaultGetOptionDisabled as (option: TOption) => boolean,
|
|
2377
|
+
getOptionKey,
|
|
2378
|
+
multiple,
|
|
2379
|
+
freeSolo,
|
|
2380
|
+
loadOptions,
|
|
2381
|
+
loadDebounceMs = 250,
|
|
2382
|
+
loadingMessage = 'Loading…',
|
|
2383
|
+
} = props;
|
|
2384
|
+
|
|
2385
|
+
const isMulti = Boolean(multiple);
|
|
2386
|
+
|
|
2387
|
+
// Default the React-key accessor to `getOptionValue` (typical case:
|
|
2388
|
+
// value is unique). Consumers override only when distinct option
|
|
2389
|
+
// records can share the same persisted value.
|
|
2390
|
+
const resolveOptionKey = getOptionKey ?? getOptionValue;
|
|
2391
|
+
|
|
2392
|
+
/**
|
|
2393
|
+
* Resolve the string label of an option, if it is a string. Returns
|
|
2394
|
+
* `undefined` for non-string labels (e.g., `<span>`) so callers can
|
|
2395
|
+
* fall back to the persisted value for `textValue` / input text.
|
|
2396
|
+
*/
|
|
2397
|
+
const labelAsString = (option: TOption): string | undefined => {
|
|
2398
|
+
const lbl = getOptionLabel(option);
|
|
2399
|
+
return typeof lbl === 'string' ? lbl : <span class="branch-1 cbranch-no" title="branch not covered" >undefined;</span>
|
|
2400
|
+
};
|
|
2401
|
+
|
|
2402
|
+
// ───── Hooks (unconditional) ─────
|
|
2403
|
+
const bridge = useContext(DashFormContext) as DashFormBridge | null;
|
|
2404
|
+
const isVisible = useEngineVisibility(bridge?.engine, visibleWhen);
|
|
2405
|
+
useDashFieldMeta(name);
|
|
2406
|
+
const accessState = useAccessState(access);
|
|
2407
|
+
|
|
2408
|
+
const baseId = useId();
|
|
2409
|
+
const labelId = `${baseId}-label`;
|
|
2410
|
+
const helperId = `${baseId}-help`;
|
|
2411
|
+
const listboxId = `${baseId}-listbox`;
|
|
2412
|
+
const optionIdPrefix = `${baseId}-opt-`;
|
|
2413
|
+
|
|
2414
|
+
// StrictMode-safe unregister-on-unmount
|
|
2415
|
+
const unregisterRef = useRef({ bridge, name });
|
|
2416
|
+
unregisterRef.current = { bridge, name };
|
|
2417
|
+
const isMountedRef = useRef(false);
|
|
2418
|
+
|
|
2419
|
+
useEffect(() => {
|
|
2420
|
+
isMountedRef.current = true;
|
|
2421
|
+
return () => {
|
|
2422
|
+
isMountedRef.current = false;
|
|
2423
|
+
const { bridge: cap, name: capName } = unregisterRef.current;
|
|
2424
|
+
queueMicrotask(() => {
|
|
2425
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (!isMountedRef.current) cap?.unregister?.(capName);
|
|
2426
|
+
});
|
|
2427
|
+
};
|
|
2428
|
+
}, []);
|
|
2429
|
+
|
|
2430
|
+
// ───── Local UI state (we own EVERYTHING) ─────
|
|
2431
|
+
|
|
2432
|
+
/**
|
|
2433
|
+
* The visible text in the `<input>`. Seeded from the initial value
|
|
2434
|
+
* (single-select only — in multi mode the chips show the selection
|
|
2435
|
+
* separately and the input always starts empty).
|
|
2436
|
+
*/
|
|
2437
|
+
const [inputValue, setInputValue] = useState<string>(() => {
|
|
2438
|
+
if (isMulti) return '';
|
|
2439
|
+
let initialKey: string | null = null;
|
|
2440
|
+
if (explicitValue !== undefined) {
|
|
2441
|
+
initialKey = typeof explicitValue === 'string' ? explicitValue : <span class="branch-1 cbranch-no" title="branch not covered" >null;</span>
|
|
2442
|
+
} else if (defaultValue !== undefined) {
|
|
2443
|
+
initialKey = typeof defaultValue === 'string' ? defaultValue : <span class="branch-1 cbranch-no" title="branch not covered" >null;</span>
|
|
2444
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>} else if (bridge?.register) {
|
|
2445
|
+
const bv = <span class="cstat-no" title="statement not covered" >bridge.getValue(name);</span>
|
|
2446
|
+
<span class="cstat-no" title="statement not covered" > initialKey = bv == null ? null : String(bv);</span>
|
|
2447
|
+
}
|
|
2448
|
+
if (initialKey == null) return '';
|
|
2449
|
+
const found = options.find((opt) => getOptionValue(opt) === initialKey);
|
|
2450
|
+
// Free-solo: if the initial key doesn't match any option, fall back
|
|
2451
|
+
// to the key string itself (it IS the user-visible text).
|
|
2452
|
+
return found
|
|
2453
|
+
? labelAsString(found) ?? (<span class="branch-1 cbranch-no" title="branch not covered" >freeSolo ? initialKey : '')</span>
|
|
2454
|
+
: freeSolo
|
|
2455
|
+
? initialKey
|
|
2456
|
+
: <span class="branch-1 cbranch-no" title="branch not covered" >'';</span>
|
|
2457
|
+
});
|
|
2458
|
+
|
|
2459
|
+
/** Uncontrolled-mode internal selection (form mode uses the bridge). */
|
|
2460
|
+
const [uncontrolledValue, setUncontrolledValue] = useState<AutocompleteValue>(
|
|
2461
|
+
() => {
|
|
2462
|
+
if (explicitValue !== undefined) return coerceValue(explicitValue, isMulti);
|
|
2463
|
+
if (defaultValue !== undefined) return coerceValue(defaultValue, isMulti);
|
|
2464
|
+
return isMulti ? [] : null;
|
|
2465
|
+
}
|
|
2466
|
+
);
|
|
2467
|
+
|
|
2468
|
+
/**
|
|
2469
|
+
* Whether the user has interacted with the field in uncontrolled mode.
|
|
2470
|
+
* Before first interaction, `defaultValue` wins (so a rerender with a
|
|
2471
|
+
* new `defaultValue` is reflected in `resolvedValue` / `inputValue`).
|
|
2472
|
+
* After first interaction, the user's choice (stored in
|
|
2473
|
+
* `uncontrolledValue` / `inputValue`) wins.
|
|
2474
|
+
*/
|
|
2475
|
+
const [hasInteracted, setHasInteracted] = useState(false);
|
|
2476
|
+
|
|
2477
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
2478
|
+
const [highlightedIndex, setHighlightedIndex] = useState(-1);
|
|
2479
|
+
|
|
2480
|
+
// Async-options state (only used when `loadOptions` is provided).
|
|
2481
|
+
// - `asyncOptions` is `null` before the first fetch resolves; after,
|
|
2482
|
+
// it holds whatever the loader returned. It always takes
|
|
2483
|
+
// precedence over the static `options` prop once non-null.
|
|
2484
|
+
// - `isLoading` true between a debounce-firing fetch and its
|
|
2485
|
+
// resolution.
|
|
2486
|
+
const [asyncOptions, setAsyncOptions] = useState<TOption[] | null>(null);
|
|
2487
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
2488
|
+
|
|
2489
|
+
const rootRef = useRef<HTMLDivElement | null>(null);
|
|
2490
|
+
const inputRef = useRef<HTMLInputElement | null>(null);
|
|
2491
|
+
const listboxRef = useRef<HTMLUListElement | null>(null);
|
|
2492
|
+
/**
|
|
2493
|
+
* Monotonic counter for the in-flight `loadOptions` fetch so a
|
|
2494
|
+
* later-typed query can't get overtaken by a slower earlier fetch.
|
|
2495
|
+
* Each fire bumps the counter; only the response whose generation
|
|
2496
|
+
* matches the current counter is allowed to commit state.
|
|
2497
|
+
*/
|
|
2498
|
+
const fetchGenRef = useRef(0);
|
|
2499
|
+
|
|
2500
|
+
// ───── Derived (no hooks below this point can be skipped) ─────
|
|
2501
|
+
//
|
|
2502
|
+
// Everything in this block runs every render so the hooks below
|
|
2503
|
+
// (useMemo / useCallback / useEffect) stay above any early-return
|
|
2504
|
+
// guards — see rules of hooks.
|
|
2505
|
+
|
|
2506
|
+
const effectiveDisabled = Boolean(disabled) || accessState.disabled;
|
|
2507
|
+
const effectiveReadOnly = accessState.readonly;
|
|
2508
|
+
const isFormMode = Boolean(bridge?.register);
|
|
2509
|
+
|
|
2510
|
+
let resolvedError = error;
|
|
2511
|
+
let resolvedHelperText: typeof helperText = helperText;
|
|
2512
|
+
let registration: FieldRegistration | null = null;
|
|
2513
|
+
let resolvedValue: AutocompleteValue;
|
|
2514
|
+
|
|
2515
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (isFormMode && <span class="branch-1 cbranch-no" title="branch not covered" >bridge) {</span>
|
|
2516
|
+
<span class="cstat-no" title="statement not covered" > registration = bridge.register(name, rules);</span>
|
|
2517
|
+
const <span class="cstat-no" title="statement not covered" >validation = resolveValidationState(name, bridge, error, helperText);</span>
|
|
2518
|
+
<span class="cstat-no" title="statement not covered" > resolvedError = validation.error;</span>
|
|
2519
|
+
<span class="cstat-no" title="statement not covered" > resolvedHelperText = validation.helperText;</span>
|
|
2520
|
+
<span class="cstat-no" title="statement not covered" > if (explicitValue !== undefined) {</span>
|
|
2521
|
+
<span class="cstat-no" title="statement not covered" > resolvedValue = coerceValue(explicitValue, isMulti);</span>
|
|
2522
|
+
} else {
|
|
2523
|
+
<span class="cstat-no" title="statement not covered" > resolvedValue = coerceValue(bridge.getValue(name), isMulti);</span>
|
|
2524
|
+
}
|
|
2525
|
+
} else if (explicitValue !== undefined) {
|
|
2526
|
+
resolvedValue = coerceValue(explicitValue, isMulti);
|
|
2527
|
+
} else if (!hasInteracted && defaultValue !== undefined) {
|
|
2528
|
+
resolvedValue = coerceValue(defaultValue, isMulti);
|
|
2529
|
+
} else {
|
|
2530
|
+
resolvedValue = uncontrolledValue;
|
|
2531
|
+
}
|
|
2532
|
+
|
|
2533
|
+
// Set of currently-selected keys. Always exists (empty Set when no
|
|
2534
|
+
// selection) — internal lookups can call `.has(key)` without null
|
|
2535
|
+
// checks.
|
|
2536
|
+
const selectedKeys = getSelectedKeys(resolvedValue);
|
|
2537
|
+
// Convenience: for the clear button visibility + the "should keep
|
|
2538
|
+
// popover open after pick" decision.
|
|
2539
|
+
const hasAnySelection = selectedKeys.size > 0;
|
|
2540
|
+
// Single-select compatibility: the one selected key (null in multi
|
|
2541
|
+
// or when nothing is picked).
|
|
2542
|
+
const singleSelectedKey =
|
|
2543
|
+
!isMulti && typeof resolvedValue === 'string' ? resolvedValue : null;
|
|
2544
|
+
|
|
2545
|
+
// Visible input value:
|
|
2546
|
+
// - Multi-select: always the locally-managed `inputValue` (selection
|
|
2547
|
+
// is rendered as chips, not echoed in the input).
|
|
2548
|
+
// - Single-select, before first interaction: derive from `resolvedValue`
|
|
2549
|
+
// so a rerender with a new `defaultValue` is reflected immediately.
|
|
2550
|
+
// - Single-select, after first interaction: trust `inputValue` (which
|
|
2551
|
+
// `commitSelection` + `handleInputChange` keep in sync).
|
|
2552
|
+
let displayInputValue: string = inputValue;
|
|
2553
|
+
if (!isMulti && !hasInteracted) {
|
|
2554
|
+
if (singleSelectedKey == null) {
|
|
2555
|
+
displayInputValue = '';
|
|
2556
|
+
} else {
|
|
2557
|
+
const found = options.find(
|
|
2558
|
+
(opt) => getOptionValue(opt) === singleSelectedKey
|
|
2559
|
+
);
|
|
2560
|
+
const found_label = found ? labelAsString(found) : undefined;
|
|
2561
|
+
if (found_label !== undefined) {
|
|
2562
|
+
displayInputValue = found_label;
|
|
2563
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>} else if (freeSolo) {
|
|
2564
|
+
// No matching option ⇒ this is a free-solo value; the key
|
|
2565
|
+
// itself is the displayable text.
|
|
2566
|
+
displayInputValue = singleSelectedKey;
|
|
2567
|
+
}
|
|
2568
|
+
}
|
|
2569
|
+
}
|
|
2570
|
+
|
|
2571
|
+
// ───── Effective options source ─────
|
|
2572
|
+
//
|
|
2573
|
+
// Precedence: live async results > static `options` prop.
|
|
2574
|
+
//
|
|
2575
|
+
// While `loadOptions` is configured, the SERVER is responsible for
|
|
2576
|
+
// filtering, so the client-side `contains` filter below is bypassed
|
|
2577
|
+
// (using it would double-filter and hide rows the server intentionally
|
|
2578
|
+
// returned).
|
|
2579
|
+
const effectiveOptions: TOption[] =
|
|
2580
|
+
loadOptions && asyncOptions !== null ? asyncOptions : options;
|
|
2581
|
+
const useServerFilter = Boolean(loadOptions);
|
|
2582
|
+
|
|
2583
|
+
// ───── Filtering ─────
|
|
2584
|
+
const filteredOptions = useMemo<TOption[]>(() => {
|
|
2585
|
+
// Async mode: trust the server's filter; never apply a client-side
|
|
2586
|
+
// one on top.
|
|
2587
|
+
if (useServerFilter) return effectiveOptions;
|
|
2588
|
+
|
|
2589
|
+
// Single-select: when the field is closed and the input shows the
|
|
2590
|
+
// exact selected label, show the FULL list on the next open (rather
|
|
2591
|
+
// than the single-match filter the label would produce).
|
|
2592
|
+
//
|
|
2593
|
+
// Multi-select: the input value is purely the filter query (the
|
|
2594
|
+
// selection lives in the chips), so this short-circuit doesn't apply.
|
|
2595
|
+
if (!isMulti) {
|
|
2596
|
+
const selectedOpt = effectiveOptions.find(
|
|
2597
|
+
(o) => getOptionValue(o) === singleSelectedKey
|
|
2598
|
+
);
|
|
2599
|
+
const selectedLabel = selectedOpt ? labelAsString(selectedOpt) : undefined;
|
|
2600
|
+
const isShowingSelected =
|
|
2601
|
+
selectedLabel !== undefined && selectedLabel === displayInputValue;
|
|
2602
|
+
if (!displayInputValue || isShowingSelected) return effectiveOptions;
|
|
2603
|
+
} else if (!displayInputValue) {
|
|
2604
|
+
return effectiveOptions;
|
|
2605
|
+
}
|
|
2606
|
+
const query = displayInputValue.toLowerCase();
|
|
2607
|
+
return effectiveOptions.filter((opt) => {
|
|
2608
|
+
const text = labelAsString(opt) ?? <span class="branch-1 cbranch-no" title="branch not covered" >getOptionValue(opt);</span>
|
|
2609
|
+
return text.toLowerCase().includes(query);
|
|
2610
|
+
});
|
|
2611
|
+
// Accessors omitted by design — see commitSelection useCallback comment.
|
|
2612
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
2613
|
+
}, [
|
|
2614
|
+
effectiveOptions,
|
|
2615
|
+
displayInputValue,
|
|
2616
|
+
singleSelectedKey,
|
|
2617
|
+
isMulti,
|
|
2618
|
+
useServerFilter,
|
|
2619
|
+
]);
|
|
2620
|
+
|
|
2621
|
+
// ───── Helpers ─────
|
|
2622
|
+
|
|
2623
|
+
/**
|
|
2624
|
+
* Commit a value change to the bridge / state.
|
|
2625
|
+
*
|
|
2626
|
+
* **Single-select**: `next` is the new selected key, or `null` to
|
|
2627
|
+
* clear. Replaces the previous selection.
|
|
2628
|
+
*
|
|
2629
|
+
* **Multi-select**:
|
|
2630
|
+
* - `next === null` → clear all (emit `[]`).
|
|
2631
|
+
* - `next === <key>` → toggle that key in the selection set.
|
|
2632
|
+
*
|
|
2633
|
+
* Sync to `inputValue`:
|
|
2634
|
+
* - Single + non-null key → write the option's label into the input.
|
|
2635
|
+
* - Single + null → empty the input.
|
|
2636
|
+
* - Multi → always clear the input (the filter query is irrelevant
|
|
2637
|
+
* once a chip has been added).
|
|
2638
|
+
*/
|
|
2639
|
+
const commitSelection = useCallback(
|
|
2640
|
+
(next: string | null) => {
|
|
2641
|
+
// 1) Mark dirty so `defaultValue` no longer takes precedence.
|
|
2642
|
+
setHasInteracted(true);
|
|
2643
|
+
|
|
2644
|
+
// 2) Compute the new persisted value.
|
|
2645
|
+
let nextValue: AutocompleteValue;
|
|
2646
|
+
if (isMulti) {
|
|
2647
|
+
if (next == null) {
|
|
2648
|
+
nextValue = [];
|
|
2649
|
+
} else {
|
|
2650
|
+
const set = new Set(selectedKeys);
|
|
2651
|
+
if (set.has(next)) set.delete(next);
|
|
2652
|
+
else set.add(next);
|
|
2653
|
+
nextValue = Array.from(set);
|
|
2654
|
+
}
|
|
2655
|
+
// Multi mode: clear the filter input after every toggle.
|
|
2656
|
+
setInputValue('');
|
|
2657
|
+
} else {
|
|
2658
|
+
nextValue = next;
|
|
2659
|
+
// Single mode: sync the input label.
|
|
2660
|
+
if (next == null) {
|
|
2661
|
+
setInputValue('');
|
|
2662
|
+
} else {
|
|
2663
|
+
// Look up the label in the EFFECTIVE option pool (static
|
|
2664
|
+
// `options` + async `asyncOptions` when `loadOptions` is
|
|
2665
|
+
// configured). Looking only at the static `options` here
|
|
2666
|
+
// means async-loaded picks never update the input — the
|
|
2667
|
+
// user sees their search query stick instead of the
|
|
2668
|
+
// selected label after click. Same lookup logic mirrored in
|
|
2669
|
+
// `displayInputValue` so the two paths can't drift.
|
|
2670
|
+
const pool = loadOptions && <span class="branch-1 cbranch-no" title="branch not covered" >asyncOptions !== null</span>
|
|
2671
|
+
? <span class="branch-0 cbranch-no" title="branch not covered" >asyncOptions</span>
|
|
2672
|
+
: options;
|
|
2673
|
+
const found = pool.find((opt) => getOptionValue(opt) === next);
|
|
2674
|
+
const found_label = found ? labelAsString(found) : undefined;
|
|
2675
|
+
if (found_label !== undefined) {
|
|
2676
|
+
setInputValue(found_label);
|
|
2677
|
+
}
|
|
2678
|
+
}
|
|
2679
|
+
}
|
|
2680
|
+
|
|
2681
|
+
// 3) Persist.
|
|
2682
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (isFormMode && <span class="branch-1 cbranch-no" title="branch not covered" >bridge) {</span>
|
|
2683
|
+
<span class="cstat-no" title="statement not covered" > bridge.setValue?.(name, nextValue);</span>
|
|
2684
|
+
<span class="cstat-no" title="statement not covered" > void registration?.onChange?.({</span>
|
|
2685
|
+
target: {
|
|
2686
|
+
name,
|
|
2687
|
+
// RHF + native form: array values are passed through as-is
|
|
2688
|
+
// (RHF accepts any shape); the empty string fallback for
|
|
2689
|
+
// null preserves the single-select contract.
|
|
2690
|
+
value: nextValue == null ? '' : (nextValue as unknown as string),
|
|
2691
|
+
},
|
|
2692
|
+
type: 'change',
|
|
2693
|
+
});
|
|
2694
|
+
} else if (explicitValue === undefined) {
|
|
2695
|
+
setUncontrolledValue(nextValue);
|
|
2696
|
+
}
|
|
2697
|
+
|
|
2698
|
+
// 4) Notify consumer.
|
|
2699
|
+
onValueChange?.(nextValue);
|
|
2700
|
+
},
|
|
2701
|
+
// Accessors omitted by design — see filteredOptions useMemo comment.
|
|
2702
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
2703
|
+
[
|
|
2704
|
+
options,
|
|
2705
|
+
asyncOptions,
|
|
2706
|
+
loadOptions,
|
|
2707
|
+
isFormMode,
|
|
2708
|
+
bridge,
|
|
2709
|
+
name,
|
|
2710
|
+
registration,
|
|
2711
|
+
explicitValue,
|
|
2712
|
+
onValueChange,
|
|
2713
|
+
isMulti,
|
|
2714
|
+
selectedKeys,
|
|
2715
|
+
]
|
|
2716
|
+
);
|
|
2717
|
+
|
|
2718
|
+
const openPopover = useCallback(() => {
|
|
2719
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (effectiveDisabled || effectiveReadOnly) <span class="cstat-no" title="statement not covered" >return;</span>
|
|
2720
|
+
setIsOpen(true);
|
|
2721
|
+
// Highlight the (single-)selected item on open, falling back to the
|
|
2722
|
+
// first item. In multi mode, always start at the first visible item.
|
|
2723
|
+
const selectedIdx =
|
|
2724
|
+
!isMulti && singleSelectedKey
|
|
2725
|
+
? filteredOptions.findIndex(
|
|
2726
|
+
(o) => getOptionValue(o) === singleSelectedKey
|
|
2727
|
+
)
|
|
2728
|
+
: -1;
|
|
2729
|
+
setHighlightedIndex(selectedIdx >= 0 ? selectedIdx : 0);
|
|
2730
|
+
// Accessors omitted by design — see filteredOptions useMemo comment.
|
|
2731
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
2732
|
+
}, [
|
|
2733
|
+
effectiveDisabled,
|
|
2734
|
+
effectiveReadOnly,
|
|
2735
|
+
filteredOptions,
|
|
2736
|
+
singleSelectedKey,
|
|
2737
|
+
isMulti,
|
|
2738
|
+
]);
|
|
2739
|
+
|
|
2740
|
+
const closePopover = useCallback(() => {
|
|
2741
|
+
setIsOpen(false);
|
|
2742
|
+
setHighlightedIndex(-1);
|
|
2743
|
+
}, []);
|
|
2744
|
+
|
|
2745
|
+
// ───── Click-outside ─────
|
|
2746
|
+
useEffect(() => {
|
|
2747
|
+
if (!isOpen) return;
|
|
2748
|
+
const handlePointerDown = <span class="fstat-no" title="function not covered" >(e</span>vent: globalThis.MouseEvent) => {
|
|
2749
|
+
const root = <span class="cstat-no" title="statement not covered" >rootRef.current;</span>
|
|
2750
|
+
<span class="cstat-no" title="statement not covered" > if (!root) <span class="cstat-no" title="statement not covered" >return;</span></span>
|
|
2751
|
+
<span class="cstat-no" title="statement not covered" > if (root.contains(event.target as Node)) <span class="cstat-no" title="statement not covered" >return;</span></span>
|
|
2752
|
+
<span class="cstat-no" title="statement not covered" > closePopover();</span>
|
|
2753
|
+
// Multi mode: just clear the filter query (chips remain).
|
|
2754
|
+
// Single + free-solo: commit the typed text as the value (the
|
|
2755
|
+
// user's text IS the truth) — leave input alone afterwards.
|
|
2756
|
+
// Single (no free-solo): revert input to the selected option's
|
|
2757
|
+
// label or empty.
|
|
2758
|
+
<span class="cstat-no" title="statement not covered" > if (isMulti) {</span>
|
|
2759
|
+
<span class="cstat-no" title="statement not covered" > setInputValue('');</span>
|
|
2760
|
+
<span class="cstat-no" title="statement not covered" > } else if (freeSolo && inputValue.trim() !== '') {</span>
|
|
2761
|
+
const typed = <span class="cstat-no" title="statement not covered" >inputValue.trim();</span>
|
|
2762
|
+
const matched = <span class="cstat-no" title="statement not covered" >options.find(<span class="fstat-no" title="function not covered" >(o</span>) => <span class="cstat-no" title="statement not covered" >labelAsString(o) === typed)</span>;</span>
|
|
2763
|
+
const nextKey = <span class="cstat-no" title="statement not covered" >matched ? getOptionValue(matched) : typed;</span>
|
|
2764
|
+
<span class="cstat-no" title="statement not covered" > if (singleSelectedKey !== nextKey) {</span>
|
|
2765
|
+
<span class="cstat-no" title="statement not covered" > commitSelection(nextKey);</span>
|
|
2766
|
+
}
|
|
2767
|
+
<span class="cstat-no" title="statement not covered" > } else if (singleSelectedKey) {</span>
|
|
2768
|
+
const selected = <span class="cstat-no" title="statement not covered" >options.find(</span>
|
|
2769
|
+
<span class="fstat-no" title="function not covered" > (o</span>) => <span class="cstat-no" title="statement not covered" >getOptionValue(o) === singleSelectedKey</span>
|
|
2770
|
+
);
|
|
2771
|
+
const selected_label = <span class="cstat-no" title="statement not covered" >selected ? labelAsString(selected) : undefined;</span>
|
|
2772
|
+
<span class="cstat-no" title="statement not covered" > if (selected_label !== undefined) {</span>
|
|
2773
|
+
<span class="cstat-no" title="statement not covered" > setInputValue(selected_label);</span>
|
|
2774
|
+
}
|
|
2775
|
+
} else {
|
|
2776
|
+
<span class="cstat-no" title="statement not covered" > setInputValue('');</span>
|
|
2777
|
+
}
|
|
2778
|
+
};
|
|
2779
|
+
document.addEventListener('mousedown', handlePointerDown);
|
|
2780
|
+
return () => document.removeEventListener('mousedown', handlePointerDown);
|
|
2781
|
+
// Accessors omitted by design — see filteredOptions useMemo comment.
|
|
2782
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
2783
|
+
}, [
|
|
2784
|
+
isOpen,
|
|
2785
|
+
closePopover,
|
|
2786
|
+
options,
|
|
2787
|
+
singleSelectedKey,
|
|
2788
|
+
isMulti,
|
|
2789
|
+
freeSolo,
|
|
2790
|
+
inputValue,
|
|
2791
|
+
commitSelection,
|
|
2792
|
+
]);
|
|
2793
|
+
|
|
2794
|
+
// ───── Async option loading (debounced) ─────
|
|
2795
|
+
useEffect(() => {
|
|
2796
|
+
if (!loadOptions) return;
|
|
2797
|
+
const myGen = ++fetchGenRef.current;
|
|
2798
|
+
setIsLoading(true);
|
|
2799
|
+
const timer = setTimeout(() => {
|
|
2800
|
+
// Bail if the user re-typed during the debounce window — a newer
|
|
2801
|
+
// generation has already been kicked off.
|
|
2802
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (myGen !== fetchGenRef.current) <span class="cstat-no" title="statement not covered" >return;</span>
|
|
2803
|
+
Promise.resolve(loadOptions(inputValue))
|
|
2804
|
+
.then((next) => {
|
|
2805
|
+
if (myGen === fetchGenRef.current) {
|
|
2806
|
+
setAsyncOptions(next);
|
|
2807
|
+
setIsLoading(false);
|
|
2808
|
+
}
|
|
2809
|
+
})
|
|
2810
|
+
.catch(() => {
|
|
2811
|
+
// Surface failures as an empty list; consumer's preferred
|
|
2812
|
+
// error UI can be threaded via `emptyMessage` once they
|
|
2813
|
+
// detect their own loader fault upstream.
|
|
2814
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (myGen === fetchGenRef.current) {
|
|
2815
|
+
setAsyncOptions([]);
|
|
2816
|
+
setIsLoading(false);
|
|
2817
|
+
}
|
|
2818
|
+
});
|
|
2819
|
+
}, loadDebounceMs);
|
|
2820
|
+
return () => clearTimeout(timer);
|
|
2821
|
+
// `loadOptions` is intentionally not in the deps — consumers
|
|
2822
|
+
// typically pass an inline arrow which would otherwise trigger a
|
|
2823
|
+
// refetch on every render. Treat it as stable (mirror of MUI's
|
|
2824
|
+
// `loadOptions` contract).
|
|
2825
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
2826
|
+
}, [inputValue, loadDebounceMs]);
|
|
2827
|
+
|
|
2828
|
+
// ───── Handlers ─────
|
|
2829
|
+
|
|
2830
|
+
const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {
|
|
2831
|
+
const next = event.target.value;
|
|
2832
|
+
setHasInteracted(true);
|
|
2833
|
+
setInputValue(next);
|
|
2834
|
+
if (!isOpen) setIsOpen(true);
|
|
2835
|
+
// Reset highlight to first visible option on every keystroke; the
|
|
2836
|
+
// filtered list will recompute on next render.
|
|
2837
|
+
setHighlightedIndex(0);
|
|
2838
|
+
};
|
|
2839
|
+
|
|
2840
|
+
const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {
|
|
2841
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (effectiveDisabled || effectiveReadOnly) <span class="cstat-no" title="statement not covered" >return;</span>
|
|
2842
|
+
|
|
2843
|
+
// Multi-select: Backspace at the start of an empty input removes
|
|
2844
|
+
// the last selected chip. (Matches the de-facto pattern used by
|
|
2845
|
+
// chip-input UIs across the React ecosystem.)
|
|
2846
|
+
if (
|
|
2847
|
+
isMulti &&
|
|
2848
|
+
event.key === 'Backspace' &&
|
|
2849
|
+
inputValue === '' &&
|
|
2850
|
+
selectedKeys.size > 0
|
|
2851
|
+
) {
|
|
2852
|
+
event.preventDefault();
|
|
2853
|
+
// Set guarantees ≥ 1 entry here (size > 0 above), but TS can't
|
|
2854
|
+
// prove it — fall back to the loop variant to avoid the non-null
|
|
2855
|
+
// assertion lint rule.
|
|
2856
|
+
const arr = Array.from(selectedKeys);
|
|
2857
|
+
const last = arr[arr.length - 1];
|
|
2858
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (last !== undefined) {
|
|
2859
|
+
commitSelection(last); // toggle removes
|
|
2860
|
+
}
|
|
2861
|
+
return;
|
|
2862
|
+
}
|
|
2863
|
+
|
|
2864
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (event.key === 'ArrowDown') {
|
|
2865
|
+
<span class="cstat-no" title="statement not covered" > event.preventDefault();</span>
|
|
2866
|
+
<span class="cstat-no" title="statement not covered" > if (!isOpen) {</span>
|
|
2867
|
+
<span class="cstat-no" title="statement not covered" > openPopover();</span>
|
|
2868
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2869
|
+
}
|
|
2870
|
+
<span class="cstat-no" title="statement not covered" > setHighlightedIndex(<span class="fstat-no" title="function not covered" >(i</span>dx) => {</span>
|
|
2871
|
+
const max = <span class="cstat-no" title="statement not covered" >filteredOptions.length - 1;</span>
|
|
2872
|
+
<span class="cstat-no" title="statement not covered" > if (max < 0) <span class="cstat-no" title="statement not covered" >return -1;</span></span>
|
|
2873
|
+
<span class="cstat-no" title="statement not covered" > return idx >= max ? 0 : idx + 1;</span>
|
|
2874
|
+
});
|
|
2875
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2876
|
+
}
|
|
2877
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (event.key === 'ArrowUp') {
|
|
2878
|
+
<span class="cstat-no" title="statement not covered" > event.preventDefault();</span>
|
|
2879
|
+
<span class="cstat-no" title="statement not covered" > if (!isOpen) {</span>
|
|
2880
|
+
<span class="cstat-no" title="statement not covered" > openPopover();</span>
|
|
2881
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2882
|
+
}
|
|
2883
|
+
<span class="cstat-no" title="statement not covered" > setHighlightedIndex(<span class="fstat-no" title="function not covered" >(i</span>dx) => {</span>
|
|
2884
|
+
const max = <span class="cstat-no" title="statement not covered" >filteredOptions.length - 1;</span>
|
|
2885
|
+
<span class="cstat-no" title="statement not covered" > if (max < 0) <span class="cstat-no" title="statement not covered" >return -1;</span></span>
|
|
2886
|
+
<span class="cstat-no" title="statement not covered" > return idx <= 0 ? max : idx - 1;</span>
|
|
2887
|
+
});
|
|
2888
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2889
|
+
}
|
|
2890
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (event.key === 'Home' && <span class="branch-1 cbranch-no" title="branch not covered" >isOpen) {</span>
|
|
2891
|
+
<span class="cstat-no" title="statement not covered" > event.preventDefault();</span>
|
|
2892
|
+
<span class="cstat-no" title="statement not covered" > setHighlightedIndex(filteredOptions.length ? 0 : -1);</span>
|
|
2893
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2894
|
+
}
|
|
2895
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (event.key === 'End' && <span class="branch-1 cbranch-no" title="branch not covered" >isOpen) {</span>
|
|
2896
|
+
<span class="cstat-no" title="statement not covered" > event.preventDefault();</span>
|
|
2897
|
+
<span class="cstat-no" title="statement not covered" > setHighlightedIndex(filteredOptions.length ? filteredOptions.length - 1 : -1);</span>
|
|
2898
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2899
|
+
}
|
|
2900
|
+
if (event.key === 'Enter') {
|
|
2901
|
+
// Preferred path: highlighted option is committed.
|
|
2902
|
+
if (
|
|
2903
|
+
isOpen &&
|
|
2904
|
+
highlightedIndex >= 0 &&
|
|
2905
|
+
highlightedIndex < filteredOptions.length
|
|
2906
|
+
) {
|
|
2907
|
+
event.preventDefault();
|
|
2908
|
+
const opt = filteredOptions[highlightedIndex];
|
|
2909
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (!getOptionDisabled(opt)) {
|
|
2910
|
+
commitSelection(getOptionValue(opt));
|
|
2911
|
+
if (!isMulti) {
|
|
2912
|
+
closePopover();
|
|
2913
|
+
} else <span class="missing-if-branch" title="else path not taken" >E</span>{
|
|
2914
|
+
<span class="cstat-no" title="statement not covered" > setHighlightedIndex(0);</span>
|
|
2915
|
+
}
|
|
2916
|
+
}
|
|
2917
|
+
return;
|
|
2918
|
+
}
|
|
2919
|
+
// Free-solo path: commit the typed text as the value.
|
|
2920
|
+
if (freeSolo && inputValue.trim() !== '') {
|
|
2921
|
+
event.preventDefault();
|
|
2922
|
+
const typed = inputValue.trim();
|
|
2923
|
+
// Snap to an exact-label match if one exists, even when the
|
|
2924
|
+
// dropdown was filtered to zero rows — protects the contract
|
|
2925
|
+
// that "the value is always a known option when one matches."
|
|
2926
|
+
const matched = options.find(
|
|
2927
|
+
(o) => labelAsString(o) === typed
|
|
2928
|
+
);
|
|
2929
|
+
commitSelection(matched ? <span class="branch-0 cbranch-no" title="branch not covered" >getOptionValue(matched) : t</span>yped);
|
|
2930
|
+
if (!isMulti) closePopover();
|
|
2931
|
+
else setHighlightedIndex(0);
|
|
2932
|
+
}
|
|
2933
|
+
return;
|
|
2934
|
+
}
|
|
2935
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (event.key === 'Escape') {
|
|
2936
|
+
<span class="cstat-no" title="statement not covered" > if (isOpen) {</span>
|
|
2937
|
+
<span class="cstat-no" title="statement not covered" > event.preventDefault();</span>
|
|
2938
|
+
<span class="cstat-no" title="statement not covered" > closePopover();</span>
|
|
2939
|
+
// Multi: clear filter; selection stays in chips.
|
|
2940
|
+
// Single: revert input to the displayable form of the committed
|
|
2941
|
+
// value — either the matched option's label, or (in free-solo)
|
|
2942
|
+
// the raw string that was committed.
|
|
2943
|
+
<span class="cstat-no" title="statement not covered" > if (isMulti) {</span>
|
|
2944
|
+
<span class="cstat-no" title="statement not covered" > setInputValue('');</span>
|
|
2945
|
+
<span class="cstat-no" title="statement not covered" > } else if (singleSelectedKey) {</span>
|
|
2946
|
+
const selected = <span class="cstat-no" title="statement not covered" >options.find(</span>
|
|
2947
|
+
<span class="fstat-no" title="function not covered" > (o</span>) => <span class="cstat-no" title="statement not covered" >getOptionValue(o) === singleSelectedKey</span>
|
|
2948
|
+
);
|
|
2949
|
+
const selected_label = <span class="cstat-no" title="statement not covered" >selected ? labelAsString(selected) : undefined;</span>
|
|
2950
|
+
<span class="cstat-no" title="statement not covered" > setInputValue(selected_label ?? (freeSolo ? singleSelectedKey : ''));</span>
|
|
2951
|
+
} else {
|
|
2952
|
+
<span class="cstat-no" title="statement not covered" > setInputValue('');</span>
|
|
2953
|
+
}
|
|
2954
|
+
}
|
|
2955
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2956
|
+
}
|
|
2957
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (event.key === 'Tab') {
|
|
2958
|
+
// Let focus leave naturally; just close.
|
|
2959
|
+
<span class="cstat-no" title="statement not covered" > if (isOpen) <span class="cstat-no" title="statement not covered" >closePopover();</span></span>
|
|
2960
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2961
|
+
}
|
|
2962
|
+
};
|
|
2963
|
+
|
|
2964
|
+
const handleBlur = () => {
|
|
2965
|
+
// Free-solo (single mode): commit the typed text on blur so the
|
|
2966
|
+
// user doesn't have to remember to press Enter. Multi + free-solo
|
|
2967
|
+
// is Enter-only (blur would commit accidental whitespace from
|
|
2968
|
+
// tab-out).
|
|
2969
|
+
if (freeSolo && !isMulti && inputValue.trim() !== '') {
|
|
2970
|
+
const typed = inputValue.trim();
|
|
2971
|
+
const matched = options.find((o) => labelAsString(o) === typed);
|
|
2972
|
+
const nextKey = matched ? <span class="branch-0 cbranch-no" title="branch not covered" >getOptionValue(matched) : t</span>yped;
|
|
2973
|
+
// Only commit if this would actually change the value.
|
|
2974
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (singleSelectedKey !== nextKey) {
|
|
2975
|
+
commitSelection(nextKey);
|
|
2976
|
+
}
|
|
2977
|
+
}
|
|
2978
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (!isFormMode || <span class="branch-1 cbranch-no" title="branch not covered" >!bridge) r</span>eturn;
|
|
2979
|
+
const raw = <span class="cstat-no" title="statement not covered" >bridge.getValue(name);</span>
|
|
2980
|
+
// Multi mode: bridge value is an array — passthrough.
|
|
2981
|
+
const current = <span class="cstat-no" title="statement not covered" >raw == null ? '' : (raw as unknown as string);</span>
|
|
2982
|
+
registration?.onBlur?.({
|
|
2983
|
+
target: { name, value: current },
|
|
2984
|
+
type: 'blur',
|
|
2985
|
+
});
|
|
2986
|
+
};
|
|
2987
|
+
|
|
2988
|
+
const handleOptionClick = (opt: TOption) => {
|
|
2989
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (getOptionDisabled(opt)) <span class="cstat-no" title="statement not covered" >return;</span>
|
|
2990
|
+
commitSelection(getOptionValue(opt));
|
|
2991
|
+
// Multi-select: keep the popover open for chained picks.
|
|
2992
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!isMulti) {
|
|
2993
|
+
<span class="cstat-no" title="statement not covered" > closePopover();</span>
|
|
2994
|
+
} else {
|
|
2995
|
+
setHighlightedIndex(0);
|
|
2996
|
+
}
|
|
2997
|
+
inputRef.current?.focus();
|
|
2998
|
+
};
|
|
2999
|
+
|
|
3000
|
+
// Pattern: `onMouseDown` preventDefault keeps focus on the `<input>`
|
|
3001
|
+
// (without this, clicking the chevron blurs the input and we lose the
|
|
3002
|
+
// popover-on-focus open state). `onClick` does the actual work so
|
|
3003
|
+
// testing-library's `fireEvent.click(...)` also triggers it.
|
|
3004
|
+
const preventBlur = <span class="fstat-no" title="function not covered" >(e</span>vent: MouseEvent<HTMLElement>) => {
|
|
3005
|
+
<span class="cstat-no" title="statement not covered" > event.preventDefault();</span>
|
|
3006
|
+
};
|
|
3007
|
+
|
|
3008
|
+
const handleTriggerClick = () => {
|
|
3009
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (effectiveDisabled || effectiveReadOnly) <span class="cstat-no" title="statement not covered" >return;</span>
|
|
3010
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (isOpen) {
|
|
3011
|
+
<span class="cstat-no" title="statement not covered" > closePopover();</span>
|
|
3012
|
+
} else {
|
|
3013
|
+
openPopover();
|
|
3014
|
+
}
|
|
3015
|
+
inputRef.current?.focus();
|
|
3016
|
+
};
|
|
3017
|
+
|
|
3018
|
+
const handleClearClick = () => {
|
|
3019
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (effectiveDisabled || effectiveReadOnly) <span class="cstat-no" title="statement not covered" >return;</span>
|
|
3020
|
+
commitSelection(null);
|
|
3021
|
+
inputRef.current?.focus();
|
|
3022
|
+
};
|
|
3023
|
+
|
|
3024
|
+
// ───── Render-time guards (after all hooks) ─────
|
|
3025
|
+
|
|
3026
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!isVisible) <span class="cstat-no" title="statement not covered" >return null;</span>
|
|
3027
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!accessState.visible) <span class="cstat-no" title="statement not covered" >return null;</span>
|
|
3028
|
+
|
|
3029
|
+
const v = autocompleteVariants({
|
|
3030
|
+
size,
|
|
3031
|
+
layout,
|
|
3032
|
+
error: resolvedError,
|
|
3033
|
+
fullWidth,
|
|
3034
|
+
disabled: effectiveDisabled,
|
|
3035
|
+
});
|
|
3036
|
+
|
|
3037
|
+
const activeOptionId =
|
|
3038
|
+
isOpen && highlightedIndex >= 0 && highlightedIndex < filteredOptions.length
|
|
3039
|
+
? `${optionIdPrefix}${getOptionValue(filteredOptions[highlightedIndex])}`
|
|
3040
|
+
: undefined;
|
|
3041
|
+
|
|
3042
|
+
return (
|
|
3043
|
+
<div
|
|
3044
|
+
ref={rootRef}
|
|
3045
|
+
className={cn(v.root(), sx, slotProps?.root?.className)}
|
|
3046
|
+
>
|
|
3047
|
+
{label && (
|
|
3048
|
+
<label
|
|
3049
|
+
id={labelId}
|
|
3050
|
+
htmlFor={`${baseId}-input`}
|
|
3051
|
+
className={cn(v.label(), slotProps?.label?.className)}
|
|
3052
|
+
>
|
|
3053
|
+
{label}
|
|
3054
|
+
{required && (
|
|
3055
|
+
<span
|
|
3056
|
+
aria-hidden="true"
|
|
3057
|
+
className={cn(
|
|
3058
|
+
v.requiredMark(),
|
|
3059
|
+
slotProps?.requiredMark?.className
|
|
3060
|
+
)}
|
|
3061
|
+
>
|
|
3062
|
+
*
|
|
3063
|
+
</span>
|
|
3064
|
+
)}
|
|
3065
|
+
</label>
|
|
3066
|
+
)}
|
|
3067
|
+
|
|
3068
|
+
<div
|
|
3069
|
+
className={cn(
|
|
3070
|
+
v.inputWrapper(),
|
|
3071
|
+
// Multi mode: let chips wrap and replace the fixed `h-*`
|
|
3072
|
+
// with `min-h-*` so the wrapper grows with selections.
|
|
3073
|
+
isMulti && 'flex-wrap min-h-[var(--ac-min-h,2.5rem)] !h-auto py-1',
|
|
3074
|
+
slotProps?.inputWrapper?.className
|
|
3075
|
+
)}
|
|
3076
|
+
>
|
|
3077
|
+
{isMulti && selectedKeys.size > 0 && (
|
|
3078
|
+
<div
|
|
3079
|
+
className={cn(
|
|
3080
|
+
v.chipsList(),
|
|
3081
|
+
slotProps?.chipsList?.className
|
|
3082
|
+
)}
|
|
3083
|
+
>
|
|
3084
|
+
{Array.from(selectedKeys).map((key) => {
|
|
3085
|
+
const opt = options.find((o) => getOptionValue(o) === key);
|
|
3086
|
+
const labelNode = opt ? getOptionLabel(opt) : <span class="branch-1 cbranch-no" title="branch not covered" >key;</span>
|
|
3087
|
+
const labelText = opt ? labelAsString(opt) ?? <span class="branch-1 cbranch-no" title="branch not covered" >key : <span class="branch-1 cbranch-no" title="branch not covered" >k</span>ey;</span>
|
|
3088
|
+
return (
|
|
3089
|
+
<span
|
|
3090
|
+
key={key}
|
|
3091
|
+
className={cn(v.chip(), slotProps?.chip?.className)}
|
|
3092
|
+
data-chip-key={key}
|
|
3093
|
+
>
|
|
3094
|
+
{labelNode}
|
|
3095
|
+
{!effectiveDisabled && !effectiveReadOnly && (
|
|
3096
|
+
<button
|
|
3097
|
+
type="button"
|
|
3098
|
+
onMouseDown={preventBlur}
|
|
3099
|
+
onClick={() => {
|
|
3100
|
+
commitSelection(key); // toggle removes
|
|
3101
|
+
inputRef.current?.focus();
|
|
3102
|
+
}}
|
|
3103
|
+
aria-label={`Remove ${labelText}`}
|
|
3104
|
+
tabIndex={-1}
|
|
3105
|
+
className={cn(
|
|
3106
|
+
v.chipRemove(),
|
|
3107
|
+
slotProps?.chipRemove?.className
|
|
3108
|
+
)}
|
|
3109
|
+
>
|
|
3110
|
+
<CloseIcon />
|
|
3111
|
+
</button>
|
|
3112
|
+
)}
|
|
3113
|
+
</span>
|
|
3114
|
+
);
|
|
3115
|
+
})}
|
|
3116
|
+
</div>
|
|
3117
|
+
)}
|
|
3118
|
+
|
|
3119
|
+
<input
|
|
3120
|
+
ref={inputRef}
|
|
3121
|
+
id={`${baseId}-input`}
|
|
3122
|
+
name={name}
|
|
3123
|
+
type="text"
|
|
3124
|
+
role="combobox"
|
|
3125
|
+
aria-autocomplete="list"
|
|
3126
|
+
aria-expanded={isOpen}
|
|
3127
|
+
aria-controls={isOpen ? listboxId : undefined}
|
|
3128
|
+
aria-activedescendant={activeOptionId}
|
|
3129
|
+
aria-labelledby={label ? labelId : undefined}
|
|
3130
|
+
aria-describedby={resolvedHelperText ? helperId : undefined}
|
|
3131
|
+
aria-invalid={resolvedError ? <span class="branch-0 cbranch-no" title="branch not covered" >true : u</span>ndefined}
|
|
3132
|
+
aria-required={required ? true : undefined}
|
|
3133
|
+
placeholder={
|
|
3134
|
+
// In multi mode hide the placeholder once the user has at
|
|
3135
|
+
// least one chip — the chips already convey "something is
|
|
3136
|
+
// selected" and the placeholder would clutter the UI.
|
|
3137
|
+
isMulti && selectedKeys.size > 0 ? undefined : placeholder
|
|
3138
|
+
}
|
|
3139
|
+
value={displayInputValue}
|
|
3140
|
+
onChange={handleInputChange}
|
|
3141
|
+
onKeyDown={handleKeyDown}
|
|
3142
|
+
onFocus={openPopover}
|
|
3143
|
+
onBlur={handleBlur}
|
|
3144
|
+
disabled={effectiveDisabled}
|
|
3145
|
+
readOnly={effectiveReadOnly}
|
|
3146
|
+
autoComplete="off"
|
|
3147
|
+
// Multi mode: give the input some min-width so it stays
|
|
3148
|
+
// clickable even with many chips, and let it shrink/grow with
|
|
3149
|
+
// the available row space.
|
|
3150
|
+
className={cn(
|
|
3151
|
+
v.input(),
|
|
3152
|
+
isMulti && 'min-w-[6rem] flex-1 basis-24',
|
|
3153
|
+
slotProps?.input?.className
|
|
3154
|
+
)}
|
|
3155
|
+
/>
|
|
3156
|
+
|
|
3157
|
+
{hasAnySelection && !effectiveDisabled && !effectiveReadOnly && (
|
|
3158
|
+
<button
|
|
3159
|
+
type="button"
|
|
3160
|
+
onMouseDown={preventBlur}
|
|
3161
|
+
onClick={handleClearClick}
|
|
3162
|
+
aria-label="Clear selection"
|
|
3163
|
+
tabIndex={-1}
|
|
3164
|
+
className={cn(v.clearButton(), slotProps?.clearButton?.className)}
|
|
3165
|
+
>
|
|
3166
|
+
<CloseIcon />
|
|
3167
|
+
</button>
|
|
3168
|
+
)}
|
|
3169
|
+
|
|
3170
|
+
<button
|
|
3171
|
+
type="button"
|
|
3172
|
+
onMouseDown={preventBlur}
|
|
3173
|
+
onClick={handleTriggerClick}
|
|
3174
|
+
aria-label="Open"
|
|
3175
|
+
aria-haspopup="listbox"
|
|
3176
|
+
aria-expanded={isOpen}
|
|
3177
|
+
tabIndex={-1}
|
|
3178
|
+
disabled={effectiveDisabled}
|
|
3179
|
+
className={cn(v.trigger(), slotProps?.trigger?.className)}
|
|
3180
|
+
>
|
|
3181
|
+
{/*
|
|
3182
|
+
* Chevron flips up when popover is open (CSS-only, driven by
|
|
3183
|
+
* the `aria-expanded` attribute selector on the parent
|
|
3184
|
+
* `<button>`). See autocomplete.variants.ts → `trigger` slot
|
|
3185
|
+
* for the `aria-expanded:rotate-180` rule.
|
|
3186
|
+
*/}
|
|
3187
|
+
<ChevronDownIcon />
|
|
3188
|
+
</button>
|
|
3189
|
+
|
|
3190
|
+
{isOpen && (
|
|
3191
|
+
<ul
|
|
3192
|
+
ref={listboxRef}
|
|
3193
|
+
id={listboxId}
|
|
3194
|
+
role="listbox"
|
|
3195
|
+
aria-labelledby={label ? labelId : undefined}
|
|
3196
|
+
className={cn(
|
|
3197
|
+
v.popover(),
|
|
3198
|
+
'absolute left-0 right-0 top-full',
|
|
3199
|
+
v.listBox(),
|
|
3200
|
+
slotProps?.popover?.className,
|
|
3201
|
+
slotProps?.listBox?.className
|
|
3202
|
+
)}
|
|
3203
|
+
>
|
|
3204
|
+
{isLoading ? (
|
|
3205
|
+
<li
|
|
3206
|
+
className={cn(
|
|
3207
|
+
v.emptyState(),
|
|
3208
|
+
slotProps?.emptyState?.className
|
|
3209
|
+
)}
|
|
3210
|
+
aria-live="polite"
|
|
3211
|
+
aria-busy="true"
|
|
3212
|
+
>
|
|
3213
|
+
{loadingMessage}
|
|
3214
|
+
</li>
|
|
3215
|
+
) : filteredOptions.length === 0 ? (
|
|
3216
|
+
<li
|
|
3217
|
+
className={cn(
|
|
3218
|
+
v.emptyState(),
|
|
3219
|
+
slotProps?.emptyState?.className
|
|
3220
|
+
)}
|
|
3221
|
+
>
|
|
3222
|
+
{emptyMessage}
|
|
3223
|
+
</li>
|
|
3224
|
+
) : (
|
|
3225
|
+
filteredOptions.map((opt, idx) => {
|
|
3226
|
+
const optValue = getOptionValue(opt);
|
|
3227
|
+
const optDisabled = getOptionDisabled(opt);
|
|
3228
|
+
const isHighlighted = idx === highlightedIndex;
|
|
3229
|
+
const isSelected = selectedKeys.has(optValue);
|
|
3230
|
+
return (
|
|
3231
|
+
<li
|
|
3232
|
+
key={resolveOptionKey(opt)}
|
|
3233
|
+
id={`${optionIdPrefix}${optValue}`}
|
|
3234
|
+
role="option"
|
|
3235
|
+
aria-selected={isSelected}
|
|
3236
|
+
aria-disabled={optDisabled || undefined}
|
|
3237
|
+
data-focused={isHighlighted || undefined}
|
|
3238
|
+
data-selected={isSelected || undefined}
|
|
3239
|
+
data-disabled={optDisabled || undefined}
|
|
3240
|
+
onMouseDown={preventBlur}
|
|
3241
|
+
onClick={() => handleOptionClick(opt)}
|
|
3242
|
+
onMouseEnter={<span class="fstat-no" title="function not covered" >() => <span class="cstat-no" title="statement not covered" >s</span>etHighlightedIndex(idx)}</span>
|
|
3243
|
+
className={cn(
|
|
3244
|
+
v.listItem(),
|
|
3245
|
+
slotProps?.listItem?.className
|
|
3246
|
+
)}
|
|
3247
|
+
>
|
|
3248
|
+
{getOptionLabel(opt)}
|
|
3249
|
+
</li>
|
|
3250
|
+
);
|
|
3251
|
+
})
|
|
3252
|
+
)}
|
|
3253
|
+
</ul>
|
|
3254
|
+
)}
|
|
3255
|
+
</div>
|
|
3256
|
+
|
|
3257
|
+
{resolvedHelperText && (
|
|
3258
|
+
<p
|
|
3259
|
+
id={helperId}
|
|
3260
|
+
className={cn(
|
|
3261
|
+
resolvedError ? <span class="branch-0 cbranch-no" title="branch not covered" >v.errorText() : v</span>.helperText(),
|
|
3262
|
+
resolvedError
|
|
3263
|
+
? <span class="branch-0 cbranch-no" title="branch not covered" >slotProps?.errorText?.className</span>
|
|
3264
|
+
: slotProps?.helperText?.className
|
|
3265
|
+
)}
|
|
3266
|
+
>
|
|
3267
|
+
{resolvedHelperText}
|
|
3268
|
+
</p>
|
|
3269
|
+
)}
|
|
3270
|
+
</div>
|
|
3271
|
+
);
|
|
3272
|
+
}
|
|
3273
|
+
</pre></td></tr></table></pre>
|
|
3274
|
+
|
|
3275
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
3276
|
+
</div><!-- /wrapper -->
|
|
3277
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
3278
|
+
Code coverage generated by
|
|
3279
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
3280
|
+
at 2026-05-20T08:18:26.407Z
|
|
3281
|
+
</div>
|
|
3282
|
+
<script src="../../../prettify.js"></script>
|
|
3283
|
+
<script>
|
|
3284
|
+
window.onload = function () {
|
|
3285
|
+
prettyPrint();
|
|
3286
|
+
};
|
|
3287
|
+
</script>
|
|
3288
|
+
<script src="../../../sorter.js"></script>
|
|
3289
|
+
<script src="../../../block-navigation.js"></script>
|
|
3290
|
+
</body>
|
|
3291
|
+
</html>
|
|
3292
|
+
|