@openreplay/tracker 11.0.1 → 11.0.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 (71) hide show
  1. package/cjs/app/index.js +1 -1
  2. package/cjs/index.js +1 -1
  3. package/cjs/modules/Network/fetchProxy.js +4 -2
  4. package/coverage/clover.xml +829 -560
  5. package/coverage/coverage-final.json +9 -8
  6. package/coverage/lcov-report/index.html +39 -39
  7. package/coverage/lcov-report/main/app/canvas.ts.html +1 -1
  8. package/coverage/lcov-report/main/app/guards.ts.html +1 -1
  9. package/coverage/lcov-report/main/app/index.html +9 -9
  10. package/coverage/lcov-report/main/app/index.ts.html +859 -37
  11. package/coverage/lcov-report/main/app/logger.ts.html +1 -1
  12. package/coverage/lcov-report/main/app/messages.gen.ts.html +1 -1
  13. package/coverage/lcov-report/main/app/nodes.ts.html +1 -1
  14. package/coverage/lcov-report/main/app/observer/iframe_observer.ts.html +1 -1
  15. package/coverage/lcov-report/main/app/observer/iframe_offsets.ts.html +1 -1
  16. package/coverage/lcov-report/main/app/observer/index.html +1 -1
  17. package/coverage/lcov-report/main/app/observer/shadow_root_observer.ts.html +1 -1
  18. package/coverage/lcov-report/main/app/observer/top_observer.ts.html +1 -1
  19. package/coverage/lcov-report/main/app/sanitizer.ts.html +1 -1
  20. package/coverage/lcov-report/main/app/session.ts.html +1 -1
  21. package/coverage/lcov-report/main/app/ticker.ts.html +1 -1
  22. package/coverage/lcov-report/main/index.html +9 -9
  23. package/coverage/lcov-report/main/index.ts.html +247 -100
  24. package/coverage/lcov-report/main/modules/Network/beaconProxy.ts.html +1 -1
  25. package/coverage/lcov-report/main/modules/Network/fetchProxy.ts.html +1 -1
  26. package/coverage/lcov-report/main/modules/Network/index.html +1 -1
  27. package/coverage/lcov-report/main/modules/Network/index.ts.html +1 -1
  28. package/coverage/lcov-report/main/modules/Network/networkMessage.ts.html +1 -1
  29. package/coverage/lcov-report/main/modules/Network/utils.ts.html +1 -1
  30. package/coverage/lcov-report/main/modules/Network/xhrProxy.ts.html +1 -1
  31. package/coverage/lcov-report/main/modules/attributeSender.ts.html +1 -1
  32. package/coverage/lcov-report/main/modules/axiosSpy.ts.html +1 -1
  33. package/coverage/lcov-report/main/modules/conditionsManager.ts.html +799 -0
  34. package/coverage/lcov-report/main/modules/connection.ts.html +1 -1
  35. package/coverage/lcov-report/main/modules/console.ts.html +1 -1
  36. package/coverage/lcov-report/main/modules/constructedStyleSheets.ts.html +1 -1
  37. package/coverage/lcov-report/main/modules/cssrules.ts.html +1 -1
  38. package/coverage/lcov-report/main/modules/exception.ts.html +1 -1
  39. package/coverage/lcov-report/main/modules/featureFlags.ts.html +10 -7
  40. package/coverage/lcov-report/main/modules/focus.ts.html +1 -1
  41. package/coverage/lcov-report/main/modules/fonts.ts.html +1 -1
  42. package/coverage/lcov-report/main/modules/img.ts.html +1 -1
  43. package/coverage/lcov-report/main/modules/index.html +27 -12
  44. package/coverage/lcov-report/main/modules/input.ts.html +1 -1
  45. package/coverage/lcov-report/main/modules/mouse.ts.html +1 -1
  46. package/coverage/lcov-report/main/modules/network.ts.html +1 -1
  47. package/coverage/lcov-report/main/modules/performance.ts.html +1 -1
  48. package/coverage/lcov-report/main/modules/scroll.ts.html +1 -1
  49. package/coverage/lcov-report/main/modules/selection.ts.html +1 -1
  50. package/coverage/lcov-report/main/modules/tabs.ts.html +1 -1
  51. package/coverage/lcov-report/main/modules/timing.ts.html +1 -1
  52. package/coverage/lcov-report/main/modules/userTesting/SignalManager.ts.html +89 -80
  53. package/coverage/lcov-report/main/modules/userTesting/dnd.ts.html +1 -1
  54. package/coverage/lcov-report/main/modules/userTesting/index.html +37 -37
  55. package/coverage/lcov-report/main/modules/userTesting/index.ts.html +24 -21
  56. package/coverage/lcov-report/main/modules/userTesting/recorder.ts.html +1 -1
  57. package/coverage/lcov-report/main/modules/userTesting/styles.ts.html +56 -56
  58. package/coverage/lcov-report/main/modules/userTesting/utils.ts.html +27 -24
  59. package/coverage/lcov-report/main/modules/viewport.ts.html +1 -1
  60. package/coverage/lcov-report/main/utils.ts.html +1 -1
  61. package/coverage/lcov-report/webworker/BatchWriter.ts.html +1 -1
  62. package/coverage/lcov-report/webworker/MessageEncoder.gen.ts.html +1 -1
  63. package/coverage/lcov-report/webworker/PrimitiveEncoder.ts.html +1 -1
  64. package/coverage/lcov-report/webworker/QueueSender.ts.html +1 -1
  65. package/coverage/lcov-report/webworker/index.html +5 -5
  66. package/coverage/lcov-report/webworker/index.ts.html +15 -9
  67. package/coverage/lcov.info +1517 -993
  68. package/lib/app/index.js +1 -1
  69. package/lib/index.js +1 -1
  70. package/lib/modules/Network/fetchProxy.js +4 -2
  71. package/package.json +2 -2
@@ -25,28 +25,28 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/319</span>
28
+ <span class='fraction'>0/452</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">0% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/190</span>
35
+ <span class='fraction'>0/240</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">0% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/62</span>
42
+ <span class='fraction'>0/75</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/309</span>
49
+ <span class='fraction'>0/441</span>
50
50
  </div>
51
51
 
52
52
 
@@ -896,7 +896,283 @@
896
896
  <a name='L831'></a><a href='#L831'>831</a>
897
897
  <a name='L832'></a><a href='#L832'>832</a>
898
898
  <a name='L833'></a><a href='#L833'>833</a>
899
- <a name='L834'></a><a href='#L834'>834</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
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>
1136
+ <a name='L1071'></a><a href='#L1071'>1071</a>
1137
+ <a name='L1072'></a><a href='#L1072'>1072</a>
1138
+ <a name='L1073'></a><a href='#L1073'>1073</a>
1139
+ <a name='L1074'></a><a href='#L1074'>1074</a>
1140
+ <a name='L1075'></a><a href='#L1075'>1075</a>
1141
+ <a name='L1076'></a><a href='#L1076'>1076</a>
1142
+ <a name='L1077'></a><a href='#L1077'>1077</a>
1143
+ <a name='L1078'></a><a href='#L1078'>1078</a>
1144
+ <a name='L1079'></a><a href='#L1079'>1079</a>
1145
+ <a name='L1080'></a><a href='#L1080'>1080</a>
1146
+ <a name='L1081'></a><a href='#L1081'>1081</a>
1147
+ <a name='L1082'></a><a href='#L1082'>1082</a>
1148
+ <a name='L1083'></a><a href='#L1083'>1083</a>
1149
+ <a name='L1084'></a><a href='#L1084'>1084</a>
1150
+ <a name='L1085'></a><a href='#L1085'>1085</a>
1151
+ <a name='L1086'></a><a href='#L1086'>1086</a>
1152
+ <a name='L1087'></a><a href='#L1087'>1087</a>
1153
+ <a name='L1088'></a><a href='#L1088'>1088</a>
1154
+ <a name='L1089'></a><a href='#L1089'>1089</a>
1155
+ <a name='L1090'></a><a href='#L1090'>1090</a>
1156
+ <a name='L1091'></a><a href='#L1091'>1091</a>
1157
+ <a name='L1092'></a><a href='#L1092'>1092</a>
1158
+ <a name='L1093'></a><a href='#L1093'>1093</a>
1159
+ <a name='L1094'></a><a href='#L1094'>1094</a>
1160
+ <a name='L1095'></a><a href='#L1095'>1095</a>
1161
+ <a name='L1096'></a><a href='#L1096'>1096</a>
1162
+ <a name='L1097'></a><a href='#L1097'>1097</a>
1163
+ <a name='L1098'></a><a href='#L1098'>1098</a>
1164
+ <a name='L1099'></a><a href='#L1099'>1099</a>
1165
+ <a name='L1100'></a><a href='#L1100'>1100</a>
1166
+ <a name='L1101'></a><a href='#L1101'>1101</a>
1167
+ <a name='L1102'></a><a href='#L1102'>1102</a>
1168
+ <a name='L1103'></a><a href='#L1103'>1103</a>
1169
+ <a name='L1104'></a><a href='#L1104'>1104</a>
1170
+ <a name='L1105'></a><a href='#L1105'>1105</a>
1171
+ <a name='L1106'></a><a href='#L1106'>1106</a>
1172
+ <a name='L1107'></a><a href='#L1107'>1107</a>
1173
+ <a name='L1108'></a><a href='#L1108'>1108</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
1174
+ <span class="cline-any cline-no">&nbsp;</span>
1175
+ <span class="cline-any cline-neutral">&nbsp;</span>
900
1176
  <span class="cline-any cline-no">&nbsp;</span>
