qpp-style 9.16.0 → 9.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/components/Header/ImpersonatorBanner.jsx +18 -10
  2. package/components/SideNav/helpers.js +2 -0
  3. package/coverage/clover.xml +1287 -0
  4. package/coverage/coverage-final.json +70 -0
  5. package/coverage/lcov-report/base.css +224 -0
  6. package/coverage/lcov-report/block-navigation.js +87 -0
  7. package/coverage/lcov-report/components/Accordion/index.html +116 -0
  8. package/coverage/lcov-report/components/Accordion/index.jsx.html +364 -0
  9. package/coverage/lcov-report/components/Error/Collapsible.jsx.html +349 -0
  10. package/coverage/lcov-report/components/Error/ErrorUI.jsx.html +178 -0
  11. package/coverage/lcov-report/components/Error/index.html +131 -0
  12. package/coverage/lcov-report/components/Footer/FooterUI.jsx.html +880 -0
  13. package/coverage/lcov-report/components/Footer/LegacyFooterUI.jsx.html +667 -0
  14. package/coverage/lcov-report/components/Footer/SocialLinks.jsx.html +265 -0
  15. package/coverage/lcov-report/components/Footer/Subscribe.jsx.html +187 -0
  16. package/coverage/lcov-report/components/Footer/index.html +161 -0
  17. package/coverage/lcov-report/components/Infotip/Infotip.jsx.html +310 -0
  18. package/coverage/lcov-report/components/Infotip/InfotipIcon.jsx.html +208 -0
  19. package/coverage/lcov-report/components/Infotip/index.html +146 -0
  20. package/coverage/lcov-report/components/Infotip/index.js.html +94 -0
  21. package/coverage/lcov-report/components/Modal/LegacyModal.jsx.html +301 -0
  22. package/coverage/lcov-report/components/Modal/Modal.jsx.html +505 -0
  23. package/coverage/lcov-report/components/Modal/index.html +146 -0
  24. package/coverage/lcov-report/components/Modal/index.jsx.html +151 -0
  25. package/coverage/lcov-report/components/SanitizedContent/index.html +116 -0
  26. package/coverage/lcov-report/components/SanitizedContent/index.jsx.html +685 -0
  27. package/coverage/lcov-report/components/SessionDialogUI.jsx.html +868 -0
  28. package/coverage/lcov-report/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +166 -0
  29. package/coverage/lcov-report/components/SideNav/AnimationGroup/index.html +116 -0
  30. package/coverage/lcov-report/components/SideNav/Chart/ScoreChart.jsx.html +889 -0
  31. package/coverage/lcov-report/components/SideNav/Chart/index.html +131 -0
  32. package/coverage/lcov-report/components/SideNav/Chart/index.js.html +94 -0
  33. package/coverage/lcov-report/components/SideNav/Content/LevelOneContent.jsx.html +709 -0
  34. package/coverage/lcov-report/components/SideNav/Content/LevelTwoContent.jsx.html +733 -0
  35. package/coverage/lcov-report/components/SideNav/Content/index.html +146 -0
  36. package/coverage/lcov-report/components/SideNav/Content/index.js.html +97 -0
  37. package/coverage/lcov-report/components/SideNav/Details/IndividualDetails.jsx.html +139 -0
  38. package/coverage/lcov-report/components/SideNav/Details/PracticeDetails.jsx.html +220 -0
  39. package/coverage/lcov-report/components/SideNav/Details/index.html +146 -0
  40. package/coverage/lcov-report/components/SideNav/Details/index.js.html +97 -0
  41. package/coverage/lcov-report/components/SideNav/Links/CmsSwitchLink.jsx.html +208 -0
  42. package/coverage/lcov-report/components/SideNav/Links/NavItemInline.jsx.html +247 -0
  43. package/coverage/lcov-report/components/SideNav/Links/NavLinkContainer.jsx.html +199 -0
  44. package/coverage/lcov-report/components/SideNav/Links/NavLinkDrawer.jsx.html +832 -0
  45. package/coverage/lcov-report/components/SideNav/Links/NavLinkInline.jsx.html +406 -0
  46. package/coverage/lcov-report/components/SideNav/Links/NavLinkToggle.jsx.html +187 -0
  47. package/coverage/lcov-report/components/SideNav/Links/index.html +206 -0
  48. package/coverage/lcov-report/components/SideNav/Links/index.js.html +124 -0
  49. package/coverage/lcov-report/components/SideNav/UI/SideNavUI.jsx.html +1084 -0
  50. package/coverage/lcov-report/components/SideNav/UI/index.html +131 -0
  51. package/coverage/lcov-report/components/SideNav/UI/index.js.html +94 -0
  52. package/coverage/lcov-report/components/SideNav/helpers.js.html +238 -0
  53. package/coverage/lcov-report/components/SideNav/index.html +116 -0
  54. package/coverage/lcov-report/components/Tooltip/Tooltip.jsx.html +349 -0
  55. package/coverage/lcov-report/components/Tooltip/index.html +146 -0
  56. package/coverage/lcov-report/components/Tooltip/index.js.html +94 -0
  57. package/coverage/lcov-report/components/Tooltip/position.js.html +289 -0
  58. package/coverage/lcov-report/components/hooks/index.html +116 -0
  59. package/coverage/lcov-report/components/hooks/useGetConfig.js.html +307 -0
  60. package/coverage/lcov-report/components/index.html +116 -0
  61. package/coverage/lcov-report/favicon.png +0 -0
  62. package/coverage/lcov-report/index.html +461 -0
  63. package/coverage/lcov-report/lib/Chevron.jsx.html +181 -0
  64. package/coverage/lcov-report/lib/SvgComponents.jsx.html +1702 -0
  65. package/coverage/lcov-report/lib/index.html +146 -0
  66. package/coverage/lcov-report/lib/svg-definitions.svg.html +460 -0
  67. package/coverage/lcov-report/prettify.css +1 -0
  68. package/coverage/lcov-report/prettify.js +2 -0
  69. package/coverage/lcov-report/react/components/Accordion/index.html +116 -0
  70. package/coverage/lcov-report/react/components/Accordion/index.jsx.html +364 -0
  71. package/coverage/lcov-report/react/components/Button/index.html +116 -0
  72. package/coverage/lcov-report/react/components/Button/index.js.html +355 -0
  73. package/coverage/lcov-report/react/components/Error/Collapsible.jsx.html +349 -0
  74. package/coverage/lcov-report/react/components/Error/ErrorUI.jsx.html +178 -0
  75. package/coverage/lcov-report/react/components/Error/error.js.html +163 -0
  76. package/coverage/lcov-report/react/components/Error/index.html +146 -0
  77. package/coverage/lcov-report/react/components/Footer/FooterUI.jsx.html +880 -0
  78. package/coverage/lcov-report/react/components/Footer/LegacyFooterUI.jsx.html +667 -0
  79. package/coverage/lcov-report/react/components/Footer/SocialLinks.jsx.html +265 -0
  80. package/coverage/lcov-report/react/components/Footer/Subscribe.jsx.html +187 -0
  81. package/coverage/lcov-report/react/components/Footer/footer.js.html +175 -0
  82. package/coverage/lcov-report/react/components/Footer/index.html +176 -0
  83. package/coverage/lcov-report/react/components/GovBanner/index.html +116 -0
  84. package/coverage/lcov-report/react/components/GovBanner/index.js.html +409 -0
  85. package/coverage/lcov-report/react/components/Header/HeaderAccountMenu.jsx.html +592 -0
  86. package/coverage/lcov-report/react/components/Header/HeaderCancel.jsx.html +133 -0
  87. package/coverage/lcov-report/react/components/Header/HeaderContainer.jsx.html +280 -0
  88. package/coverage/lcov-report/react/components/Header/HeaderLogo.jsx.html +211 -0
  89. package/coverage/lcov-report/react/components/Header/HeaderMenuButton.js.html +235 -0
  90. package/coverage/lcov-report/react/components/Header/HeaderMenuItem.jsx.html +781 -0
  91. package/coverage/lcov-report/react/components/Header/HeaderMenuLink.js.html +235 -0
  92. package/coverage/lcov-report/react/components/Header/HeaderMenuSignOutButton.js.html +271 -0
  93. package/coverage/lcov-report/react/components/Header/HeaderMobileButton.js.html +196 -0
  94. package/coverage/lcov-report/react/components/Header/HeaderUI.jsx.html +586 -0
  95. package/coverage/lcov-report/react/components/Header/HelpIcon.jsx.html +181 -0
  96. package/coverage/lcov-report/react/components/Header/ImpersonatorBanner.jsx.html +331 -0
  97. package/coverage/lcov-report/react/components/Header/NavigationButtonIcon.jsx.html +166 -0
  98. package/coverage/lcov-report/react/components/Header/header.js.html +205 -0
  99. package/coverage/lcov-report/react/components/Header/hooks.js.html +241 -0
  100. package/coverage/lcov-report/react/components/Header/index.html +341 -0
  101. package/coverage/lcov-report/react/components/Header/utag-helpers.js.html +112 -0
  102. package/coverage/lcov-report/react/components/Infotip/Infotip.jsx.html +310 -0
  103. package/coverage/lcov-report/react/components/Infotip/InfotipIcon.jsx.html +208 -0
  104. package/coverage/lcov-report/react/components/Infotip/index.html +146 -0
  105. package/coverage/lcov-report/react/components/Infotip/index.js.html +94 -0
  106. package/coverage/lcov-report/react/components/Modal/LegacyModal.jsx.html +301 -0
  107. package/coverage/lcov-report/react/components/Modal/Modal.jsx.html +505 -0
  108. package/coverage/lcov-report/react/components/Modal/index.html +146 -0
  109. package/coverage/lcov-report/react/components/Modal/index.jsx.html +151 -0
  110. package/coverage/lcov-report/react/components/NotificationBanner/index.html +116 -0
  111. package/coverage/lcov-report/react/components/NotificationBanner/index.js.html +880 -0
  112. package/coverage/lcov-report/react/components/SanitizedContent/index.html +116 -0
  113. package/coverage/lcov-report/react/components/SanitizedContent/index.jsx.html +685 -0
  114. package/coverage/lcov-report/react/components/SessionDialog/index.html +116 -0
  115. package/coverage/lcov-report/react/components/SessionDialog/sessionDialog.js.html +163 -0
  116. package/coverage/lcov-report/react/components/SessionDialogUI.jsx.html +868 -0
  117. package/coverage/lcov-report/react/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +166 -0
  118. package/coverage/lcov-report/react/components/SideNav/AnimationGroup/index.html +116 -0
  119. package/coverage/lcov-report/react/components/SideNav/Chart/ScoreChart.jsx.html +889 -0
  120. package/coverage/lcov-report/react/components/SideNav/Chart/index.html +131 -0
  121. package/coverage/lcov-report/react/components/SideNav/Chart/index.js.html +94 -0
  122. package/coverage/lcov-report/react/components/SideNav/Content/LevelOneContent.jsx.html +709 -0
  123. package/coverage/lcov-report/react/components/SideNav/Content/LevelTwoContent.jsx.html +733 -0
  124. package/coverage/lcov-report/react/components/SideNav/Content/index.html +146 -0
  125. package/coverage/lcov-report/react/components/SideNav/Content/index.js.html +97 -0
  126. package/coverage/lcov-report/react/components/SideNav/Details/IndividualDetails.jsx.html +139 -0
  127. package/coverage/lcov-report/react/components/SideNav/Details/PracticeDetails.jsx.html +220 -0
  128. package/coverage/lcov-report/react/components/SideNav/Details/index.html +146 -0
  129. package/coverage/lcov-report/react/components/SideNav/Details/index.js.html +97 -0
  130. package/coverage/lcov-report/react/components/SideNav/Links/CmsSwitchLink.jsx.html +208 -0
  131. package/coverage/lcov-report/react/components/SideNav/Links/NavItemInline.jsx.html +247 -0
  132. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkContainer.jsx.html +199 -0
  133. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkDrawer.jsx.html +832 -0
  134. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkInline.jsx.html +406 -0
  135. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkToggle.jsx.html +187 -0
  136. package/coverage/lcov-report/react/components/SideNav/Links/index.html +206 -0
  137. package/coverage/lcov-report/react/components/SideNav/Links/index.js.html +124 -0
  138. package/coverage/lcov-report/react/components/SideNav/UI/SideNavUI.jsx.html +1084 -0
  139. package/coverage/lcov-report/react/components/SideNav/UI/index.html +131 -0
  140. package/coverage/lcov-report/react/components/SideNav/UI/index.js.html +94 -0
  141. package/coverage/lcov-report/react/components/SideNav/helpers.js.html +238 -0
  142. package/coverage/lcov-report/react/components/SideNav/index.html +131 -0
  143. package/coverage/lcov-report/react/components/SideNav/index.js.html +244 -0
  144. package/coverage/lcov-report/react/components/Tooltip/Tooltip.jsx.html +349 -0
  145. package/coverage/lcov-report/react/components/Tooltip/index.html +146 -0
  146. package/coverage/lcov-report/react/components/Tooltip/index.js.html +94 -0
  147. package/coverage/lcov-report/react/components/Tooltip/position.js.html +289 -0
  148. package/coverage/lcov-report/react/components/hooks/index.html +116 -0
  149. package/coverage/lcov-report/react/components/hooks/useGetConfig.js.html +307 -0
  150. package/coverage/lcov-report/react/components/index.html +116 -0
  151. package/coverage/lcov-report/react/index.html +116 -0
  152. package/coverage/lcov-report/react/index.js.html +178 -0
  153. package/coverage/lcov-report/react/lib/Chevron.jsx.html +181 -0
  154. package/coverage/lcov-report/react/lib/SvgComponents.jsx.html +1702 -0
  155. package/coverage/lcov-report/react/lib/index.html +146 -0
  156. package/coverage/lcov-report/react/lib/svg-definitions.svg.html +460 -0
  157. package/coverage/lcov-report/react/session/index.html +161 -0
  158. package/coverage/lcov-report/react/session/index.js.html +100 -0
  159. package/coverage/lcov-report/react/session/logout.js.html +307 -0
  160. package/coverage/lcov-report/react/session/refresh.js.html +232 -0
  161. package/coverage/lcov-report/react/session/ttl.js.html +196 -0
  162. package/coverage/lcov-report/session/index.html +161 -0
  163. package/coverage/lcov-report/session/index.js.html +100 -0
  164. package/coverage/lcov-report/session/logout.js.html +298 -0
  165. package/coverage/lcov-report/session/refresh.js.html +232 -0
  166. package/coverage/lcov-report/session/ttl.js.html +196 -0
  167. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  168. package/coverage/lcov-report/sorter.js +196 -0
  169. package/coverage/lcov.info +2908 -0
  170. package/dist/browser.js +1 -1
  171. package/dist/browser.js.LICENSE.txt +1 -1
  172. package/dist/browser.js.map +1 -1
  173. package/dist/index.js +1 -1
  174. package/dist/index.js.LICENSE.txt +1 -1
  175. package/dist/index.js.map +1 -1
  176. package/dist/react/index.js +1 -1
  177. package/dist/react/index.js.LICENSE.txt +1 -1
  178. package/dist/react/index.js.map +1 -1
  179. package/package.json +1 -1
  180. package/session/logout.js +5 -2
  181. package/styles/components/_footer.scss +593 -0
  182. package/styles/components/_header.scss +890 -0
  183. package/styles/components/_sidebar.scss +8 -0
  184. package/styles/components/sidebar/_animations.scss +38 -0
  185. package/styles/components/sidebar/_cms.scss +61 -0
  186. package/styles/components/sidebar/_details.scss +58 -0
  187. package/styles/components/sidebar/_links.scss +415 -0
  188. package/styles/components/sidebar/_sidebar-animation.scss +121 -0
  189. package/styles/components/sidebar/_sidebar-tooltip.scss +33 -0
  190. package/styles/components/sidebar/_sidebar.scss +141 -0
  191. package/styles/components/sidebar/project-specific/_wi.scss +42 -0
  192. package/styles/qppds/components/_gov-banner.scss +1 -8
  193. package/styles/qppds/components/_step-indicator.scss +190 -0
  194. package/styles/qppds/components/_table.scss +19 -1
  195. package/styles/qppds/components/index.scss +1 -0
  196. package/styles/qppds/utilities/_vertical-align.scss +72 -0
  197. package/styles/qppds/utilities/index.scss +1 -0
  198. package/storybook-static/favicon.ico +0 -0
