@openreplay/tracker 10.0.2 → 10.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/cjs/app/index.js +1 -1
- package/cjs/index.js +1 -1
- package/cjs/modules/Network/fetchProxy.js +4 -2
- package/cjs/utils.js +16 -2
- package/coverage/clover.xml +1575 -733
- package/coverage/coverage-final.json +22 -14
- package/coverage/lcov-report/index.html +60 -45
- package/coverage/lcov-report/main/app/canvas.ts.html +475 -0
- package/coverage/lcov-report/main/app/guards.ts.html +5 -2
- package/coverage/lcov-report/main/app/index.html +34 -19
- package/coverage/lcov-report/main/app/index.ts.html +1086 -45
- package/coverage/lcov-report/main/app/logger.ts.html +1 -1
- package/coverage/lcov-report/main/app/messages.gen.ts.html +179 -146
- package/coverage/lcov-report/main/app/nodes.ts.html +1 -1
- package/coverage/lcov-report/main/app/observer/iframe_observer.ts.html +1 -1
- package/coverage/lcov-report/main/app/observer/iframe_offsets.ts.html +1 -1
- package/coverage/lcov-report/main/app/observer/index.html +1 -1
- package/coverage/lcov-report/main/app/observer/shadow_root_observer.ts.html +1 -1
- package/coverage/lcov-report/main/app/observer/top_observer.ts.html +1 -1
- package/coverage/lcov-report/main/app/sanitizer.ts.html +1 -1
- package/coverage/lcov-report/main/app/session.ts.html +1 -1
- package/coverage/lcov-report/main/app/ticker.ts.html +1 -1
- package/coverage/lcov-report/main/index.html +20 -20
- package/coverage/lcov-report/main/index.ts.html +274 -100
- package/coverage/lcov-report/main/modules/Network/beaconProxy.ts.html +19 -19
- package/coverage/lcov-report/main/modules/Network/fetchProxy.ts.html +97 -97
- package/coverage/lcov-report/main/modules/Network/index.html +65 -65
- package/coverage/lcov-report/main/modules/Network/index.ts.html +33 -33
- package/coverage/lcov-report/main/modules/Network/networkMessage.ts.html +82 -73
- package/coverage/lcov-report/main/modules/Network/utils.ts.html +34 -34
- package/coverage/lcov-report/main/modules/Network/xhrProxy.ts.html +13 -13
- package/coverage/lcov-report/main/modules/attributeSender.ts.html +1 -1
- package/coverage/lcov-report/main/modules/axiosSpy.ts.html +1 -1
- package/coverage/lcov-report/main/modules/conditionsManager.ts.html +799 -0
- package/coverage/lcov-report/main/modules/connection.ts.html +1 -1
- package/coverage/lcov-report/main/modules/console.ts.html +1 -1
- package/coverage/lcov-report/main/modules/constructedStyleSheets.ts.html +1 -1
- package/coverage/lcov-report/main/modules/cssrules.ts.html +1 -1
- package/coverage/lcov-report/main/modules/exception.ts.html +1 -1
- package/coverage/lcov-report/main/modules/featureFlags.ts.html +10 -7
- package/coverage/lcov-report/main/modules/focus.ts.html +1 -1
- package/coverage/lcov-report/main/modules/fonts.ts.html +1 -1
- package/coverage/lcov-report/main/modules/img.ts.html +1 -1
- package/coverage/lcov-report/main/modules/index.html +27 -12
- package/coverage/lcov-report/main/modules/input.ts.html +1 -1
- package/coverage/lcov-report/main/modules/mouse.ts.html +1 -1
- package/coverage/lcov-report/main/modules/network.ts.html +2 -2
- package/coverage/lcov-report/main/modules/performance.ts.html +1 -1
- package/coverage/lcov-report/main/modules/scroll.ts.html +1 -1
- package/coverage/lcov-report/main/modules/selection.ts.html +1 -1
- package/coverage/lcov-report/main/modules/tabs.ts.html +1 -1
- package/coverage/lcov-report/main/modules/timing.ts.html +1 -1
- package/coverage/lcov-report/main/modules/userTesting/SignalManager.ts.html +370 -0
- package/coverage/lcov-report/main/modules/userTesting/dnd.ts.html +10 -22
- package/coverage/lcov-report/main/modules/userTesting/index.html +57 -27
- package/coverage/lcov-report/main/modules/userTesting/index.ts.html +814 -115
- package/coverage/lcov-report/main/modules/userTesting/recorder.ts.html +136 -67
- package/coverage/lcov-report/main/modules/userTesting/styles.ts.html +111 -39
- package/coverage/lcov-report/main/modules/userTesting/utils.ts.html +364 -0
- package/coverage/lcov-report/main/modules/viewport.ts.html +1 -1
- package/coverage/lcov-report/main/utils.ts.html +101 -59
- package/coverage/lcov-report/webworker/BatchWriter.ts.html +1 -1
- package/coverage/lcov-report/webworker/MessageEncoder.gen.ts.html +17 -5
- package/coverage/lcov-report/webworker/PrimitiveEncoder.ts.html +1 -1
- package/coverage/lcov-report/webworker/QueueSender.ts.html +1 -1
- package/coverage/lcov-report/webworker/index.html +9 -9
- package/coverage/lcov-report/webworker/index.ts.html +15 -9
- package/coverage/lcov.info +2699 -1150
- package/lib/app/index.js +1 -1
- package/lib/common/tsconfig.tsbuildinfo +1 -1
- package/lib/index.js +1 -1
- package/lib/modules/Network/fetchProxy.js +4 -2
- package/lib/utils.js +16 -2
- package/package.json +1 -1
|
@@ -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/
|
|
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/
|
|
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/
|
|
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/
|
|
49
|
+
<span class='fraction'>0/441</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -823,7 +823,356 @@
|
|
|
823
823
|
<a name='L758'></a><a href='#L758'>758</a>
|
|
824
824
|
<a name='L759'></a><a href='#L759'>759</a>
|
|
825
825
|
<a name='L760'></a><a href='#L760'>760</a>
|
|
826
|
-
<a name='L761'></a><a href='#L761'>761</a
|
|
826
|
+
<a name='L761'></a><a href='#L761'>761</a>
|
|
827
|
+
<a name='L762'></a><a href='#L762'>762</a>
|
|
828
|
+
<a name='L763'></a><a href='#L763'>763</a>
|
|
829
|
+
<a name='L764'></a><a href='#L764'>764</a>
|
|
830
|
+
<a name='L765'></a><a href='#L765'>765</a>
|
|
831
|
+
<a name='L766'></a><a href='#L766'>766</a>
|
|
832
|
+
<a name='L767'></a><a href='#L767'>767</a>
|
|
833
|
+
<a name='L768'></a><a href='#L768'>768</a>
|
|
834
|
+
<a name='L769'></a><a href='#L769'>769</a>
|
|
835
|
+
<a name='L770'></a><a href='#L770'>770</a>
|
|
836
|
+
<a name='L771'></a><a href='#L771'>771</a>
|
|
837
|
+
<a name='L772'></a><a href='#L772'>772</a>
|
|
838
|
+
<a name='L773'></a><a href='#L773'>773</a>
|
|
839
|
+
<a name='L774'></a><a href='#L774'>774</a>
|
|
840
|
+
<a name='L775'></a><a href='#L775'>775</a>
|
|
841
|
+
<a name='L776'></a><a href='#L776'>776</a>
|
|
842
|
+
<a name='L777'></a><a href='#L777'>777</a>
|
|
843
|
+
<a name='L778'></a><a href='#L778'>778</a>
|
|
844
|
+
<a name='L779'></a><a href='#L779'>779</a>
|
|
845
|
+
<a name='L780'></a><a href='#L780'>780</a>
|
|
846
|
+
<a name='L781'></a><a href='#L781'>781</a>
|
|
847
|
+
<a name='L782'></a><a href='#L782'>782</a>
|
|
848
|
+
<a name='L783'></a><a href='#L783'>783</a>
|
|
849
|
+
<a name='L784'></a><a href='#L784'>784</a>
|
|
850
|
+
<a name='L785'></a><a href='#L785'>785</a>
|
|
851
|
+
<a name='L786'></a><a href='#L786'>786</a>
|
|
852
|
+
<a name='L787'></a><a href='#L787'>787</a>
|
|
853
|
+
<a name='L788'></a><a href='#L788'>788</a>
|
|
854
|
+
<a name='L789'></a><a href='#L789'>789</a>
|
|
855
|
+
<a name='L790'></a><a href='#L790'>790</a>
|
|
856
|
+
<a name='L791'></a><a href='#L791'>791</a>
|
|
857
|
+
<a name='L792'></a><a href='#L792'>792</a>
|
|
858
|
+
<a name='L793'></a><a href='#L793'>793</a>
|
|
859
|
+
<a name='L794'></a><a href='#L794'>794</a>
|
|
860
|
+
<a name='L795'></a><a href='#L795'>795</a>
|
|
861
|
+
<a name='L796'></a><a href='#L796'>796</a>
|
|
862
|
+
<a name='L797'></a><a href='#L797'>797</a>
|
|
863
|
+
<a name='L798'></a><a href='#L798'>798</a>
|
|
864
|
+
<a name='L799'></a><a href='#L799'>799</a>
|
|
865
|
+
<a name='L800'></a><a href='#L800'>800</a>
|
|
866
|
+
<a name='L801'></a><a href='#L801'>801</a>
|
|
867
|
+
<a name='L802'></a><a href='#L802'>802</a>
|
|
868
|
+
<a name='L803'></a><a href='#L803'>803</a>
|
|
869
|
+
<a name='L804'></a><a href='#L804'>804</a>
|
|
870
|
+
<a name='L805'></a><a href='#L805'>805</a>
|
|
871
|
+
<a name='L806'></a><a href='#L806'>806</a>
|
|
872
|
+
<a name='L807'></a><a href='#L807'>807</a>
|
|
873
|
+
<a name='L808'></a><a href='#L808'>808</a>
|
|
874
|
+
<a name='L809'></a><a href='#L809'>809</a>
|
|
875
|
+
<a name='L810'></a><a href='#L810'>810</a>
|
|
876
|
+
<a name='L811'></a><a href='#L811'>811</a>
|
|
877
|
+
<a name='L812'></a><a href='#L812'>812</a>
|
|
878
|
+
<a name='L813'></a><a href='#L813'>813</a>
|
|
879
|
+
<a name='L814'></a><a href='#L814'>814</a>
|
|
880
|
+
<a name='L815'></a><a href='#L815'>815</a>
|
|
881
|
+
<a name='L816'></a><a href='#L816'>816</a>
|
|
882
|
+
<a name='L817'></a><a href='#L817'>817</a>
|
|
883
|
+
<a name='L818'></a><a href='#L818'>818</a>
|
|
884
|
+
<a name='L819'></a><a href='#L819'>819</a>
|
|
885
|
+
<a name='L820'></a><a href='#L820'>820</a>
|
|
886
|
+
<a name='L821'></a><a href='#L821'>821</a>
|
|
887
|
+
<a name='L822'></a><a href='#L822'>822</a>
|
|
888
|
+
<a name='L823'></a><a href='#L823'>823</a>
|
|
889
|
+
<a name='L824'></a><a href='#L824'>824</a>
|
|
890
|
+
<a name='L825'></a><a href='#L825'>825</a>
|
|
891
|
+
<a name='L826'></a><a href='#L826'>826</a>
|
|
892
|
+
<a name='L827'></a><a href='#L827'>827</a>
|
|
893
|
+
<a name='L828'></a><a href='#L828'>828</a>
|
|
894
|
+
<a name='L829'></a><a href='#L829'>829</a>
|
|
895
|
+
<a name='L830'></a><a href='#L830'>830</a>
|
|
896
|
+
<a name='L831'></a><a href='#L831'>831</a>
|
|
897
|
+
<a name='L832'></a><a href='#L832'>832</a>
|
|
898
|
+
<a name='L833'></a><a href='#L833'>833</a>
|
|
899
|
+
<a name='L834'></a><a href='#L834'>834</a>
|
|
900
|
+
<a name='L835'></a><a href='#L835'>835</a>
|
|
901
|
+
<a name='L836'></a><a href='#L836'>836</a>
|
|
902
|
+
<a name='L837'></a><a href='#L837'>837</a>
|
|
903
|
+
<a name='L838'></a><a href='#L838'>838</a>
|
|
904
|
+
<a name='L839'></a><a href='#L839'>839</a>
|
|
905
|
+
<a name='L840'></a><a href='#L840'>840</a>
|
|
906
|
+
<a name='L841'></a><a href='#L841'>841</a>
|
|
907
|
+
<a name='L842'></a><a href='#L842'>842</a>
|
|
908
|
+
<a name='L843'></a><a href='#L843'>843</a>
|
|
909
|
+
<a name='L844'></a><a href='#L844'>844</a>
|
|
910
|
+
<a name='L845'></a><a href='#L845'>845</a>
|
|
911
|
+
<a name='L846'></a><a href='#L846'>846</a>
|
|
912
|
+
<a name='L847'></a><a href='#L847'>847</a>
|
|
913
|
+
<a name='L848'></a><a href='#L848'>848</a>
|
|
914
|
+
<a name='L849'></a><a href='#L849'>849</a>
|
|
915
|
+
<a name='L850'></a><a href='#L850'>850</a>
|
|
916
|
+
<a name='L851'></a><a href='#L851'>851</a>
|
|
917
|
+
<a name='L852'></a><a href='#L852'>852</a>
|
|
918
|
+
<a name='L853'></a><a href='#L853'>853</a>
|
|
919
|
+
<a name='L854'></a><a href='#L854'>854</a>
|
|
920
|
+
<a name='L855'></a><a href='#L855'>855</a>
|
|
921
|
+
<a name='L856'></a><a href='#L856'>856</a>
|
|
922
|
+
<a name='L857'></a><a href='#L857'>857</a>
|
|
923
|
+
<a name='L858'></a><a href='#L858'>858</a>
|
|
924
|
+
<a name='L859'></a><a href='#L859'>859</a>
|
|
925
|
+
<a name='L860'></a><a href='#L860'>860</a>
|
|
926
|
+
<a name='L861'></a><a href='#L861'>861</a>
|
|
927
|
+
<a name='L862'></a><a href='#L862'>862</a>
|
|
928
|
+
<a name='L863'></a><a href='#L863'>863</a>
|
|
929
|
+
<a name='L864'></a><a href='#L864'>864</a>
|
|
930
|
+
<a name='L865'></a><a href='#L865'>865</a>
|
|
931
|
+
<a name='L866'></a><a href='#L866'>866</a>
|
|
932
|
+
<a name='L867'></a><a href='#L867'>867</a>
|
|
933
|
+
<a name='L868'></a><a href='#L868'>868</a>
|
|
934
|
+
<a name='L869'></a><a href='#L869'>869</a>
|
|
935
|
+
<a name='L870'></a><a href='#L870'>870</a>
|
|
936
|
+
<a name='L871'></a><a href='#L871'>871</a>
|
|
937
|
+
<a name='L872'></a><a href='#L872'>872</a>
|
|
938
|
+
<a name='L873'></a><a href='#L873'>873</a>
|
|
939
|
+
<a name='L874'></a><a href='#L874'>874</a>
|
|
940
|
+
<a name='L875'></a><a href='#L875'>875</a>
|
|
941
|
+
<a name='L876'></a><a href='#L876'>876</a>
|
|
942
|
+
<a name='L877'></a><a href='#L877'>877</a>
|
|
943
|
+
<a name='L878'></a><a href='#L878'>878</a>
|
|
944
|
+
<a name='L879'></a><a href='#L879'>879</a>
|
|
945
|
+
<a name='L880'></a><a href='#L880'>880</a>
|
|
946
|
+
<a name='L881'></a><a href='#L881'>881</a>
|
|
947
|
+
<a name='L882'></a><a href='#L882'>882</a>
|
|
948
|
+
<a name='L883'></a><a href='#L883'>883</a>
|
|
949
|
+
<a name='L884'></a><a href='#L884'>884</a>
|
|
950
|
+
<a name='L885'></a><a href='#L885'>885</a>
|
|
951
|
+
<a name='L886'></a><a href='#L886'>886</a>
|
|
952
|
+
<a name='L887'></a><a href='#L887'>887</a>
|
|
953
|
+
<a name='L888'></a><a href='#L888'>888</a>
|
|
954
|
+
<a name='L889'></a><a href='#L889'>889</a>
|
|
955
|
+
<a name='L890'></a><a href='#L890'>890</a>
|
|
956
|
+
<a name='L891'></a><a href='#L891'>891</a>
|
|
957
|
+
<a name='L892'></a><a href='#L892'>892</a>
|
|
958
|
+
<a name='L893'></a><a href='#L893'>893</a>
|
|
959
|
+
<a name='L894'></a><a href='#L894'>894</a>
|
|
960
|
+
<a name='L895'></a><a href='#L895'>895</a>
|
|
961
|
+
<a name='L896'></a><a href='#L896'>896</a>
|
|
962
|
+
<a name='L897'></a><a href='#L897'>897</a>
|
|
963
|
+
<a name='L898'></a><a href='#L898'>898</a>
|
|
964
|
+
<a name='L899'></a><a href='#L899'>899</a>
|
|
965
|
+
<a name='L900'></a><a href='#L900'>900</a>
|
|
966
|
+
<a name='L901'></a><a href='#L901'>901</a>
|
|
967
|
+
<a name='L902'></a><a href='#L902'>902</a>
|
|
968
|
+
<a name='L903'></a><a href='#L903'>903</a>
|
|
969
|
+
<a name='L904'></a><a href='#L904'>904</a>
|
|
970
|
+
<a name='L905'></a><a href='#L905'>905</a>
|
|
971
|
+
<a name='L906'></a><a href='#L906'>906</a>
|
|
972
|
+
<a name='L907'></a><a href='#L907'>907</a>
|
|
973
|
+
<a name='L908'></a><a href='#L908'>908</a>
|
|
974
|
+
<a name='L909'></a><a href='#L909'>909</a>
|
|
975
|
+
<a name='L910'></a><a href='#L910'>910</a>
|
|
976
|
+
<a name='L911'></a><a href='#L911'>911</a>
|
|
977
|
+
<a name='L912'></a><a href='#L912'>912</a>
|
|
978
|
+
<a name='L913'></a><a href='#L913'>913</a>
|
|
979
|
+
<a name='L914'></a><a href='#L914'>914</a>
|
|
980
|
+
<a name='L915'></a><a href='#L915'>915</a>
|
|
981
|
+
<a name='L916'></a><a href='#L916'>916</a>
|
|
982
|
+
<a name='L917'></a><a href='#L917'>917</a>
|
|
983
|
+
<a name='L918'></a><a href='#L918'>918</a>
|
|
984
|
+
<a name='L919'></a><a href='#L919'>919</a>
|
|
985
|
+
<a name='L920'></a><a href='#L920'>920</a>
|
|
986
|
+
<a name='L921'></a><a href='#L921'>921</a>
|
|
987
|
+
<a name='L922'></a><a href='#L922'>922</a>
|
|
988
|
+
<a name='L923'></a><a href='#L923'>923</a>
|
|
989
|
+
<a name='L924'></a><a href='#L924'>924</a>
|
|
990
|
+
<a name='L925'></a><a href='#L925'>925</a>
|
|
991
|
+
<a name='L926'></a><a href='#L926'>926</a>
|
|
992
|
+
<a name='L927'></a><a href='#L927'>927</a>
|
|
993
|
+
<a name='L928'></a><a href='#L928'>928</a>
|
|
994
|
+
<a name='L929'></a><a href='#L929'>929</a>
|
|
995
|
+
<a name='L930'></a><a href='#L930'>930</a>
|
|
996
|
+
<a name='L931'></a><a href='#L931'>931</a>
|
|
997
|
+
<a name='L932'></a><a href='#L932'>932</a>
|
|
998
|
+
<a name='L933'></a><a href='#L933'>933</a>
|
|
999
|
+
<a name='L934'></a><a href='#L934'>934</a>
|
|
1000
|
+
<a name='L935'></a><a href='#L935'>935</a>
|
|
1001
|
+
<a name='L936'></a><a href='#L936'>936</a>
|
|
1002
|
+
<a name='L937'></a><a href='#L937'>937</a>
|
|
1003
|
+
<a name='L938'></a><a href='#L938'>938</a>
|
|
1004
|
+
<a name='L939'></a><a href='#L939'>939</a>
|
|
1005
|
+
<a name='L940'></a><a href='#L940'>940</a>
|
|
1006
|
+
<a name='L941'></a><a href='#L941'>941</a>
|
|
1007
|
+
<a name='L942'></a><a href='#L942'>942</a>
|
|
1008
|
+
<a name='L943'></a><a href='#L943'>943</a>
|
|
1009
|
+
<a name='L944'></a><a href='#L944'>944</a>
|
|
1010
|
+
<a name='L945'></a><a href='#L945'>945</a>
|
|
1011
|
+
<a name='L946'></a><a href='#L946'>946</a>
|
|
1012
|
+
<a name='L947'></a><a href='#L947'>947</a>
|
|
1013
|
+
<a name='L948'></a><a href='#L948'>948</a>
|
|
1014
|
+
<a name='L949'></a><a href='#L949'>949</a>
|
|
1015
|
+
<a name='L950'></a><a href='#L950'>950</a>
|
|
1016
|
+
<a name='L951'></a><a href='#L951'>951</a>
|
|
1017
|
+
<a name='L952'></a><a href='#L952'>952</a>
|
|
1018
|
+
<a name='L953'></a><a href='#L953'>953</a>
|
|
1019
|
+
<a name='L954'></a><a href='#L954'>954</a>
|
|
1020
|
+
<a name='L955'></a><a href='#L955'>955</a>
|
|
1021
|
+
<a name='L956'></a><a href='#L956'>956</a>
|
|
1022
|
+
<a name='L957'></a><a href='#L957'>957</a>
|
|
1023
|
+
<a name='L958'></a><a href='#L958'>958</a>
|
|
1024
|
+
<a name='L959'></a><a href='#L959'>959</a>
|
|
1025
|
+
<a name='L960'></a><a href='#L960'>960</a>
|
|
1026
|
+
<a name='L961'></a><a href='#L961'>961</a>
|
|
1027
|
+
<a name='L962'></a><a href='#L962'>962</a>
|
|
1028
|
+
<a name='L963'></a><a href='#L963'>963</a>
|
|
1029
|
+
<a name='L964'></a><a href='#L964'>964</a>
|
|
1030
|
+
<a name='L965'></a><a href='#L965'>965</a>
|
|
1031
|
+
<a name='L966'></a><a href='#L966'>966</a>
|
|
1032
|
+
<a name='L967'></a><a href='#L967'>967</a>
|
|
1033
|
+
<a name='L968'></a><a href='#L968'>968</a>
|
|
1034
|
+
<a name='L969'></a><a href='#L969'>969</a>
|
|
1035
|
+
<a name='L970'></a><a href='#L970'>970</a>
|
|
1036
|
+
<a name='L971'></a><a href='#L971'>971</a>
|
|
1037
|
+
<a name='L972'></a><a href='#L972'>972</a>
|
|
1038
|
+
<a name='L973'></a><a href='#L973'>973</a>
|
|
1039
|
+
<a name='L974'></a><a href='#L974'>974</a>
|
|
1040
|
+
<a name='L975'></a><a href='#L975'>975</a>
|
|
1041
|
+
<a name='L976'></a><a href='#L976'>976</a>
|
|
1042
|
+
<a name='L977'></a><a href='#L977'>977</a>
|
|
1043
|
+
<a name='L978'></a><a href='#L978'>978</a>
|
|
1044
|
+
<a name='L979'></a><a href='#L979'>979</a>
|
|
1045
|
+
<a name='L980'></a><a href='#L980'>980</a>
|
|
1046
|
+
<a name='L981'></a><a href='#L981'>981</a>
|
|
1047
|
+
<a name='L982'></a><a href='#L982'>982</a>
|
|
1048
|
+
<a name='L983'></a><a href='#L983'>983</a>
|
|
1049
|
+
<a name='L984'></a><a href='#L984'>984</a>
|
|
1050
|
+
<a name='L985'></a><a href='#L985'>985</a>
|
|
1051
|
+
<a name='L986'></a><a href='#L986'>986</a>
|
|
1052
|
+
<a name='L987'></a><a href='#L987'>987</a>
|
|
1053
|
+
<a name='L988'></a><a href='#L988'>988</a>
|
|
1054
|
+
<a name='L989'></a><a href='#L989'>989</a>
|
|
1055
|
+
<a name='L990'></a><a href='#L990'>990</a>
|
|
1056
|
+
<a name='L991'></a><a href='#L991'>991</a>
|
|
1057
|
+
<a name='L992'></a><a href='#L992'>992</a>
|
|
1058
|
+
<a name='L993'></a><a href='#L993'>993</a>
|
|
1059
|
+
<a name='L994'></a><a href='#L994'>994</a>
|
|
1060
|
+
<a name='L995'></a><a href='#L995'>995</a>
|
|
1061
|
+
<a name='L996'></a><a href='#L996'>996</a>
|
|
1062
|
+
<a name='L997'></a><a href='#L997'>997</a>
|
|
1063
|
+
<a name='L998'></a><a href='#L998'>998</a>
|
|
1064
|
+
<a name='L999'></a><a href='#L999'>999</a>
|
|
1065
|
+
<a name='L1000'></a><a href='#L1000'>1000</a>
|
|
1066
|
+
<a name='L1001'></a><a href='#L1001'>1001</a>
|
|
1067
|
+
<a name='L1002'></a><a href='#L1002'>1002</a>
|
|
1068
|
+
<a name='L1003'></a><a href='#L1003'>1003</a>
|
|
1069
|
+
<a name='L1004'></a><a href='#L1004'>1004</a>
|
|
1070
|
+
<a name='L1005'></a><a href='#L1005'>1005</a>
|
|
1071
|
+
<a name='L1006'></a><a href='#L1006'>1006</a>
|
|
1072
|
+
<a name='L1007'></a><a href='#L1007'>1007</a>
|
|
1073
|
+
<a name='L1008'></a><a href='#L1008'>1008</a>
|
|
1074
|
+
<a name='L1009'></a><a href='#L1009'>1009</a>
|
|
1075
|
+
<a name='L1010'></a><a href='#L1010'>1010</a>
|
|
1076
|
+
<a name='L1011'></a><a href='#L1011'>1011</a>
|
|
1077
|
+
<a name='L1012'></a><a href='#L1012'>1012</a>
|
|
1078
|
+
<a name='L1013'></a><a href='#L1013'>1013</a>
|
|
1079
|
+
<a name='L1014'></a><a href='#L1014'>1014</a>
|
|
1080
|
+
<a name='L1015'></a><a href='#L1015'>1015</a>
|
|
1081
|
+
<a name='L1016'></a><a href='#L1016'>1016</a>
|
|
1082
|
+
<a name='L1017'></a><a href='#L1017'>1017</a>
|
|
1083
|
+
<a name='L1018'></a><a href='#L1018'>1018</a>
|
|
1084
|
+
<a name='L1019'></a><a href='#L1019'>1019</a>
|
|
1085
|
+
<a name='L1020'></a><a href='#L1020'>1020</a>
|
|
1086
|
+
<a name='L1021'></a><a href='#L1021'>1021</a>
|
|
1087
|
+
<a name='L1022'></a><a href='#L1022'>1022</a>
|
|
1088
|
+
<a name='L1023'></a><a href='#L1023'>1023</a>
|
|
1089
|
+
<a name='L1024'></a><a href='#L1024'>1024</a>
|
|
1090
|
+
<a name='L1025'></a><a href='#L1025'>1025</a>
|
|
1091
|
+
<a name='L1026'></a><a href='#L1026'>1026</a>
|
|
1092
|
+
<a name='L1027'></a><a href='#L1027'>1027</a>
|
|
1093
|
+
<a name='L1028'></a><a href='#L1028'>1028</a>
|
|
1094
|
+
<a name='L1029'></a><a href='#L1029'>1029</a>
|
|
1095
|
+
<a name='L1030'></a><a href='#L1030'>1030</a>
|
|
1096
|
+
<a name='L1031'></a><a href='#L1031'>1031</a>
|
|
1097
|
+
<a name='L1032'></a><a href='#L1032'>1032</a>
|
|
1098
|
+
<a name='L1033'></a><a href='#L1033'>1033</a>
|
|
1099
|
+
<a name='L1034'></a><a href='#L1034'>1034</a>
|
|
1100
|
+
<a name='L1035'></a><a href='#L1035'>1035</a>
|
|
1101
|
+
<a name='L1036'></a><a href='#L1036'>1036</a>
|
|
1102
|
+
<a name='L1037'></a><a href='#L1037'>1037</a>
|
|
1103
|
+
<a name='L1038'></a><a href='#L1038'>1038</a>
|
|
1104
|
+
<a name='L1039'></a><a href='#L1039'>1039</a>
|
|
1105
|
+
<a name='L1040'></a><a href='#L1040'>1040</a>
|
|
1106
|
+
<a name='L1041'></a><a href='#L1041'>1041</a>
|
|
1107
|
+
<a name='L1042'></a><a href='#L1042'>1042</a>
|
|
1108
|
+
<a name='L1043'></a><a href='#L1043'>1043</a>
|
|
1109
|
+
<a name='L1044'></a><a href='#L1044'>1044</a>
|
|
1110
|
+
<a name='L1045'></a><a href='#L1045'>1045</a>
|
|
1111
|
+
<a name='L1046'></a><a href='#L1046'>1046</a>
|
|
1112
|
+
<a name='L1047'></a><a href='#L1047'>1047</a>
|
|
1113
|
+
<a name='L1048'></a><a href='#L1048'>1048</a>
|
|
1114
|
+
<a name='L1049'></a><a href='#L1049'>1049</a>
|
|
1115
|
+
<a name='L1050'></a><a href='#L1050'>1050</a>
|
|
1116
|
+
<a name='L1051'></a><a href='#L1051'>1051</a>
|
|
1117
|
+
<a name='L1052'></a><a href='#L1052'>1052</a>
|
|
1118
|
+
<a name='L1053'></a><a href='#L1053'>1053</a>
|
|
1119
|
+
<a name='L1054'></a><a href='#L1054'>1054</a>
|
|
1120
|
+
<a name='L1055'></a><a href='#L1055'>1055</a>
|
|
1121
|
+
<a name='L1056'></a><a href='#L1056'>1056</a>
|
|
1122
|
+
<a name='L1057'></a><a href='#L1057'>1057</a>
|
|
1123
|
+
<a name='L1058'></a><a href='#L1058'>1058</a>
|
|
1124
|
+
<a name='L1059'></a><a href='#L1059'>1059</a>
|
|
1125
|
+
<a name='L1060'></a><a href='#L1060'>1060</a>
|
|
1126
|
+
<a name='L1061'></a><a href='#L1061'>1061</a>
|
|
1127
|
+
<a name='L1062'></a><a href='#L1062'>1062</a>
|
|
1128
|
+
<a name='L1063'></a><a href='#L1063'>1063</a>
|
|
1129
|
+
<a name='L1064'></a><a href='#L1064'>1064</a>
|
|
1130
|
+
<a name='L1065'></a><a href='#L1065'>1065</a>
|
|
1131
|
+
<a name='L1066'></a><a href='#L1066'>1066</a>
|
|
1132
|
+
<a name='L1067'></a><a href='#L1067'>1067</a>
|
|
1133
|
+
<a name='L1068'></a><a href='#L1068'>1068</a>
|
|
1134
|
+
<a name='L1069'></a><a href='#L1069'>1069</a>
|
|
1135
|
+
<a name='L1070'></a><a href='#L1070'>1070</a>
|
|
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"> </span>
|
|
1174
|
+
<span class="cline-any cline-no"> </span>
|
|
1175
|
+
<span class="cline-any cline-neutral"> </span>
|
|
827
1176
|
<span class="cline-any cline-no"> </span>
|
|
828
1177
|
<span class="cline-any cline-no"> </span>
|
|
829
1178
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -848,6 +1197,8 @@
|
|
|
848
1197
|
<span class="cline-any cline-neutral"> </span>
|
|
849
1198
|
<span class="cline-any cline-neutral"> </span>
|
|
850
1199
|
<span class="cline-any cline-neutral"> </span>
|
|
1200
|
+
<span class="cline-any cline-no"> </span>
|
|
1201
|
+
<span class="cline-any cline-no"> </span>
|
|
851
1202
|
<span class="cline-any cline-neutral"> </span>
|
|
852
1203
|
<span class="cline-any cline-neutral"> </span>
|
|
853
1204
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -875,6 +1226,21 @@
|
|
|
875
1226
|
<span class="cline-any cline-neutral"> </span>
|
|
876
1227
|
<span class="cline-any cline-no"> </span>
|
|
877
1228
|
<span class="cline-any cline-no"> </span>
|
|
1229
|
+
<span class="cline-any cline-no"> </span>
|
|
1230
|
+
<span class="cline-any cline-no"> </span>
|
|
1231
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1232
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1233
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1234
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1235
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1236
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1237
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1238
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1239
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1240
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1241
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1242
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1243
|
+
<span class="cline-any cline-neutral"> </span>
|
|
878
1244
|
<span class="cline-any cline-neutral"> </span>
|
|
879
1245
|
<span class="cline-any cline-neutral"> </span>
|
|
880
1246
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -898,6 +1264,8 @@
|
|
|
898
1264
|
<span class="cline-any cline-no"> </span>
|
|
899
1265
|
<span class="cline-any cline-no"> </span>
|
|
900
1266
|
<span class="cline-any cline-no"> </span>
|
|
1267
|
+
<span class="cline-any cline-no"> </span>
|
|
1268
|
+
<span class="cline-any cline-neutral"> </span>
|
|
901
1269
|
<span class="cline-any cline-neutral"> </span>
|
|
902
1270
|
<span class="cline-any cline-neutral"> </span>
|
|
903
1271
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -952,6 +1320,12 @@
|
|
|
952
1320
|
<span class="cline-any cline-no"> </span>
|
|
953
1321
|
<span class="cline-any cline-neutral"> </span>
|
|
954
1322
|
<span class="cline-any cline-neutral"> </span>
|
|
1323
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1324
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1325
|
+
<span class="cline-any cline-no"> </span>
|
|
1326
|
+
<span class="cline-any cline-no"> </span>
|
|
1327
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1328
|
+
<span class="cline-any cline-neutral"> </span>
|
|
955
1329
|
<span class="cline-any cline-no"> </span>
|
|
956
1330
|
<span class="cline-any cline-no"> </span>
|
|
957
1331
|
<span class="cline-any cline-no"> </span>
|
|
@@ -967,11 +1341,17 @@
|
|
|
967
1341
|
<span class="cline-any cline-no"> </span>
|
|
968
1342
|
<span class="cline-any cline-neutral"> </span>
|
|
969
1343
|
<span class="cline-any cline-neutral"> </span>
|
|
1344
|
+
<span class="cline-any cline-no"> </span>
|
|
1345
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1346
|
+
<span class="cline-any cline-no"> </span>
|
|
970
1347
|
<span class="cline-any cline-neutral"> </span>
|
|
971
1348
|
<span class="cline-any cline-neutral"> </span>
|
|
972
1349
|
<span class="cline-any cline-neutral"> </span>
|
|
973
1350
|
<span class="cline-any cline-neutral"> </span>
|
|
974
1351
|
<span class="cline-any cline-neutral"> </span>
|
|
1352
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1353
|
+
<span class="cline-any cline-no"> </span>
|
|
1354
|
+
<span class="cline-any cline-neutral"> </span>
|
|
975
1355
|
<span class="cline-any cline-no"> </span>
|
|
976
1356
|
<span class="cline-any cline-no"> </span>
|
|
977
1357
|
<span class="cline-any cline-no"> </span>
|
|
@@ -997,6 +1377,8 @@
|
|
|
997
1377
|
<span class="cline-any cline-neutral"> </span>
|
|
998
1378
|
<span class="cline-any cline-neutral"> </span>
|
|
999
1379
|
<span class="cline-any cline-neutral"> </span>
|
|
1380
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1381
|
+
<span class="cline-any cline-no"> </span>
|
|
1000
1382
|
<span class="cline-any cline-no"> </span>
|
|
1001
1383
|
<span class="cline-any cline-no"> </span>
|
|
1002
1384
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1015,6 +1397,7 @@
|
|
|
1015
1397
|
<span class="cline-any cline-no"> </span>
|
|
1016
1398
|
<span class="cline-any cline-no"> </span>
|
|
1017
1399
|
<span class="cline-any cline-no"> </span>
|
|
1400
|
+
<span class="cline-any cline-no"> </span>
|
|
1018
1401
|
<span class="cline-any cline-neutral"> </span>
|
|
1019
1402
|
<span class="cline-any cline-no"> </span>
|
|
1020
1403
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1160,6 +1543,14 @@
|
|
|
1160
1543
|
<span class="cline-any cline-neutral"> </span>
|
|
1161
1544
|
<span class="cline-any cline-neutral"> </span>
|
|
1162
1545
|
<span class="cline-any cline-no"> </span>
|
|
1546
|
+
<span class="cline-any cline-no"> </span>
|
|
1547
|
+
<span class="cline-any cline-no"> </span>
|
|
1548
|
+
<span class="cline-any cline-no"> </span>
|
|
1549
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1550
|
+
<span class="cline-any cline-no"> </span>
|
|
1551
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1552
|
+
<span class="cline-any cline-no"> </span>
|
|
1553
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1163
1554
|
<span class="cline-any cline-neutral"> </span>
|
|
1164
1555
|
<span class="cline-any cline-neutral"> </span>
|
|
1165
1556
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1171,6 +1562,10 @@
|
|
|
1171
1562
|
<span class="cline-any cline-neutral"> </span>
|
|
1172
1563
|
<span class="cline-any cline-neutral"> </span>
|
|
1173
1564
|
<span class="cline-any cline-neutral"> </span>
|
|
1565
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1566
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1567
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1568
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1174
1569
|
<span class="cline-any cline-no"> </span>
|
|
1175
1570
|
<span class="cline-any cline-no"> </span>
|
|
1176
1571
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1186,6 +1581,39 @@
|
|
|
1186
1581
|
<span class="cline-any cline-no"> </span>
|
|
1187
1582
|
<span class="cline-any cline-neutral"> </span>
|
|
1188
1583
|
<span class="cline-any cline-neutral"> </span>
|
|
1584
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1585
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1586
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1587
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1588
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1589
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1590
|
+
<span class="cline-any cline-no"> </span>
|
|
1591
|
+
<span class="cline-any cline-no"> </span>
|
|
1592
|
+
<span class="cline-any cline-no"> </span>
|
|
1593
|
+
<span class="cline-any cline-no"> </span>
|
|
1594
|
+
<span class="cline-any cline-no"> </span>
|
|
1595
|
+
<span class="cline-any cline-no"> </span>
|
|
1596
|
+
<span class="cline-any cline-no"> </span>
|
|
1597
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1598
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1599
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1600
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1601
|
+
<span class="cline-any cline-no"> </span>
|
|
1602
|
+
<span class="cline-any cline-no"> </span>
|
|
1603
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1604
|
+
<span class="cline-any cline-no"> </span>
|
|
1605
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1606
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1607
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1608
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1609
|
+
<span class="cline-any cline-no"> </span>
|
|
1610
|
+
<span class="cline-any cline-no"> </span>
|
|
1611
|
+
<span class="cline-any cline-no"> </span>
|
|
1612
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1613
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1614
|
+
<span class="cline-any cline-no"> </span>
|
|
1615
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1616
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1189
1617
|
<span class="cline-any cline-no"> </span>
|
|
1190
1618
|
<span class="cline-any cline-neutral"> </span>
|
|
1191
1619
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1354,22 +1782,130 @@
|
|
|
1354
1782
|
<span class="cline-any cline-neutral"> </span>
|
|
1355
1783
|
<span class="cline-any cline-neutral"> </span>
|
|
1356
1784
|
<span class="cline-any cline-neutral"> </span>
|
|
1785
|
+
<span class="cline-any cline-no"> </span>
|
|
1786
|
+
<span class="cline-any cline-no"> </span>
|
|
1787
|
+
<span class="cline-any cline-no"> </span>
|
|
1788
|
+
<span class="cline-any cline-no"> </span>
|
|
1789
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1790
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1791
|
+
<span class="cline-any cline-no"> </span>
|
|
1792
|
+
<span class="cline-any cline-no"> </span>
|
|
1793
|
+
<span class="cline-any cline-no"> </span>
|
|
1794
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1795
|
+
<span class="cline-any cline-no"> </span>
|
|
1796
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1797
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1798
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1799
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1357
1800
|
<span class="cline-any cline-neutral"> </span>
|
|
1801
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1802
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1803
|
+
<span class="cline-any cline-no"> </span>
|
|
1804
|
+
<span class="cline-any cline-no"> </span>
|
|
1358
1805
|
<span class="cline-any cline-no"> </span>
|
|
1359
1806
|
<span class="cline-any cline-no"> </span>
|
|
1360
1807
|
<span class="cline-any cline-neutral"> </span>
|
|
1361
1808
|
<span class="cline-any cline-no"> </span>
|
|
1362
1809
|
<span class="cline-any cline-no"> </span>
|
|
1810
|
+
<span class="cline-any cline-no"> </span>
|
|
1811
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1812
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1813
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1814
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1815
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1816
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1817
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1818
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1819
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1820
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1821
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1822
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1823
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1824
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1825
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1826
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1363
1827
|
<span class="cline-any cline-neutral"> </span>
|
|
1364
1828
|
<span class="cline-any cline-neutral"> </span>
|
|
1365
1829
|
<span class="cline-any cline-neutral"> </span>
|
|
1366
1830
|
<span class="cline-any cline-neutral"> </span>
|
|
1367
1831
|
<span class="cline-any cline-neutral"> </span>
|
|
1832
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1833
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1834
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1835
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1836
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1837
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1838
|
+
<span class="cline-any cline-no"> </span>
|
|
1839
|
+
<span class="cline-any cline-no"> </span>
|
|
1840
|
+
<span class="cline-any cline-no"> </span>
|
|
1841
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1842
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1843
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1844
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1845
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1846
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1847
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1848
|
+
<span class="cline-any cline-no"> </span>
|
|
1849
|
+
<span class="cline-any cline-no"> </span>
|
|
1850
|
+
<span class="cline-any cline-no"> </span>
|
|
1851
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1852
|
+
<span class="cline-any cline-no"> </span>
|
|
1853
|
+
<span class="cline-any cline-no"> </span>
|
|
1854
|
+
<span class="cline-any cline-no"> </span>
|
|
1855
|
+
<span class="cline-any cline-no"> </span>
|
|
1856
|
+
<span class="cline-any cline-no"> </span>
|
|
1857
|
+
<span class="cline-any cline-no"> </span>
|
|
1858
|
+
<span class="cline-any cline-no"> </span>
|
|
1859
|
+
<span class="cline-any cline-no"> </span>
|
|
1860
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1861
|
+
<span class="cline-any cline-no"> </span>
|
|
1862
|
+
<span class="cline-any cline-no"> </span>
|
|
1863
|
+
<span class="cline-any cline-no"> </span>
|
|
1864
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1865
|
+
<span class="cline-any cline-no"> </span>
|
|
1866
|
+
<span class="cline-any cline-no"> </span>
|
|
1867
|
+
<span class="cline-any cline-no"> </span>
|
|
1868
|
+
<span class="cline-any cline-no"> </span>
|
|
1869
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1870
|
+
<span class="cline-any cline-no"> </span>
|
|
1871
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1872
|
+
<span class="cline-any cline-no"> </span>
|
|
1873
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1874
|
+
<span class="cline-any cline-no"> </span>
|
|
1875
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1876
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1877
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1878
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1879
|
+
<span class="cline-any cline-no"> </span>
|
|
1880
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1881
|
+
<span class="cline-any cline-no"> </span>
|
|
1882
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1883
|
+
<span class="cline-any cline-no"> </span>
|
|
1884
|
+
<span class="cline-any cline-no"> </span>
|
|
1885
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1886
|
+
<span class="cline-any cline-no"> </span>
|
|
1887
|
+
<span class="cline-any cline-no"> </span>
|
|
1888
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1889
|
+
<span class="cline-any cline-no"> </span>
|
|
1890
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1891
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1892
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1893
|
+
<span class="cline-any cline-no"> </span>
|
|
1894
|
+
<span class="cline-any cline-no"> </span>
|
|
1895
|
+
<span class="cline-any cline-no"> </span>
|
|
1896
|
+
<span class="cline-any cline-no"> </span>
|
|
1897
|
+
<span class="cline-any cline-no"> </span>
|
|
1898
|
+
<span class="cline-any cline-no"> </span>
|
|
1899
|
+
<span class="cline-any cline-no"> </span>
|
|
1900
|
+
<span class="cline-any cline-no"> </span>
|
|
1368
1901
|
<span class="cline-any cline-no"> </span>
|
|
1369
1902
|
<span class="cline-any cline-no"> </span>
|
|
1370
1903
|
<span class="cline-any cline-neutral"> </span>
|
|
1371
1904
|
<span class="cline-any cline-no"> </span>
|
|
1372
1905
|
<span class="cline-any cline-no"> </span>
|
|
1906
|
+
<span class="cline-any cline-no"> </span>
|
|
1907
|
+
<span class="cline-any cline-no"> </span>
|
|
1908
|
+
<span class="cline-any cline-no"> </span>
|
|
1373
1909
|
<span class="cline-any cline-neutral"> </span>
|
|
1374
1910
|
<span class="cline-any cline-no"> </span>
|
|
1375
1911
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1380,8 +1916,22 @@
|
|
|
1380
1916
|
<span class="cline-any cline-neutral"> </span>
|
|
1381
1917
|
<span class="cline-any cline-neutral"> </span>
|
|
1382
1918
|
<span class="cline-any cline-neutral"> </span>
|
|
1919
|
+
<span class="cline-any cline-no"> </span>
|
|
1383
1920
|
<span class="cline-any cline-neutral"> </span>
|
|
1384
1921
|
<span class="cline-any cline-no"> </span>
|
|
1922
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1923
|
+
<span class="cline-any cline-no"> </span>
|
|
1924
|
+
<span class="cline-any cline-no"> </span>
|
|
1925
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1926
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1927
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1928
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1929
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1930
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1931
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1932
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1933
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1934
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1385
1935
|
<span class="cline-any cline-no"> </span>
|
|
1386
1936
|
<span class="cline-any cline-neutral"> </span>
|
|
1387
1937
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1389,29 +1939,51 @@
|
|
|
1389
1939
|
<span class="cline-any cline-neutral"> </span>
|
|
1390
1940
|
<span class="cline-any cline-neutral"> </span>
|
|
1391
1941
|
<span class="cline-any cline-neutral"> </span>
|
|
1942
|
+
<span class="cline-any cline-no"> </span>
|
|
1943
|
+
<span class="cline-any cline-no"> </span>
|
|
1944
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1945
|
+
<span class="cline-any cline-no"> </span>
|
|
1392
1946
|
<span class="cline-any cline-neutral"> </span>
|
|
1393
1947
|
<span class="cline-any cline-neutral"> </span>
|
|
1394
1948
|
<span class="cline-any cline-neutral"> </span>
|
|
1949
|
+
<span class="cline-any cline-no"> </span>
|
|
1950
|
+
<span class="cline-any cline-no"> </span>
|
|
1951
|
+
<span class="cline-any cline-no"> </span>
|
|
1395
1952
|
<span class="cline-any cline-neutral"> </span>
|
|
1396
1953
|
<span class="cline-any cline-no"> </span>
|
|
1397
1954
|
<span class="cline-any cline-no"> </span>
|
|
1398
1955
|
<span class="cline-any cline-no"> </span>
|
|
1399
1956
|
<span class="cline-any cline-no"> </span>
|
|
1957
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1400
1958
|
<span class="cline-any cline-no"> </span>
|
|
1401
1959
|
<span class="cline-any cline-neutral"> </span>
|
|
1960
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1961
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1962
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1963
|
+
<span class="cline-any cline-no"> </span>
|
|
1964
|
+
<span class="cline-any cline-no"> </span>
|
|
1402
1965
|
<span class="cline-any cline-no"> </span>
|
|
1403
1966
|
<span class="cline-any cline-neutral"> </span>
|
|
1967
|
+
<span class="cline-any cline-no"> </span>
|
|
1968
|
+
<span class="cline-any cline-no"> </span>
|
|
1969
|
+
<span class="cline-any cline-no"> </span>
|
|
1404
1970
|
<span class="cline-any cline-neutral"> </span>
|
|
1405
1971
|
<span class="cline-any cline-neutral"> </span>
|
|
1972
|
+
<span class="cline-any cline-no"> </span>
|
|
1973
|
+
<span class="cline-any cline-no"> </span>
|
|
1406
1974
|
<span class="cline-any cline-neutral"> </span>
|
|
1975
|
+
<span class="cline-any cline-no"> </span>
|
|
1407
1976
|
<span class="cline-any cline-neutral"> </span>
|
|
1408
1977
|
<span class="cline-any cline-no"> </span>
|
|
1409
1978
|
<span class="cline-any cline-neutral"> </span>
|
|
1979
|
+
<span class="cline-any cline-no"> </span>
|
|
1410
1980
|
<span class="cline-any cline-neutral"> </span>
|
|
1411
1981
|
<span class="cline-any cline-neutral"> </span>
|
|
1412
1982
|
<span class="cline-any cline-neutral"> </span>
|
|
1413
1983
|
<span class="cline-any cline-neutral"> </span>
|
|
1414
1984
|
<span class="cline-any cline-neutral"> </span>
|
|
1985
|
+
<span class="cline-any cline-no"> </span>
|
|
1986
|
+
<span class="cline-any cline-no"> </span>
|
|
1415
1987
|
<span class="cline-any cline-neutral"> </span>
|
|
1416
1988
|
<span class="cline-any cline-neutral"> </span>
|
|
1417
1989
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1424,10 +1996,14 @@
|
|
|
1424
1996
|
<span class="cline-any cline-neutral"> </span>
|
|
1425
1997
|
<span class="cline-any cline-no"> </span>
|
|
1426
1998
|
<span class="cline-any cline-no"> </span>
|
|
1999
|
+
<span class="cline-any cline-no"> </span>
|
|
1427
2000
|
<span class="cline-any cline-neutral"> </span>
|
|
1428
2001
|
<span class="cline-any cline-no"> </span>
|
|
1429
2002
|
<span class="cline-any cline-neutral"> </span>
|
|
1430
2003
|
<span class="cline-any cline-neutral"> </span>
|
|
2004
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2005
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2006
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1431
2007
|
<span class="cline-any cline-no"> </span>
|
|
1432
2008
|
<span class="cline-any cline-neutral"> </span>
|
|
1433
2009
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1435,10 +2011,24 @@
|
|
|
1435
2011
|
<span class="cline-any cline-neutral"> </span>
|
|
1436
2012
|
<span class="cline-any cline-neutral"> </span>
|
|
1437
2013
|
<span class="cline-any cline-neutral"> </span>
|
|
2014
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2015
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2016
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2017
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2018
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2019
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2020
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2021
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2022
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2023
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2024
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2025
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1438
2026
|
<span class="cline-any cline-no"> </span>
|
|
1439
2027
|
<span class="cline-any cline-no"> </span>
|
|
1440
2028
|
<span class="cline-any cline-neutral"> </span>
|
|
1441
2029
|
<span class="cline-any cline-no"> </span>
|
|
2030
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2031
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1442
2032
|
<span class="cline-any cline-no"> </span>
|
|
1443
2033
|
<span class="cline-any cline-neutral"> </span>
|
|
1444
2034
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1446,6 +2036,25 @@
|
|
|
1446
2036
|
<span class="cline-any cline-neutral"> </span>
|
|
1447
2037
|
<span class="cline-any cline-neutral"> </span>
|
|
1448
2038
|
<span class="cline-any cline-neutral"> </span>
|
|
2039
|
+
<span class="cline-any cline-no"> </span>
|
|
2040
|
+
<span class="cline-any cline-no"> </span>
|
|
2041
|
+
<span class="cline-any cline-no"> </span>
|
|
2042
|
+
<span class="cline-any cline-no"> </span>
|
|
2043
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2044
|
+
<span class="cline-any cline-no"> </span>
|
|
2045
|
+
<span class="cline-any cline-no"> </span>
|
|
2046
|
+
<span class="cline-any cline-no"> </span>
|
|
2047
|
+
<span class="cline-any cline-no"> </span>
|
|
2048
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2049
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2050
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2051
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2052
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2053
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2054
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2055
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2056
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2057
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1449
2058
|
<span class="cline-any cline-neutral"> </span>
|
|
1450
2059
|
<span class="cline-any cline-neutral"> </span>
|
|
1451
2060
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1455,9 +2064,22 @@
|
|
|
1455
2064
|
<span class="cline-any cline-neutral"> </span>
|
|
1456
2065
|
<span class="cline-any cline-neutral"> </span>
|
|
1457
2066
|
<span class="cline-any cline-neutral"> </span>
|
|
2067
|
+
<span class="cline-any cline-no"> </span>
|
|
2068
|
+
<span class="cline-any cline-no"> </span>
|
|
2069
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2070
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2071
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2072
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2073
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2074
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1458
2075
|
<span class="cline-any cline-neutral"> </span>
|
|
1459
2076
|
<span class="cline-any cline-no"> </span>
|
|
1460
2077
|
<span class="cline-any cline-no"> </span>
|
|
2078
|
+
<span class="cline-any cline-no"> </span>
|
|
2079
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2080
|
+
<span class="cline-any cline-no"> </span>
|
|
2081
|
+
<span class="cline-any cline-no"> </span>
|
|
2082
|
+
<span class="cline-any cline-no"> </span>
|
|
1461
2083
|
<span class="cline-any cline-neutral"> </span>
|
|
1462
2084
|
<span class="cline-any cline-neutral"> </span>
|
|
1463
2085
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1467,54 +2089,107 @@
|
|
|
1467
2089
|
<span class="cline-any cline-neutral"> </span>
|
|
1468
2090
|
<span class="cline-any cline-no"> </span>
|
|
1469
2091
|
<span class="cline-any cline-neutral"> </span>
|
|
2092
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2093
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2094
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2095
|
+
<span class="cline-any cline-no"> </span>
|
|
2096
|
+
<span class="cline-any cline-no"> </span>
|
|
2097
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2098
|
+
<span class="cline-any cline-no"> </span>
|
|
2099
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2100
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1470
2101
|
<span class="cline-any cline-no"> </span>
|
|
1471
2102
|
<span class="cline-any cline-no"> </span>
|
|
2103
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1472
2104
|
<span class="cline-any cline-no"> </span>
|
|
1473
2105
|
<span class="cline-any cline-neutral"> </span>
|
|
2106
|
+
<span class="cline-any cline-no"> </span>
|
|
1474
2107
|
<span class="cline-any cline-neutral"> </span>
|
|
1475
2108
|
<span class="cline-any cline-neutral"> </span>
|
|
1476
2109
|
<span class="cline-any cline-neutral"> </span>
|
|
1477
2110
|
<span class="cline-any cline-neutral"> </span>
|
|
1478
2111
|
<span class="cline-any cline-neutral"> </span>
|
|
2112
|
+
<span class="cline-any cline-no"> </span>
|
|
2113
|
+
<span class="cline-any cline-no"> </span>
|
|
2114
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2115
|
+
<span class="cline-any cline-no"> </span>
|
|
2116
|
+
<span class="cline-any cline-no"> </span>
|
|
2117
|
+
<span class="cline-any cline-no"> </span>
|
|
2118
|
+
<span class="cline-any cline-no"> </span>
|
|
2119
|
+
<span class="cline-any cline-no"> </span>
|
|
2120
|
+
<span class="cline-any cline-no"> </span>
|
|
2121
|
+
<span class="cline-any cline-no"> </span>
|
|
1479
2122
|
<span class="cline-any cline-neutral"> </span>
|
|
1480
2123
|
<span class="cline-any cline-no"> </span>
|
|
1481
2124
|
<span class="cline-any cline-neutral"> </span>
|
|
1482
2125
|
<span class="cline-any cline-neutral"> </span>
|
|
2126
|
+
<span class="cline-any cline-no"> </span>
|
|
1483
2127
|
<span class="cline-any cline-neutral"> </span>
|
|
1484
2128
|
<span class="cline-any cline-neutral"> </span>
|
|
1485
2129
|
<span class="cline-any cline-no"> </span>
|
|
1486
2130
|
<span class="cline-any cline-no"> </span>
|
|
1487
2131
|
<span class="cline-any cline-neutral"> </span>
|
|
1488
2132
|
<span class="cline-any cline-no"> </span>
|
|
2133
|
+
<span class="cline-any cline-no"> </span>
|
|
2134
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2135
|
+
<span class="cline-any cline-no"> </span>
|
|
1489
2136
|
<span class="cline-any cline-neutral"> </span>
|
|
1490
2137
|
<span class="cline-any cline-neutral"> </span>
|
|
1491
2138
|
<span class="cline-any cline-no"> </span>
|
|
1492
2139
|
<span class="cline-any cline-no"> </span>
|
|
1493
2140
|
<span class="cline-any cline-neutral"> </span>
|
|
1494
2141
|
<span class="cline-any cline-no"> </span>
|
|
2142
|
+
<span class="cline-any cline-no"> </span>
|
|
1495
2143
|
<span class="cline-any cline-neutral"> </span>
|
|
2144
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2145
|
+
<span class="cline-any cline-no"> </span>
|
|
1496
2146
|
<span class="cline-any cline-no"> </span>
|
|
1497
2147
|
<span class="cline-any cline-neutral"> </span>
|
|
1498
2148
|
<span class="cline-any cline-neutral"> </span>
|
|
2149
|
+
<span class="cline-any cline-no"> </span>
|
|
2150
|
+
<span class="cline-any cline-no"> </span>
|
|
1499
2151
|
<span class="cline-any cline-neutral"> </span>
|
|
1500
2152
|
<span class="cline-any cline-neutral"> </span>
|
|
2153
|
+
<span class="cline-any cline-no"> </span>
|
|
1501
2154
|
<span class="cline-any cline-neutral"> </span>
|
|
2155
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2156
|
+
<span class="cline-any cline-no"> </span>
|
|
2157
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2158
|
+
<span class="cline-any cline-no"> </span>
|
|
1502
2159
|
<span class="cline-any cline-no"> </span>
|
|
1503
2160
|
<span class="cline-any cline-neutral"> </span>
|
|
1504
2161
|
<span class="cline-any cline-no"> </span>
|
|
1505
2162
|
<span class="cline-any cline-neutral"> </span>
|
|
2163
|
+
<span class="cline-any cline-no"> </span>
|
|
2164
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2165
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2166
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2167
|
+
<span class="cline-any cline-no"> </span>
|
|
2168
|
+
<span class="cline-any cline-no"> </span>
|
|
2169
|
+
<span class="cline-any cline-no"> </span>
|
|
1506
2170
|
<span class="cline-any cline-neutral"> </span>
|
|
1507
2171
|
<span class="cline-any cline-no"> </span>
|
|
1508
2172
|
<span class="cline-any cline-no"> </span>
|
|
1509
2173
|
<span class="cline-any cline-no"> </span>
|
|
1510
2174
|
<span class="cline-any cline-no"> </span>
|
|
2175
|
+
<span class="cline-any cline-no"> </span>
|
|
2176
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2177
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1511
2178
|
<span class="cline-any cline-neutral"> </span>
|
|
1512
2179
|
<span class="cline-any cline-no"> </span>
|
|
2180
|
+
<span class="cline-any cline-no"> </span>
|
|
1513
2181
|
<span class="cline-any cline-neutral"> </span>
|
|
1514
2182
|
<span class="cline-any cline-no"> </span>
|
|
1515
2183
|
<span class="cline-any cline-no"> </span>
|
|
2184
|
+
<span class="cline-any cline-no"> </span>
|
|
2185
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2186
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2187
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1516
2188
|
<span class="cline-any cline-neutral"> </span>
|
|
1517
2189
|
<span class="cline-any cline-no"> </span>
|
|
2190
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2191
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2192
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1518
2193
|
<span class="cline-any cline-no"> </span>
|
|
1519
2194
|
<span class="cline-any cline-neutral"> </span>
|
|
1520
2195
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1522,14 +2197,27 @@
|
|
|
1522
2197
|
<span class="cline-any cline-no"> </span>
|
|
1523
2198
|
<span class="cline-any cline-no"> </span>
|
|
1524
2199
|
<span class="cline-any cline-no"> </span>
|
|
2200
|
+
<span class="cline-any cline-no"> </span>
|
|
1525
2201
|
<span class="cline-any cline-neutral"> </span>
|
|
1526
2202
|
<span class="cline-any cline-neutral"> </span>
|
|
1527
2203
|
<span class="cline-any cline-no"> </span>
|
|
1528
2204
|
<span class="cline-any cline-no"> </span>
|
|
1529
2205
|
<span class="cline-any cline-no"> </span>
|
|
2206
|
+
<span class="cline-any cline-no"> </span>
|
|
1530
2207
|
<span class="cline-any cline-neutral"> </span>
|
|
1531
2208
|
<span class="cline-any cline-neutral"> </span>
|
|
1532
2209
|
<span class="cline-any cline-neutral"> </span>
|
|
2210
|
+
<span class="cline-any cline-no"> </span>
|
|
2211
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2212
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2213
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2214
|
+
<span class="cline-any cline-no"> </span>
|
|
2215
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2216
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2217
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2218
|
+
<span class="cline-any cline-no"> </span>
|
|
2219
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2220
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1533
2221
|
<span class="cline-any cline-neutral"> </span>
|
|
1534
2222
|
<span class="cline-any cline-neutral"> </span>
|
|
1535
2223
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1567,6 +2255,11 @@
|
|
|
1567
2255
|
<span class="cline-any cline-neutral"> </span>
|
|
1568
2256
|
<span class="cline-any cline-no"> </span>
|
|
1569
2257
|
<span class="cline-any cline-no"> </span>
|
|
2258
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2259
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2260
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2261
|
+
<span class="cline-any cline-no"> </span>
|
|
2262
|
+
<span class="cline-any cline-no"> </span>
|
|
1570
2263
|
<span class="cline-any cline-no"> </span>
|
|
1571
2264
|
<span class="cline-any cline-no"> </span>
|
|
1572
2265
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1577,13 +2270,16 @@
|
|
|
1577
2270
|
<span class="cline-any cline-no"> </span>
|
|
1578
2271
|
<span class="cline-any cline-no"> </span>
|
|
1579
2272
|
<span class="cline-any cline-neutral"> </span>
|
|
2273
|
+
<span class="cline-any cline-no"> </span>
|
|
1580
2274
|
<span class="cline-any cline-neutral"> </span>
|
|
1581
2275
|
<span class="cline-any cline-no"> </span>
|
|
1582
2276
|
<span class="cline-any cline-neutral"> </span>
|
|
1583
2277
|
<span class="cline-any cline-neutral"> </span>
|
|
1584
2278
|
<span class="cline-any cline-neutral"> </span>
|
|
1585
2279
|
<span class="cline-any cline-neutral"> </span>
|
|
1586
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import
|
|
2280
|
+
<span class="cline-any cline-neutral"> </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'
|
|
1587
2283
|
<span class="cstat-no" title="statement not covered" >import { Timestamp, Metadata, UserID, Type as MType, TabChange, TabData } from './messages.gen.js'</span>
|
|
1588
2284
|
<span class="cstat-no" title="statement not covered" >import {</span>
|
|
1589
2285
|
now,
|
|
@@ -1608,6 +2304,8 @@ import type { Options as SanitizerOptions } from './sanitizer.js'
|
|
|
1608
2304
|
import type { Options as LoggerOptions } from './logger.js'
|
|
1609
2305
|
import type { Options as SessOptions } from './session.js'
|
|
1610
2306
|
import type { Options as NetworkOptions } from '../modules/network.js'
|
|
2307
|
+
<span class="cstat-no" title="statement not covered" >import CanvasRecorder from './canvas.js'</span>
|
|
2308
|
+
<span class="cstat-no" title="statement not covered" >import UserTestManager from '../modules/userTesting/index.js'</span>
|
|
1611
2309
|
|
|
1612
2310
|
import type {
|
|
1613
2311
|
Options as WebworkerOptions,
|
|
@@ -1634,17 +2332,32 @@ interface OnStartInfo {
|
|
|
1634
2332
|
}
|
|
1635
2333
|
|
|
1636
2334
|
const CANCELED = <span class="cstat-no" title="statement not covered" >'canceled' as const</span>
|
|
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>
|
|
1637
2337
|
const START_ERROR = <span class="cstat-no" title="statement not covered" >':(' as const</span>
|
|
1638
|
-
type SuccessfulStart = OnStartInfo & {
|
|
2338
|
+
type SuccessfulStart = OnStartInfo & {
|
|
2339
|
+
success: true
|
|
2340
|
+
}
|
|
1639
2341
|
type UnsuccessfulStart = {
|
|
1640
2342
|
reason: typeof CANCELED | string
|
|
1641
2343
|
success: false
|
|
1642
2344
|
}
|
|
1643
2345
|
|
|
1644
|
-
type RickRoll = {
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
2346
|
+
type RickRoll = {
|
|
2347
|
+
source: string
|
|
2348
|
+
context: string
|
|
2349
|
+
} & (
|
|
2350
|
+
| {
|
|
2351
|
+
line: 'never-gonna-give-you-up'
|
|
2352
|
+
}
|
|
2353
|
+
| {
|
|
2354
|
+
line: 'never-gonna-let-you-down'
|
|
2355
|
+
token: string
|
|
2356
|
+
}
|
|
2357
|
+
| {
|
|
2358
|
+
line: 'never-gonna-run-around-and-desert-you'
|
|
2359
|
+
token: string
|
|
2360
|
+
}
|
|
1648
2361
|
)
|
|
1649
2362
|
|
|
1650
2363
|
const UnsuccessfulStart = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(r</span>eason: string): UnsuccessfulStart => (<span class="cstat-no" title="statement not covered" >{ reason, success: false })</span></span>
|
|
@@ -1658,6 +2371,7 @@ type CommitCallback = (messages: Array<Message>) => void
|
|
|
1658
2371
|
<span class="cstat-no" title="statement not covered" > NotActive,</span>
|
|
1659
2372
|
<span class="cstat-no" title="statement not covered" > Starting,</span>
|
|
1660
2373
|
<span class="cstat-no" title="statement not covered" > Active,</span>
|
|
2374
|
+
<span class="cstat-no" title="statement not covered" > ColdStart,</span>
|
|
1661
2375
|
}
|
|
1662
2376
|
|
|
1663
2377
|
type AppOptions = {
|
|
@@ -1679,6 +2393,7 @@ type AppOptions = {
|
|
|
1679
2393
|
sessionStorage: Storage | null
|
|
1680
2394
|
forceSingleTab?: boolean
|
|
1681
2395
|
disableStringDict?: boolean
|
|
2396
|
+
assistSocketHost?: string
|
|
1682
2397
|
|
|
1683
2398
|
// @deprecated
|
|
1684
2399
|
onStart?: StartCallback
|
|
@@ -1710,8 +2425,14 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1710
2425
|
readonly localStorage: Storage
|
|
1711
2426
|
readonly sessionStorage: Storage
|
|
1712
2427
|
private readonly <span class="cstat-no" title="statement not covered" >messages: Array<Message> = []</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<Message> = []</span>
|
|
2433
|
+
private <span class="cstat-no" title="statement not covered" >bufferedMessages2: Array<Message> = []</span>
|
|
1713
2434
|
/* private */
|
|
1714
|
-
readonly observer: Observer // non-
|
|
2435
|
+
readonly observer: Observer // non-private for attachContextCallback
|
|
1715
2436
|
private readonly <span class="cstat-no" title="statement not covered" >startCallbacks: Array<StartCallback> = []</span>
|
|
1716
2437
|
private readonly <span class="cstat-no" title="statement not covered" >stopCallbacks: Array<() => any> = []</span>
|
|
1717
2438
|
private readonly <span class="cstat-no" title="statement not covered" >commitCallbacks: Array<CommitCallback> = []</span>
|
|
@@ -1727,11 +2448,17 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1727
2448
|
private readonly <span class="cstat-no" title="statement not covered" >bc: BroadcastChannel | null = null</span>
|
|
1728
2449
|
private readonly contextId
|
|
1729
2450
|
public attributeSender: AttributeSender
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
2451
|
+
private <span class="cstat-no" title="statement not covered" >canvasRecorder: CanvasRecorder | null = null</span>
|
|
2452
|
+
private uxtManager: UserTestManager
|
|
2453
|
+
private <span class="cstat-no" title="statement not covered" >conditionsManager: ConditionsManager | null = null</span>
|
|
2454
|
+
public featureFlags: FeatureFlags
|
|
2455
|
+
|
|
2456
|
+
<span class="fstat-no" title="function not covered" > constructor(</span>
|
|
2457
|
+
projectKey: string,
|
|
2458
|
+
sessionToken: string | undefined,
|
|
2459
|
+
options: Partial<Options>,
|
|
2460
|
+
private readonly <span class="cstat-no" title="statement not covered" >signalError: (error: string, apis: string[]) => void,</span>
|
|
2461
|
+
) {
|
|
1735
2462
|
<span class="cstat-no" title="statement not covered" > this.contextId = Math.random().toString(36).slice(2)</span>
|
|
1736
2463
|
<span class="cstat-no" title="statement not covered" > this.projectKey = projectKey</span>
|
|
1737
2464
|
<span class="cstat-no" title="statement not covered" > this.networkOptions = options.network</span>
|
|
@@ -1753,12 +2480,14 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1753
2480
|
sessionStorage: null,
|
|
1754
2481
|
disableStringDict: false,
|
|
1755
2482
|
forceSingleTab: false,
|
|
2483
|
+
assistSocketHost: '',
|
|
1756
2484
|
},
|
|
1757
2485
|
options,
|
|
1758
2486
|
)
|
|
1759
2487
|
|
|
1760
2488
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.options.forceSingleTab && globalThis && 'BroadcastChannel' in globalThis) {</span>
|
|
1761
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2489
|
+
const host = <span class="cstat-no" title="statement not covered" >location.hostname.split('.').slice(-2).join('_')</span>
|
|
2490
|
+
<span class="cstat-no" title="statement not covered" > this.bc = inIframe() ? null : new BroadcastChannel(`rick_${host}`)</span>
|
|
1762
2491
|
}
|
|
1763
2492
|
|
|
1764
2493
|
<span class="cstat-no" title="statement not covered" > this.revID = this.options.revID</span>
|
|
@@ -1773,6 +2502,7 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1773
2502
|
<span class="cstat-no" title="statement not covered" > this.notify = new Logger(this.options.verbose ? LogLevel.Warnings : LogLevel.Silent)</span>
|
|
1774
2503
|
<span class="cstat-no" title="statement not covered" > this.session = new Session(this, this.options)</span>
|
|
1775
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>
|
|
1776
2506
|
<span class="cstat-no" title="statement not covered" > this.session.attachUpdateCallback(<span class="fstat-no" title="function not covered" >({</span> userID, metadata }) => {</span>
|
|
1777
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>
|
|
1778
2508
|
// TODO: nullable userID
|
|
@@ -1917,9 +2647,17 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1917
2647
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this._usingOldFetchPlugin && message[0] === MType.NetworkRequest) {</span>
|
|
1918
2648
|
<span class="cstat-no" title="statement not covered" > return</span>
|
|
1919
2649
|
}
|
|
1920
|
-
// ====================================================
|
|
1921
2650
|
|
|
1922
|
-
|
|
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
|
+
}
|
|
1923
2661
|
// TODO: commit on start if there were `urgent` sends;
|
|
1924
2662
|
// Clarify where urgent can be used for;
|
|
1925
2663
|
// Clarify workflow for each type of message in case it was sent before start
|
|
@@ -1930,18 +2668,55 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1930
2668
|
}
|
|
1931
2669
|
}
|
|
1932
2670
|
|
|
1933
|
-
|
|
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 {
|
|
1934
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 && this.messages.length) {</span>
|
|
1935
2677
|
<span class="cstat-no" title="statement not covered" > requestIdleCb(<span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
1936
2678
|
<span class="cstat-no" title="statement not covered" > this.messages.unshift(TabData(this.session.getTabId()))</span>
|
|
1937
2679
|
<span class="cstat-no" title="statement not covered" > this.messages.unshift(Timestamp(this.timestamp()))</span>
|
|
1938
|
-
//
|
|
1939
|
-
<span class="cstat-no" title="statement not covered" > this.worker
|
|
2680
|
+
// why I need to add opt chaining?
|
|
2681
|
+
<span class="cstat-no" title="statement not covered" > this.worker?.postMessage(this.messages)</span>
|
|
1940
2682
|
<span class="cstat-no" title="statement not covered" > this.commitCallbacks.forEach(<span class="fstat-no" title="function not covered" >(c</span>b) => <span class="cstat-no" title="statement not covered" >cb(this.messages))</span></span>
|
|
1941
2683
|
<span class="cstat-no" title="statement not covered" > this.messages.length = 0</span>
|
|
1942
2684
|
})
|
|
1943
2685
|
}
|
|
1944
2686
|
}
|
|
2687
|
+
|
|
2688
|
+
<span class="cstat-no" title="statement not covered" > coldStartCommitN = 0</span>
|
|
2689
|
+
|
|
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
|
+
|
|
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
|
+
|
|
2715
|
+
private <span class="fstat-no" title="function not covered" >postToWorker(</span>messages: Array<Message>) {
|
|
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) => <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
|
+
}
|
|
1945
2720
|
|
|
1946
2721
|
private <span class="cstat-no" title="statement not covered" >delay = 0</span>
|
|
1947
2722
|
|
|
@@ -2113,20 +2888,193 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2113
2888
|
<span class="cstat-no" title="statement not covered" > this.sessionStorage.removeItem(this.options.session_reset_key)</span>
|
|
2114
2889
|
}
|
|
2115
2890
|
}
|
|
2891
|
+
|
|
2892
|
+
<span class="cstat-no" title="statement not covered" > coldInterval: ReturnType<typeof setInterval> | 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
|
+
|
|
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
|
+
|
|
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>> {</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>> {</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
|
+
|
|
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
|
+
|
|
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
|
+
|
|
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
|
+
}
|
|
2116
3054
|
|
|
2117
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<StartPromiseReturn> {
|
|
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 && this.coldInterval) {</span>
|
|
3058
|
+
<span class="cstat-no" title="statement not covered" > clearInterval(this.coldInterval)</span>
|
|
3059
|
+
}
|
|
2118
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>
|
|
2119
|
-
<span class="cstat-no" title="statement not covered" >
|
|
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>
|
|
2120
3064
|
}
|
|
2121
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
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>
|
|
2127
3073
|
}
|
|
2128
3074
|
<span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.Starting</span>
|
|
2129
|
-
<span class="cstat-no" title="statement not covered" >
|
|
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
|
+
}
|
|
2130
3078
|
|
|
2131
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>
|
|
2132
3080
|
<span class="cstat-no" title="statement not covered" > this.session.applySessionHash(startOpts.sessionHash)</span>
|
|
@@ -2153,15 +3101,13 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2153
3101
|
tabId: this.session.getTabId(),
|
|
2154
3102
|
})
|
|
2155
3103
|
|
|
2156
|
-
const lsReset = <span class="cstat-no" title="statement not covered" >this.sessionStorage.getItem(this.options.session_reset_key) !== null</span>
|
|
2157
|
-
<span class="cstat-no" title="statement not covered" > this.sessionStorage.removeItem(this.options.session_reset_key)</span>
|
|
2158
|
-
const needNewSessionID = <span class="cstat-no" title="statement not covered" >startOpts.forceNew || lsReset || resetByWorker</span>
|
|
2159
3104
|
const sessionToken = <span class="cstat-no" title="statement not covered" >this.session.getSessionToken()</span>
|
|
2160
|
-
const isNewSession = <span class="cstat-no" title="statement not covered" >
|
|
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>
|
|
2161
3107
|
|
|
2162
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3108
|
+
<span class="cstat-no" title="statement not covered" > this.debug.log(</span>
|
|
2163
3109
|
'OpenReplay: starting session; need new session id?',
|
|
2164
|
-
|
|
3110
|
+
isNewSession,
|
|
2165
3111
|
'session token: ',
|
|
2166
3112
|
sessionToken,
|
|
2167
3113
|
)
|
|
@@ -2174,6 +3120,8 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2174
3120
|
body: JSON.stringify({
|
|
2175
3121
|
...this.getTrackerInfo(),
|
|
2176
3122
|
timestamp,
|
|
3123
|
+
doNotRecord: false,
|
|
3124
|
+
bufferDiff: timestamp - this.coldStartTs,
|
|
2177
3125
|
userID: this.session.getInfo().userID,
|
|
2178
3126
|
token: isNewSession ? undefined : sessionToken,
|
|
2179
3127
|
deviceMemory,
|
|
@@ -2196,10 +3144,14 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2196
3144
|
})
|
|
2197
3145
|
.then(<span class="fstat-no" title="function not covered" >(r</span>) => {
|
|
2198
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>
|
|
2199
|
-
<span class="cstat-no" title="statement not covered" >
|
|
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>
|
|
2200
3150
|
}
|
|
2201
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>
|
|
2202
|
-
<span class="cstat-no" title="statement not covered" >
|
|
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>
|
|
2203
3155
|
}
|
|
2204
3156
|
const {
|
|
2205
3157
|
token,
|
|
@@ -2216,6 +3168,9 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2216
3168
|
userDevice,
|
|
2217
3169
|
userOS,
|
|
2218
3170
|
userState,
|
|
3171
|
+
canvasEnabled,
|
|
3172
|
+
canvasQuality,
|
|
3173
|
+
canvasFPS,
|
|
2219
3174
|
} = <span class="cstat-no" title="statement not covered" >r</span>
|
|
2220
3175
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
|
|
2221
3176
|
typeof token !== 'string' ||
|
|
@@ -2225,7 +3180,9 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2225
3180
|
typeof delay !== 'number' ||
|
|
2226
3181
|
(typeof beaconSizeLimit !== 'number' && typeof beaconSizeLimit !== 'undefined')
|
|
2227
3182
|
) {
|
|
2228
|
-
<span class="cstat-no" title="statement not covered"
|
|
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>
|
|
2229
3186
|
}
|
|
2230
3187
|
<span class="cstat-no" title="statement not covered" > this.delay = delay</span>
|
|
2231
3188
|
<span class="cstat-no" title="statement not covered" > this.session.setSessionToken(token)</span>
|
|
@@ -2243,7 +3200,7 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2243
3200
|
projectID,
|
|
2244
3201
|
})
|
|
2245
3202
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isNewSession && token === sessionToken) {</span>
|
|
2246
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3203
|
+
<span class="cstat-no" title="statement not covered" > this.debug.log('continuing session on new tab', this.session.getTabId())</span>
|
|
2247
3204
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
2248
3205
|
<span class="cstat-no" title="statement not covered" > this.send(TabChange(this.session.getTabId()))</span>
|
|
2249
3206
|
}
|
|
@@ -2260,14 +3217,48 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2260
3217
|
})
|
|
2261
3218
|
|
|
2262
3219
|
<span class="cstat-no" title="statement not covered" > this.compressionThreshold = compressionThreshold</span>
|
|
2263
|
-
|
|
2264
3220
|
const onStartInfo = <span class="cstat-no" title="statement not covered" >{ sessionToken: token, userUUID, sessionID }</span>
|
|
2265
3221
|
|
|
3222
|
+
const flushBuffer = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(b</span>uffer: Message[]) => {</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
|
+
}
|
|
2266
3235
|
// TODO: start as early as possible (before receiving the token)
|
|
2267
3236
|
<span class="cstat-no" title="statement not covered" > this.startCallbacks.forEach(<span class="fstat-no" title="function not covered" >(c</span>b) => <span class="cstat-no" title="statement not covered" >cb(onStartInfo))</span> /</span>/ MBTODO: callbacks after DOM "mounted" (observed)
|
|
2268
|
-
<span class="cstat-no" title="statement not covered" > this.
|
|
2269
|
-
|
|
3237
|
+
<span class="cstat-no" title="statement not covered" > void this.featureFlags.reloadFlags()</span>
|
|
3238
|
+
/** --------------- COLD START BUFFER ------------------*/
|
|
2270
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 > this.bufferedMessages2.length</span>
|
|
3243
|
+
? this.bufferedMessages1
|
|
3244
|
+
: this.bufferedMessages2
|
|
3245
|
+
<span class="cstat-no" title="statement not covered" > while (biggestBurger.length > 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
|
+
}
|
|
3255
|
+
|
|
3256
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (canvasEnabled) {</span>
|
|
3257
|
+
<span class="cstat-no" title="statement not covered" > this.canvasRecorder =</span>
|
|
3258
|
+
this.canvasRecorder ??
|
|
3259
|
+
new CanvasRecorder(this, { fps: canvasFPS, quality: canvasQuality })
|
|
3260
|
+
<span class="cstat-no" title="statement not covered" > this.canvasRecorder.startTracking()</span>
|
|
3261
|
+
}
|
|
2271
3262
|
|
|
2272
3263
|
<span class="cstat-no" title="statement not covered" > this.notify.log('OpenReplay tracking started.')</span>
|
|
2273
3264
|
// get rid of onStart ?
|
|
@@ -2275,20 +3266,64 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2275
3266
|
<span class="cstat-no" title="statement not covered" > this.options.onStart(onStartInfo)</span>
|
|
2276
3267
|
}
|
|
2277
3268
|
<span class="cstat-no" title="statement not covered" > this.restartAttempts = 0</span>
|
|
3269
|
+
|
|
3270
|
+
<span class="cstat-no" title="statement not covered" > this.uxtManager = this.uxtManager</span>
|
|
3271
|
+
? this.uxtManager
|
|
3272
|
+
: new UserTestManager(this, uxtStorageKey)
|
|
3273
|
+
let uxtId: number | undefined
|
|
3274
|
+
const savedUxtTag = <span class="cstat-no" title="statement not covered" >this.localStorage.getItem(uxtStorageKey)</span>
|
|
3275
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (savedUxtTag) {</span>
|
|
3276
|
+
<span class="cstat-no" title="statement not covered" > uxtId = parseInt(savedUxtTag, 10)</span>
|
|
3277
|
+
}
|
|
3278
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (location?.search) {</span>
|
|
3279
|
+
const query = <span class="cstat-no" title="statement not covered" >new URLSearchParams(location.search)</span>
|
|
3280
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (query.has('oruxt')) {</span>
|
|
3281
|
+
const qId = <span class="cstat-no" title="statement not covered" >query.get('oruxt')</span>
|
|
3282
|
+
<span class="cstat-no" title="statement not covered" > uxtId = qId ? parseInt(qId, 10) : undefined</span>
|
|
3283
|
+
}
|
|
3284
|
+
}
|
|
3285
|
+
|
|
3286
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (uxtId) {</span>
|
|
3287
|
+
<span class="cstat-no" title="statement not covered" > if (!this.uxtManager.isActive) {</span>
|
|
3288
|
+
// eslint-disable-next-line
|
|
3289
|
+
<span class="cstat-no" title="statement not covered" > this.uxtManager.getTest(uxtId, token, Boolean(savedUxtTag)).then(<span class="fstat-no" title="function not covered" >(i</span>d) => {</span>
|
|
3290
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (id) {</span>
|
|
3291
|
+
<span class="cstat-no" title="statement not covered" > this.onUxtCb.forEach(<span class="fstat-no" title="function not covered" >(c</span>b: (id: number) => void) => <span class="cstat-no" title="statement not covered" >cb(id))</span></span>
|
|
3292
|
+
}
|
|
3293
|
+
})
|
|
3294
|
+
} else {
|
|
3295
|
+
// @ts-ignore
|
|
3296
|
+
<span class="cstat-no" title="statement not covered" > this.onUxtCb.forEach(<span class="fstat-no" title="function not covered" >(c</span>b: (id: number) => void) => <span class="cstat-no" title="statement not covered" >cb(uxtId))</span></span>
|
|
3297
|
+
}
|
|
3298
|
+
}
|
|
3299
|
+
|
|
2278
3300
|
<span class="cstat-no" title="statement not covered" > return SuccessfulStart(onStartInfo)</span>
|
|
2279
3301
|
})
|
|
2280
3302
|
.catch(<span class="fstat-no" title="function not covered" >(r</span>eason) => {
|
|
2281
3303
|
<span class="cstat-no" title="statement not covered" > this.stop()</span>
|
|
2282
3304
|
<span class="cstat-no" title="statement not covered" > this.session.reset()</span>
|
|
2283
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>
|
|
2284
3307
|
<span class="cstat-no" title="statement not covered" > return UnsuccessfulStart(CANCELED)</span>
|
|
2285
3308
|
}
|
|
2286
3309
|
|
|
2287
3310
|
<span class="cstat-no" title="statement not covered" > this.notify.log('OpenReplay was unable to start. ', reason)</span>
|
|
2288
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>
|
|
2289
3313
|
<span class="cstat-no" title="statement not covered" > return UnsuccessfulStart(START_ERROR)</span>
|
|
2290
3314
|
})
|
|
2291
3315
|
}
|
|
3316
|
+
|
|
3317
|
+
<span class="cstat-no" title="statement not covered" > onUxtCb = []</span>
|
|
3318
|
+
|
|
3319
|
+
<span class="fstat-no" title="function not covered" > addOnUxtCb(</span>cb: (id: number) => void) {
|
|
3320
|
+
// @ts-ignore
|
|
3321
|
+
<span class="cstat-no" title="statement not covered" > this.onUxtCb.push(cb)</span>
|
|
3322
|
+
}
|
|
3323
|
+
|
|
3324
|
+
<span class="fstat-no" title="function not covered" > getUxtId(</span>): number | null {
|
|
3325
|
+
<span class="cstat-no" title="statement not covered" > return this.uxtManager?.getTestId()</span>
|
|
3326
|
+
}
|
|
2292
3327
|
|
|
2293
3328
|
/**
|
|
2294
3329
|
* basically we ask other tabs during constructor
|
|
@@ -2324,6 +3359,11 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2324
3359
|
<span class="cstat-no" title="statement not covered" > return this.session.getTabId()</span>
|
|
2325
3360
|
}
|
|
2326
3361
|
|
|
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
|
+
|
|
2327
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 {
|
|
2328
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>
|
|
2329
3369
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
@@ -2337,6 +3377,7 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2337
3377
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.worker && stopWorker) {</span>
|
|
2338
3378
|
<span class="cstat-no" title="statement not covered" > this.worker.postMessage('stop')</span>
|
|
2339
3379
|
}
|
|
3380
|
+
<span class="cstat-no" title="statement not covered" > this.canvasRecorder?.clear()</span>
|
|
2340
3381
|
} finally {
|
|
2341
3382
|
<span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.NotActive</span>
|
|
2342
3383
|
}
|
|
@@ -2350,7 +3391,7 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2350
3391
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
2351
3392
|
Code coverage generated by
|
|
2352
3393
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
2353
|
-
at 2023-
|
|
3394
|
+
at 2023-12-15T15:55:44.965Z
|
|
2354
3395
|
</div>
|
|
2355
3396
|
<script src="../../prettify.js"></script>
|
|
2356
3397
|
<script>
|