901
1177
  <span class="cline-any cline-no">&nbsp;</span>
902
1178
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -951,6 +1227,7 @@
951
1227
  <span class="cline-any cline-no">&nbsp;</span>
952
1228
  <span class="cline-any cline-no">&nbsp;</span>
953
1229
  <span class="cline-any cline-no">&nbsp;</span>
1230
+ <span class="cline-any cline-no">&nbsp;</span>
954
1231
  <span class="cline-any cline-neutral">&nbsp;</span>
955
1232
  <span class="cline-any cline-neutral">&nbsp;</span>
956
1233
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -987,6 +1264,7 @@
987
1264
  <span class="cline-any cline-no">&nbsp;</span>
988
1265
  <span class="cline-any cline-no">&nbsp;</span>
989
1266
  <span class="cline-any cline-no">&nbsp;</span>
1267
+ <span class="cline-any cline-no">&nbsp;</span>
990
1268
  <span class="cline-any cline-neutral">&nbsp;</span>
991
1269
  <span class="cline-any cline-neutral">&nbsp;</span>
992
1270
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1042,6 +1320,12 @@
1042
1320
  <span class="cline-any cline-no">&nbsp;</span>
1043
1321
  <span class="cline-any cline-neutral">&nbsp;</span>
1044
1322
  <span class="cline-any cline-neutral">&nbsp;</span>
1323
+ <span class="cline-any cline-neutral">&nbsp;</span>
1324
+ <span class="cline-any cline-neutral">&nbsp;</span>
1325
+ <span class="cline-any cline-no">&nbsp;</span>
1326
+ <span class="cline-any cline-no">&nbsp;</span>
1327
+ <span class="cline-any cline-neutral">&nbsp;</span>
1328
+ <span class="cline-any cline-neutral">&nbsp;</span>
1045
1329
  <span class="cline-any cline-no">&nbsp;</span>
1046
1330
  <span class="cline-any cline-no">&nbsp;</span>
1047
1331
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1059,12 +1343,16 @@
1059
1343
  <span class="cline-any cline-neutral">&nbsp;</span>
1060
1344
  <span class="cline-any cline-no">&nbsp;</span>
1061
1345
  <span class="cline-any cline-neutral">&nbsp;</span>
1346
+ <span class="cline-any cline-no">&nbsp;</span>
1347
+ <span class="cline-any cline-neutral">&nbsp;</span>
1062
1348
  <span class="cline-any cline-neutral">&nbsp;</span>
1063
1349
  <span class="cline-any cline-neutral">&nbsp;</span>
1064
1350
  <span class="cline-any cline-neutral">&nbsp;</span>
1065
1351
  <span class="cline-any cline-neutral">&nbsp;</span>
1066
1352
  <span class="cline-any cline-neutral">&nbsp;</span>
1067
1353
  <span class="cline-any cline-no">&nbsp;</span>
1354
+ <span class="cline-any cline-neutral">&nbsp;</span>
1355
+ <span class="cline-any cline-no">&nbsp;</span>
1068
1356
  <span class="cline-any cline-no">&nbsp;</span>
1069
1357
  <span class="cline-any cline-no">&nbsp;</span>
1070
1358
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1109,6 +1397,7 @@
1109
1397
  <span class="cline-any cline-no">&nbsp;</span>
1110
1398
  <span class="cline-any cline-no">&nbsp;</span>
1111
1399
  <span class="cline-any cline-no">&nbsp;</span>
1400
+ <span class="cline-any cline-no">&nbsp;</span>
1112
1401
  <span class="cline-any cline-neutral">&nbsp;</span>
1113
1402
  <span class="cline-any cline-no">&nbsp;</span>
1114
1403
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1254,6 +1543,14 @@
1254
1543
  <span class="cline-any cline-neutral">&nbsp;</span>
1255
1544
  <span class="cline-any cline-neutral">&nbsp;</span>
1256
1545
  <span class="cline-any cline-no">&nbsp;</span>
1546
+ <span class="cline-any cline-no">&nbsp;</span>
1547
+ <span class="cline-any cline-no">&nbsp;</span>
1548
+ <span class="cline-any cline-no">&nbsp;</span>
1549
+ <span class="cline-any cline-neutral">&nbsp;</span>
1550
+ <span class="cline-any cline-no">&nbsp;</span>
1551
+ <span class="cline-any cline-neutral">&nbsp;</span>
1552
+ <span class="cline-any cline-no">&nbsp;</span>
1553
+ <span class="cline-any cline-neutral">&nbsp;</span>
1257
1554
  <span class="cline-any cline-neutral">&nbsp;</span>
1258
1555
  <span class="cline-any cline-neutral">&nbsp;</span>
1259
1556
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1265,6 +1562,10 @@
1265
1562
  <span class="cline-any cline-neutral">&nbsp;</span>
1266
1563
  <span class="cline-any cline-neutral">&nbsp;</span>
1267
1564
  <span class="cline-any cline-neutral">&nbsp;</span>
1565
+ <span class="cline-any cline-neutral">&nbsp;</span>
1566
+ <span class="cline-any cline-neutral">&nbsp;</span>
1567
+ <span class="cline-any cline-neutral">&nbsp;</span>
1568
+ <span class="cline-any cline-neutral">&nbsp;</span>
1268
1569
  <span class="cline-any cline-no">&nbsp;</span>
1269
1570
  <span class="cline-any cline-no">&nbsp;</span>
1270
1571
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1280,6 +1581,39 @@
1280
1581
  <span class="cline-any cline-no">&nbsp;</span>
1281
1582
  <span class="cline-any cline-neutral">&nbsp;</span>
1282
1583
  <span class="cline-any cline-neutral">&nbsp;</span>
1584
+ <span class="cline-any cline-neutral">&nbsp;</span>
1585
+ <span class="cline-any cline-neutral">&nbsp;</span>
1586
+ <span class="cline-any cline-neutral">&nbsp;</span>
1587
+ <span class="cline-any cline-neutral">&nbsp;</span>
1588
+ <span class="cline-any cline-neutral">&nbsp;</span>
1589
+ <span class="cline-any cline-neutral">&nbsp;</span>
1590
+ <span class="cline-any cline-no">&nbsp;</span>
1591
+ <span class="cline-any cline-no">&nbsp;</span>
1592
+ <span class="cline-any cline-no">&nbsp;</span>
1593
+ <span class="cline-any cline-no">&nbsp;</span>
1594
+ <span class="cline-any cline-no">&nbsp;</span>
1595
+ <span class="cline-any cline-no">&nbsp;</span>
1596
+ <span class="cline-any cline-no">&nbsp;</span>
1597
+ <span class="cline-any cline-neutral">&nbsp;</span>
1598
+ <span class="cline-any cline-neutral">&nbsp;</span>
1599
+ <span class="cline-any cline-neutral">&nbsp;</span>
1600
+ <span class="cline-any cline-neutral">&nbsp;</span>
1601
+ <span class="cline-any cline-no">&nbsp;</span>
1602
+ <span class="cline-any cline-no">&nbsp;</span>
1603
+ <span class="cline-any cline-neutral">&nbsp;</span>
1604
+ <span class="cline-any cline-no">&nbsp;</span>
1605
+ <span class="cline-any cline-neutral">&nbsp;</span>
1606
+ <span class="cline-any cline-neutral">&nbsp;</span>
1607
+ <span class="cline-any cline-neutral">&nbsp;</span>
1608
+ <span class="cline-any cline-neutral">&nbsp;</span>
1609
+ <span class="cline-any cline-no">&nbsp;</span>
1610
+ <span class="cline-any cline-no">&nbsp;</span>
1611
+ <span class="cline-any cline-no">&nbsp;</span>
1612
+ <span class="cline-any cline-neutral">&nbsp;</span>
1613
+ <span class="cline-any cline-neutral">&nbsp;</span>
1614
+ <span class="cline-any cline-no">&nbsp;</span>
1615
+ <span class="cline-any cline-neutral">&nbsp;</span>
1616
+ <span class="cline-any cline-neutral">&nbsp;</span>
1283
1617
  <span class="cline-any cline-no">&nbsp;</span>
1284
1618
  <span class="cline-any cline-neutral">&nbsp;</span>
1285
1619
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1448,10 +1782,60 @@
1448
1782
  <span class="cline-any cline-neutral">&nbsp;</span>
1449
1783
  <span class="cline-any cline-neutral">&nbsp;</span>
1450
1784
  <span class="cline-any cline-neutral">&nbsp;</span>