@@ -0,0 +1,868 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for react/components/SessionDialogUI.jsx</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">react/components</a> SessionDialogUI.jsx</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">78.33% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>47/60</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">67.85% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>19/28</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">87.5% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>14/16</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">78.33% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>47/60</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 oninput="onInput()" 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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
328
+ <span class="cline-any cline-neutral">&nbsp;</span>
329
+ <span class="cline-any cline-neutral">&nbsp;</span>
330
+ <span class="cline-any cline-neutral">&nbsp;</span>
331
+ <span class="cline-any cline-neutral">&nbsp;</span>
332
+ <span class="cline-any cline-neutral">&nbsp;</span>
333
+ <span class="cline-any cline-neutral">&nbsp;</span>
334
+ <span class="cline-any cline-neutral">&nbsp;</span>
335
+ <span class="cline-any cline-neutral">&nbsp;</span>
336
+ <span class="cline-any cline-neutral">&nbsp;</span>
337
+ <span class="cline-any cline-neutral">&nbsp;</span>
338
+ <span class="cline-any cline-yes">3x</span>
339
+ <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-neutral">&nbsp;</span>
342
+ <span class="cline-any cline-neutral">&nbsp;</span>
343
+ <span class="cline-any cline-neutral">&nbsp;</span>
344
+ <span class="cline-any cline-neutral">&nbsp;</span>
345
+ <span class="cline-any cline-neutral">&nbsp;</span>
346
+ <span class="cline-any cline-yes">19x</span>
347
+ <span class="cline-any cline-neutral">&nbsp;</span>
348
+ <span class="cline-any cline-yes">19x</span>
349
+ <span class="cline-any cline-yes">19x</span>
350
+ <span class="cline-any cline-yes">19x</span>
351
+ <span class="cline-any cline-yes">19x</span>
352
+ <span class="cline-any cline-yes">19x</span>
353
+ <span class="cline-any cline-yes">19x</span>
354
+ <span class="cline-any cline-yes">19x</span>
355
+ <span class="cline-any cline-yes">19x</span>
356
+ <span class="cline-any cline-yes">19x</span>
357
+ <span class="cline-any cline-yes">19x</span>
358
+ <span class="cline-any cline-neutral">&nbsp;</span>
359
+ <span class="cline-any cline-yes">19x</span>
360
+ <span class="cline-any cline-yes">8x</span>
361
+ <span class="cline-any cline-neutral">&nbsp;</span>
362
+ <span class="cline-any cline-neutral">&nbsp;</span>
363
+ <span class="cline-any cline-neutral">&nbsp;</span>
364
+ <span class="cline-any cline-neutral">&nbsp;</span>
365
+ <span class="cline-any cline-yes">11x</span>
366
+ <span class="cline-any cline-neutral">&nbsp;</span>
367
+ <span class="cline-any cline-neutral">&nbsp;</span>
368
+ <span class="cline-any cline-neutral">&nbsp;</span>
369
+ <span class="cline-any cline-neutral">&nbsp;</span>
370
+ <span class="cline-any cline-yes">11x</span>
371
+ <span class="cline-any cline-neutral">&nbsp;</span>
372
+ <span class="cline-any cline-neutral">&nbsp;</span>
373
+ <span class="cline-any cline-neutral">&nbsp;</span>
374
+ <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-neutral">&nbsp;</span>
380
+ <span class="cline-any cline-yes">2x</span>
381
+ <span class="cline-any cline-neutral">&nbsp;</span>
382
+ <span class="cline-any cline-yes">2x</span>
383
+ <span class="cline-any cline-neutral">&nbsp;</span>
384
+ <span class="cline-any cline-neutral">&nbsp;</span>
385
+ <span class="cline-any cline-neutral">&nbsp;</span>
386
+ <span class="cline-any cline-yes">1x</span>
387
+ <span class="cline-any cline-yes">1x</span>
388
+ <span class="cline-any cline-neutral">&nbsp;</span>
389
+ <span class="cline-any cline-neutral">&nbsp;</span>
390
+ <span class="cline-any cline-yes">2x</span>
391
+ <span class="cline-any cline-neutral">&nbsp;</span>
392
+ <span class="cline-any cline-neutral">&nbsp;</span>
393
+ <span class="cline-any cline-neutral">&nbsp;</span>
394
+ <span class="cline-any cline-no">&nbsp;</span>
395
+ <span class="cline-any cline-no">&nbsp;</span>
396
+ <span class="cline-any cline-no">&nbsp;</span>
397
+ <span class="cline-any cline-no">&nbsp;</span>
398
+ <span class="cline-any cline-no">&nbsp;</span>
399
+ <span class="cline-any cline-no">&nbsp;</span>
400
+ <span class="cline-any cline-neutral">&nbsp;</span>
401
+ <span class="cline-any cline-neutral">&nbsp;</span>
402
+ <span class="cline-any cline-no">&nbsp;</span>
403
+ <span class="cline-any cline-neutral">&nbsp;</span>
404
+ <span class="cline-any cline-neutral">&nbsp;</span>
405
+ <span class="cline-any cline-neutral">&nbsp;</span>
406
+ <span class="cline-any cline-neutral">&nbsp;</span>
407
+ <span class="cline-any cline-yes">78x</span>
408
+ <span class="cline-any cline-neutral">&nbsp;</span>
409
+ <span class="cline-any cline-yes">78x</span>
410
+ <span class="cline-any cline-yes">76x</span>
411
+ <span class="cline-any cline-neutral">&nbsp;</span>
412
+ <span class="cline-any cline-neutral">&nbsp;</span>
413
+ <span class="cline-any cline-neutral">&nbsp;</span>
414
+ <span class="cline-any cline-neutral">&nbsp;</span>
415
+ <span class="cline-any cline-neutral">&nbsp;</span>
416
+ <span class="cline-any cline-neutral">&nbsp;</span>
417
+ <span class="cline-any cline-yes">76x</span>
418
+ <span class="cline-any cline-yes">76x</span>
419
+ <span class="cline-any cline-neutral">&nbsp;</span>
420
+ <span class="cline-any cline-neutral">&nbsp;</span>
421
+ <span class="cline-any cline-no">&nbsp;</span>
422
+ <span class="cline-any cline-neutral">&nbsp;</span>
423
+ <span class="cline-any cline-no">&nbsp;</span>
424
+ <span class="cline-any cline-neutral">&nbsp;</span>
425
+ <span class="cline-any cline-no">&nbsp;</span>
426
+ <span class="cline-any cline-neutral">&nbsp;</span>
427
+ <span class="cline-any cline-no">&nbsp;</span>
428
+ <span class="cline-any cline-no">&nbsp;</span>
429
+ <span class="cline-any cline-neutral">&nbsp;</span>
430
+ <span class="cline-any cline-neutral">&nbsp;</span>
431
+ <span class="cline-any cline-neutral">&nbsp;</span>
432
+ <span class="cline-any cline-neutral">&nbsp;</span>
433
+ <span class="cline-any cline-neutral">&nbsp;</span>
434
+ <span class="cline-any cline-neutral">&nbsp;</span>
435
+ <span class="cline-any cline-neutral">&nbsp;</span>
436
+ <span class="cline-any cline-neutral">&nbsp;</span>
437
+ <span class="cline-any cline-neutral">&nbsp;</span>
438
+ <span class="cline-any cline-neutral">&nbsp;</span>
439
+ <span class="cline-any cline-neutral">&nbsp;</span>
440
+ <span class="cline-any cline-neutral">&nbsp;</span>
441
+ <span class="cline-any cline-neutral">&nbsp;</span>
442
+ <span class="cline-any cline-neutral">&nbsp;</span>
443
+ <span class="cline-any cline-yes">14x</span>
444
+ <span class="cline-any cline-neutral">&nbsp;</span>
445
+ <span class="cline-any cline-yes">14x</span>
446
+ <span class="cline-any cline-neutral">&nbsp;</span>
447
+ <span class="cline-any cline-neutral">&nbsp;</span>
448
+ <span class="cline-any cline-neutral">&nbsp;</span>
449
+ <span class="cline-any cline-neutral">&nbsp;</span>
450
+ <span class="cline-any cline-neutral">&nbsp;</span>
451
+ <span class="cline-any cline-neutral">&nbsp;</span>
452
+ <span class="cline-any cline-neutral">&nbsp;</span>
453
+ <span class="cline-any cline-neutral">&nbsp;</span>
454
+ <span class="cline-any cline-yes">10x</span>
455
+ <span class="cline-any cline-yes">5x</span>
456
+ <span class="cline-any cline-neutral">&nbsp;</span>
457
+ <span class="cline-any cline-yes">5x</span>
458
+ <span class="cline-any cline-neutral">&nbsp;</span>
459
+ <span class="cline-any cline-yes">5x</span>
460
+ <span class="cline-any cline-neutral">&nbsp;</span>
461
+ <span class="cline-any cline-neutral">&nbsp;</span>
462
+ <span class="cline-any cline-neutral">&nbsp;</span>
463
+ <span class="cline-any cline-neutral">&nbsp;</span>
464
+ <span class="cline-any cline-neutral">&nbsp;</span>
465
+ <span class="cline-any cline-neutral">&nbsp;</span>
466
+ <span class="cline-any cline-neutral">&nbsp;</span>
467
+ <span class="cline-any cline-neutral">&nbsp;</span>
468
+ <span class="cline-any cline-neutral">&nbsp;</span>
469
+ <span class="cline-any cline-neutral">&nbsp;</span>
470
+ <span class="cline-any cline-neutral">&nbsp;</span>
471
+ <span class="cline-any cline-neutral">&nbsp;</span>
472
+ <span class="cline-any cline-yes">6x</span>
473
+ <span class="cline-any cline-yes">4x</span>
474
+ <span class="cline-any cline-neutral">&nbsp;</span>
475
+ <span class="cline-any cline-yes">2x</span>
476
+ <span class="cline-any cline-neutral">&nbsp;</span>
477
+ <span class="cline-any cline-neutral">&nbsp;</span>
478
+ <span class="cline-any cline-neutral">&nbsp;</span>
479
+ <span class="cline-any cline-neutral">&nbsp;</span>
480
+ <span class="cline-any cline-neutral">&nbsp;</span>
481
+ <span class="cline-any cline-neutral">&nbsp;</span>
482
+ <span class="cline-any cline-neutral">&nbsp;</span>
483
+ <span class="cline-any cline-neutral">&nbsp;</span>
484
+ <span class="cline-any cline-neutral">&nbsp;</span>
485
+ <span class="cline-any cline-yes">8x</span>
486
+ <span class="cline-any cline-neutral">&nbsp;</span>
487
+ <span class="cline-any cline-neutral">&nbsp;</span>
488
+ <span class="cline-any cline-neutral">&nbsp;</span>
489
+ <span class="cline-any cline-neutral">&nbsp;</span>
490
+ <span class="cline-any cline-neutral">&nbsp;</span>
491
+ <span class="cline-any cline-neutral">&nbsp;</span>
492
+ <span class="cline-any cline-yes">1x</span>
493
+ <span class="cline-any cline-neutral">&nbsp;</span>
494
+ <span class="cline-any cline-neutral">&nbsp;</span>
495
+ <span class="cline-any cline-neutral">&nbsp;</span>
496
+ <span class="cline-any cline-neutral">&nbsp;</span>
497
+ <span class="cline-any cline-neutral">&nbsp;</span>
498
+ <span class="cline-any cline-neutral">&nbsp;</span>
499
+ <span class="cline-any cline-neutral">&nbsp;</span>
500
+ <span class="cline-any cline-neutral">&nbsp;</span>
501
+ <span class="cline-any cline-neutral">&nbsp;</span>
502
+ <span class="cline-any cline-yes">2x</span>
503
+ <span class="cline-any cline-neutral">&nbsp;</span>
504
+ <span class="cline-any cline-neutral">&nbsp;</span>
505
+ <span class="cline-any cline-neutral">&nbsp;</span>
506
+ <span class="cline-any cline-neutral">&nbsp;</span>
507
+ <span class="cline-any cline-neutral">&nbsp;</span>
508
+ <span class="cline-any cline-neutral">&nbsp;</span>
509
+ <span class="cline-any cline-neutral">&nbsp;</span>
510
+ <span class="cline-any cline-neutral">&nbsp;</span>
511
+ <span class="cline-any cline-neutral">&nbsp;</span>
512
+ <span class="cline-any cline-yes">1x</span>
513
+ <span class="cline-any cline-neutral">&nbsp;</span>
514
+ <span class="cline-any cline-neutral">&nbsp;</span>
515
+ <span class="cline-any cline-yes">1x</span>
516
+ <span class="cline-any cline-neutral">&nbsp;</span>
517
+ <span class="cline-any cline-neutral">&nbsp;</span>
518
+ <span class="cline-any cline-neutral">&nbsp;</span>
519
+ <span class="cline-any cline-yes">1x</span>
520
+ <span class="cline-any cline-neutral">&nbsp;</span>
521
+ <span class="cline-any cline-neutral">&nbsp;</span>
522
+ <span class="cline-any cline-neutral">&nbsp;</span>
523
+ <span class="cline-any cline-neutral">&nbsp;</span>
524
+ <span class="cline-any cline-neutral">&nbsp;</span>
525
+ <span class="cline-any cline-neutral">&nbsp;</span>
526
+ <span class="cline-any cline-yes">1x</span>
527
+ <span class="cline-any cline-no">&nbsp;</span>
528
+ <span class="cline-any cline-neutral">&nbsp;</span>
529
+ <span class="cline-any cline-yes">1x</span>
530
+ <span class="cline-any cline-yes">1x</span>
531
+ <span class="cline-any cline-neutral">&nbsp;</span>
532
+ <span class="cline-any cline-neutral">&nbsp;</span>
533
+ <span class="cline-any cline-neutral">&nbsp;</span>
534
+ <span class="cline-any cline-yes">22x</span>
535
+ <span class="cline-any cline-neutral">&nbsp;</span>
536
+ <span class="cline-any cline-neutral">&nbsp;</span>
537
+ <span class="cline-any cline-neutral">&nbsp;</span>
538
+ <span class="cline-any cline-neutral">&nbsp;</span>
539
+ <span class="cline-any cline-neutral">&nbsp;</span>
540
+ <span class="cline-any cline-neutral">&nbsp;</span>
541
+ <span class="cline-any cline-neutral">&nbsp;</span>
542
+ <span class="cline-any cline-neutral">&nbsp;</span>
543
+ <span class="cline-any cline-neutral">&nbsp;</span>
544
+ <span class="cline-any cline-neutral">&nbsp;</span>
545
+ <span class="cline-any cline-neutral">&nbsp;</span>
546
+ <span class="cline-any cline-neutral">&nbsp;</span>
547
+ <span class="cline-any cline-neutral">&nbsp;</span>
548
+ <span class="cline-any cline-neutral">&nbsp;</span>
549
+ <span class="cline-any cline-neutral">&nbsp;</span>
550
+ <span class="cline-any cline-neutral">&nbsp;</span>
551
+ <span class="cline-any cline-neutral">&nbsp;</span>
552
+ <span class="cline-any cline-neutral">&nbsp;</span>
553
+ <span class="cline-any cline-neutral">&nbsp;</span>
554
+ <span class="cline-any cline-neutral">&nbsp;</span>
555
+ <span class="cline-any cline-neutral">&nbsp;</span>
556
+ <span class="cline-any cline-neutral">&nbsp;</span>
557
+ <span class="cline-any cline-neutral">&nbsp;</span>
558
+ <span class="cline-any cline-neutral">&nbsp;</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-neutral">&nbsp;</span>
561
+ <span class="cline-any cline-neutral">&nbsp;</span>
562
+ <span class="cline-any cline-neutral">&nbsp;</span>
563
+ <span class="cline-any cline-neutral">&nbsp;</span>
564
+ <span class="cline-any cline-neutral">&nbsp;</span>
565
+ <span class="cline-any cline-neutral">&nbsp;</span>
566
+ <span class="cline-any cline-neutral">&nbsp;</span>
567
+ <span class="cline-any cline-neutral">&nbsp;</span>
568
+ <span class="cline-any cline-neutral">&nbsp;</span>
569
+ <span class="cline-any cline-neutral">&nbsp;</span>
570
+ <span class="cline-any cline-neutral">&nbsp;</span>
571
+ <span class="cline-any cline-neutral">&nbsp;</span>
572
+ <span class="cline-any cline-neutral">&nbsp;</span>
573
+ <span class="cline-any cline-neutral">&nbsp;</span>
574
+ <span class="cline-any cline-neutral">&nbsp;</span>
575
+ <span class="cline-any cline-neutral">&nbsp;</span>
576
+ <span class="cline-any cline-neutral">&nbsp;</span>
577
+ <span class="cline-any cline-yes">3x</span>
578
+ <span class="cline-any cline-neutral">&nbsp;</span>
579
+ <span class="cline-any cline-neutral">&nbsp;</span>
580
+ <span class="cline-any cline-neutral">&nbsp;</span>
581
+ <span class="cline-any cline-neutral">&nbsp;</span>
582
+ <span class="cline-any cline-neutral">&nbsp;</span>
583
+ <span class="cline-any cline-yes">3x</span>
584
+ <span class="cline-any cline-neutral">&nbsp;</span>
585
+ <span class="cline-any cline-neutral">&nbsp;</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
587
+ <span class="cline-any cline-neutral">&nbsp;</span>
588
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import React, { Component } from 'react';
589
+ import PropTypes from 'prop-types';
590
+ import cookie from 'cookie';
591
+ import retry from 'retry';
592
+ import jwtDecode from 'jwt-decode';
593
+ &nbsp;
594
+ import Modal from './Modal';
595
+ import RefreshSession from '../session/refresh';
596
+ import LogoutSession from '../session/logout';
597
+ import fetchTtl from '../session/ttl';
598
+ &nbsp;
599
+ const fetchTtlIntervalMs = 60000;
600
+ &nbsp;
601
+ export default class SessionDialogUI extends Component {
602
+ /**
603
+ * Create a SessionDialogUI component.
604
+ * @param {object} props - Configuration options. See SessionDialog for more
605
+ */
606
+ constructor(props) {
607
+ super(props);
608
+ &nbsp;
609
+ this.handleOpenModal = this.handleOpenModal.bind(this);
610
+ this.handleCloseModal = this.handleCloseModal.bind(this);
611
+ this.refreshSession = this.refreshSession.bind(this);
612
+ this.signOut = this.signOut.bind(this);
613
+ this.startTimer = this.startTimer.bind(this);
614
+ this.shouldShowDialog = this.shouldShowDialog.bind(this);
615
+ this.shouldSignOut = this.shouldSignOut.bind(this);
616
+ this.minutesUntil = this.minutesUntil.bind(this);
617
+ this.checkExpiry = this.checkExpiry.bind(this);
618
+ this.onInterval = this.onInterval.bind(this);
619
+ &nbsp;
620
+ if (props.showImmediate === true) {
621
+ this.state = {
622
+ showModal: true,
623
+ showError: false,
624
+ };
625
+ } else {
626
+ this.state = {
627
+ showModal: false,
628
+ showError: false,
629
+ };
630
+ &nbsp;
631
+ this.startTimer();
632
+ }
633
+ }
634
+ &nbsp;
635
+ /**
636
+ * Extracts the token exp value as a JavaScript date.
637
+ * @param {Object} cookies - An object representation of the cookie store
638
+ * @returns {(date|null)} The token expiration date, if found
639
+ */
640
+ getTokenExpiry(cookies) {
641
+ let expiry = null;
642
+ &nbsp;
643
+ if (cookies.hasOwnProperty('qpp_auth_token') &amp;&amp; cookies.qpp_auth_token) {
644
+ // See https://tools.ietf.org/html/rfc7519
645
+ // `exp` is a NumericDate representing "seconds since the epoch"
646
+ // and it needs to be milliseconds to get a JavaScript date from it.
647
+ const { exp } = jwtDecode(cookies.qpp_auth_token);
648
+ expiry = new Date(exp * 1000);
649
+ }
650
+ &nbsp;
651
+ return expiry;
652
+ }
653
+ &nbsp;
654
+ <span class="fstat-no" title="function not covered" > ch</span>eckExpiry(expiry) {
655
+ <span class="cstat-no" title="statement not covered" > if (expiry) {</span>
656
+ <span class="cstat-no" title="statement not covered" > if (this.shouldShowDialog(expiry)) {</span>
657
+ <span class="cstat-no" title="statement not covered" > this.handleOpenModal();</span>
658
+ } else <span class="cstat-no" title="statement not covered" >if (this.shouldSignOut(expiry)) {</span>
659
+ <span class="cstat-no" title="statement not covered" > this.signOut();</span>
660
+ <span class="cstat-no" title="statement not covered" > clearInterval(this.warningInterval);</span>
661
+ }
662
+ } else {
663
+ <span class="cstat-no" title="statement not covered" > clearInterval(this.warningInterval);</span>
664
+ }
665
+ }
666
+ &nbsp;
667
+ onInterval() {
668
+ const cookies = cookie.parse(document.cookie);
669
+ &nbsp;
670
+ if (cookies.hasOwnProperty('qpp_auth_token') &amp;&amp; cookies.qpp_auth_token) {
671
+ const operation = retry.operation({
672
+ retries: 5,
673
+ factor: 1,
674
+ minTimeout: 1000,
675
+ maxTimeout: 1000,
676
+ });
677
+ &nbsp;
678
+ operation.attempt(() =&gt; {
679
+ fetchTtl(cookies.qpp_auth_token)
680
+ .then(this.checkExpiry)
681
+ .catch(<span class="fstat-no" title="function not covered" >(e</span>rror) =&gt; {
682
+ <span class="cstat-no" title="statement not covered" > if (operation.retry(error)) {</span>
683
+ // try again before giving up
684
+ <span class="cstat-no" title="statement not covered" > return;</span>
685
+ }
686
+ <span class="cstat-no" title="statement not covered" > clearInterval(this.warningInterval);</span>
687
+ // sign an inactive user out
688
+ <span class="cstat-no" title="statement not covered" > this.forceTimeoutHandle = setTimeout(this.signOut, 120 * 1000);</span>
689
+ <span class="cstat-no" title="statement not covered" > this.setState({</span>
690
+ showModal: false,
691
+ showError: true,
692
+ });
693
+ });
694
+ });
695
+ }
696
+ }
697
+ &nbsp;
698
+ /**
699
+ * Checks whether the user is within a specified number of minutes before
700
+ * their session token expires. If so, show a warning dialog. If the
701
+ * expiration has been reached, sign the user out.
702
+ */
703
+ startTimer() {
704
+ clearInterval(this.warningInterval);
705
+ &nbsp;
706
+ this.warningInterval = setInterval(this.onInterval, fetchTtlIntervalMs);
707
+ }
708
+ &nbsp;
709
+ /**
710
+ * Returns whether the current time is within the timeout range of expiry.
711
+ * @param {date|number} expiry - Expiration date to check against
712
+ * @returns {boolean}
713
+ */
714
+ shouldShowDialog(expiry) {
715
+ if (typeof expiry === 'number') {
716
+ const minutesLeft = expiry / 60;
717
+ &nbsp;
718
+ return !this.state.showModal &amp;&amp; minutesLeft &lt;= this.props.warningTimeout;
719
+ } else {
720
+ return (
721
+ !this.state.showModal &amp;&amp;
722
+ this.minutesUntil(expiry) &lt;= this.props.warningTimeout
723
+ );
724
+ }
725
+ }
726
+ &nbsp;
727
+ /**
728
+ * Returns whether the current time has reached the expiration date.
729
+ * @param {date|number} expiry - Expiration date to check against
730
+ * @returns {boolean}
731
+ */
732
+ shouldSignOut(expiry) {
733
+ if (typeof expiry === 'number') {
734
+ return expiry &lt;= 1;
735
+ } else {
736
+ return this.minutesUntil(expiry) &lt;= 0;
737
+ }
738
+ }
739
+ &nbsp;
740
+ /**
741
+ * Returns number of minutes until the expiration date.
742
+ * @param {date} expiry - Expiration date to check against
743
+ * @returns {number}
744
+ */
745
+ minutesUntil(expiry) {
746
+ return (expiry - new Date().getTime()) / 60000;
747
+ }
748
+ &nbsp;
749
+ /**
750
+ * Sets the modal state to visible.
751
+ */
752
+ handleOpenModal() {
753
+ this.setState({
754
+ showModal: true,
755
+ showError: false,
756
+ });
757
+ }
758
+ &nbsp;
759
+ /**
760
+ * Sets the modal state to hidden.
761
+ */
762
+ handleCloseModal() {
763
+ this.setState({
764
+ showModal: false,
765
+ showError: false,
766
+ });
767
+ }
768
+ &nbsp;
769
+ /**
770
+ * Handles the user requesting their session be extended.
771
+ */
772
+ refreshSession() {
773
+ RefreshSession({
774
+ window,
775
+ onSuccess: () =&gt; {
776
+ this.startTimer();
777
+ },
778
+ });
779
+ &nbsp;
780
+ this.handleCloseModal();
781
+ }
782
+ &nbsp;
783
+ /**
784
+ * Handles the user requesting their session be ended.
785
+ */
786
+ signOut() {
787
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.forceTimeoutHandle) {
788
+ <span class="cstat-no" title="statement not covered" > clearTimeout(this.forceTimeoutHandle);</span>
789
+ }
790
+ LogoutSession(window);
791
+ this.handleCloseModal();
792
+ }
793
+ &nbsp;
794
+ render() {
795
+ return (
796
+ &lt;React.Fragment&gt;
797
+ &lt;Modal
798
+ useDesignSystem
799
+ title="You will be signed out within two minutes"
800
+ isOpen={this.state.showModal}
801
+ primary={{
802
+ title: 'Keep me signed in',
803
+ onClick: this.refreshSession,
804
+ }}
805
+ secondary={{
806
+ title: 'Sign me out now',
807
+ onClick: this.signOut,
808
+ }}
809
+ onRequestClose={this.handleCloseModal}
810
+ &gt;
811
+ &lt;p&gt;
812
+ You have been inactive for thirty minutes. For your security, we
813
+ will sign you out automatically.
814
+ &lt;/p&gt;
815
+ &lt;/Modal&gt;
816
+ &nbsp;
817
+ &lt;Modal
818
+ useDesignSystem
819
+ title="Technical Difficulties"
820
+ isOpen={this.state.showError}
821
+ primary={{
822
+ title: 'Sign Out',
823
+ onClick: this.signOut,
824
+ }}
825
+ onRequestClose={this.signOut}
826
+ &gt;
827
+ &lt;p&gt;
828
+ We’re experiencing technical difficulties. Please log in again to
829
+ continue. For your security, we will sign you out automatically
830
+ within two minutes.
831
+ &lt;/p&gt;
832
+ &lt;/Modal&gt;
833
+ &lt;/React.Fragment&gt;
834
+ );
835
+ }
836
+ }
837
+ &nbsp;
838
+ SessionDialogUI.propTypes = {
839
+ showImmediate: PropTypes.bool,
840
+ warningTimeout: PropTypes.number,
841
+ appElement: PropTypes.string,
842
+ };
843
+ &nbsp;
844
+ SessionDialogUI.defaultProps = {
845
+ showImmediate: false,
846
+ warningTimeout: 2,
847
+ appElement: undefined,
848
+ };
849
+ &nbsp;</pre></td></tr></table></pre>
850
+
851
+ <div class='push'></div><!-- for sticky footer -->
852
+ </div><!-- /wrapper -->
853
+ <div class='footer quiet pad2 space-top1 center small'>
854
+ Code coverage generated by
855
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
856
+ at Tue May 10 2022 11:18:12 GMT-0400 (Eastern Daylight Time)
857
+ </div>
858
+ <script src="../../prettify.js"></script>
859
+ <script>
860
+ window.onload = function () {
861
+ prettyPrint();
862
+ };
863
+ </script>
864
+ <script src="../../sorter.js"></script>
865
+ <script src="../../block-navigation.js"></script>
866
+ </body>
867
+ </html>
868
+