1785
+ <span class="cline-any cline-no">&nbsp;</span>
1786
+ <span class="cline-any cline-no">&nbsp;</span>
1787
+ <span class="cline-any cline-no">&nbsp;</span>
1788
+ <span class="cline-any cline-no">&nbsp;</span>
1789
+ <span class="cline-any cline-neutral">&nbsp;</span>
1790
+ <span class="cline-any cline-neutral">&nbsp;</span>
1791
+ <span class="cline-any cline-no">&nbsp;</span>
1792
+ <span class="cline-any cline-no">&nbsp;</span>
1793
+ <span class="cline-any cline-no">&nbsp;</span>
1794
+ <span class="cline-any cline-neutral">&nbsp;</span>
1795
+ <span class="cline-any cline-no">&nbsp;</span>
1796
+ <span class="cline-any cline-neutral">&nbsp;</span>
1797
+ <span class="cline-any cline-neutral">&nbsp;</span>
1798
+ <span class="cline-any cline-neutral">&nbsp;</span>
1799
+ <span class="cline-any cline-neutral">&nbsp;</span>
1800
+ <span class="cline-any cline-neutral">&nbsp;</span>
1801
+ <span class="cline-any cline-neutral">&nbsp;</span>
1802
+ <span class="cline-any cline-neutral">&nbsp;</span>
1803
+ <span class="cline-any cline-no">&nbsp;</span>
1804
+ <span class="cline-any cline-no">&nbsp;</span>
1805
+ <span class="cline-any cline-no">&nbsp;</span>
1806
+ <span class="cline-any cline-no">&nbsp;</span>
1451
1807
  <span class="cline-any cline-neutral">&nbsp;</span>
1452
1808
  <span class="cline-any cline-no">&nbsp;</span>
1453
1809
  <span class="cline-any cline-no">&nbsp;</span>
1810
+ <span class="cline-any cline-no">&nbsp;</span>
1811
+ <span class="cline-any cline-neutral">&nbsp;</span>
1812
+ <span class="cline-any cline-neutral">&nbsp;</span>
1813
+ <span class="cline-any cline-neutral">&nbsp;</span>
1814
+ <span class="cline-any cline-neutral">&nbsp;</span>
1815
+ <span class="cline-any cline-neutral">&nbsp;</span>
1816
+ <span class="cline-any cline-neutral">&nbsp;</span>
1817
+ <span class="cline-any cline-neutral">&nbsp;</span>
1818
+ <span class="cline-any cline-neutral">&nbsp;</span>
1819
+ <span class="cline-any cline-neutral">&nbsp;</span>
1820
+ <span class="cline-any cline-neutral">&nbsp;</span>
1454
1821
  <span class="cline-any cline-neutral">&nbsp;</span>
1822
+ <span class="cline-any cline-neutral">&nbsp;</span>
1823
+ <span class="cline-any cline-neutral">&nbsp;</span>
1824
+ <span class="cline-any cline-neutral">&nbsp;</span>
1825
+ <span class="cline-any cline-neutral">&nbsp;</span>
1826
+ <span class="cline-any cline-neutral">&nbsp;</span>
1827
+ <span class="cline-any cline-neutral">&nbsp;</span>
1828
+ <span class="cline-any cline-neutral">&nbsp;</span>
1829
+ <span class="cline-any cline-neutral">&nbsp;</span>
1830
+ <span class="cline-any cline-neutral">&nbsp;</span>
1831
+ <span class="cline-any cline-neutral">&nbsp;</span>
1832
+ <span class="cline-any cline-neutral">&nbsp;</span>
1833
+ <span class="cline-any cline-neutral">&nbsp;</span>
1834
+ <span class="cline-any cline-neutral">&nbsp;</span>
1835
+ <span class="cline-any cline-neutral">&nbsp;</span>
1836
+ <span class="cline-any cline-neutral">&nbsp;</span>
1837
+ <span class="cline-any cline-neutral">&nbsp;</span>
1838
+ <span class="cline-any cline-no">&nbsp;</span>
1455
1839
  <span class="cline-any cline-no">&nbsp;</span>
1456
1840
  <span class="cline-any cline-no">&nbsp;</span>
1457
1841
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1459,53 +1843,147 @@
1459
1843
  <span class="cline-any cline-neutral">&nbsp;</span>
1460
1844
  <span class="cline-any cline-neutral">&nbsp;</span>
1461
1845
  <span class="cline-any cline-neutral">&nbsp;</span>
1846
+ <span class="cline-any cline-neutral">&nbsp;</span>
1847
+ <span class="cline-any cline-neutral">&nbsp;</span>
1848
+ <span class="cline-any cline-no">&nbsp;</span>
1462
1849
  <span class="cline-any cline-no">&nbsp;</span>
1463
1850
  <span class="cline-any cline-no">&nbsp;</span>
1464
1851
  <span class="cline-any cline-neutral">&nbsp;</span>
1465
1852
  <span class="cline-any cline-no">&nbsp;</span>
1466
1853
  <span class="cline-any cline-no">&nbsp;</span>
1854
+ <span class="cline-any cline-no">&nbsp;</span>
1855
+ <span class="cline-any cline-no">&nbsp;</span>
1856
+ <span class="cline-any cline-no">&nbsp;</span>
1857
+ <span class="cline-any cline-no">&nbsp;</span>
1858
+ <span class="cline-any cline-no">&nbsp;</span>
1859
+ <span class="cline-any cline-no">&nbsp;</span>
1860
+ <span class="cline-any cline-neutral">&nbsp;</span>
1861
+ <span class="cline-any cline-no">&nbsp;</span>
1862
+ <span class="cline-any cline-no">&nbsp;</span>
1863
+ <span class="cline-any cline-no">&nbsp;</span>
1467
1864
  <span class="cline-any cline-neutral">&nbsp;</span>
1468
1865
  <span class="cline-any cline-no">&nbsp;</span>
1866
+ <span class="cline-any cline-no">&nbsp;</span>
1867
+ <span class="cline-any cline-no">&nbsp;</span>
1868
+ <span class="cline-any cline-no">&nbsp;</span>
1469
1869
  <span class="cline-any cline-neutral">&nbsp;</span>
1470
1870
  <span class="cline-any cline-no">&nbsp;</span>
1471
1871
  <span class="cline-any cline-neutral">&nbsp;</span>
1472
1872
  <span class="cline-any cline-no">&nbsp;</span>
1473
1873
  <span class="cline-any cline-neutral">&nbsp;</span>
1874
+ <span class="cline-any cline-no">&nbsp;</span>
1474
1875
  <span class="cline-any cline-neutral">&nbsp;</span>
1475
1876
  <span class="cline-any cline-neutral">&nbsp;</span>
1476
1877
  <span class="cline-any cline-neutral">&nbsp;</span>
1477
1878
  <span class="cline-any cline-neutral">&nbsp;</span>
1478
1879
  <span class="cline-any cline-no">&nbsp;</span>
1880
+ <span class="cline-any cline-neutral">&nbsp;</span>
1479
1881
  <span class="cline-any cline-no">&nbsp;</span>
1480
1882
  <span class="cline-any cline-neutral">&nbsp;</span>
1883
+ <span class="cline-any cline-no">&nbsp;</span>
1884
+ <span class="cline-any cline-no">&nbsp;</span>
1481
1885
  <span class="cline-any cline-neutral">&nbsp;</span>
1886
+ <span class="cline-any cline-no">&nbsp;</span>
1887
+ <span class="cline-any cline-no">&nbsp;</span>
1482
1888
  <span class="cline-any cline-neutral">&nbsp;</span>
1889
+ <span class="cline-any cline-no">&nbsp;</span>
1483
1890
  <span class="cline-any cline-neutral">&nbsp;</span>
1484
1891
  <span class="cline-any cline-neutral">&nbsp;</span>
1485
1892
  <span class="cline-any cline-neutral">&nbsp;</span>
1893
+ <span class="cline-any cline-no">&nbsp;</span>
1894
+ <span class="cline-any cline-no">&nbsp;</span>
1895
+ <span class="cline-any cline-no">&nbsp;</span>
1896
+ <span class="cline-any cline-no">&nbsp;</span>
1897
+ <span class="cline-any cline-no">&nbsp;</span>
1898
+ <span class="cline-any cline-no">&nbsp;</span>
1899
+ <span class="cline-any cline-no">&nbsp;</span>
1900
+ <span class="cline-any cline-no">&nbsp;</span>
1901
+ <span class="cline-any cline-no">&nbsp;</span>
1902
+ <span class="cline-any cline-no">&nbsp;</span>
1486
1903
  <span class="cline-any cline-neutral">&nbsp;</span>
1904
+ <span class="cline-any cline-no">&nbsp;</span>
1905
+ <span class="cline-any cline-no">&nbsp;</span>
1906
+ <span class="cline-any cline-no">&nbsp;</span>
1907
+ <span class="cline-any cline-no">&nbsp;</span>
1908
+ <span class="cline-any cline-no">&nbsp;</span>
1487
1909
  <span class="cline-any cline-neutral">&nbsp;</span>
1910
+ <span class="cline-any cline-no">&nbsp;</span>
1488
1911
  <span class="cline-any cline-neutral">&nbsp;</span>
1912
+ <span class="cline-any cline-no">&nbsp;</span>
1489
1913
  <span class="cline-any cline-neutral">&nbsp;</span>
1490
1914
  <span class="cline-any cline-no">&nbsp;</span>
1915
+ <span class="cline-any cline-neutral">&nbsp;</span>
1916
+ <span class="cline-any cline-neutral">&nbsp;</span>
1917
+ <span class="cline-any cline-neutral">&nbsp;</span>
1918
+ <span class="cline-any cline-neutral">&nbsp;</span>
1491
1919
  <span class="cline-any cline-no">&nbsp;</span>
1920
+ <span class="cline-any cline-neutral">&nbsp;</span>
1492
1921
  <span class="cline-any cline-no">&nbsp;</span>
1922
+ <span class="cline-any cline-neutral">&nbsp;</span>
1493
1923
  <span class="cline-any cline-no">&nbsp;</span>
1494
1924
  <span class="cline-any cline-no">&nbsp;</span>
1495
1925
  <span class="cline-any cline-neutral">&nbsp;</span>
1926
+ <span class="cline-any cline-neutral">&nbsp;</span>
1927
+ <span class="cline-any cline-neutral">&nbsp;</span>
1928
+ <span class="cline-any cline-neutral">&nbsp;</span>
1929
+ <span class="cline-any cline-neutral">&nbsp;</span>
1930
+ <span class="cline-any cline-neutral">&nbsp;</span>
1931
+ <span class="cline-any cline-neutral">&nbsp;</span>
1932
+ <span class="cline-any cline-neutral">&nbsp;</span>
1933
+ <span class="cline-any cline-neutral">&nbsp;</span>
1934
+ <span class="cline-any cline-neutral">&nbsp;</span>
1496
1935
  <span class="cline-any cline-no">&nbsp;</span>
1497
1936
  <span class="cline-any cline-neutral">&nbsp;</span>
1498
1937
  <span class="cline-any cline-neutral">&nbsp;</span>
1499
1938
  <span class="cline-any cline-neutral">&nbsp;</span>
1500
1939
  <span class="cline-any cline-neutral">&nbsp;</span>
1501
1940
  <span class="cline-any cline-neutral">&nbsp;</span>
1941
+ <span class="cline-any cline-neutral">&nbsp;</span>
1942
+ <span class="cline-any cline-no">&nbsp;</span>
1502
1943
  <span class="cline-any cline-no">&nbsp;</span>
1503
1944
  <span class="cline-any cline-neutral">&nbsp;</span>
1945
+ <span class="cline-any cline-no">&nbsp;</span>
1504
1946
  <span class="cline-any cline-neutral">&nbsp;</span>
1505
1947
  <span class="cline-any cline-neutral">&nbsp;</span>
1506
1948
  <span class="cline-any cline-neutral">&nbsp;</span>
1949
+ <span class="cline-any cline-no">&nbsp;</span>
1950
+ <span class="cline-any cline-no">&nbsp;</span>
1951
+ <span class="cline-any cline-no">&nbsp;</span>
1507
1952
  <span class="cline-any cline-neutral">&nbsp;</span>
1953
+ <span class="cline-any cline-no">&nbsp;</span>
1954
+ <span class="cline-any cline-no">&nbsp;</span>
1955
+ <span class="cline-any cline-no">&nbsp;</span>
1956
+ <span class="cline-any cline-no">&nbsp;</span>
1508
1957
  <span class="cline-any cline-neutral">&nbsp;</span>
1958
+ <span class="cline-any cline-no">&nbsp;</span>
1959
+ <span class="cline-any cline-neutral">&nbsp;</span>
1960
+ <span class="cline-any cline-neutral">&nbsp;</span>
1961
+ <span class="cline-any cline-neutral">&nbsp;</span>
1962
+ <span class="cline-any cline-neutral">&nbsp;</span>
1963
+ <span class="cline-any cline-no">&nbsp;</span>
1964
+ <span class="cline-any cline-no">&nbsp;</span>
1965
+ <span class="cline-any cline-no">&nbsp;</span>
1966
+ <span class="cline-any cline-neutral">&nbsp;</span>
1967
+ <span class="cline-any cline-no">&nbsp;</span>
1968
+ <span class="cline-any cline-no">&nbsp;</span>
1969
+ <span class="cline-any cline-no">&nbsp;</span>
1970
+ <span class="cline-any cline-neutral">&nbsp;</span>
1971
+ <span class="cline-any cline-neutral">&nbsp;</span>
1972
+ <span class="cline-any cline-no">&nbsp;</span>
1973
+ <span class="cline-any cline-no">&nbsp;</span>
1974
+ <span class="cline-any cline-neutral">&nbsp;</span>
1975
+ <span class="cline-any cline-no">&nbsp;</span>
1976
+ <span class="cline-any cline-neutral">&nbsp;</span>
1977
+ <span class="cline-any cline-no">&nbsp;</span>
1978
+ <span class="cline-any cline-neutral">&nbsp;</span>
1979
+ <span class="cline-any cline-no">&nbsp;</span>
1980
+ <span class="cline-any cline-neutral">&nbsp;</span>
1981
+ <span class="cline-any cline-neutral">&nbsp;</span>
1982
+ <span class="cline-any cline-neutral">&nbsp;</span>
1983
+ <span class="cline-any cline-neutral">&nbsp;</span>
1984
+ <span class="cline-any cline-neutral">&nbsp;</span>
1985
+ <span class="cline-any cline-no">&nbsp;</span>
1986
+ <span class="cline-any cline-no">&nbsp;</span>
1509
1987
  <span class="cline-any cline-neutral">&nbsp;</span>
1510
1988
  <span class="cline-any cline-neutral">&nbsp;</span>
1511
1989
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1518,10 +1996,14 @@
1518
1996
  <span class="cline-any cline-neutral">&nbsp;</span>
1519
1997
  <span class="cline-any cline-no">&nbsp;</span>
1520
1998
  <span class="cline-any cline-no">&nbsp;</span>
1999
+ <span class="cline-any cline-no">&nbsp;</span>
1521
2000
  <span class="cline-any cline-neutral">&nbsp;</span>
1522
2001
  <span class="cline-any cline-no">&nbsp;</span>
1523
2002
  <span class="cline-any cline-neutral">&nbsp;</span>
1524
2003
  <span class="cline-any cline-neutral">&nbsp;</span>
2004
+ <span class="cline-any cline-neutral">&nbsp;</span>
2005
+ <span class="cline-any cline-neutral">&nbsp;</span>
2006
+ <span class="cline-any cline-neutral">&nbsp;</span>
1525
2007
  <span class="cline-any cline-no">&nbsp;</span>
1526
2008
  <span class="cline-any cline-neutral">&nbsp;</span>
1527
2009
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1529,10 +2011,39 @@
1529
2011
  <span class="cline-any cline-neutral">&nbsp;</span>
1530
2012
  <span class="cline-any cline-neutral">&nbsp;</span>
1531
2013
  <span class="cline-any cline-neutral">&nbsp;</span>
2014
+ <span class="cline-any cline-neutral">&nbsp;</span>
2015
+ <span class="cline-any cline-neutral">&nbsp;</span>
2016
+ <span class="cline-any cline-neutral">&nbsp;</span>
2017
+ <span class="cline-any cline-neutral">&nbsp;</span>
2018
+ <span class="cline-any cline-neutral">&nbsp;</span>
2019
+ <span class="cline-any cline-neutral">&nbsp;</span>
2020
+ <span class="cline-any cline-neutral">&nbsp;</span>
2021
+ <span class="cline-any cline-neutral">&nbsp;</span>
2022
+ <span class="cline-any cline-neutral">&nbsp;</span>
2023
+ <span class="cline-any cline-neutral">&nbsp;</span>
2024
+ <span class="cline-any cline-neutral">&nbsp;</span>
2025
+ <span class="cline-any cline-neutral">&nbsp;</span>
1532
2026
  <span class="cline-any cline-no">&nbsp;</span>
1533
2027
  <span class="cline-any cline-no">&nbsp;</span>
1534
2028
  <span class="cline-any cline-neutral">&nbsp;</span>
1535
2029
  <span class="cline-any cline-no">&nbsp;</span>
2030
+ <span class="cline-any cline-neutral">&nbsp;</span>
2031
+ <span class="cline-any cline-neutral">&nbsp;</span>
2032
+ <span class="cline-any cline-no">&nbsp;</span>
2033
+ <span class="cline-any cline-neutral">&nbsp;</span>
2034
+ <span class="cline-any cline-neutral">&nbsp;</span>
2035
+ <span class="cline-any cline-neutral">&nbsp;</span>
2036
+ <span class="cline-any cline-neutral">&nbsp;</span>
2037
+ <span class="cline-any cline-neutral">&nbsp;</span>
2038
+ <span class="cline-any cline-neutral">&nbsp;</span>
2039
+ <span class="cline-any cline-no">&nbsp;</span>
2040
+ <span class="cline-any cline-no">&nbsp;</span>
2041
+ <span class="cline-any cline-no">&nbsp;</span>
2042
+ <span class="cline-any cline-no">&nbsp;</span>
2043
+ <span class="cline-any cline-neutral">&nbsp;</span>
2044
+ <span class="cline-any cline-no">&nbsp;</span>
2045
+ <span class="cline-any cline-no">&nbsp;</span>
2046
+ <span class="cline-any cline-no">&nbsp;</span>
1536
2047
  <span class="cline-any cline-no">&nbsp;</span>
1537
2048
  <span class="cline-any cline-neutral">&nbsp;</span>
1538
2049
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1563,6 +2074,8 @@
1563
2074
  <span class="cline-any cline-neutral">&nbsp;</span>
1564
2075
  <span class="cline-any cline-neutral">&nbsp;</span>
1565
2076
  <span class="cline-any cline-no">&nbsp;</span>
2077
+ <span class="cline-any cline-no">&nbsp;</span>
2078
+ <span class="cline-any cline-no">&nbsp;</span>
1566
2079
  <span class="cline-any cline-neutral">&nbsp;</span>
1567
2080
  <span class="cline-any cline-no">&nbsp;</span>
1568
2081
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1599,19 +2112,47 @@
1599
2112
  <span class="cline-any cline-no">&nbsp;</span>
1600
2113
  <span class="cline-any cline-no">&nbsp;</span>
1601
2114
  <span class="cline-any cline-neutral">&nbsp;</span>
2115
+ <span class="cline-any cline-no">&nbsp;</span>
2116
+ <span class="cline-any cline-no">&nbsp;</span>
2117
+ <span class="cline-any cline-no">&nbsp;</span>
2118
+ <span class="cline-any cline-no">&nbsp;</span>
2119
+ <span class="cline-any cline-no">&nbsp;</span>
2120
+ <span class="cline-any cline-no">&nbsp;</span>
2121
+ <span class="cline-any cline-no">&nbsp;</span>
2122
+ <span class="cline-any cline-neutral">&nbsp;</span>
2123
+ <span class="cline-any cline-no">&nbsp;</span>
2124
+ <span class="cline-any cline-neutral">&nbsp;</span>
2125
+ <span class="cline-any cline-neutral">&nbsp;</span>
2126
+ <span class="cline-any cline-no">&nbsp;</span>
2127
+ <span class="cline-any cline-neutral">&nbsp;</span>
2128
+ <span class="cline-any cline-neutral">&nbsp;</span>
2129
+ <span class="cline-any cline-no">&nbsp;</span>
2130
+ <span class="cline-any cline-no">&nbsp;</span>
2131
+ <span class="cline-any cline-neutral">&nbsp;</span>
2132
+ <span class="cline-any cline-no">&nbsp;</span>
2133
+ <span class="cline-any cline-no">&nbsp;</span>
2134
+ <span class="cline-any cline-neutral">&nbsp;</span>
2135
+ <span class="cline-any cline-no">&nbsp;</span>
2136
+ <span class="cline-any cline-neutral">&nbsp;</span>
1602
2137
  <span class="cline-any cline-neutral">&nbsp;</span>
1603
2138
  <span class="cline-any cline-no">&nbsp;</span>
1604
2139
  <span class="cline-any cline-no">&nbsp;</span>
2140
+ <span class="cline-any cline-neutral">&nbsp;</span>
2141
+ <span class="cline-any cline-no">&nbsp;</span>
1605
2142
  <span class="cline-any cline-no">&nbsp;</span>
1606
2143
  <span class="cline-any cline-neutral">&nbsp;</span>
2144
+ <span class="cline-any cline-neutral">&nbsp;</span>
1607
2145
  <span class="cline-any cline-no">&nbsp;</span>
1608
2146
  <span class="cline-any cline-no">&nbsp;</span>
1609
2147
  <span class="cline-any cline-neutral">&nbsp;</span>
1610
2148
  <span class="cline-any cline-neutral">&nbsp;</span>
1611
2149
  <span class="cline-any cline-no">&nbsp;</span>
2150
+ <span class="cline-any cline-no">&nbsp;</span>
2151
+ <span class="cline-any cline-neutral">&nbsp;</span>
1612
2152
  <span class="cline-any cline-neutral">&nbsp;</span>
1613
2153
  <span class="cline-any cline-no">&nbsp;</span>
1614
2154
  <span class="cline-any cline-neutral">&nbsp;</span>
2155
+ <span class="cline-any cline-neutral">&nbsp;</span>
1615
2156
  <span class="cline-any cline-no">&nbsp;</span>
1616
2157
  <span class="cline-any cline-neutral">&nbsp;</span>
1617
2158
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1656,11 +2197,13 @@
1656
2197
  <span class="cline-any cline-no">&nbsp;</span>
1657
2198
  <span class="cline-any cline-no">&nbsp;</span>
1658
2199
  <span class="cline-any cline-no">&nbsp;</span>
2200
+ <span class="cline-any cline-no">&nbsp;</span>
1659
2201
  <span class="cline-any cline-neutral">&nbsp;</span>
1660
2202
  <span class="cline-any cline-neutral">&nbsp;</span>
1661
2203
  <span class="cline-any cline-no">&nbsp;</span>
1662
2204
  <span class="cline-any cline-no">&nbsp;</span>
1663
2205
  <span class="cline-any cline-no">&nbsp;</span>
2206
+ <span class="cline-any cline-no">&nbsp;</span>
1664
2207
  <span class="cline-any cline-neutral">&nbsp;</span>
1665
2208
  <span class="cline-any cline-neutral">&nbsp;</span>
1666
2209
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1712,6 +2255,11 @@
1712
2255
  <span class="cline-any cline-neutral">&nbsp;</span>
1713
2256
  <span class="cline-any cline-no">&nbsp;</span>
1714
2257
  <span class="cline-any cline-no">&nbsp;</span>
2258
+ <span class="cline-any cline-neutral">&nbsp;</span>
2259
+ <span class="cline-any cline-neutral">&nbsp;</span>
2260
+ <span class="cline-any cline-neutral">&nbsp;</span>
2261
+ <span class="cline-any cline-no">&nbsp;</span>
2262
+ <span class="cline-any cline-no">&nbsp;</span>
1715
2263
  <span class="cline-any cline-no">&nbsp;</span>
1716
2264
  <span class="cline-any cline-no">&nbsp;</span>
1717
2265
  <span class="cline-any cline-no">&nbsp;</span>
@@ -1729,7 +2277,9 @@
1729
2277
  <span class="cline-any cline-neutral">&nbsp;</span>
1730
2278
  <span class="cline-any cline-neutral">&nbsp;</span>
1731
2279
  <span class="cline-any cline-neutral">&nbsp;</span>
1732
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type Message from './messages.gen.js'
2280
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import ConditionsManager from '../modules/conditionsManager.js'</span>
2281
+ <span class="cstat-no" title="statement not covered" >import FeatureFlags from '../modules/featureFlags.js'</span>
2282
+ import type Message from './messages.gen.js'
1733
2283
  <span class="cstat-no" title="statement not covered" >import { Timestamp, Metadata, UserID, Type as MType, TabChange, TabData } from './messages.gen.js'</span>
1734
2284
  <span class="cstat-no" title="statement not covered" >import {</span>
1735
2285
  now,
@@ -1783,6 +2333,7 @@ interface OnStartInfo {
1783
2333
  &nbsp;
1784
2334
  const CANCELED = <span class="cstat-no" title="statement not covered" >'canceled' as const</span>
1785
2335
  const uxtStorageKey = <span class="cstat-no" title="statement not covered" >'or_uxt_active'</span>
2336
+ const bufferStorageKey = <span class="cstat-no" title="statement not covered" >'or_buffer_1'</span>
1786
2337
  const START_ERROR = <span class="cstat-no" title="statement not covered" >':(' as const</span>
1787
2338
  type SuccessfulStart = OnStartInfo &amp; {
1788
2339
  success: true
@@ -1820,6 +2371,7 @@ type CommitCallback = (messages: Array&lt;Message&gt;) =&gt; void
1820
2371
  <span class="cstat-no" title="statement not covered" > NotActive,</span>
1821
2372
  <span class="cstat-no" title="statement not covered" > Starting,</span>
1822
2373
  <span class="cstat-no" title="statement not covered" > Active,</span>
2374
+ <span class="cstat-no" title="statement not covered" > ColdStart,</span>
1823
2375
  }
1824
2376
  &nbsp;
1825
2377
  type AppOptions = {
@@ -1873,8 +2425,14 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
1873
2425
  readonly localStorage: Storage
1874
2426
  readonly sessionStorage: Storage
1875
2427
  private readonly <span class="cstat-no" title="statement not covered" >messages: Array&lt;Message&gt; = []</span>
2428
+ /**
2429
+ * we need 2 buffers so we don't lose anything
2430
+ * @read coldStart implementation
2431
+ * */
2432
+ private <span class="cstat-no" title="statement not covered" >bufferedMessages1: Array&lt;Message&gt; = []</span>
2433
+ private <span class="cstat-no" title="statement not covered" >bufferedMessages2: Array&lt;Message&gt; = []</span>
1876
2434
  /* private */
1877
- readonly observer: Observer // non-privat for attachContextCallback
2435
+ readonly observer: Observer // non-private for attachContextCallback
1878
2436
  private readonly <span class="cstat-no" title="statement not covered" >startCallbacks: Array&lt;StartCallback&gt; = []</span>
1879
2437
  private readonly <span class="cstat-no" title="statement not covered" >stopCallbacks: Array&lt;() =&gt; any&gt; = []</span>
1880
2438
  private readonly <span class="cstat-no" title="statement not covered" >commitCallbacks: Array&lt;CommitCallback&gt; = []</span>
@@ -1892,11 +2450,15 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
1892
2450
  public attributeSender: AttributeSender
1893
2451
  private <span class="cstat-no" title="statement not covered" >canvasRecorder: CanvasRecorder | null = null</span>
1894
2452
  private uxtManager: UserTestManager
1895
- &nbsp;
1896
- <span class="fstat-no" title="function not covered" > constructor(p</span>rojectKey: string, sessionToken: string | undefined, options: Partial&lt;Options&gt;) {
1897
- // if (options.onStart !== undefined) {
1898
- // deprecationWarn("'onStart' option", "tracker.start().then(/* handle session info */)")
1899
- // } ?? maybe onStart is good
2453
+ private <span class="cstat-no" title="statement not covered" >conditionsManager: ConditionsManager | null = null</span>
2454
+ public featureFlags: FeatureFlags
2455
+ &nbsp;
2456
+ <span class="fstat-no" title="function not covered" > constructor(</span>
2457
+ projectKey: string,
2458
+ sessionToken: string | undefined,
2459
+ options: Partial&lt;Options&gt;,
2460
+ private readonly <span class="cstat-no" title="statement not covered" >signalError: (error: string, apis: string[]) =&gt; void,</span>
2461
+ ) {
1900
2462
  <span class="cstat-no" title="statement not covered" > this.contextId = Math.random().toString(36).slice(2)</span>
1901
2463
  <span class="cstat-no" title="statement not covered" > this.projectKey = projectKey</span>
1902
2464
  <span class="cstat-no" title="statement not covered" > this.networkOptions = options.network</span>
@@ -1940,6 +2502,7 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
1940
2502
  <span class="cstat-no" title="statement not covered" > this.notify = new Logger(this.options.verbose ? LogLevel.Warnings : LogLevel.Silent)</span>
1941
2503
  <span class="cstat-no" title="statement not covered" > this.session = new Session(this, this.options)</span>
1942
2504
  <span class="cstat-no" title="statement not covered" > this.attributeSender = new AttributeSender(this, Boolean(this.options.disableStringDict))</span>
2505
+ <span class="cstat-no" title="statement not covered" > this.featureFlags = new FeatureFlags(this)</span>
1943
2506
  <span class="cstat-no" title="statement not covered" > this.session.attachUpdateCallback(<span class="fstat-no" title="function not covered" >({</span> userID, metadata }) =&gt; {</span>
1944
2507
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (userID != null) {</span>
1945
2508
  // TODO: nullable userID
@@ -2084,9 +2647,17 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2084
2647
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this._usingOldFetchPlugin &amp;&amp; message[0] === MType.NetworkRequest) {</span>
2085
2648
  <span class="cstat-no" title="statement not covered" > return</span>
2086
2649
  }
2087
- // ====================================================
2088
2650
  &nbsp;
2089
- <span class="cstat-no" title="statement not covered" > this.messages.push(message)</span>
2651
+ // ====================================================
2652
+ <span class="cstat-no" title="statement not covered" > if (this.activityState === ActivityState.ColdStart) {</span>
2653
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(message)</span>
2654
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.singleBuffer) {</span>
2655
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(message)</span>
2656
+ }
2657
+ <span class="cstat-no" title="statement not covered" > this.conditionsManager?.processMessage(message)</span>
2658
+ } else {
2659
+ <span class="cstat-no" title="statement not covered" > this.messages.push(message)</span>
2660
+ }
2090
2661
  // TODO: commit on start if there were `urgent` sends;
2091
2662
  // Clarify where urgent can be used for;
2092
2663
  // Clarify workflow for each type of message in case it was sent before start
@@ -2097,7 +2668,11 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2097
2668
  }
2098
2669
  }
2099
2670
  &nbsp;
2100
- private <span class="fstat-no" title="function not covered" >commit(</span>): void {
2671
+ /**
2672
+ * Normal workflow: add timestamp and tab data to batch, then commit it
2673
+ * every ~30ms
2674
+ * */
2675
+ private <span class="fstat-no" title="function not covered" >_nCommit(</span>): void {
2101
2676
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.worker !== undefined &amp;&amp; this.messages.length) {</span>
2102
2677
  <span class="cstat-no" title="statement not covered" > requestIdleCb(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
2103
2678
  <span class="cstat-no" title="statement not covered" > this.messages.unshift(TabData(this.session.getTabId()))</span>
@@ -2109,6 +2684,39 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2109
2684
  })
2110
2685
  }
2111
2686
  }
2687
+ &nbsp;
2688
+ <span class="cstat-no" title="statement not covered" > coldStartCommitN = 0</span>
2689
+ &nbsp;
2690
+ /**
2691
+ * Cold start: add timestamp and tab data to both batches
2692
+ * every 2nd tick, ~60ms
2693
+ * this will make batches a bit larger and replay will work with bigger jumps every frame
2694
+ * but in turn we don't overload batch writer on session start with 1000 batches
2695
+ * */
2696
+ private <span class="fstat-no" title="function not covered" >_cStartCommit(</span>): void {
2697
+ <span class="cstat-no" title="statement not covered" > this.coldStartCommitN += 1</span>
2698
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.coldStartCommitN === 2) {</span>
2699
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(Timestamp(this.timestamp()))</span>
2700
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(TabData(this.session.getTabId()))</span>
2701
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(Timestamp(this.timestamp()))</span>
2702
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(TabData(this.session.getTabId()))</span>
2703
+ <span class="cstat-no" title="statement not covered" > this.coldStartCommitN = 0</span>
2704
+ }
2705
+ }
2706
+ &nbsp;
2707
+ private <span class="fstat-no" title="function not covered" >commit(</span>): void {
2708
+ <span class="cstat-no" title="statement not covered" > if (this.activityState === ActivityState.ColdStart) {</span>
2709
+ <span class="cstat-no" title="statement not covered" > this._cStartCommit()</span>
2710
+ } else {
2711
+ <span class="cstat-no" title="statement not covered" > this._nCommit()</span>
2712
+ }
2713
+ }
2714
+ &nbsp;
2715
+ private <span class="fstat-no" title="function not covered" >postToWorker(</span>messages: Array&lt;Message&gt;) {
2716
+ <span class="cstat-no" title="statement not covered" > this.worker?.postMessage(messages)</span>
2717
+ <span class="cstat-no" title="statement not covered" > this.commitCallbacks.forEach(<span class="fstat-no" title="function not covered" >(c</span>b) =&gt; <span class="cstat-no" title="statement not covered" >cb(messages))</span></span>
2718
+ <span class="cstat-no" title="statement not covered" > messages.length = 0</span>
2719
+ }
2112
2720
  &nbsp;
2113
2721
  private <span class="cstat-no" title="statement not covered" >delay = 0</span>
2114
2722
  &nbsp;
@@ -2280,20 +2888,193 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2280
2888
  <span class="cstat-no" title="statement not covered" > this.sessionStorage.removeItem(this.options.session_reset_key)</span>
2281
2889
  }
2282
2890
  }
2891
+ &nbsp;
2892
+ <span class="cstat-no" title="statement not covered" > coldInterval: ReturnType&lt;typeof setInterval&gt; | null = null</span>
2893
+ <span class="cstat-no" title="statement not covered" > orderNumber = 0</span>
2894
+ <span class="cstat-no" title="statement not covered" > coldStartTs = 0</span>
2895
+ <span class="cstat-no" title="statement not covered" > singleBuffer = false</span>
2896
+ &nbsp;
2897
+ private <span class="fstat-no" title="function not covered" >checkSessionToken(</span>forceNew?: boolean) {
2898
+ const lsReset = <span class="cstat-no" title="statement not covered" >this.sessionStorage.getItem(this.options.session_reset_key) !== null</span>
2899
+ const needNewSessionID = <span class="cstat-no" title="statement not covered" >forceNew || lsReset</span>
2900
+ const sessionToken = <span class="cstat-no" title="statement not covered" >this.session.getSessionToken()</span>
2901
+ &nbsp;
2902
+ <span class="cstat-no" title="statement not covered" > return needNewSessionID || !sessionToken</span>
2903
+ }
2904
+ /**
2905
+ * start buffering messages without starting the actual session, which gives
2906
+ * user 30 seconds to "activate" and record session by calling `start()` on conditional trigger
2907
+ * and we will then send buffered batch, so it won't get lost
2908
+ * */
2909
+ public async <span class="fstat-no" title="function not covered" >coldStart(</span>startOpts: StartOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span> conditional?: boolean) {
2910
+ <span class="cstat-no" title="statement not covered" > this.singleBuffer = false</span>
2911
+ const second = <span class="cstat-no" title="statement not covered" >1000</span>
2912
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (conditional) {</span>
2913
+ <span class="cstat-no" title="statement not covered" > this.conditionsManager = new ConditionsManager(this, startOpts)</span>
2914
+ }
2915
+ const isNewSession = <span class="cstat-no" title="statement not covered" >this.checkSessionToken(startOpts.forceNew)</span>
2916
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (conditional) {</span>
2917
+ const r = <span class="cstat-no" title="statement not covered" >await fetch(this.options.ingestPoint + '/v1/web/start', {</span>
2918
+ method: 'POST',
2919
+ headers: {
2920
+ 'Content-Type': 'application/json',
2921
+ },
2922
+ body: JSON.stringify({
2923
+ ...this.getTrackerInfo(),
2924
+ timestamp: now(),
2925
+ doNotRecord: true,
2926
+ bufferDiff: 0,
2927
+ userID: this.session.getInfo().userID,
2928
+ token: undefined,
2929
+ deviceMemory,
2930
+ jsHeapSizeLimit,
2931
+ timezone: getTimezone(),
2932
+ }),
2933
+ })
2934
+ // this token is needed to fetch conditions and flags,
2935
+ // but it can't be used to record a session
2936
+ const {
2937
+ token,
2938
+ userBrowser,
2939
+ userCity,
2940
+ userCountry,
2941
+ userDevice,
2942
+ userOS,
2943
+ userState,
2944
+ projectID,
2945
+ } = <span class="cstat-no" title="statement not covered" >await r.json()</span>
2946
+ <span class="cstat-no" title="statement not covered" > this.session.assign({ projectID })</span>
2947
+ <span class="cstat-no" title="statement not covered" > this.session.setUserInfo({</span>
2948
+ userBrowser,
2949
+ userCity,
2950
+ userCountry,
2951
+ userDevice,
2952
+ userOS,
2953
+ userState,
2954
+ })
2955
+ <span class="cstat-no" title="statement not covered" > await this.conditionsManager?.fetchConditions(token as string)</span>
2956
+ <span class="cstat-no" title="statement not covered" > await this.featureFlags.reloadFlags(token as string)</span>
2957
+ <span class="cstat-no" title="statement not covered" > this.conditionsManager?.processFlags(this.featureFlags.flags)</span>
2958
+ }
2959
+ const cycle = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
2960
+ <span class="cstat-no" title="statement not covered" > this.orderNumber += 1</span>
2961
+ <span class="cstat-no" title="statement not covered" > adjustTimeOrigin()</span>
2962
+ <span class="cstat-no" title="statement not covered" > this.coldStartTs = now()</span>
2963
+ <span class="cstat-no" title="statement not covered" > if (this.orderNumber % 2 === 0) {</span>
2964
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.length = 0</span>
2965
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(Timestamp(this.timestamp()))</span>
2966
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(TabData(this.session.getTabId()))</span>
2967
+ } else {
2968
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.length = 0</span>
2969
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(Timestamp(this.timestamp()))</span>
2970
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(TabData(this.session.getTabId()))</span>
2971
+ }
2972
+ <span class="cstat-no" title="statement not covered" > this.stop(false)</span>
2973
+ <span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.ColdStart</span>
2974
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.sessionHash) {</span>
2975
+ <span class="cstat-no" title="statement not covered" > this.session.applySessionHash(startOpts.sessionHash)</span>
2976
+ }
2977
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.forceNew) {</span>
2978
+ // Reset session metadata only if requested directly
2979
+ <span class="cstat-no" title="statement not covered" > this.session.reset()</span>
2980
+ }
2981
+ <span class="cstat-no" title="statement not covered" > this.session.assign({</span>
2982
+ // MBTODO: maybe it would make sense to `forceNew` if the `userID` was changed
2983
+ userID: startOpts.userID,
2984
+ metadata: startOpts.metadata,
2985
+ })
2986
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isNewSession) {</span>
2987
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
2988
+ <span class="cstat-no" title="statement not covered" > this.send(TabChange(this.session.getTabId()))</span>
2989
+ }
2990
+ <span class="cstat-no" title="statement not covered" > this.observer.observe()</span>
2991
+ <span class="cstat-no" title="statement not covered" > this.ticker.start()</span>
2992
+ }
2993
+ <span class="cstat-no" title="statement not covered" > this.coldInterval = setInterval(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
2994
+ <span class="cstat-no" title="statement not covered" > cycle()</span>
2995
+ }, 30 * second)
2996
+ <span class="cstat-no" title="statement not covered" > cycle()</span>
2997
+ }
2998
+ &nbsp;
2999
+ public <span class="fstat-no" title="function not covered" >offlineRecording(</span>startOpts: StartOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> {
3000
+ <span class="cstat-no" title="statement not covered" > this.singleBuffer = true</span>
3001
+ const isNewSession = <span class="cstat-no" title="statement not covered" >this.checkSessionToken(startOpts.forceNew)</span>
3002
+ <span class="cstat-no" title="statement not covered" > adjustTimeOrigin()</span>
3003
+ <span class="cstat-no" title="statement not covered" > this.coldStartTs = now()</span>
3004
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.length = 0</span>
3005
+ const saverBuffer = <span class="cstat-no" title="statement not covered" >this.localStorage.getItem(bufferStorageKey)</span>
3006
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (saverBuffer) {</span>
3007
+ const data = <span class="cstat-no" title="statement not covered" >JSON.parse(saverBuffer)</span>
3008
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages1 = Array.isArray(data) ? data : []</span>
3009
+ <span class="cstat-no" title="statement not covered" > this.localStorage.removeItem(bufferStorageKey)</span>
3010
+ }
3011
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(Timestamp(this.timestamp()))</span>
3012
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(TabData(this.session.getTabId()))</span>
3013
+ <span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.ColdStart</span>
3014
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.sessionHash) {</span>
3015
+ <span class="cstat-no" title="statement not covered" > this.session.applySessionHash(startOpts.sessionHash)</span>
3016
+ }
3017
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.forceNew) {</span>
3018
+ // Reset session metadata only if requested directly
3019
+ <span class="cstat-no" title="statement not covered" > this.session.reset()</span>
3020
+ }
3021
+ <span class="cstat-no" title="statement not covered" > this.session.assign({</span>
3022
+ // MBTODO: maybe it would make sense to `forceNew` if the `userID` was changed
3023
+ userID: startOpts.userID,
3024
+ metadata: startOpts.metadata,
3025
+ })
3026
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isNewSession) {</span>
3027
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
3028
+ <span class="cstat-no" title="statement not covered" > this.send(TabChange(this.session.getTabId()))</span>
3029
+ }
3030
+ <span class="cstat-no" title="statement not covered" > this.observer.observe()</span>
3031
+ <span class="cstat-no" title="statement not covered" > this.ticker.start()</span>
3032
+ }
3033
+ &nbsp;
3034
+ /**
3035
+ * Saves the captured messages in localStorage (or whatever is used in its place)
3036
+ *
3037
+ * Then when this.offlineRecording is called, it will preload this messages and clear the storage item
3038
+ *
3039
+ * Keeping the size of local storage reasonable is up to the end users of this library
3040
+ * */
3041
+ public <span class="fstat-no" title="function not covered" >saveBuffer(</span>) {
3042
+ <span class="cstat-no" title="statement not covered" > this.localStorage.setItem(bufferStorageKey, JSON.stringify(this.bufferedMessages1))</span>
3043
+ }
3044
+ &nbsp;
3045
+ /**
3046
+ * Uploads the stored buffer to create session
3047
+ * */
3048
+ public <span class="fstat-no" title="function not covered" >uploadOfflineRecording(</span>) {
3049
+ const buffer = <span class="cstat-no" title="statement not covered" >this.bufferedMessages1</span>
3050
+ <span class="cstat-no" title="statement not covered" > this.stop(false)</span>
3051
+ // then fetch it
3052
+ <span class="cstat-no" title="statement not covered" > this.clearBuffers()</span>
3053
+ }
2283
3054
  &nbsp;
2284
3055
  private <span class="fstat-no" title="function not covered" >_start(</span>startOpts: StartOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span> resetByWorker = <span class="branch-0 cbranch-no" title="branch not covered" >false)</span>: Promise&lt;StartPromiseReturn&gt; {
3056
+ const isColdStart = <span class="cstat-no" title="statement not covered" >this.activityState === ActivityState.ColdStart</span>
3057
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isColdStart &amp;&amp; this.coldInterval) {</span>
3058
+ <span class="cstat-no" title="statement not covered" > clearInterval(this.coldInterval)</span>
3059
+ }
2285
3060
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.worker) {</span>
2286
- <span class="cstat-no" title="statement not covered" > return Promise.resolve(UnsuccessfulStart('No worker found: perhaps, CSP is not set.'))</span>
3061
+ const reason = <span class="cstat-no" title="statement not covered" >'No worker found: perhaps, CSP is not set.'</span>
3062
+ <span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
3063
+ <span class="cstat-no" title="statement not covered" > return Promise.resolve(UnsuccessfulStart(reason))</span>
2287
3064
  }
2288
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activityState !== ActivityState.NotActive) {</span>
2289
- <span class="cstat-no" title="statement not covered" > return Promise.resolve(</span>
2290
- UnsuccessfulStart(
2291
- 'OpenReplay: trying to call `start()` on the instance that has been started already.',
2292
- ),
2293
- )
3065
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
3066
+ this.activityState === ActivityState.Active ||
3067
+ this.activityState === ActivityState.Starting
3068
+ ) {
3069
+ const reason =
3070
+ <span class="cstat-no" title="statement not covered" > 'OpenReplay: trying to call `start()` on the instance that has been started already.'</span>
3071
+ <span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
3072
+ <span class="cstat-no" title="statement not covered" > return Promise.resolve(UnsuccessfulStart(reason))</span>
2294
3073
  }
2295
3074
  <span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.Starting</span>
2296
- <span class="cstat-no" title="statement not covered" > adjustTimeOrigin()</span>
3075
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isColdStart) {</span>
3076
+ <span class="cstat-no" title="statement not covered" > adjustTimeOrigin()</span>
3077
+ }
2297
3078
  &nbsp;
2298
3079
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.sessionHash) {</span>
2299
3080
  <span class="cstat-no" title="statement not covered" > this.session.applySessionHash(startOpts.sessionHash)</span>
@@ -2320,15 +3101,13 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2320
3101
  tabId: this.session.getTabId(),
2321
3102
  })
2322
3103
  &nbsp;
2323
- const lsReset = <span class="cstat-no" title="statement not covered" >this.sessionStorage.getItem(this.options.session_reset_key) !== null</span>
2324
- <span class="cstat-no" title="statement not covered" > this.sessionStorage.removeItem(this.options.session_reset_key)</span>
2325
- const needNewSessionID = <span class="cstat-no" title="statement not covered" >startOpts.forceNew || lsReset || resetByWorker</span>
2326
3104
  const sessionToken = <span class="cstat-no" title="statement not covered" >this.session.getSessionToken()</span>
2327
- const isNewSession = <span class="cstat-no" title="statement not covered" >needNewSessionID || !sessionToken</span>
3105
+ const isNewSession = <span class="cstat-no" title="statement not covered" >this.checkSessionToken(startOpts.forceNew)</span>
3106
+ <span class="cstat-no" title="statement not covered" > this.sessionStorage.removeItem(this.options.session_reset_key)</span>
2328
3107
  &nbsp;
2329
- <span class="cstat-no" title="statement not covered" > console.log(</span>
3108
+ <span class="cstat-no" title="statement not covered" > this.debug.log(</span>
2330
3109
  'OpenReplay: starting session; need new session id?',
2331
- needNewSessionID,
3110
+ isNewSession,
2332
3111
  'session token: ',
2333
3112
  sessionToken,
2334
3113
  )
@@ -2341,6 +3120,8 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2341
3120
  body: JSON.stringify({
2342
3121
  ...this.getTrackerInfo(),
2343
3122
  timestamp,
3123
+ doNotRecord: false,
3124
+ bufferDiff: timestamp - this.coldStartTs,
2344
3125
  userID: this.session.getInfo().userID,
2345
3126
  token: isNewSession ? undefined : sessionToken,
2346
3127
  deviceMemory,
@@ -2363,10 +3144,14 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2363
3144
  })
2364
3145
  .then(<span class="fstat-no" title="function not covered" >(r</span>) =&gt; {
2365
3146
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.worker) {</span>
2366
- <span class="cstat-no" title="statement not covered" > return Promise.reject('no worker found after start request (this might not happen)')</span>
3147
+ const reason = <span class="cstat-no" title="statement not covered" >'no worker found after start request (this might not happen)'</span>
3148
+ <span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
3149
+ <span class="cstat-no" title="statement not covered" > return Promise.reject(reason)</span>
2367
3150
  }
2368
3151
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activityState === ActivityState.NotActive) {</span>
2369
- <span class="cstat-no" title="statement not covered" > return Promise.reject('Tracker stopped during authorization')</span>
3152
+ const reason = <span class="cstat-no" title="statement not covered" >'Tracker stopped during authorization'</span>
3153
+ <span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
3154
+ <span class="cstat-no" title="statement not covered" > return Promise.reject(reason)</span>
2370
3155
  }
2371
3156
  const {
2372
3157
  token,
@@ -2395,7 +3180,9 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2395
3180
  typeof delay !== 'number' ||
2396
3181
  (typeof beaconSizeLimit !== 'number' &amp;&amp; typeof beaconSizeLimit !== 'undefined')
2397
3182
  ) {
2398
- <span class="cstat-no" title="statement not covered" > return Promise.reject(`Incorrect server response: ${JSON.stringify(r)}`)</span>
3183
+ const reason = <span class="cstat-no" title="statement not covered" >`Incorrect server response: ${JSON.stringify(r)}`</span>
3184
+ <span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
3185
+ <span class="cstat-no" title="statement not covered" > return Promise.reject(reason)</span>
2399
3186
  }
2400
3187
  <span class="cstat-no" title="statement not covered" > this.delay = delay</span>
2401
3188
  <span class="cstat-no" title="statement not covered" > this.session.setSessionToken(token)</span>
@@ -2413,7 +3200,7 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2413
3200
  projectID,
2414
3201
  })
2415
3202
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isNewSession &amp;&amp; token === sessionToken) {</span>
2416
- <span class="cstat-no" title="statement not covered" > console.log('continuing session on new tab', this.session.getTabId())</span>
3203
+ <span class="cstat-no" title="statement not covered" > this.debug.log('continuing session on new tab', this.session.getTabId())</span>
2417
3204
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
2418
3205
  <span class="cstat-no" title="statement not covered" > this.send(TabChange(this.session.getTabId()))</span>
2419
3206
  }
@@ -2432,10 +3219,39 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2432
3219
  <span class="cstat-no" title="statement not covered" > this.compressionThreshold = compressionThreshold</span>
2433
3220
  const onStartInfo = <span class="cstat-no" title="statement not covered" >{ sessionToken: token, userUUID, sessionID }</span>
2434
3221
  &nbsp;
3222
+ const flushBuffer = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(b</span>uffer: Message[]) =&gt; {</span>
3223
+ let ended = <span class="cstat-no" title="statement not covered" >false</span>
3224
+ const messagesBatch: Message[] = <span class="cstat-no" title="statement not covered" >[buffer.shift() as unknown as Message]</span>
3225
+ <span class="cstat-no" title="statement not covered" > while (!ended) {</span>
3226
+ const nextMsg = <span class="cstat-no" title="statement not covered" >buffer[0]</span>
3227
+ <span class="cstat-no" title="statement not covered" > if (!nextMsg || nextMsg[0] === MType.Timestamp) {</span>
3228
+ <span class="cstat-no" title="statement not covered" > ended = true</span>
3229
+ } else {
3230
+ <span class="cstat-no" title="statement not covered" > messagesBatch.push(buffer.shift() as unknown as Message)</span>
3231
+ }
3232
+ }
3233
+ <span class="cstat-no" title="statement not covered" > this.postToWorker(messagesBatch)</span>
3234
+ }
2435
3235
  // TODO: start as early as possible (before receiving the token)
2436
3236
  <span class="cstat-no" title="statement not covered" > this.startCallbacks.forEach(<span class="fstat-no" title="function not covered" >(c</span>b) =&gt; <span class="cstat-no" title="statement not covered" >cb(onStartInfo))</span> /</span>/ MBTODO: callbacks after DOM "mounted" (observed)
2437
- <span class="cstat-no" title="statement not covered" > this.observer.observe()</span>
2438
- <span class="cstat-no" title="statement not covered" > this.ticker.start()</span>
3237
+ <span class="cstat-no" title="statement not covered" > void this.featureFlags.reloadFlags()</span>
3238
+ /** --------------- COLD START BUFFER ------------------*/
3239
+ <span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.Active</span>
3240
+ <span class="cstat-no" title="statement not covered" > if (isColdStart) {</span>
3241
+ const biggestBurger =
3242
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.length &gt; this.bufferedMessages2.length</span>
3243
+ ? this.bufferedMessages1
3244
+ : this.bufferedMessages2
3245
+ <span class="cstat-no" title="statement not covered" > while (biggestBurger.length &gt; 0) {</span>
3246
+ <span class="cstat-no" title="statement not covered" > flushBuffer(biggestBurger)</span>
3247
+ }
3248
+ <span class="cstat-no" title="statement not covered" > this.clearBuffers()</span>
3249
+ <span class="cstat-no" title="statement not covered" > this.commit()</span>
3250
+ /** --------------- COLD START BUFFER ------------------*/
3251
+ } else {
3252
+ <span class="cstat-no" title="statement not covered" > this.observer.observe()</span>
3253
+ <span class="cstat-no" title="statement not covered" > this.ticker.start()</span>
3254
+ }
2439
3255
  &nbsp;
2440
3256
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (canvasEnabled) {</span>
2441
3257
  <span class="cstat-no" title="statement not covered" > this.canvasRecorder =</span>
@@ -2443,7 +3259,6 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2443
3259
  new CanvasRecorder(this, { fps: canvasFPS, quality: canvasQuality })
2444
3260
  <span class="cstat-no" title="statement not covered" > this.canvasRecorder.startTracking()</span>
2445
3261
  }
2446
- <span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.Active</span>
2447
3262
  &nbsp;
2448
3263
  <span class="cstat-no" title="statement not covered" > this.notify.log('OpenReplay tracking started.')</span>
2449
3264
  // get rid of onStart ?
@@ -2488,11 +3303,13 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2488
3303
  <span class="cstat-no" title="statement not covered" > this.stop()</span>
2489
3304
  <span class="cstat-no" title="statement not covered" > this.session.reset()</span>
2490
3305
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (reason === CANCELED) {</span>
3306
+ <span class="cstat-no" title="statement not covered" > this.signalError(CANCELED, [])</span>
2491
3307
  <span class="cstat-no" title="statement not covered" > return UnsuccessfulStart(CANCELED)</span>
2492
3308
  }
2493
3309
  &nbsp;
2494
3310
  <span class="cstat-no" title="statement not covered" > this.notify.log('OpenReplay was unable to start. ', reason)</span>
2495
3311
  <span class="cstat-no" title="statement not covered" > this._debug('session_start', reason)</span>
3312
+ <span class="cstat-no" title="statement not covered" > this.signalError(START_ERROR, [])</span>
2496
3313
  <span class="cstat-no" title="statement not covered" > return UnsuccessfulStart(START_ERROR)</span>
2497
3314
  })
2498
3315
  }
@@ -2542,6 +3359,11 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2542
3359
  <span class="cstat-no" title="statement not covered" > return this.session.getTabId()</span>
2543
3360
  }
2544
3361
  &nbsp;
3362
+ <span class="fstat-no" title="function not covered" > clearBuffers(</span>) {
3363
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages1.length = 0</span>
3364
+ <span class="cstat-no" title="statement not covered" > this.bufferedMessages2.length = 0</span>
3365
+ }
3366
+ &nbsp;
2545
3367
  <span class="fstat-no" title="function not covered" > stop(</span>stopWorker = <span class="branch-0 cbranch-no" title="branch not covered" >true)</span>: void {
2546
3368
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activityState !== ActivityState.NotActive) {</span>
2547
3369
  <span class="cstat-no" title="statement not covered" > try {</span>
@@ -2569,7 +3391,7 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
2569
3391
  <div class='footer quiet pad2 space-top1 center small'>
2570
3392
  Code coverage generated by
2571
3393
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2572
- at 2023-12-12T11:45:01.048Z
3394
+ at 2023-12-15T15:55:44.965Z
2573
3395
  </div>
2574
3396
  <script src="../../prettify.js"></script>
2575
3397
  <script>