@openreplay/tracker 9.0.13 → 9.0.14
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/cjs/app/index.js +2 -2
- package/cjs/index.js +3 -2
- package/cjs/modules/mouse.js +1 -0
- package/cjs/modules/network.js +1 -0
- package/coverage/clover.xml +1802 -779
- package/coverage/coverage-final.json +27 -18
- package/coverage/lcov-report/index.html +60 -45
- package/coverage/lcov-report/main/app/canvas.ts.html +535 -0
- package/coverage/lcov-report/main/app/guards.ts.html +5 -2
- package/coverage/lcov-report/main/app/index.html +38 -23
- package/coverage/lcov-report/main/app/index.ts.html +1578 -108
- package/coverage/lcov-report/main/app/logger.ts.html +25 -91
- package/coverage/lcov-report/main/app/messages.gen.ts.html +263 -146
- package/coverage/lcov-report/main/app/nodes.ts.html +17 -5
- package/coverage/lcov-report/main/app/observer/iframe_observer.ts.html +2 -2
- 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 +2 -2
- 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 +464 -98
- package/coverage/lcov-report/main/modules/Network/beaconProxy.ts.html +19 -19
- package/coverage/lcov-report/main/modules/Network/fetchProxy.ts.html +114 -99
- package/coverage/lcov-report/main/modules/Network/index.html +66 -66
- 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 +15 -15
- 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 +1399 -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 +42 -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/tagWatcher.ts.html +334 -0
- 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 +23 -5
- package/coverage/lcov-report/webworker/MessageEncoder.gen.ts.html +41 -5
- package/coverage/lcov-report/webworker/PrimitiveEncoder.ts.html +1 -1
- package/coverage/lcov-report/webworker/QueueSender.ts.html +18 -6
- package/coverage/lcov-report/webworker/index.html +17 -17
- package/coverage/lcov-report/webworker/index.ts.html +24 -15
- package/coverage/lcov.info +3267 -1349
- package/lib/app/index.js +2 -2
- package/lib/common/tsconfig.tsbuildinfo +1 -1
- package/lib/index.js +3 -2
- package/lib/modules/mouse.js +1 -0
- package/lib/modules/network.js +1 -0
- 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/490</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/261</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/87</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/476</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -823,7 +823,498 @@
|
|
|
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>
|
|
1174
|
+
<a name='L1109'></a><a href='#L1109'>1109</a>
|
|
1175
|
+
<a name='L1110'></a><a href='#L1110'>1110</a>
|
|
1176
|
+
<a name='L1111'></a><a href='#L1111'>1111</a>
|
|
1177
|
+
<a name='L1112'></a><a href='#L1112'>1112</a>
|
|
1178
|
+
<a name='L1113'></a><a href='#L1113'>1113</a>
|
|
1179
|
+
<a name='L1114'></a><a href='#L1114'>1114</a>
|
|
1180
|
+
<a name='L1115'></a><a href='#L1115'>1115</a>
|
|
1181
|
+
<a name='L1116'></a><a href='#L1116'>1116</a>
|
|
1182
|
+
<a name='L1117'></a><a href='#L1117'>1117</a>
|
|
1183
|
+
<a name='L1118'></a><a href='#L1118'>1118</a>
|
|
1184
|
+
<a name='L1119'></a><a href='#L1119'>1119</a>
|
|
1185
|
+
<a name='L1120'></a><a href='#L1120'>1120</a>
|
|
1186
|
+
<a name='L1121'></a><a href='#L1121'>1121</a>
|
|
1187
|
+
<a name='L1122'></a><a href='#L1122'>1122</a>
|
|
1188
|
+
<a name='L1123'></a><a href='#L1123'>1123</a>
|
|
1189
|
+
<a name='L1124'></a><a href='#L1124'>1124</a>
|
|
1190
|
+
<a name='L1125'></a><a href='#L1125'>1125</a>
|
|
1191
|
+
<a name='L1126'></a><a href='#L1126'>1126</a>
|
|
1192
|
+
<a name='L1127'></a><a href='#L1127'>1127</a>
|
|
1193
|
+
<a name='L1128'></a><a href='#L1128'>1128</a>
|
|
1194
|
+
<a name='L1129'></a><a href='#L1129'>1129</a>
|
|
1195
|
+
<a name='L1130'></a><a href='#L1130'>1130</a>
|
|
1196
|
+
<a name='L1131'></a><a href='#L1131'>1131</a>
|
|
1197
|
+
<a name='L1132'></a><a href='#L1132'>1132</a>
|
|
1198
|
+
<a name='L1133'></a><a href='#L1133'>1133</a>
|
|
1199
|
+
<a name='L1134'></a><a href='#L1134'>1134</a>
|
|
1200
|
+
<a name='L1135'></a><a href='#L1135'>1135</a>
|
|
1201
|
+
<a name='L1136'></a><a href='#L1136'>1136</a>
|
|
1202
|
+
<a name='L1137'></a><a href='#L1137'>1137</a>
|
|
1203
|
+
<a name='L1138'></a><a href='#L1138'>1138</a>
|
|
1204
|
+
<a name='L1139'></a><a href='#L1139'>1139</a>
|
|
1205
|
+
<a name='L1140'></a><a href='#L1140'>1140</a>
|
|
1206
|
+
<a name='L1141'></a><a href='#L1141'>1141</a>
|
|
1207
|
+
<a name='L1142'></a><a href='#L1142'>1142</a>
|
|
1208
|
+
<a name='L1143'></a><a href='#L1143'>1143</a>
|
|
1209
|
+
<a name='L1144'></a><a href='#L1144'>1144</a>
|
|
1210
|
+
<a name='L1145'></a><a href='#L1145'>1145</a>
|
|
1211
|
+
<a name='L1146'></a><a href='#L1146'>1146</a>
|
|
1212
|
+
<a name='L1147'></a><a href='#L1147'>1147</a>
|
|
1213
|
+
<a name='L1148'></a><a href='#L1148'>1148</a>
|
|
1214
|
+
<a name='L1149'></a><a href='#L1149'>1149</a>
|
|
1215
|
+
<a name='L1150'></a><a href='#L1150'>1150</a>
|
|
1216
|
+
<a name='L1151'></a><a href='#L1151'>1151</a>
|
|
1217
|
+
<a name='L1152'></a><a href='#L1152'>1152</a>
|
|
1218
|
+
<a name='L1153'></a><a href='#L1153'>1153</a>
|
|
1219
|
+
<a name='L1154'></a><a href='#L1154'>1154</a>
|
|
1220
|
+
<a name='L1155'></a><a href='#L1155'>1155</a>
|
|
1221
|
+
<a name='L1156'></a><a href='#L1156'>1156</a>
|
|
1222
|
+
<a name='L1157'></a><a href='#L1157'>1157</a>
|
|
1223
|
+
<a name='L1158'></a><a href='#L1158'>1158</a>
|
|
1224
|
+
<a name='L1159'></a><a href='#L1159'>1159</a>
|
|
1225
|
+
<a name='L1160'></a><a href='#L1160'>1160</a>
|
|
1226
|
+
<a name='L1161'></a><a href='#L1161'>1161</a>
|
|
1227
|
+
<a name='L1162'></a><a href='#L1162'>1162</a>
|
|
1228
|
+
<a name='L1163'></a><a href='#L1163'>1163</a>
|
|
1229
|
+
<a name='L1164'></a><a href='#L1164'>1164</a>
|
|
1230
|
+
<a name='L1165'></a><a href='#L1165'>1165</a>
|
|
1231
|
+
<a name='L1166'></a><a href='#L1166'>1166</a>
|
|
1232
|
+
<a name='L1167'></a><a href='#L1167'>1167</a>
|
|
1233
|
+
<a name='L1168'></a><a href='#L1168'>1168</a>
|
|
1234
|
+
<a name='L1169'></a><a href='#L1169'>1169</a>
|
|
1235
|
+
<a name='L1170'></a><a href='#L1170'>1170</a>
|
|
1236
|
+
<a name='L1171'></a><a href='#L1171'>1171</a>
|
|
1237
|
+
<a name='L1172'></a><a href='#L1172'>1172</a>
|
|
1238
|
+
<a name='L1173'></a><a href='#L1173'>1173</a>
|
|
1239
|
+
<a name='L1174'></a><a href='#L1174'>1174</a>
|
|
1240
|
+
<a name='L1175'></a><a href='#L1175'>1175</a>
|
|
1241
|
+
<a name='L1176'></a><a href='#L1176'>1176</a>
|
|
1242
|
+
<a name='L1177'></a><a href='#L1177'>1177</a>
|
|
1243
|
+
<a name='L1178'></a><a href='#L1178'>1178</a>
|
|
1244
|
+
<a name='L1179'></a><a href='#L1179'>1179</a>
|
|
1245
|
+
<a name='L1180'></a><a href='#L1180'>1180</a>
|
|
1246
|
+
<a name='L1181'></a><a href='#L1181'>1181</a>
|
|
1247
|
+
<a name='L1182'></a><a href='#L1182'>1182</a>
|
|
1248
|
+
<a name='L1183'></a><a href='#L1183'>1183</a>
|
|
1249
|
+
<a name='L1184'></a><a href='#L1184'>1184</a>
|
|
1250
|
+
<a name='L1185'></a><a href='#L1185'>1185</a>
|
|
1251
|
+
<a name='L1186'></a><a href='#L1186'>1186</a>
|
|
1252
|
+
<a name='L1187'></a><a href='#L1187'>1187</a>
|
|
1253
|
+
<a name='L1188'></a><a href='#L1188'>1188</a>
|
|
1254
|
+
<a name='L1189'></a><a href='#L1189'>1189</a>
|
|
1255
|
+
<a name='L1190'></a><a href='#L1190'>1190</a>
|
|
1256
|
+
<a name='L1191'></a><a href='#L1191'>1191</a>
|
|
1257
|
+
<a name='L1192'></a><a href='#L1192'>1192</a>
|
|
1258
|
+
<a name='L1193'></a><a href='#L1193'>1193</a>
|
|
1259
|
+
<a name='L1194'></a><a href='#L1194'>1194</a>
|
|
1260
|
+
<a name='L1195'></a><a href='#L1195'>1195</a>
|
|
1261
|
+
<a name='L1196'></a><a href='#L1196'>1196</a>
|
|
1262
|
+
<a name='L1197'></a><a href='#L1197'>1197</a>
|
|
1263
|
+
<a name='L1198'></a><a href='#L1198'>1198</a>
|
|
1264
|
+
<a name='L1199'></a><a href='#L1199'>1199</a>
|
|
1265
|
+
<a name='L1200'></a><a href='#L1200'>1200</a>
|
|
1266
|
+
<a name='L1201'></a><a href='#L1201'>1201</a>
|
|
1267
|
+
<a name='L1202'></a><a href='#L1202'>1202</a>
|
|
1268
|
+
<a name='L1203'></a><a href='#L1203'>1203</a>
|
|
1269
|
+
<a name='L1204'></a><a href='#L1204'>1204</a>
|
|
1270
|
+
<a name='L1205'></a><a href='#L1205'>1205</a>
|
|
1271
|
+
<a name='L1206'></a><a href='#L1206'>1206</a>
|
|
1272
|
+
<a name='L1207'></a><a href='#L1207'>1207</a>
|
|
1273
|
+
<a name='L1208'></a><a href='#L1208'>1208</a>
|
|
1274
|
+
<a name='L1209'></a><a href='#L1209'>1209</a>
|
|
1275
|
+
<a name='L1210'></a><a href='#L1210'>1210</a>
|
|
1276
|
+
<a name='L1211'></a><a href='#L1211'>1211</a>
|
|
1277
|
+
<a name='L1212'></a><a href='#L1212'>1212</a>
|
|
1278
|
+
<a name='L1213'></a><a href='#L1213'>1213</a>
|
|
1279
|
+
<a name='L1214'></a><a href='#L1214'>1214</a>
|
|
1280
|
+
<a name='L1215'></a><a href='#L1215'>1215</a>
|
|
1281
|
+
<a name='L1216'></a><a href='#L1216'>1216</a>
|
|
1282
|
+
<a name='L1217'></a><a href='#L1217'>1217</a>
|
|
1283
|
+
<a name='L1218'></a><a href='#L1218'>1218</a>
|
|
1284
|
+
<a name='L1219'></a><a href='#L1219'>1219</a>
|
|
1285
|
+
<a name='L1220'></a><a href='#L1220'>1220</a>
|
|
1286
|
+
<a name='L1221'></a><a href='#L1221'>1221</a>
|
|
1287
|
+
<a name='L1222'></a><a href='#L1222'>1222</a>
|
|
1288
|
+
<a name='L1223'></a><a href='#L1223'>1223</a>
|
|
1289
|
+
<a name='L1224'></a><a href='#L1224'>1224</a>
|
|
1290
|
+
<a name='L1225'></a><a href='#L1225'>1225</a>
|
|
1291
|
+
<a name='L1226'></a><a href='#L1226'>1226</a>
|
|
1292
|
+
<a name='L1227'></a><a href='#L1227'>1227</a>
|
|
1293
|
+
<a name='L1228'></a><a href='#L1228'>1228</a>
|
|
1294
|
+
<a name='L1229'></a><a href='#L1229'>1229</a>
|
|
1295
|
+
<a name='L1230'></a><a href='#L1230'>1230</a>
|
|
1296
|
+
<a name='L1231'></a><a href='#L1231'>1231</a>
|
|
1297
|
+
<a name='L1232'></a><a href='#L1232'>1232</a>
|
|
1298
|
+
<a name='L1233'></a><a href='#L1233'>1233</a>
|
|
1299
|
+
<a name='L1234'></a><a href='#L1234'>1234</a>
|
|
1300
|
+
<a name='L1235'></a><a href='#L1235'>1235</a>
|
|
1301
|
+
<a name='L1236'></a><a href='#L1236'>1236</a>
|
|
1302
|
+
<a name='L1237'></a><a href='#L1237'>1237</a>
|
|
1303
|
+
<a name='L1238'></a><a href='#L1238'>1238</a>
|
|
1304
|
+
<a name='L1239'></a><a href='#L1239'>1239</a>
|
|
1305
|
+
<a name='L1240'></a><a href='#L1240'>1240</a>
|
|
1306
|
+
<a name='L1241'></a><a href='#L1241'>1241</a>
|
|
1307
|
+
<a name='L1242'></a><a href='#L1242'>1242</a>
|
|
1308
|
+
<a name='L1243'></a><a href='#L1243'>1243</a>
|
|
1309
|
+
<a name='L1244'></a><a href='#L1244'>1244</a>
|
|
1310
|
+
<a name='L1245'></a><a href='#L1245'>1245</a>
|
|
1311
|
+
<a name='L1246'></a><a href='#L1246'>1246</a>
|
|
1312
|
+
<a name='L1247'></a><a href='#L1247'>1247</a>
|
|
1313
|
+
<a name='L1248'></a><a href='#L1248'>1248</a>
|
|
1314
|
+
<a name='L1249'></a><a href='#L1249'>1249</a>
|
|
1315
|
+
<a name='L1250'></a><a href='#L1250'>1250</a>
|
|
1316
|
+
<a name='L1251'></a><a href='#L1251'>1251</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
|
1317
|
+
<span class="cline-any cline-no"> </span>
|
|
827
1318
|
<span class="cline-any cline-no"> </span>
|
|
828
1319
|
<span class="cline-any cline-no"> </span>
|
|
829
1320
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -835,6 +1326,15 @@
|
|
|
835
1326
|
<span class="cline-any cline-neutral"> </span>
|
|
836
1327
|
<span class="cline-any cline-neutral"> </span>
|
|
837
1328
|
<span class="cline-any cline-no"> </span>
|
|
1329
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1330
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1331
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1332
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1333
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1334
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1335
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1336
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1337
|
+
<span class="cline-any cline-no"> </span>
|
|
838
1338
|
<span class="cline-any cline-no"> </span>
|
|
839
1339
|
<span class="cline-any cline-no"> </span>
|
|
840
1340
|
<span class="cline-any cline-no"> </span>
|
|
@@ -847,6 +1347,9 @@
|
|
|
847
1347
|
<span class="cline-any cline-neutral"> </span>
|
|
848
1348
|
<span class="cline-any cline-neutral"> </span>
|
|
849
1349
|
<span class="cline-any cline-neutral"> </span>
|
|
1350
|
+
<span class="cline-any cline-no"> </span>
|
|
1351
|
+
<span class="cline-any cline-no"> </span>
|
|
1352
|
+
<span class="cline-any cline-no"> </span>
|
|
850
1353
|
<span class="cline-any cline-neutral"> </span>
|
|
851
1354
|
<span class="cline-any cline-neutral"> </span>
|
|
852
1355
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -872,9 +1375,23 @@
|
|
|
872
1375
|
<span class="cline-any cline-neutral"> </span>
|
|
873
1376
|
<span class="cline-any cline-neutral"> </span>
|
|
874
1377
|
<span class="cline-any cline-neutral"> </span>
|
|
875
|
-
<span class="cline-any cline-neutral"> </span>
|
|
876
1378
|
<span class="cline-any cline-no"> </span>
|
|
877
1379
|
<span class="cline-any cline-no"> </span>
|
|
1380
|
+
<span class="cline-any cline-no"> </span>
|
|
1381
|
+
<span class="cline-any cline-no"> </span>
|
|
1382
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1383
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1384
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1385
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1386
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1387
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1388
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1389
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1390
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1391
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1392
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1393
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1394
|
+
<span class="cline-any cline-neutral"> </span>
|
|
878
1395
|
<span class="cline-any cline-neutral"> </span>
|
|
879
1396
|
<span class="cline-any cline-neutral"> </span>
|
|
880
1397
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -898,6 +1415,7 @@
|
|
|
898
1415
|
<span class="cline-any cline-no"> </span>
|
|
899
1416
|
<span class="cline-any cline-no"> </span>
|
|
900
1417
|
<span class="cline-any cline-no"> </span>
|
|
1418
|
+
<span class="cline-any cline-no"> </span>
|
|
901
1419
|
<span class="cline-any cline-neutral"> </span>
|
|
902
1420
|
<span class="cline-any cline-neutral"> </span>
|
|
903
1421
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -952,6 +1470,12 @@
|
|
|
952
1470
|
<span class="cline-any cline-no"> </span>
|
|
953
1471
|
<span class="cline-any cline-neutral"> </span>
|
|
954
1472
|
<span class="cline-any cline-neutral"> </span>
|
|
1473
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1474
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1475
|
+
<span class="cline-any cline-no"> </span>
|
|
1476
|
+
<span class="cline-any cline-no"> </span>
|
|
1477
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1478
|
+
<span class="cline-any cline-neutral"> </span>
|
|
955
1479
|
<span class="cline-any cline-no"> </span>
|
|
956
1480
|
<span class="cline-any cline-no"> </span>
|
|
957
1481
|
<span class="cline-any cline-no"> </span>
|
|
@@ -967,15 +1491,24 @@
|
|
|
967
1491
|
<span class="cline-any cline-no"> </span>
|
|
968
1492
|
<span class="cline-any cline-neutral"> </span>
|
|
969
1493
|
<span class="cline-any cline-neutral"> </span>
|
|
1494
|
+
<span class="cline-any cline-no"> </span>
|
|
1495
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1496
|
+
<span class="cline-any cline-no"> </span>
|
|
1497
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1498
|
+
<span class="cline-any cline-neutral"> </span>
|
|
970
1499
|
<span class="cline-any cline-neutral"> </span>
|
|
971
1500
|
<span class="cline-any cline-neutral"> </span>
|
|
972
1501
|
<span class="cline-any cline-neutral"> </span>
|
|
973
1502
|
<span class="cline-any cline-neutral"> </span>
|
|
974
1503
|
<span class="cline-any cline-neutral"> </span>
|
|
975
1504
|
<span class="cline-any cline-no"> </span>
|
|
1505
|
+
<span class="cline-any cline-neutral"> </span>
|
|
976
1506
|
<span class="cline-any cline-no"> </span>
|
|
977
1507
|
<span class="cline-any cline-no"> </span>
|
|
978
1508
|
<span class="cline-any cline-no"> </span>
|
|
1509
|
+
<span class="cline-any cline-no"> </span>
|
|
1510
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1511
|
+
<span class="cline-any cline-neutral"> </span>
|
|
979
1512
|
<span class="cline-any cline-neutral"> </span>
|
|
980
1513
|
<span class="cline-any cline-neutral"> </span>
|
|
981
1514
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -999,6 +1532,7 @@
|
|
|
999
1532
|
<span class="cline-any cline-neutral"> </span>
|
|
1000
1533
|
<span class="cline-any cline-no"> </span>
|
|
1001
1534
|
<span class="cline-any cline-no"> </span>
|
|
1535
|
+
<span class="cline-any cline-no"> </span>
|
|
1002
1536
|
<span class="cline-any cline-neutral"> </span>
|
|
1003
1537
|
<span class="cline-any cline-neutral"> </span>
|
|
1004
1538
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1017,6 +1551,9 @@
|
|
|
1017
1551
|
<span class="cline-any cline-no"> </span>
|
|
1018
1552
|
<span class="cline-any cline-neutral"> </span>
|
|
1019
1553
|
<span class="cline-any cline-no"> </span>
|
|
1554
|
+
<span class="cline-any cline-no"> </span>
|
|
1555
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1556
|
+
<span class="cline-any cline-no"> </span>
|
|
1020
1557
|
<span class="cline-any cline-neutral"> </span>
|
|
1021
1558
|
<span class="cline-any cline-no"> </span>
|
|
1022
1559
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1055,14 +1592,17 @@
|
|
|
1055
1592
|
<span class="cline-any cline-no"> </span>
|
|
1056
1593
|
<span class="cline-any cline-no"> </span>
|
|
1057
1594
|
<span class="cline-any cline-no"> </span>
|
|
1058
|
-
<span class="cline-any cline-
|
|
1595
|
+
<span class="cline-any cline-no"> </span>
|
|
1059
1596
|
<span class="cline-any cline-neutral"> </span>
|
|
1060
1597
|
<span class="cline-any cline-neutral"> </span>
|
|
1061
1598
|
<span class="cline-any cline-no"> </span>
|
|
1062
1599
|
<span class="cline-any cline-neutral"> </span>
|
|
1063
1600
|
<span class="cline-any cline-neutral"> </span>
|
|
1601
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1064
1602
|
<span class="cline-any cline-no"> </span>
|
|
1065
1603
|
<span class="cline-any cline-neutral"> </span>
|
|
1604
|
+
<span class="cline-any cline-no"> </span>
|
|
1605
|
+
<span class="cline-any cline-no"> </span>
|
|
1066
1606
|
<span class="cline-any cline-neutral"> </span>
|
|
1067
1607
|
<span class="cline-any cline-neutral"> </span>
|
|
1068
1608
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1160,6 +1700,24 @@
|
|
|
1160
1700
|
<span class="cline-any cline-neutral"> </span>
|
|
1161
1701
|
<span class="cline-any cline-neutral"> </span>
|
|
1162
1702
|
<span class="cline-any cline-no"> </span>
|
|
1703
|
+
<span class="cline-any cline-no"> </span>
|
|
1704
|
+
<span class="cline-any cline-no"> </span>
|
|
1705
|
+
<span class="cline-any cline-no"> </span>
|
|
1706
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1707
|
+
<span class="cline-any cline-no"> </span>
|
|
1708
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1709
|
+
<span class="cline-any cline-no"> </span>
|
|
1710
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1711
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1712
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1713
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1714
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1715
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1716
|
+
<span class="cline-any cline-no"> </span>
|
|
1717
|
+
<span class="cline-any cline-no"> </span>
|
|
1718
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1719
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1720
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1163
1721
|
<span class="cline-any cline-neutral"> </span>
|
|
1164
1722
|
<span class="cline-any cline-neutral"> </span>
|
|
1165
1723
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1167,23 +1725,50 @@
|
|
|
1167
1725
|
<span class="cline-any cline-neutral"> </span>
|
|
1168
1726
|
<span class="cline-any cline-no"> </span>
|
|
1169
1727
|
<span class="cline-any cline-no"> </span>
|
|
1728
|
+
<span class="cline-any cline-no"> </span>
|
|
1729
|
+
<span class="cline-any cline-no"> </span>
|
|
1730
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1731
|
+
<span class="cline-any cline-no"> </span>
|
|
1732
|
+
<span class="cline-any cline-no"> </span>
|
|
1733
|
+
<span class="cline-any cline-no"> </span>
|
|
1734
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1735
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1736
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1737
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1738
|
+
<span class="cline-any cline-no"> </span>
|
|
1170
1739
|
<span class="cline-any cline-neutral"> </span>
|
|
1171
1740
|
<span class="cline-any cline-neutral"> </span>
|
|
1172
1741
|
<span class="cline-any cline-neutral"> </span>
|
|
1173
1742
|
<span class="cline-any cline-neutral"> </span>
|
|
1743
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1744
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1745
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1746
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1747
|
+
<span class="cline-any cline-no"> </span>
|
|
1748
|
+
<span class="cline-any cline-no"> </span>
|
|
1749
|
+
<span class="cline-any cline-no"> </span>
|
|
1174
1750
|
<span class="cline-any cline-no"> </span>
|
|
1175
1751
|
<span class="cline-any cline-no"> </span>
|
|
1176
1752
|
<span class="cline-any cline-no"> </span>
|
|
1177
1753
|
<span class="cline-any cline-no"> </span>
|
|
1178
1754
|
<span class="cline-any cline-neutral"> </span>
|
|
1755
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1756
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1757
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1179
1758
|
<span class="cline-any cline-no"> </span>
|
|
1180
1759
|
<span class="cline-any cline-no"> </span>
|
|
1760
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1181
1761
|
<span class="cline-any cline-no"> </span>
|
|
1182
1762
|
<span class="cline-any cline-neutral"> </span>
|
|
1183
1763
|
<span class="cline-any cline-neutral"> </span>
|
|
1184
1764
|
<span class="cline-any cline-neutral"> </span>
|
|
1185
1765
|
<span class="cline-any cline-neutral"> </span>
|
|
1186
1766
|
<span class="cline-any cline-no"> </span>
|
|
1767
|
+
<span class="cline-any cline-no"> </span>
|
|
1768
|
+
<span class="cline-any cline-no"> </span>
|
|
1769
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1770
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1771
|
+
<span class="cline-any cline-no"> </span>
|
|
1187
1772
|
<span class="cline-any cline-neutral"> </span>
|
|
1188
1773
|
<span class="cline-any cline-neutral"> </span>
|
|
1189
1774
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1354,38 +1939,119 @@
|
|
|
1354
1939
|
<span class="cline-any cline-neutral"> </span>
|
|
1355
1940
|
<span class="cline-any cline-neutral"> </span>
|
|
1356
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-no"> </span>
|
|
1945
|
+
<span class="cline-any cline-no"> </span>
|
|
1946
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1947
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1948
|
+
<span class="cline-any cline-no"> </span>
|
|
1949
|
+
<span class="cline-any cline-no"> </span>
|
|
1950
|
+
<span class="cline-any cline-no"> </span>
|
|
1951
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1952
|
+
<span class="cline-any cline-no"> </span>
|
|
1953
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1954
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1955
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1956
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1957
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1958
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1959
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1357
1960
|
<span class="cline-any cline-neutral"> </span>
|
|
1358
1961
|
<span class="cline-any cline-no"> </span>
|
|
1359
1962
|
<span class="cline-any cline-no"> </span>
|
|
1963
|
+
<span class="cline-any cline-no"> </span>
|
|
1964
|
+
<span class="cline-any cline-no"> </span>
|
|
1360
1965
|
<span class="cline-any cline-neutral"> </span>
|
|
1361
1966
|
<span class="cline-any cline-no"> </span>
|
|
1362
1967
|
<span class="cline-any cline-no"> </span>
|
|
1968
|
+
<span class="cline-any cline-no"> </span>
|
|
1363
1969
|
<span class="cline-any cline-neutral"> </span>
|
|
1364
1970
|
<span class="cline-any cline-neutral"> </span>
|
|
1365
1971
|
<span class="cline-any cline-neutral"> </span>
|
|
1366
1972
|
<span class="cline-any cline-neutral"> </span>
|
|
1367
1973
|
<span class="cline-any cline-neutral"> </span>
|
|
1974
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1975
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1976
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1977
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1978
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1979
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1980
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1981
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1982
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1983
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1984
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1985
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1986
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1987
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1988
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1989
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1990
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1991
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1992
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1993
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1994
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1995
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1996
|
+
<span class="cline-any cline-no"> </span>
|
|
1997
|
+
<span class="cline-any cline-no"> </span>
|
|
1998
|
+
<span class="cline-any cline-no"> </span>
|
|
1999
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2000
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2001
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2002
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2003
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2004
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2005
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2006
|
+
<span class="cline-any cline-no"> </span>
|
|
2007
|
+
<span class="cline-any cline-no"> </span>
|
|
2008
|
+
<span class="cline-any cline-no"> </span>
|
|
2009
|
+
<span class="cline-any cline-no"> </span>
|
|
2010
|
+
<span class="cline-any cline-no"> </span>
|
|
2011
|
+
<span class="cline-any cline-no"> </span>
|
|
2012
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2013
|
+
<span class="cline-any cline-no"> </span>
|
|
2014
|
+
<span class="cline-any cline-no"> </span>
|
|
2015
|
+
<span class="cline-any cline-no"> </span>
|
|
2016
|
+
<span class="cline-any cline-no"> </span>
|
|
2017
|
+
<span class="cline-any cline-no"> </span>
|
|
2018
|
+
<span class="cline-any cline-no"> </span>
|
|
1368
2019
|
<span class="cline-any cline-no"> </span>
|
|
1369
2020
|
<span class="cline-any cline-no"> </span>
|
|
1370
2021
|
<span class="cline-any cline-neutral"> </span>
|
|
1371
2022
|
<span class="cline-any cline-no"> </span>
|
|
1372
2023
|
<span class="cline-any cline-no"> </span>
|
|
2024
|
+
<span class="cline-any cline-no"> </span>
|
|
1373
2025
|
<span class="cline-any cline-neutral"> </span>
|
|
1374
2026
|
<span class="cline-any cline-no"> </span>
|
|
2027
|
+
<span class="cline-any cline-no"> </span>
|
|
2028
|
+
<span class="cline-any cline-no"> </span>
|
|
2029
|
+
<span class="cline-any cline-no"> </span>
|
|
1375
2030
|
<span class="cline-any cline-neutral"> </span>
|
|
1376
2031
|
<span class="cline-any cline-no"> </span>
|
|
2032
|
+
<span class="cline-any cline-no"> </span>
|
|
1377
2033
|
<span class="cline-any cline-neutral"> </span>
|
|
1378
2034
|
<span class="cline-any cline-no"> </span>
|
|
1379
2035
|
<span class="cline-any cline-neutral"> </span>
|
|
1380
2036
|
<span class="cline-any cline-neutral"> </span>
|
|
1381
2037
|
<span class="cline-any cline-neutral"> </span>
|
|
2038
|
+
<span class="cline-any cline-no"> </span>
|
|
2039
|
+
<span class="cline-any cline-no"> </span>
|
|
1382
2040
|
<span class="cline-any cline-neutral"> </span>
|
|
2041
|
+
<span class="cline-any cline-no"> </span>
|
|
1383
2042
|
<span class="cline-any cline-neutral"> </span>
|
|
1384
2043
|
<span class="cline-any cline-no"> </span>
|
|
1385
2044
|
<span class="cline-any cline-no"> </span>
|
|
1386
2045
|
<span class="cline-any cline-neutral"> </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-no"> </span>
|
|
1387
2050
|
<span class="cline-any cline-neutral"> </span>
|
|
1388
2051
|
<span class="cline-any cline-neutral"> </span>
|
|
2052
|
+
<span class="cline-any cline-no"> </span>
|
|
2053
|
+
<span class="cline-any cline-no"> </span>
|
|
2054
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1389
2055
|
<span class="cline-any cline-neutral"> </span>
|
|
1390
2056
|
<span class="cline-any cline-neutral"> </span>
|
|
1391
2057
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1398,12 +2064,33 @@
|
|
|
1398
2064
|
<span class="cline-any cline-no"> </span>
|
|
1399
2065
|
<span class="cline-any cline-no"> </span>
|
|
1400
2066
|
<span class="cline-any cline-no"> </span>
|
|
2067
|
+
<span class="cline-any cline-no"> </span>
|
|
2068
|
+
<span class="cline-any cline-no"> </span>
|
|
2069
|
+
<span class="cline-any cline-no"> </span>
|
|
2070
|
+
<span class="cline-any cline-no"> </span>
|
|
2071
|
+
<span class="cline-any cline-no"> </span>
|
|
1401
2072
|
<span class="cline-any cline-neutral"> </span>
|
|
1402
2073
|
<span class="cline-any cline-no"> </span>
|
|
2074
|
+
<span class="cline-any cline-no"> </span>
|
|
2075
|
+
<span class="cline-any cline-no"> </span>
|
|
2076
|
+
<span class="cline-any cline-no"> </span>
|
|
2077
|
+
<span class="cline-any cline-no"> </span>
|
|
2078
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2079
|
+
<span class="cline-any cline-no"> </span>
|
|
2080
|
+
<span class="cline-any cline-no"> </span>
|
|
2081
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2082
|
+
<span class="cline-any cline-no"> </span>
|
|
2083
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1403
2084
|
<span class="cline-any cline-neutral"> </span>
|
|
1404
2085
|
<span class="cline-any cline-neutral"> </span>
|
|
2086
|
+
<span class="cline-any cline-no"> </span>
|
|
2087
|
+
<span class="cline-any cline-no"> </span>
|
|
2088
|
+
<span class="cline-any cline-no"> </span>
|
|
1405
2089
|
<span class="cline-any cline-neutral"> </span>
|
|
2090
|
+
<span class="cline-any cline-no"> </span>
|
|
1406
2091
|
<span class="cline-any cline-neutral"> </span>
|
|
2092
|
+
<span class="cline-any cline-no"> </span>
|
|
2093
|
+
<span class="cline-any cline-no"> </span>
|
|
1407
2094
|
<span class="cline-any cline-neutral"> </span>
|
|
1408
2095
|
<span class="cline-any cline-no"> </span>
|
|
1409
2096
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1420,18 +2107,296 @@
|
|
|
1420
2107
|
<span class="cline-any cline-neutral"> </span>
|
|
1421
2108
|
<span class="cline-any cline-neutral"> </span>
|
|
1422
2109
|
<span class="cline-any cline-neutral"> </span>
|
|
2110
|
+
<span class="cline-any cline-no"> </span>
|
|
2111
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2112
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2113
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2114
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2115
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2116
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2117
|
+
<span class="cline-any cline-no"> </span>
|
|
2118
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2119
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2120
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2121
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2122
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2123
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2124
|
+
<span class="cline-any cline-no"> </span>
|
|
2125
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2126
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2127
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2128
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2129
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2130
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2131
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2132
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2133
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2134
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2135
|
+
<span class="cline-any cline-no"> </span>
|
|
2136
|
+
<span class="cline-any cline-no"> </span>
|
|
2137
|
+
<span class="cline-any cline-no"> </span>
|
|
2138
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2139
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2140
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2141
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2142
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2143
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2144
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2145
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2146
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2147
|
+
<span class="cline-any cline-no"> </span>
|
|
2148
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2149
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2150
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2151
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2152
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2153
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2154
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2155
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2156
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2157
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2158
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2159
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2160
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2161
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2162
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2163
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2164
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2165
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2166
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2167
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2168
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2169
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2170
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2171
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2172
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2173
|
+
<span class="cline-any cline-neutral"> </span>
|
|
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>
|
|
2178
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2179
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2180
|
+
<span class="cline-any cline-no"> </span>
|
|
2181
|
+
<span class="cline-any cline-no"> </span>
|
|
2182
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2183
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2184
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2185
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2186
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2187
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2188
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2189
|
+
<span class="cline-any cline-no"> </span>
|
|
2190
|
+
<span class="cline-any cline-no"> </span>
|
|
2191
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2192
|
+
<span class="cline-any cline-no"> </span>
|
|
2193
|
+
<span class="cline-any cline-no"> </span>
|
|
2194
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2195
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2196
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2197
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2198
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2199
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2200
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2201
|
+
<span class="cline-any cline-no"> </span>
|
|
2202
|
+
<span class="cline-any cline-no"> </span>
|
|
2203
|
+
<span class="cline-any cline-no"> </span>
|
|
2204
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2205
|
+
<span class="cline-any cline-no"> </span>
|
|
2206
|
+
<span class="cline-any cline-no"> </span>
|
|
2207
|
+
<span class="cline-any cline-no"> </span>
|
|
2208
|
+
<span class="cline-any cline-no"> </span>
|
|
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-neutral"> </span>
|
|
2215
|
+
<span class="cline-any cline-no"> </span>
|
|
2216
|
+
<span class="cline-any cline-no"> </span>
|
|
2217
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2218
|
+
<span class="cline-any cline-no"> </span>
|
|
2219
|
+
<span class="cline-any cline-no"> </span>
|
|
2220
|
+
<span class="cline-any cline-no"> </span>
|
|
2221
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2222
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2223
|
+
<span class="cline-any cline-no"> </span>
|
|
2224
|
+
<span class="cline-any cline-no"> </span>
|
|
2225
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2226
|
+
<span class="cline-any cline-no"> </span>
|
|
2227
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2228
|
+
<span class="cline-any cline-no"> </span>
|
|
2229
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2230
|
+
<span class="cline-any cline-no"> </span>
|
|
2231
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2232
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2233
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2234
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2235
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2236
|
+
<span class="cline-any cline-no"> </span>
|
|
2237
|
+
<span class="cline-any cline-no"> </span>
|
|
2238
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2239
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2240
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2241
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2242
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2243
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2244
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2245
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2246
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2247
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2248
|
+
<span class="cline-any cline-no"> </span>
|
|
2249
|
+
<span class="cline-any cline-no"> </span>
|
|
2250
|
+
<span class="cline-any cline-no"> </span>
|
|
2251
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2252
|
+
<span class="cline-any cline-no"> </span>
|
|
2253
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2254
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2255
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2256
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2257
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2258
|
+
<span class="cline-any cline-no"> </span>
|
|
2259
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2260
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2261
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2262
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2263
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2264
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2265
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2266
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2267
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2268
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2269
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2270
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2271
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2272
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2273
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2274
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2275
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2276
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2277
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2278
|
+
<span class="cline-any cline-no"> </span>
|
|
2279
|
+
<span class="cline-any cline-no"> </span>
|
|
2280
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2281
|
+
<span class="cline-any cline-no"> </span>
|
|
2282
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2283
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2284
|
+
<span class="cline-any cline-no"> </span>
|
|
2285
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2286
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2287
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2288
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2289
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2290
|
+
<span class="cline-any cline-no"> </span>
|
|
2291
|
+
<span class="cline-any cline-no"> </span>
|
|
2292
|
+
<span class="cline-any cline-no"> </span>
|
|
2293
|
+
<span class="cline-any cline-no"> </span>
|
|
2294
|
+
<span class="cline-any cline-no"> </span>
|
|
2295
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2296
|
+
<span class="cline-any cline-no"> </span>
|
|
2297
|
+
<span class="cline-any cline-no"> </span>
|
|
2298
|
+
<span class="cline-any cline-no"> </span>
|
|
2299
|
+
<span class="cline-any cline-no"> </span>
|
|
2300
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2301
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2302
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2303
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2304
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2305
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2306
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2307
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2308
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2309
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2310
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2311
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2312
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2313
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2314
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2315
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2316
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2317
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2318
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2319
|
+
<span class="cline-any cline-no"> </span>
|
|
2320
|
+
<span class="cline-any cline-no"> </span>
|
|
2321
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2322
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2323
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2324
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2325
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2326
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2327
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2328
|
+
<span class="cline-any cline-no"> </span>
|
|
2329
|
+
<span class="cline-any cline-no"> </span>
|
|
2330
|
+
<span class="cline-any cline-no"> </span>
|
|
2331
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2332
|
+
<span class="cline-any cline-no"> </span>
|
|
2333
|
+
<span class="cline-any cline-no"> </span>
|
|
2334
|
+
<span class="cline-any cline-no"> </span>
|
|
2335
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2336
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2337
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2338
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2339
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2340
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2341
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2342
|
+
<span class="cline-any cline-no"> </span>
|
|
2343
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2344
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2345
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2346
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2347
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2348
|
+
<span class="cline-any cline-no"> </span>
|
|
2349
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2350
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2351
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2352
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2353
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2354
|
+
<span class="cline-any cline-no"> </span>
|
|
2355
|
+
<span class="cline-any cline-no"> </span>
|
|
2356
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2357
|
+
<span class="cline-any cline-no"> </span>
|
|
2358
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2359
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2360
|
+
<span class="cline-any cline-no"> </span>
|
|
2361
|
+
<span class="cline-any cline-no"> </span>
|
|
2362
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2363
|
+
<span class="cline-any cline-no"> </span>
|
|
2364
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2365
|
+
<span class="cline-any cline-no"> </span>
|
|
2366
|
+
<span class="cline-any cline-no"> </span>
|
|
2367
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2368
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2369
|
+
<span class="cline-any cline-no"> </span>
|
|
2370
|
+
<span class="cline-any cline-no"> </span>
|
|
2371
|
+
<span class="cline-any cline-no"> </span>
|
|
2372
|
+
<span class="cline-any cline-no"> </span>
|
|
2373
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2374
|
+
<span class="cline-any cline-no"> </span>
|
|
2375
|
+
<span class="cline-any cline-no"> </span>
|
|
2376
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2377
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2378
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2379
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2380
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2381
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2382
|
+
<span class="cline-any cline-no"> </span>
|
|
2383
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2384
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2385
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2386
|
+
<span class="cline-any cline-no"> </span>
|
|
2387
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2388
|
+
<span class="cline-any cline-no"> </span>
|
|
1423
2389
|
<span class="cline-any cline-neutral"> </span>
|
|
1424
2390
|
<span class="cline-any cline-neutral"> </span>
|
|
1425
2391
|
<span class="cline-any cline-no"> </span>
|
|
1426
2392
|
<span class="cline-any cline-no"> </span>
|
|
1427
2393
|
<span class="cline-any cline-neutral"> </span>
|
|
1428
2394
|
<span class="cline-any cline-no"> </span>
|
|
1429
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1430
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1431
2395
|
<span class="cline-any cline-no"> </span>
|
|
1432
2396
|
<span class="cline-any cline-neutral"> </span>
|
|
1433
2397
|
<span class="cline-any cline-neutral"> </span>
|
|
1434
|
-
<span class="cline-any cline-
|
|
2398
|
+
<span class="cline-any cline-no"> </span>
|
|
2399
|
+
<span class="cline-any cline-no"> </span>
|
|
1435
2400
|
<span class="cline-any cline-neutral"> </span>
|
|
1436
2401
|
<span class="cline-any cline-neutral"> </span>
|
|
1437
2402
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1439,69 +2404,88 @@
|
|
|
1439
2404
|
<span class="cline-any cline-no"> </span>
|
|
1440
2405
|
<span class="cline-any cline-neutral"> </span>
|
|
1441
2406
|
<span class="cline-any cline-no"> </span>
|
|
2407
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1442
2408
|
<span class="cline-any cline-no"> </span>
|
|
1443
2409
|
<span class="cline-any cline-neutral"> </span>
|
|
1444
2410
|
<span class="cline-any cline-neutral"> </span>
|
|
1445
2411
|
<span class="cline-any cline-neutral"> </span>
|
|
2412
|
+
<span class="cline-any cline-no"> </span>
|
|
2413
|
+
<span class="cline-any cline-no"> </span>
|
|
2414
|
+
<span class="cline-any cline-no"> </span>
|
|
2415
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2416
|
+
<span class="cline-any cline-no"> </span>
|
|
2417
|
+
<span class="cline-any cline-no"> </span>
|
|
2418
|
+
<span class="cline-any cline-no"> </span>
|
|
2419
|
+
<span class="cline-any cline-no"> </span>
|
|
2420
|
+
<span class="cline-any cline-no"> </span>
|
|
1446
2421
|
<span class="cline-any cline-neutral"> </span>
|
|
1447
2422
|
<span class="cline-any cline-neutral"> </span>
|
|
1448
2423
|
<span class="cline-any cline-neutral"> </span>
|
|
2424
|
+
<span class="cline-any cline-no"> </span>
|
|
2425
|
+
<span class="cline-any cline-no"> </span>
|
|
1449
2426
|
<span class="cline-any cline-neutral"> </span>
|
|
2427
|
+
<span class="cline-any cline-no"> </span>
|
|
2428
|
+
<span class="cline-any cline-no"> </span>
|
|
2429
|
+
<span class="cline-any cline-no"> </span>
|
|
1450
2430
|
<span class="cline-any cline-neutral"> </span>
|
|
1451
2431
|
<span class="cline-any cline-neutral"> </span>
|
|
1452
2432
|
<span class="cline-any cline-neutral"> </span>
|
|
1453
2433
|
<span class="cline-any cline-neutral"> </span>
|
|
2434
|
+
<span class="cline-any cline-no"> </span>
|
|
1454
2435
|
<span class="cline-any cline-neutral"> </span>
|
|
1455
2436
|
<span class="cline-any cline-neutral"> </span>
|
|
1456
2437
|
<span class="cline-any cline-neutral"> </span>
|
|
2438
|
+
<span class="cline-any cline-no"> </span>
|
|
1457
2439
|
<span class="cline-any cline-neutral"> </span>
|
|
1458
2440
|
<span class="cline-any cline-neutral"> </span>
|
|
1459
2441
|
<span class="cline-any cline-no"> </span>
|
|
1460
2442
|
<span class="cline-any cline-no"> </span>
|
|
2443
|
+
<span class="cline-any cline-no"> </span>
|
|
2444
|
+
<span class="cline-any cline-no"> </span>
|
|
2445
|
+
<span class="cline-any cline-no"> </span>
|
|
1461
2446
|
<span class="cline-any cline-neutral"> </span>
|
|
1462
2447
|
<span class="cline-any cline-neutral"> </span>
|
|
2448
|
+
<span class="cline-any cline-no"> </span>
|
|
2449
|
+
<span class="cline-any cline-no"> </span>
|
|
2450
|
+
<span class="cline-any cline-no"> </span>
|
|
1463
2451
|
<span class="cline-any cline-neutral"> </span>
|
|
1464
2452
|
<span class="cline-any cline-neutral"> </span>
|
|
1465
2453
|
<span class="cline-any cline-neutral"> </span>
|
|
2454
|
+
<span class="cline-any cline-no"> </span>
|
|
2455
|
+
<span class="cline-any cline-no"> </span>
|
|
1466
2456
|
<span class="cline-any cline-neutral"> </span>
|
|
1467
2457
|
<span class="cline-any cline-neutral"> </span>
|
|
1468
2458
|
<span class="cline-any cline-no"> </span>
|
|
1469
|
-
<span class="cline-any cline-
|
|
2459
|
+
<span class="cline-any cline-no"> </span>
|
|
2460
|
+
<span class="cline-any cline-no"> </span>
|
|
2461
|
+
<span class="cline-any cline-no"> </span>
|
|
2462
|
+
<span class="cline-any cline-no"> </span>
|
|
1470
2463
|
<span class="cline-any cline-no"> </span>
|
|
1471
2464
|
<span class="cline-any cline-no"> </span>
|
|
1472
2465
|
<span class="cline-any cline-no"> </span>
|
|
1473
2466
|
<span class="cline-any cline-neutral"> </span>
|
|
1474
|
-
<span class="cline-any cline-
|
|
1475
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1476
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1477
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2467
|
+
<span class="cline-any cline-no"> </span>
|
|
1478
2468
|
<span class="cline-any cline-neutral"> </span>
|
|
1479
2469
|
<span class="cline-any cline-neutral"> </span>
|
|
1480
2470
|
<span class="cline-any cline-no"> </span>
|
|
2471
|
+
<span class="cline-any cline-no"> </span>
|
|
1481
2472
|
<span class="cline-any cline-neutral"> </span>
|
|
1482
2473
|
<span class="cline-any cline-neutral"> </span>
|
|
1483
2474
|
<span class="cline-any cline-neutral"> </span>
|
|
1484
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1485
|
-
<span class="cline-any cline-no"> </span>
|
|
1486
2475
|
<span class="cline-any cline-no"> </span>
|
|
1487
2476
|
<span class="cline-any cline-neutral"> </span>
|
|
1488
|
-
<span class="cline-any cline-no"> </span>
|
|
1489
2477
|
<span class="cline-any cline-neutral"> </span>
|
|
1490
2478
|
<span class="cline-any cline-neutral"> </span>
|
|
1491
2479
|
<span class="cline-any cline-no"> </span>
|
|
1492
|
-
<span class="cline-any cline-no"> </span>
|
|
1493
2480
|
<span class="cline-any cline-neutral"> </span>
|
|
1494
|
-
<span class="cline-any cline-no"> </span>
|
|
1495
2481
|
<span class="cline-any cline-neutral"> </span>
|
|
1496
|
-
<span class="cline-any cline-no"> </span>
|
|
1497
2482
|
<span class="cline-any cline-neutral"> </span>
|
|
2483
|
+
<span class="cline-any cline-no"> </span>
|
|
1498
2484
|
<span class="cline-any cline-neutral"> </span>
|
|
1499
2485
|
<span class="cline-any cline-neutral"> </span>
|
|
1500
2486
|
<span class="cline-any cline-neutral"> </span>
|
|
1501
2487
|
<span class="cline-any cline-neutral"> </span>
|
|
1502
|
-
<span class="cline-any cline-no"> </span>
|
|
1503
2488
|
<span class="cline-any cline-neutral"> </span>
|
|
1504
|
-
<span class="cline-any cline-no"> </span>
|
|
1505
2489
|
<span class="cline-any cline-neutral"> </span>
|
|
1506
2490
|
<span class="cline-any cline-neutral"> </span>
|
|
1507
2491
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1509,62 +2493,57 @@
|
|
|
1509
2493
|
<span class="cline-any cline-no"> </span>
|
|
1510
2494
|
<span class="cline-any cline-no"> </span>
|
|
1511
2495
|
<span class="cline-any cline-neutral"> </span>
|
|
1512
|
-
<span class="cline-any cline-no"> </span>
|
|
1513
2496
|
<span class="cline-any cline-neutral"> </span>
|
|
1514
|
-
<span class="cline-any cline-no"> </span>
|
|
1515
|
-
<span class="cline-any cline-no"> </span>
|
|
1516
2497
|
<span class="cline-any cline-neutral"> </span>
|
|
1517
2498
|
<span class="cline-any cline-no"> </span>
|
|
1518
2499
|
<span class="cline-any cline-no"> </span>
|
|
1519
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1520
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1521
2500
|
<span class="cline-any cline-no"> </span>
|
|
1522
2501
|
<span class="cline-any cline-no"> </span>
|
|
1523
2502
|
<span class="cline-any cline-no"> </span>
|
|
1524
2503
|
<span class="cline-any cline-no"> </span>
|
|
1525
2504
|
<span class="cline-any cline-neutral"> </span>
|
|
1526
2505
|
<span class="cline-any cline-neutral"> </span>
|
|
1527
|
-
<span class="cline-any cline-
|
|
1528
|
-
<span class="cline-any cline-no"> </span>
|
|
2506
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1529
2507
|
<span class="cline-any cline-no"> </span>
|
|
1530
2508
|
<span class="cline-any cline-neutral"> </span>
|
|
1531
2509
|
<span class="cline-any cline-neutral"> </span>
|
|
1532
2510
|
<span class="cline-any cline-neutral"> </span>
|
|
1533
2511
|
<span class="cline-any cline-neutral"> </span>
|
|
1534
2512
|
<span class="cline-any cline-neutral"> </span>
|
|
2513
|
+
<span class="cline-any cline-no"> </span>
|
|
1535
2514
|
<span class="cline-any cline-neutral"> </span>
|
|
1536
2515
|
<span class="cline-any cline-neutral"> </span>
|
|
1537
2516
|
<span class="cline-any cline-neutral"> </span>
|
|
1538
2517
|
<span class="cline-any cline-no"> </span>
|
|
1539
|
-
<span class="cline-any cline-no"> </span>
|
|
1540
|
-
<span class="cline-any cline-no"> </span>
|
|
1541
|
-
<span class="cline-any cline-no"> </span>
|
|
1542
2518
|
<span class="cline-any cline-neutral"> </span>
|
|
1543
2519
|
<span class="cline-any cline-neutral"> </span>
|
|
1544
2520
|
<span class="cline-any cline-neutral"> </span>
|
|
1545
2521
|
<span class="cline-any cline-no"> </span>
|
|
1546
2522
|
<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-no"> </span>
|
|
1550
|
-
<span class="cline-any cline-no"> </span>
|
|
1551
2523
|
<span class="cline-any cline-neutral"> </span>
|
|
1552
2524
|
<span class="cline-any cline-neutral"> </span>
|
|
1553
2525
|
<span class="cline-any cline-neutral"> </span>
|
|
1554
|
-
<span class="cline-any cline-no"> </span>
|
|
1555
2526
|
<span class="cline-any cline-neutral"> </span>
|
|
1556
2527
|
<span class="cline-any cline-neutral"> </span>
|
|
1557
2528
|
<span class="cline-any cline-neutral"> </span>
|
|
1558
2529
|
<span class="cline-any cline-neutral"> </span>
|
|
1559
2530
|
<span class="cline-any cline-neutral"> </span>
|
|
1560
2531
|
<span class="cline-any cline-no"> </span>
|
|
2532
|
+
<span class="cline-any cline-no"> </span>
|
|
2533
|
+
<span class="cline-any cline-no"> </span>
|
|
1561
2534
|
<span class="cline-any cline-neutral"> </span>
|
|
1562
2535
|
<span class="cline-any cline-neutral"> </span>
|
|
1563
2536
|
<span class="cline-any cline-neutral"> </span>
|
|
2537
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2538
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2539
|
+
<span class="cline-any cline-no"> </span>
|
|
2540
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1564
2541
|
<span class="cline-any cline-no"> </span>
|
|
1565
2542
|
<span class="cline-any cline-neutral"> </span>
|
|
1566
2543
|
<span class="cline-any cline-neutral"> </span>
|
|
1567
2544
|
<span class="cline-any cline-neutral"> </span>
|
|
2545
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2546
|
+
<span class="cline-any cline-no"> </span>
|
|
1568
2547
|
<span class="cline-any cline-no"> </span>
|
|
1569
2548
|
<span class="cline-any cline-no"> </span>
|
|
1570
2549
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1577,14 +2556,25 @@
|
|
|
1577
2556
|
<span class="cline-any cline-no"> </span>
|
|
1578
2557
|
<span class="cline-any cline-no"> </span>
|
|
1579
2558
|
<span class="cline-any cline-neutral"> </span>
|
|
2559
|
+
<span class="cline-any cline-no"> </span>
|
|
1580
2560
|
<span class="cline-any cline-neutral"> </span>
|
|
1581
2561
|
<span class="cline-any cline-no"> </span>
|
|
1582
2562
|
<span class="cline-any cline-neutral"> </span>
|
|
1583
2563
|
<span class="cline-any cline-neutral"> </span>
|
|
1584
2564
|
<span class="cline-any cline-neutral"> </span>
|
|
1585
2565
|
<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
|
|
1587
|
-
<span class="cstat-no" title="statement not covered" >import
|
|
2566
|
+
<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>
|
|
2567
|
+
<span class="cstat-no" title="statement not covered" >import FeatureFlags from '../modules/featureFlags.js'</span>
|
|
2568
|
+
<span class="cstat-no" title="statement not covered" >import Message, { TagTrigger } from './messages.gen.js'</span>
|
|
2569
|
+
<span class="cstat-no" title="statement not covered" >import {</span>
|
|
2570
|
+
Timestamp,
|
|
2571
|
+
Metadata,
|
|
2572
|
+
UserID,
|
|
2573
|
+
Type as MType,
|
|
2574
|
+
TabChange,
|
|
2575
|
+
TabData,
|
|
2576
|
+
WSChannel,
|
|
2577
|
+
} from './messages.gen.js'
|
|
1588
2578
|
<span class="cstat-no" title="statement not covered" >import {</span>
|
|
1589
2579
|
now,
|
|
1590
2580
|
adjustTimeOrigin,
|
|
@@ -1598,16 +2588,18 @@
|
|
|
1598
2588
|
<span class="cstat-no" title="statement not covered" >import Observer from './observer/top_observer.js'</span>
|
|
1599
2589
|
<span class="cstat-no" title="statement not covered" >import Sanitizer from './sanitizer.js'</span>
|
|
1600
2590
|
<span class="cstat-no" title="statement not covered" >import Ticker from './ticker.js'</span>
|
|
1601
|
-
<span class="cstat-no" title="statement not covered" >import Logger, { LogLevel } from './logger.js'</span>
|
|
2591
|
+
<span class="cstat-no" title="statement not covered" >import Logger, { LogLevel, ILogLevel } from './logger.js'</span>
|
|
1602
2592
|
<span class="cstat-no" title="statement not covered" >import Session from './session.js'</span>
|
|
1603
2593
|
<span class="cstat-no" title="statement not covered" >import { gzip } from 'fflate'</span>
|
|
1604
2594
|
<span class="cstat-no" title="statement not covered" >import { deviceMemory, jsHeapSizeLimit } from '../modules/performance.js'</span>
|
|
1605
2595
|
<span class="cstat-no" title="statement not covered" >import AttributeSender from '../modules/attributeSender.js'</span>
|
|
1606
2596
|
import type { Options as ObserverOptions } from './observer/top_observer.js'
|
|
1607
2597
|
import type { Options as SanitizerOptions } from './sanitizer.js'
|
|
1608
|
-
import type { Options as LoggerOptions } from './logger.js'
|
|
1609
2598
|
import type { Options as SessOptions } from './session.js'
|
|
1610
2599
|
import type { Options as NetworkOptions } from '../modules/network.js'
|
|
2600
|
+
<span class="cstat-no" title="statement not covered" >import CanvasRecorder from './canvas.js'</span>
|
|
2601
|
+
<span class="cstat-no" title="statement not covered" >import UserTestManager from '../modules/userTesting/index.js'</span>
|
|
2602
|
+
<span class="cstat-no" title="statement not covered" >import TagWatcher from '../modules/tagWatcher.js'</span>
|
|
1611
2603
|
|
|
1612
2604
|
import type {
|
|
1613
2605
|
Options as WebworkerOptions,
|
|
@@ -1634,17 +2626,32 @@ interface OnStartInfo {
|
|
|
1634
2626
|
}
|
|
1635
2627
|
|
|
1636
2628
|
const CANCELED = <span class="cstat-no" title="statement not covered" >'canceled' as const</span>
|
|
2629
|
+
const uxtStorageKey = <span class="cstat-no" title="statement not covered" >'or_uxt_active'</span>
|
|
2630
|
+
const bufferStorageKey = <span class="cstat-no" title="statement not covered" >'or_buffer_1'</span>
|
|
1637
2631
|
const START_ERROR = <span class="cstat-no" title="statement not covered" >':(' as const</span>
|
|
1638
|
-
type SuccessfulStart = OnStartInfo & {
|
|
2632
|
+
type SuccessfulStart = OnStartInfo & {
|
|
2633
|
+
success: true
|
|
2634
|
+
}
|
|
1639
2635
|
type UnsuccessfulStart = {
|
|
1640
2636
|
reason: typeof CANCELED | string
|
|
1641
2637
|
success: false
|
|
1642
2638
|
}
|
|
1643
2639
|
|
|
1644
|
-
type RickRoll = {
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
2640
|
+
type RickRoll = {
|
|
2641
|
+
source: string
|
|
2642
|
+
context: string
|
|
2643
|
+
} & (
|
|
2644
|
+
| {
|
|
2645
|
+
line: 'never-gonna-give-you-up'
|
|
2646
|
+
}
|
|
2647
|
+
| {
|
|
2648
|
+
line: 'never-gonna-let-you-down'
|
|
2649
|
+
token: string
|
|
2650
|
+
}
|
|
2651
|
+
| {
|
|
2652
|
+
line: 'never-gonna-run-around-and-desert-you'
|
|
2653
|
+
token: string
|
|
2654
|
+
}
|
|
1648
2655
|
)
|
|
1649
2656
|
|
|
1650
2657
|
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 +2665,7 @@ type CommitCallback = (messages: Array<Message>) => void
|
|
|
1658
2665
|
<span class="cstat-no" title="statement not covered" > NotActive,</span>
|
|
1659
2666
|
<span class="cstat-no" title="statement not covered" > Starting,</span>
|
|
1660
2667
|
<span class="cstat-no" title="statement not covered" > Active,</span>
|
|
2668
|
+
<span class="cstat-no" title="statement not covered" > ColdStart,</span>
|
|
1661
2669
|
}
|
|
1662
2670
|
|
|
1663
2671
|
type AppOptions = {
|
|
@@ -1670,17 +2678,17 @@ type AppOptions = {
|
|
|
1670
2678
|
local_uuid_key: string
|
|
1671
2679
|
ingestPoint: string
|
|
1672
2680
|
resourceBaseHref: string | null // resourceHref?
|
|
1673
|
-
//resourceURLRewriter: (url: string) => string | boolean,
|
|
1674
|
-
verbose: boolean
|
|
1675
2681
|
__is_snippet: boolean
|
|
1676
2682
|
__debug_report_edp: string | null
|
|
1677
|
-
__debug__?:
|
|
2683
|
+
__debug__?: ILogLevel
|
|
2684
|
+
__save_canvas_locally?: boolean
|
|
1678
2685
|
localStorage: Storage | null
|
|
1679
2686
|
sessionStorage: Storage | null
|
|
1680
2687
|
forceSingleTab?: boolean
|
|
1681
2688
|
disableStringDict?: boolean
|
|
2689
|
+
assistSocketHost?: string
|
|
1682
2690
|
|
|
1683
|
-
|
|
2691
|
+
/** @deprecated */
|
|
1684
2692
|
onStart?: StartCallback
|
|
1685
2693
|
network?: NetworkOptions
|
|
1686
2694
|
} & WebworkerOptions &
|
|
@@ -1710,8 +2718,14 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1710
2718
|
readonly localStorage: Storage
|
|
1711
2719
|
readonly sessionStorage: Storage
|
|
1712
2720
|
private readonly <span class="cstat-no" title="statement not covered" >messages: Array<Message> = []</span>
|
|
2721
|
+
/**
|
|
2722
|
+
* we need 2 buffers, so we don't lose anything
|
|
2723
|
+
* @read coldStart implementation
|
|
2724
|
+
* */
|
|
2725
|
+
private <span class="cstat-no" title="statement not covered" >bufferedMessages1: Array<Message> = []</span>
|
|
2726
|
+
private readonly <span class="cstat-no" title="statement not covered" >bufferedMessages2: Array<Message> = []</span>
|
|
1713
2727
|
/* private */
|
|
1714
|
-
readonly observer: Observer // non-
|
|
2728
|
+
readonly observer: Observer // non-private for attachContextCallback
|
|
1715
2729
|
private readonly <span class="cstat-no" title="statement not covered" >startCallbacks: Array<StartCallback> = []</span>
|
|
1716
2730
|
private readonly <span class="cstat-no" title="statement not covered" >stopCallbacks: Array<() => any> = []</span>
|
|
1717
2731
|
private readonly <span class="cstat-no" title="statement not covered" >commitCallbacks: Array<CommitCallback> = []</span>
|
|
@@ -1727,11 +2741,18 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1727
2741
|
private readonly <span class="cstat-no" title="statement not covered" >bc: BroadcastChannel | null = null</span>
|
|
1728
2742
|
private readonly contextId
|
|
1729
2743
|
public attributeSender: AttributeSender
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
2744
|
+
private <span class="cstat-no" title="statement not covered" >canvasRecorder: CanvasRecorder | null = null</span>
|
|
2745
|
+
private uxtManager: UserTestManager
|
|
2746
|
+
private <span class="cstat-no" title="statement not covered" >conditionsManager: ConditionsManager | null = null</span>
|
|
2747
|
+
public featureFlags: FeatureFlags
|
|
2748
|
+
private tagWatcher: TagWatcher
|
|
2749
|
+
|
|
2750
|
+
<span class="fstat-no" title="function not covered" > constructor(</span>
|
|
2751
|
+
projectKey: string,
|
|
2752
|
+
sessionToken: string | undefined,
|
|
2753
|
+
options: Partial<Options>,
|
|
2754
|
+
private readonly <span class="cstat-no" title="statement not covered" >signalError: (error: string, apis: string[]) => void,</span>
|
|
2755
|
+
) {
|
|
1735
2756
|
<span class="cstat-no" title="statement not covered" > this.contextId = Math.random().toString(36).slice(2)</span>
|
|
1736
2757
|
<span class="cstat-no" title="statement not covered" > this.projectKey = projectKey</span>
|
|
1737
2758
|
<span class="cstat-no" title="statement not covered" > this.networkOptions = options.network</span>
|
|
@@ -1746,19 +2767,22 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1746
2767
|
local_uuid_key: '__openreplay_uuid',
|
|
1747
2768
|
ingestPoint: DEFAULT_INGEST_POINT,
|
|
1748
2769
|
resourceBaseHref: null,
|
|
1749
|
-
verbose: false,
|
|
1750
2770
|
__is_snippet: false,
|
|
1751
2771
|
__debug_report_edp: null,
|
|
2772
|
+
__debug__: LogLevel.Silent,
|
|
2773
|
+
__save_canvas_locally: false,
|
|
1752
2774
|
localStorage: null,
|
|
1753
2775
|
sessionStorage: null,
|
|
1754
2776
|
disableStringDict: false,
|
|
1755
2777
|
forceSingleTab: false,
|
|
2778
|
+
assistSocketHost: '',
|
|
1756
2779
|
},
|
|
1757
2780
|
options,
|
|
1758
2781
|
)
|
|
1759
2782
|
|
|
1760
2783
|
<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" >
|
|
2784
|
+
const host = <span class="cstat-no" title="statement not covered" >location.hostname.split('.').slice(-2).join('_')</span>
|
|
2785
|
+
<span class="cstat-no" title="statement not covered" > this.bc = inIframe() ? null : new BroadcastChannel(`rick_${host}`)</span>
|
|
1762
2786
|
}
|
|
1763
2787
|
|
|
1764
2788
|
<span class="cstat-no" title="statement not covered" > this.revID = this.options.revID</span>
|
|
@@ -1770,9 +2794,12 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1770
2794
|
<span class="cstat-no" title="statement not covered" > this.ticker = new Ticker(this)</span>
|
|
1771
2795
|
<span class="cstat-no" title="statement not covered" > this.ticker.attach(<span class="fstat-no" title="function not covered" >() =</span>> <span class="cstat-no" title="statement not covered" >this.commit())</span></span>
|
|
1772
2796
|
<span class="cstat-no" title="statement not covered" > this.debug = new Logger(this.options.__debug__)</span>
|
|
1773
|
-
<span class="cstat-no" title="statement not covered" > this.notify = new Logger(this.options.verbose ? LogLevel.Warnings : LogLevel.Silent)</span>
|
|
1774
2797
|
<span class="cstat-no" title="statement not covered" > this.session = new Session(this, this.options)</span>
|
|
1775
2798
|
<span class="cstat-no" title="statement not covered" > this.attributeSender = new AttributeSender(this, Boolean(this.options.disableStringDict))</span>
|
|
2799
|
+
<span class="cstat-no" title="statement not covered" > this.featureFlags = new FeatureFlags(this)</span>
|
|
2800
|
+
<span class="cstat-no" title="statement not covered" > this.tagWatcher = new TagWatcher(this.sessionStorage, this.debug.error, <span class="fstat-no" title="function not covered" >(t</span>ag) => {</span>
|
|
2801
|
+
<span class="cstat-no" title="statement not covered" > this.send(TagTrigger(tag) as Message)</span>
|
|
2802
|
+
})
|
|
1776
2803
|
<span class="cstat-no" title="statement not covered" > this.session.attachUpdateCallback(<span class="fstat-no" title="function not covered" >({</span> userID, metadata }) => {</span>
|
|
1777
2804
|
<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
2805
|
// TODO: nullable userID
|
|
@@ -1800,29 +2827,32 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1800
2827
|
<span class="cstat-no" title="statement not covered" > this.stop(false)</span>
|
|
1801
2828
|
<span class="cstat-no" title="statement not covered" > void this.start({}, true)</span>
|
|
1802
2829
|
} else <span class="cstat-no" title="statement not covered" >if (data === 'not_init') {</span>
|
|
1803
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2830
|
+
<span class="cstat-no" title="statement not covered" > this.debug.warn('OR WebWorker: writer not initialised. Restarting tracker')</span>
|
|
1804
2831
|
} else <span class="cstat-no" title="statement not covered" >if (data.type === 'failure') {</span>
|
|
1805
2832
|
<span class="cstat-no" title="statement not covered" > this.stop(false)</span>
|
|
2833
|
+
<span class="cstat-no" title="statement not covered" > this.debug.error('worker_failed', data.reason)</span>
|
|
1806
2834
|
<span class="cstat-no" title="statement not covered" > this._debug('worker_failed', data.reason)</span>
|
|
1807
|
-
} else <span class="cstat-no" title="statement not covered"
|
|
2835
|
+
} else <span class="cstat-no" title="statement not covered" >if (data.type === 'compress') {</span>
|
|
1808
2836
|
const batch = <span class="cstat-no" title="statement not covered" >data.batch</span>
|
|
1809
2837
|
const batchSize = <span class="cstat-no" title="statement not covered" >batch.byteLength</span>
|
|
1810
2838
|
<span class="cstat-no" title="statement not covered" > if (batchSize > this.compressionThreshold) {</span>
|
|
1811
2839
|
<span class="cstat-no" title="statement not covered" > gzip(data.batch, { mtime: 0 }, <span class="fstat-no" title="function not covered" >(e</span>rr, result) => {</span>
|
|
1812
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1813
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2840
|
+
<span class="cstat-no" title="statement not covered" > if (err) {</span>
|
|
2841
|
+
<span class="cstat-no" title="statement not covered" > this.debug.error('Openreplay compression error:', err)</span>
|
|
1814
2842
|
<span class="cstat-no" title="statement not covered" > this.stop(false)</span>
|
|
1815
2843
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.restartAttempts < 3) {</span>
|
|
1816
2844
|
<span class="cstat-no" title="statement not covered" > this.restartAttempts += 1</span>
|
|
1817
2845
|
<span class="cstat-no" title="statement not covered" > void this.start({}, true)</span>
|
|
1818
2846
|
}
|
|
2847
|
+
} else {
|
|
2848
|
+
<span class="cstat-no" title="statement not covered" > this.worker?.postMessage({ type: 'compressed', batch: result })</span>
|
|
1819
2849
|
}
|
|
1820
|
-
// @ts-ignore
|
|
1821
|
-
<span class="cstat-no" title="statement not covered" > this.worker?.postMessage({ type: 'compressed', batch: result })</span>
|
|
1822
2850
|
})
|
|
1823
2851
|
} else {
|
|
1824
2852
|
<span class="cstat-no" title="statement not covered" > this.worker?.postMessage({ type: 'uncompressed', batch: batch })</span>
|
|
1825
2853
|
}
|
|
2854
|
+
} else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span>if (data.type === 'queue_empty') {</span>
|
|
2855
|
+
<span class="cstat-no" title="statement not covered" > this.onSessionSent()</span>
|
|
1826
2856
|
}
|
|
1827
2857
|
}
|
|
1828
2858
|
const alertWorker = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
@@ -1895,7 +2925,7 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1895
2925
|
body: JSON.stringify({
|
|
1896
2926
|
context,
|
|
1897
2927
|
// @ts-ignore
|
|
1898
|
-
error: `${e}`,
|
|
2928
|
+
error: `${e as unknown as string}`,
|
|
1899
2929
|
}),
|
|
1900
2930
|
})
|
|
1901
2931
|
}
|
|
@@ -1917,31 +2947,76 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1917
2947
|
<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
2948
|
<span class="cstat-no" title="statement not covered" > return</span>
|
|
1919
2949
|
}
|
|
1920
|
-
// ====================================================
|
|
1921
2950
|
|
|
1922
|
-
|
|
2951
|
+
// ====================================================
|
|
2952
|
+
<span class="cstat-no" title="statement not covered" > if (this.activityState === ActivityState.ColdStart) {</span>
|
|
2953
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(message)</span>
|
|
2954
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.singleBuffer) {</span>
|
|
2955
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(message)</span>
|
|
2956
|
+
}
|
|
2957
|
+
<span class="cstat-no" title="statement not covered" > this.conditionsManager?.processMessage(message)</span>
|
|
2958
|
+
} else {
|
|
2959
|
+
<span class="cstat-no" title="statement not covered" > this.messages.push(message)</span>
|
|
2960
|
+
}
|
|
1923
2961
|
// TODO: commit on start if there were `urgent` sends;
|
|
1924
2962
|
// Clarify where urgent can be used for;
|
|
1925
2963
|
// Clarify workflow for each type of message in case it was sent before start
|
|
1926
2964
|
// (like Fetch before start; maybe add an option "preCapture: boolean" or sth alike)
|
|
1927
|
-
// Careful: `this.delay` is equal to zero before start
|
|
2965
|
+
// Careful: `this.delay` is equal to zero before start so all Timestamp-s will have to be updated on start
|
|
1928
2966
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activityState === ActivityState.Active && urgent) {</span>
|
|
1929
2967
|
<span class="cstat-no" title="statement not covered" > this.commit()</span>
|
|
1930
2968
|
}
|
|
1931
2969
|
}
|
|
1932
2970
|
|
|
1933
|
-
|
|
2971
|
+
/**
|
|
2972
|
+
* Normal workflow: add timestamp and tab data to batch, then commit it
|
|
2973
|
+
* every ~30ms
|
|
2974
|
+
* */
|
|
2975
|
+
private <span class="fstat-no" title="function not covered" >_nCommit(</span>): void {
|
|
1934
2976
|
<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
2977
|
<span class="cstat-no" title="statement not covered" > requestIdleCb(<span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
1936
2978
|
<span class="cstat-no" title="statement not covered" > this.messages.unshift(TabData(this.session.getTabId()))</span>
|
|
1937
2979
|
<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
|
|
2980
|
+
// why I need to add opt chaining?
|
|
2981
|
+
<span class="cstat-no" title="statement not covered" > this.worker?.postMessage(this.messages)</span>
|
|
1940
2982
|
<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
2983
|
<span class="cstat-no" title="statement not covered" > this.messages.length = 0</span>
|
|
1942
2984
|
})
|
|
1943
2985
|
}
|
|
1944
2986
|
}
|
|
2987
|
+
|
|
2988
|
+
<span class="cstat-no" title="statement not covered" > coldStartCommitN = 0</span>
|
|
2989
|
+
|
|
2990
|
+
/**
|
|
2991
|
+
* Cold start: add timestamp and tab data to both batches
|
|
2992
|
+
* every 2nd tick, ~60ms
|
|
2993
|
+
* this will make batches a bit larger and replay will work with bigger jumps every frame
|
|
2994
|
+
* but in turn we don't overload batch writer on session start with 1000 batches
|
|
2995
|
+
* */
|
|
2996
|
+
private <span class="fstat-no" title="function not covered" >_cStartCommit(</span>): void {
|
|
2997
|
+
<span class="cstat-no" title="statement not covered" > this.coldStartCommitN += 1</span>
|
|
2998
|
+
<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>
|
|
2999
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(Timestamp(this.timestamp()))</span>
|
|
3000
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(TabData(this.session.getTabId()))</span>
|
|
3001
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(Timestamp(this.timestamp()))</span>
|
|
3002
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(TabData(this.session.getTabId()))</span>
|
|
3003
|
+
<span class="cstat-no" title="statement not covered" > this.coldStartCommitN = 0</span>
|
|
3004
|
+
}
|
|
3005
|
+
}
|
|
3006
|
+
|
|
3007
|
+
private <span class="fstat-no" title="function not covered" >commit(</span>): void {
|
|
3008
|
+
<span class="cstat-no" title="statement not covered" > if (this.activityState === ActivityState.ColdStart) {</span>
|
|
3009
|
+
<span class="cstat-no" title="statement not covered" > this._cStartCommit()</span>
|
|
3010
|
+
} else {
|
|
3011
|
+
<span class="cstat-no" title="statement not covered" > this._nCommit()</span>
|
|
3012
|
+
}
|
|
3013
|
+
}
|
|
3014
|
+
|
|
3015
|
+
private <span class="fstat-no" title="function not covered" >postToWorker(</span>messages: Array<Message>) {
|
|
3016
|
+
<span class="cstat-no" title="statement not covered" > this.worker?.postMessage(messages)</span>
|
|
3017
|
+
<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>
|
|
3018
|
+
<span class="cstat-no" title="statement not covered" > messages.length = 0</span>
|
|
3019
|
+
}
|
|
1945
3020
|
|
|
1946
3021
|
private <span class="cstat-no" title="statement not covered" >delay = 0</span>
|
|
1947
3022
|
|
|
@@ -2114,19 +3189,286 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2114
3189
|
}
|
|
2115
3190
|
}
|
|
2116
3191
|
|
|
2117
|
-
|
|
3192
|
+
<span class="cstat-no" title="statement not covered" > coldInterval: ReturnType<typeof setInterval> | null = null</span>
|
|
3193
|
+
<span class="cstat-no" title="statement not covered" > orderNumber = 0</span>
|
|
3194
|
+
<span class="cstat-no" title="statement not covered" > coldStartTs = 0</span>
|
|
3195
|
+
<span class="cstat-no" title="statement not covered" > singleBuffer = false</span>
|
|
3196
|
+
|
|
3197
|
+
private <span class="fstat-no" title="function not covered" >checkSessionToken(</span>forceNew?: boolean) {
|
|
3198
|
+
const lsReset = <span class="cstat-no" title="statement not covered" >this.sessionStorage.getItem(this.options.session_reset_key) !== null</span>
|
|
3199
|
+
const needNewSessionID = <span class="cstat-no" title="statement not covered" >forceNew || lsReset</span>
|
|
3200
|
+
const sessionToken = <span class="cstat-no" title="statement not covered" >this.session.getSessionToken()</span>
|
|
3201
|
+
|
|
3202
|
+
<span class="cstat-no" title="statement not covered" > return needNewSessionID || !sessionToken</span>
|
|
3203
|
+
}
|
|
3204
|
+
|
|
3205
|
+
/**
|
|
3206
|
+
* start buffering messages without starting the actual session, which gives
|
|
3207
|
+
* user 30 seconds to "activate" and record session by calling `start()` on conditional trigger
|
|
3208
|
+
* and we will then send buffered batch, so it won't get lost
|
|
3209
|
+
* */
|
|
3210
|
+
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) {
|
|
3211
|
+
<span class="cstat-no" title="statement not covered" > this.singleBuffer = false</span>
|
|
3212
|
+
const second = <span class="cstat-no" title="statement not covered" >1000</span>
|
|
3213
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (conditional) {</span>
|
|
3214
|
+
<span class="cstat-no" title="statement not covered" > this.conditionsManager = new ConditionsManager(this, startOpts)</span>
|
|
3215
|
+
}
|
|
3216
|
+
const isNewSession = <span class="cstat-no" title="statement not covered" >this.checkSessionToken(startOpts.forceNew)</span>
|
|
3217
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (conditional) {</span>
|
|
3218
|
+
const r = <span class="cstat-no" title="statement not covered" >await fetch(this.options.ingestPoint + '/v1/web/start', {</span>
|
|
3219
|
+
method: 'POST',
|
|
3220
|
+
headers: {
|
|
3221
|
+
'Content-Type': 'application/json',
|
|
3222
|
+
},
|
|
3223
|
+
body: JSON.stringify({
|
|
3224
|
+
...this.getTrackerInfo(),
|
|
3225
|
+
timestamp: now(),
|
|
3226
|
+
doNotRecord: true,
|
|
3227
|
+
bufferDiff: 0,
|
|
3228
|
+
userID: this.session.getInfo().userID,
|
|
3229
|
+
token: undefined,
|
|
3230
|
+
deviceMemory,
|
|
3231
|
+
jsHeapSizeLimit,
|
|
3232
|
+
timezone: getTimezone(),
|
|
3233
|
+
}),
|
|
3234
|
+
})
|
|
3235
|
+
const {
|
|
3236
|
+
// this token is needed to fetch conditions and flags,
|
|
3237
|
+
// but it can't be used to record a session
|
|
3238
|
+
token,
|
|
3239
|
+
userBrowser,
|
|
3240
|
+
userCity,
|
|
3241
|
+
userCountry,
|
|
3242
|
+
userDevice,
|
|
3243
|
+
userOS,
|
|
3244
|
+
userState,
|
|
3245
|
+
projectID,
|
|
3246
|
+
} = <span class="cstat-no" title="statement not covered" >await r.json()</span>
|
|
3247
|
+
<span class="cstat-no" title="statement not covered" > this.session.assign({ projectID })</span>
|
|
3248
|
+
<span class="cstat-no" title="statement not covered" > this.session.setUserInfo({</span>
|
|
3249
|
+
userBrowser,
|
|
3250
|
+
userCity,
|
|
3251
|
+
userCountry,
|
|
3252
|
+
userDevice,
|
|
3253
|
+
userOS,
|
|
3254
|
+
userState,
|
|
3255
|
+
})
|
|
3256
|
+
const onStartInfo = <span class="cstat-no" title="statement not covered" >{ sessionToken: token, userUUID: '', sessionID: '' }</span>
|
|
3257
|
+
<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>
|
|
3258
|
+
<span class="cstat-no" title="statement not covered" > await this.conditionsManager?.fetchConditions(projectID as string, token as string)</span>
|
|
3259
|
+
<span class="cstat-no" title="statement not covered" > await this.featureFlags.reloadFlags(token as string)</span>
|
|
3260
|
+
<span class="cstat-no" title="statement not covered" > await this.tagWatcher.fetchTags(this.options.ingestPoint, token as string)</span>
|
|
3261
|
+
<span class="cstat-no" title="statement not covered" > this.conditionsManager?.processFlags(this.featureFlags.flags)</span>
|
|
3262
|
+
}
|
|
3263
|
+
const cycle = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
3264
|
+
<span class="cstat-no" title="statement not covered" > this.orderNumber += 1</span>
|
|
3265
|
+
<span class="cstat-no" title="statement not covered" > adjustTimeOrigin()</span>
|
|
3266
|
+
<span class="cstat-no" title="statement not covered" > this.coldStartTs = now()</span>
|
|
3267
|
+
<span class="cstat-no" title="statement not covered" > if (this.orderNumber % 2 === 0) {</span>
|
|
3268
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.length = 0</span>
|
|
3269
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(Timestamp(this.timestamp()))</span>
|
|
3270
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(TabData(this.session.getTabId()))</span>
|
|
3271
|
+
} else {
|
|
3272
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages2.length = 0</span>
|
|
3273
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(Timestamp(this.timestamp()))</span>
|
|
3274
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(TabData(this.session.getTabId()))</span>
|
|
3275
|
+
}
|
|
3276
|
+
<span class="cstat-no" title="statement not covered" > this.stop(false)</span>
|
|
3277
|
+
<span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.ColdStart</span>
|
|
3278
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.sessionHash) {</span>
|
|
3279
|
+
<span class="cstat-no" title="statement not covered" > this.session.applySessionHash(startOpts.sessionHash)</span>
|
|
3280
|
+
}
|
|
3281
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.forceNew) {</span>
|
|
3282
|
+
<span class="cstat-no" title="statement not covered" > this.session.reset()</span>
|
|
3283
|
+
}
|
|
3284
|
+
<span class="cstat-no" title="statement not covered" > this.session.assign({</span>
|
|
3285
|
+
userID: startOpts.userID,
|
|
3286
|
+
metadata: startOpts.metadata,
|
|
3287
|
+
})
|
|
3288
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isNewSession) {</span>
|
|
3289
|
+
<span class="cstat-no" title="statement not covered" > this.debug.log('continuing session on new tab', this.session.getTabId())</span>
|
|
3290
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
3291
|
+
<span class="cstat-no" title="statement not covered" > this.send(TabChange(this.session.getTabId()))</span>
|
|
3292
|
+
}
|
|
3293
|
+
<span class="cstat-no" title="statement not covered" > this.observer.observe()</span>
|
|
3294
|
+
<span class="cstat-no" title="statement not covered" > this.ticker.start()</span>
|
|
3295
|
+
}
|
|
3296
|
+
<span class="cstat-no" title="statement not covered" > this.coldInterval = setInterval(<span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
3297
|
+
<span class="cstat-no" title="statement not covered" > cycle()</span>
|
|
3298
|
+
}, 30 * second)
|
|
3299
|
+
<span class="cstat-no" title="statement not covered" > cycle()</span>
|
|
3300
|
+
}
|
|
3301
|
+
|
|
3302
|
+
<span class="cstat-no" title="statement not covered" > onSessionSent = <span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
3303
|
+
<span class="cstat-no" title="statement not covered" > return</span>
|
|
3304
|
+
}
|
|
3305
|
+
|
|
3306
|
+
/**
|
|
3307
|
+
* Starts offline session recording
|
|
3308
|
+
* @param {Object} startOpts - options for session start, same as .start()
|
|
3309
|
+
* @param {Function} onSessionSent - callback that will be called once session is fully sent
|
|
3310
|
+
* */
|
|
3311
|
+
public <span class="fstat-no" title="function not covered" >offlineRecording(</span>startOpts: StartOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span> onSessionSent: () => void) {
|
|
3312
|
+
<span class="cstat-no" title="statement not covered" > this.onSessionSent = onSessionSent</span>
|
|
3313
|
+
<span class="cstat-no" title="statement not covered" > this.singleBuffer = true</span>
|
|
3314
|
+
const isNewSession = <span class="cstat-no" title="statement not covered" >this.checkSessionToken(startOpts.forceNew)</span>
|
|
3315
|
+
<span class="cstat-no" title="statement not covered" > adjustTimeOrigin()</span>
|
|
3316
|
+
<span class="cstat-no" title="statement not covered" > this.coldStartTs = now()</span>
|
|
3317
|
+
const saverBuffer = <span class="cstat-no" title="statement not covered" >this.localStorage.getItem(bufferStorageKey)</span>
|
|
3318
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (saverBuffer) {</span>
|
|
3319
|
+
const data = <span class="cstat-no" title="statement not covered" >JSON.parse(saverBuffer)</span>
|
|
3320
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1 = Array.isArray(data) ? data : this.bufferedMessages1</span>
|
|
3321
|
+
<span class="cstat-no" title="statement not covered" > this.localStorage.removeItem(bufferStorageKey)</span>
|
|
3322
|
+
}
|
|
3323
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(Timestamp(this.timestamp()))</span>
|
|
3324
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(TabData(this.session.getTabId()))</span>
|
|
3325
|
+
<span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.ColdStart</span>
|
|
3326
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.sessionHash) {</span>
|
|
3327
|
+
<span class="cstat-no" title="statement not covered" > this.session.applySessionHash(startOpts.sessionHash)</span>
|
|
3328
|
+
}
|
|
3329
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.forceNew) {</span>
|
|
3330
|
+
<span class="cstat-no" title="statement not covered" > this.session.reset()</span>
|
|
3331
|
+
}
|
|
3332
|
+
<span class="cstat-no" title="statement not covered" > this.session.assign({</span>
|
|
3333
|
+
userID: startOpts.userID,
|
|
3334
|
+
metadata: startOpts.metadata,
|
|
3335
|
+
})
|
|
3336
|
+
const onStartInfo = <span class="cstat-no" title="statement not covered" >{ sessionToken: '', userUUID: '', sessionID: '' }</span>
|
|
3337
|
+
<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>
|
|
3338
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isNewSession) {</span>
|
|
3339
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
3340
|
+
<span class="cstat-no" title="statement not covered" > this.send(TabChange(this.session.getTabId()))</span>
|
|
3341
|
+
}
|
|
3342
|
+
<span class="cstat-no" title="statement not covered" > this.observer.observe()</span>
|
|
3343
|
+
<span class="cstat-no" title="statement not covered" > this.ticker.start()</span>
|
|
3344
|
+
|
|
3345
|
+
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
3346
|
+
saveBuffer: this.saveBuffer,
|
|
3347
|
+
getBuffer: this.getBuffer,
|
|
3348
|
+
setBuffer: this.setBuffer,
|
|
3349
|
+
}
|
|
3350
|
+
}
|
|
3351
|
+
|
|
3352
|
+
/**
|
|
3353
|
+
* Saves the captured messages in localStorage (or whatever is used in its place)
|
|
3354
|
+
*
|
|
3355
|
+
* Then when this.offlineRecording is called, it will preload this messages and clear the storage item
|
|
3356
|
+
*
|
|
3357
|
+
* Keeping the size of local storage reasonable is up to the end users of this library
|
|
3358
|
+
* */
|
|
3359
|
+
public <span class="fstat-no" title="function not covered" >saveBuffer(</span>) {
|
|
3360
|
+
<span class="cstat-no" title="statement not covered" > this.localStorage.setItem(bufferStorageKey, JSON.stringify(this.bufferedMessages1))</span>
|
|
3361
|
+
}
|
|
3362
|
+
|
|
3363
|
+
/**
|
|
3364
|
+
* @returns buffer with stored messages for offline recording
|
|
3365
|
+
* */
|
|
3366
|
+
public <span class="fstat-no" title="function not covered" >getBuffer(</span>) {
|
|
3367
|
+
<span class="cstat-no" title="statement not covered" > return this.bufferedMessages1</span>
|
|
3368
|
+
}
|
|
3369
|
+
|
|
3370
|
+
/**
|
|
3371
|
+
* Used to set a buffer with messages array
|
|
3372
|
+
* */
|
|
3373
|
+
public <span class="fstat-no" title="function not covered" >setBuffer(</span>buffer: Message[]) {
|
|
3374
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1 = buffer</span>
|
|
3375
|
+
}
|
|
3376
|
+
|
|
3377
|
+
/**
|
|
3378
|
+
* Uploads the stored session buffer to backend
|
|
3379
|
+
* @returns promise that resolves once messages are loaded, it has to be awaited
|
|
3380
|
+
* so the session can be uploaded properly
|
|
3381
|
+
* @resolve {boolean} - if messages were loaded successfully
|
|
3382
|
+
* @reject {string} - error message
|
|
3383
|
+
* */
|
|
3384
|
+
public async <span class="fstat-no" title="function not covered" >uploadOfflineRecording(</span>) {
|
|
3385
|
+
<span class="cstat-no" title="statement not covered" > this.stop(false)</span>
|
|
3386
|
+
const timestamp = <span class="cstat-no" title="statement not covered" >now()</span>
|
|
3387
|
+
<span class="cstat-no" title="statement not covered" > this.worker?.postMessage({</span>
|
|
3388
|
+
type: 'start',
|
|
3389
|
+
pageNo: this.session.incPageNo(),
|
|
3390
|
+
ingestPoint: this.options.ingestPoint,
|
|
3391
|
+
timestamp: this.coldStartTs,
|
|
3392
|
+
url: document.URL,
|
|
3393
|
+
connAttemptCount: this.options.connAttemptCount,
|
|
3394
|
+
connAttemptGap: this.options.connAttemptGap,
|
|
3395
|
+
tabId: this.session.getTabId(),
|
|
3396
|
+
})
|
|
3397
|
+
const r = <span class="cstat-no" title="statement not covered" >await fetch(this.options.ingestPoint + '/v1/web/start', {</span>
|
|
3398
|
+
method: 'POST',
|
|
3399
|
+
headers: {
|
|
3400
|
+
'Content-Type': 'application/json',
|
|
3401
|
+
},
|
|
3402
|
+
body: JSON.stringify({
|
|
3403
|
+
...this.getTrackerInfo(),
|
|
3404
|
+
timestamp: timestamp,
|
|
3405
|
+
doNotRecord: false,
|
|
3406
|
+
bufferDiff: timestamp - this.coldStartTs,
|
|
3407
|
+
userID: this.session.getInfo().userID,
|
|
3408
|
+
token: undefined,
|
|
3409
|
+
deviceMemory,
|
|
3410
|
+
jsHeapSizeLimit,
|
|
3411
|
+
timezone: getTimezone(),
|
|
3412
|
+
}),
|
|
3413
|
+
})
|
|
3414
|
+
const {
|
|
3415
|
+
token,
|
|
3416
|
+
userBrowser,
|
|
3417
|
+
userCity,
|
|
3418
|
+
userCountry,
|
|
3419
|
+
userDevice,
|
|
3420
|
+
userOS,
|
|
3421
|
+
userState,
|
|
3422
|
+
beaconSizeLimit,
|
|
3423
|
+
projectID,
|
|
3424
|
+
} = <span class="cstat-no" title="statement not covered" >await r.json()</span>
|
|
3425
|
+
<span class="cstat-no" title="statement not covered" > this.worker?.postMessage({</span>
|
|
3426
|
+
type: 'auth',
|
|
3427
|
+
token,
|
|
3428
|
+
beaconSizeLimit,
|
|
3429
|
+
})
|
|
3430
|
+
<span class="cstat-no" title="statement not covered" > this.session.assign({ projectID })</span>
|
|
3431
|
+
<span class="cstat-no" title="statement not covered" > this.session.setUserInfo({</span>
|
|
3432
|
+
userBrowser,
|
|
3433
|
+
userCity,
|
|
3434
|
+
userCountry,
|
|
3435
|
+
userDevice,
|
|
3436
|
+
userOS,
|
|
3437
|
+
userState,
|
|
3438
|
+
})
|
|
3439
|
+
<span class="cstat-no" title="statement not covered" > while (this.bufferedMessages1.length > 0) {</span>
|
|
3440
|
+
<span class="cstat-no" title="statement not covered" > await this.flushBuffer(this.bufferedMessages1)</span>
|
|
3441
|
+
}
|
|
3442
|
+
<span class="cstat-no" title="statement not covered" > this.postToWorker([['q_end']] as unknown as Message[])</span>
|
|
3443
|
+
<span class="cstat-no" title="statement not covered" > this.clearBuffers()</span>
|
|
3444
|
+
}
|
|
3445
|
+
|
|
3446
|
+
private <span class="fstat-no" title="function not covered" >_start(</span>
|
|
3447
|
+
startOpts: StartOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span>
|
|
3448
|
+
resetByWorker = <span class="branch-0 cbranch-no" title="branch not covered" >false,</span>
|
|
3449
|
+
conditionName?: string,
|
|
3450
|
+
): Promise<StartPromiseReturn> {
|
|
3451
|
+
const isColdStart = <span class="cstat-no" title="statement not covered" >this.activityState === ActivityState.ColdStart</span>
|
|
3452
|
+
<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>
|
|
3453
|
+
<span class="cstat-no" title="statement not covered" > clearInterval(this.coldInterval)</span>
|
|
3454
|
+
}
|
|
2118
3455
|
<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" >
|
|
3456
|
+
const reason = <span class="cstat-no" title="statement not covered" >'No worker found: perhaps, CSP is not set.'</span>
|
|
3457
|
+
<span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
|
|
3458
|
+
<span class="cstat-no" title="statement not covered" > return Promise.resolve(UnsuccessfulStart(reason))</span>
|
|
2120
3459
|
}
|
|
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
|
-
|
|
3460
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
|
|
3461
|
+
this.activityState === ActivityState.Active ||
|
|
3462
|
+
this.activityState === ActivityState.Starting
|
|
3463
|
+
) {
|
|
3464
|
+
const reason =
|
|
3465
|
+
<span class="cstat-no" title="statement not covered" > 'OpenReplay: trying to call `start()` on the instance that has been started already.'</span>
|
|
3466
|
+
<span class="cstat-no" title="statement not covered" > return Promise.resolve(UnsuccessfulStart(reason))</span>
|
|
2127
3467
|
}
|
|
2128
3468
|
<span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.Starting</span>
|
|
2129
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3469
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isColdStart) {</span>
|
|
3470
|
+
<span class="cstat-no" title="statement not covered" > adjustTimeOrigin()</span>
|
|
3471
|
+
}
|
|
2130
3472
|
|
|
2131
3473
|
<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
3474
|
<span class="cstat-no" title="statement not covered" > this.session.applySessionHash(startOpts.sessionHash)</span>
|
|
@@ -2146,22 +3488,20 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2146
3488
|
type: 'start',
|
|
2147
3489
|
pageNo: this.session.incPageNo(),
|
|
2148
3490
|
ingestPoint: this.options.ingestPoint,
|
|
2149
|
-
timestamp,
|
|
3491
|
+
timestamp: isColdStart ? this.coldStartTs : timestamp,
|
|
2150
3492
|
url: document.URL,
|
|
2151
3493
|
connAttemptCount: this.options.connAttemptCount,
|
|
2152
3494
|
connAttemptGap: this.options.connAttemptGap,
|
|
2153
3495
|
tabId: this.session.getTabId(),
|
|
2154
3496
|
})
|
|
2155
3497
|
|
|
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
3498
|
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" >
|
|
3499
|
+
const isNewSession = <span class="cstat-no" title="statement not covered" >this.checkSessionToken(startOpts.forceNew)</span>
|
|
3500
|
+
<span class="cstat-no" title="statement not covered" > this.sessionStorage.removeItem(this.options.session_reset_key)</span>
|
|
2161
3501
|
|
|
2162
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3502
|
+
<span class="cstat-no" title="statement not covered" > this.debug.log(</span>
|
|
2163
3503
|
'OpenReplay: starting session; need new session id?',
|
|
2164
|
-
|
|
3504
|
+
isNewSession,
|
|
2165
3505
|
'session token: ',
|
|
2166
3506
|
sessionToken,
|
|
2167
3507
|
)
|
|
@@ -2174,11 +3514,14 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2174
3514
|
body: JSON.stringify({
|
|
2175
3515
|
...this.getTrackerInfo(),
|
|
2176
3516
|
timestamp,
|
|
3517
|
+
doNotRecord: false,
|
|
3518
|
+
bufferDiff: timestamp - this.coldStartTs,
|
|
2177
3519
|
userID: this.session.getInfo().userID,
|
|
2178
3520
|
token: isNewSession ? undefined : sessionToken,
|
|
2179
3521
|
deviceMemory,
|
|
2180
3522
|
jsHeapSizeLimit,
|
|
2181
3523
|
timezone: getTimezone(),
|
|
3524
|
+
condition: conditionName,
|
|
2182
3525
|
}),
|
|
2183
3526
|
})
|
|
2184
3527
|
.then(<span class="fstat-no" title="function not covered" >(r</span>) => {
|
|
@@ -2194,12 +3537,16 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2194
3537
|
)
|
|
2195
3538
|
}
|
|
2196
3539
|
})
|
|
2197
|
-
.then(<span class="fstat-no" title="function not covered" >(r</span>) =>
|
|
3540
|
+
.then(<span class="fstat-no" title="function not covered" >async (r</span>) =><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > {</span></span>
|
|
2198
3541
|
<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" >
|
|
3542
|
+
const reason = <span class="cstat-no" title="statement not covered" >'no worker found after start request (this might not happen)'</span>
|
|
3543
|
+
<span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
|
|
3544
|
+
<span class="cstat-no" title="statement not covered" > return Promise.reject(reason)</span>
|
|
2200
3545
|
}
|
|
2201
3546
|
<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" >
|
|
3547
|
+
const reason = <span class="cstat-no" title="statement not covered" >'Tracker stopped during authorization'</span>
|
|
3548
|
+
<span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
|
|
3549
|
+
<span class="cstat-no" title="statement not covered" > return Promise.reject(reason)</span>
|
|
2203
3550
|
}
|
|
2204
3551
|
const {
|
|
2205
3552
|
token,
|
|
@@ -2216,6 +3563,9 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2216
3563
|
userDevice,
|
|
2217
3564
|
userOS,
|
|
2218
3565
|
userState,
|
|
3566
|
+
canvasEnabled,
|
|
3567
|
+
canvasQuality,
|
|
3568
|
+
canvasFPS,
|
|
2219
3569
|
} = <span class="cstat-no" title="statement not covered" >r</span>
|
|
2220
3570
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
|
|
2221
3571
|
typeof token !== 'string' ||
|
|
@@ -2225,7 +3575,9 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2225
3575
|
typeof delay !== 'number' ||
|
|
2226
3576
|
(typeof beaconSizeLimit !== 'number' && typeof beaconSizeLimit !== 'undefined')
|
|
2227
3577
|
) {
|
|
2228
|
-
<span class="cstat-no" title="statement not covered"
|
|
3578
|
+
const reason = <span class="cstat-no" title="statement not covered" >`Incorrect server response: ${JSON.stringify(r)}`</span>
|
|
3579
|
+
<span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
|
|
3580
|
+
<span class="cstat-no" title="statement not covered" > return Promise.reject(reason)</span>
|
|
2229
3581
|
}
|
|
2230
3582
|
<span class="cstat-no" title="statement not covered" > this.delay = delay</span>
|
|
2231
3583
|
<span class="cstat-no" title="statement not covered" > this.session.setSessionToken(token)</span>
|
|
@@ -2242,8 +3594,15 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2242
3594
|
timestamp: startTimestamp || timestamp,
|
|
2243
3595
|
projectID,
|
|
2244
3596
|
})
|
|
3597
|
+
|
|
3598
|
+
<span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
|
|
3599
|
+
type: 'auth',
|
|
3600
|
+
token,
|
|
3601
|
+
beaconSizeLimit,
|
|
3602
|
+
})
|
|
3603
|
+
|
|
2245
3604
|
<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" >
|
|
3605
|
+
<span class="cstat-no" title="statement not covered" > this.debug.log('continuing session on new tab', this.session.getTabId())</span>
|
|
2247
3606
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
2248
3607
|
<span class="cstat-no" title="statement not covered" > this.send(TabChange(this.session.getTabId()))</span>
|
|
2249
3608
|
}
|
|
@@ -2253,42 +3612,126 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2253
3612
|
)
|
|
2254
3613
|
<span class="cstat-no" title="statement not covered" > this.localStorage.setItem(this.options.local_uuid_key, userUUID)</span>
|
|
2255
3614
|
|
|
2256
|
-
<span class="cstat-no" title="statement not covered" > this.worker.postMessage({</span>
|
|
2257
|
-
type: 'auth',
|
|
2258
|
-
token,
|
|
2259
|
-
beaconSizeLimit,
|
|
2260
|
-
})
|
|
2261
|
-
|
|
2262
3615
|
<span class="cstat-no" title="statement not covered" > this.compressionThreshold = compressionThreshold</span>
|
|
2263
|
-
|
|
2264
3616
|
const onStartInfo = <span class="cstat-no" title="statement not covered" >{ sessionToken: token, userUUID, sessionID }</span>
|
|
2265
|
-
|
|
2266
3617
|
// TODO: start as early as possible (before receiving the token)
|
|
3618
|
+
/** after start */
|
|
2267
3619
|
<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
|
-
<span class="cstat-no" title="statement not covered" > this.
|
|
3620
|
+
<span class="cstat-no" title="statement not covered" > void this.featureFlags.reloadFlags()</span>
|
|
3621
|
+
<span class="cstat-no" title="statement not covered" > await this.tagWatcher.fetchTags(this.options.ingestPoint, token)</span>
|
|
2270
3622
|
<span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.Active</span>
|
|
2271
3623
|
|
|
2272
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3624
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (canvasEnabled) {</span>
|
|
3625
|
+
<span class="cstat-no" title="statement not covered" > this.canvasRecorder =</span>
|
|
3626
|
+
this.canvasRecorder ??
|
|
3627
|
+
new CanvasRecorder(this, {
|
|
3628
|
+
fps: canvasFPS,
|
|
3629
|
+
quality: canvasQuality,
|
|
3630
|
+
isDebug: this.options.__save_canvas_locally,
|
|
3631
|
+
})
|
|
3632
|
+
<span class="cstat-no" title="statement not covered" > this.canvasRecorder.startTracking()</span>
|
|
3633
|
+
}
|
|
3634
|
+
|
|
3635
|
+
/** --------------- COLD START BUFFER ------------------*/
|
|
3636
|
+
<span class="cstat-no" title="statement not covered" > if (isColdStart) {</span>
|
|
3637
|
+
const biggestBuffer =
|
|
3638
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.length > this.bufferedMessages2.length</span>
|
|
3639
|
+
? this.bufferedMessages1
|
|
3640
|
+
: this.bufferedMessages2
|
|
3641
|
+
<span class="cstat-no" title="statement not covered" > while (biggestBuffer.length > 0) {</span>
|
|
3642
|
+
<span class="cstat-no" title="statement not covered" > await this.flushBuffer(biggestBuffer)</span>
|
|
3643
|
+
}
|
|
3644
|
+
<span class="cstat-no" title="statement not covered" > this.clearBuffers()</span>
|
|
3645
|
+
<span class="cstat-no" title="statement not covered" > this.commit()</span>
|
|
3646
|
+
/** --------------- COLD START BUFFER ------------------*/
|
|
3647
|
+
} else {
|
|
3648
|
+
<span class="cstat-no" title="statement not covered" > this.observer.observe()</span>
|
|
3649
|
+
<span class="cstat-no" title="statement not covered" > this.ticker.start()</span>
|
|
3650
|
+
}
|
|
3651
|
+
|
|
2273
3652
|
// get rid of onStart ?
|
|
2274
3653
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof this.options.onStart === 'function') {</span>
|
|
2275
3654
|
<span class="cstat-no" title="statement not covered" > this.options.onStart(onStartInfo)</span>
|
|
2276
3655
|
}
|
|
2277
3656
|
<span class="cstat-no" title="statement not covered" > this.restartAttempts = 0</span>
|
|
3657
|
+
|
|
3658
|
+
<span class="cstat-no" title="statement not covered" > this.uxtManager = this.uxtManager</span>
|
|
3659
|
+
? this.uxtManager
|
|
3660
|
+
: new UserTestManager(this, uxtStorageKey)
|
|
3661
|
+
let uxtId: number | undefined
|
|
3662
|
+
const savedUxtTag = <span class="cstat-no" title="statement not covered" >this.localStorage.getItem(uxtStorageKey)</span>
|
|
3663
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (savedUxtTag) {</span>
|
|
3664
|
+
<span class="cstat-no" title="statement not covered" > uxtId = parseInt(savedUxtTag, 10)</span>
|
|
3665
|
+
}
|
|
3666
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (location?.search) {</span>
|
|
3667
|
+
const query = <span class="cstat-no" title="statement not covered" >new URLSearchParams(location.search)</span>
|
|
3668
|
+
<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>
|
|
3669
|
+
const qId = <span class="cstat-no" title="statement not covered" >query.get('oruxt')</span>
|
|
3670
|
+
<span class="cstat-no" title="statement not covered" > uxtId = qId ? parseInt(qId, 10) : undefined</span>
|
|
3671
|
+
}
|
|
3672
|
+
}
|
|
3673
|
+
|
|
3674
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (uxtId) {</span>
|
|
3675
|
+
<span class="cstat-no" title="statement not covered" > if (!this.uxtManager.isActive) {</span>
|
|
3676
|
+
// eslint-disable-next-line
|
|
3677
|
+
<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>
|
|
3678
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (id) {</span>
|
|
3679
|
+
<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>
|
|
3680
|
+
}
|
|
3681
|
+
})
|
|
3682
|
+
} else {
|
|
3683
|
+
// @ts-ignore
|
|
3684
|
+
<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>
|
|
3685
|
+
}
|
|
3686
|
+
}
|
|
3687
|
+
|
|
2278
3688
|
<span class="cstat-no" title="statement not covered" > return SuccessfulStart(onStartInfo)</span>
|
|
2279
3689
|
})
|
|
2280
3690
|
.catch(<span class="fstat-no" title="function not covered" >(r</span>eason) => {
|
|
2281
3691
|
<span class="cstat-no" title="statement not covered" > this.stop()</span>
|
|
2282
3692
|
<span class="cstat-no" title="statement not covered" > this.session.reset()</span>
|
|
2283
3693
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (reason === CANCELED) {</span>
|
|
3694
|
+
<span class="cstat-no" title="statement not covered" > this.signalError(CANCELED, [])</span>
|
|
2284
3695
|
<span class="cstat-no" title="statement not covered" > return UnsuccessfulStart(CANCELED)</span>
|
|
2285
3696
|
}
|
|
2286
3697
|
|
|
2287
|
-
<span class="cstat-no" title="statement not covered" > this.notify.log('OpenReplay was unable to start. ', reason)</span>
|
|
2288
3698
|
<span class="cstat-no" title="statement not covered" > this._debug('session_start', reason)</span>
|
|
3699
|
+
<span class="cstat-no" title="statement not covered" > this.signalError(START_ERROR, [])</span>
|
|
2289
3700
|
<span class="cstat-no" title="statement not covered" > return UnsuccessfulStart(START_ERROR)</span>
|
|
2290
3701
|
})
|
|
2291
3702
|
}
|
|
3703
|
+
|
|
3704
|
+
<span class="cstat-no" title="statement not covered" > restartCanvasTracking = <span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
3705
|
+
<span class="cstat-no" title="statement not covered" > this.canvasRecorder?.restartTracking()</span>
|
|
3706
|
+
}
|
|
3707
|
+
|
|
3708
|
+
<span class="cstat-no" title="statement not covered" > flushBuffer = <span class="fstat-no" title="function not covered" >async (b</span>uffer: Message[]) =><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > {</span></span></span>
|
|
3709
|
+
<span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>es) => {</span>
|
|
3710
|
+
let ended = <span class="cstat-no" title="statement not covered" >false</span>
|
|
3711
|
+
const messagesBatch: Message[] = <span class="cstat-no" title="statement not covered" >[buffer.shift() as unknown as Message]</span>
|
|
3712
|
+
<span class="cstat-no" title="statement not covered" > while (!ended) {</span>
|
|
3713
|
+
const nextMsg = <span class="cstat-no" title="statement not covered" >buffer[0]</span>
|
|
3714
|
+
<span class="cstat-no" title="statement not covered" > if (!nextMsg || nextMsg[0] === MType.Timestamp) {</span>
|
|
3715
|
+
<span class="cstat-no" title="statement not covered" > ended = true</span>
|
|
3716
|
+
} else {
|
|
3717
|
+
<span class="cstat-no" title="statement not covered" > messagesBatch.push(buffer.shift() as unknown as Message)</span>
|
|
3718
|
+
}
|
|
3719
|
+
}
|
|
3720
|
+
<span class="cstat-no" title="statement not covered" > this.postToWorker(messagesBatch)</span>
|
|
3721
|
+
<span class="cstat-no" title="statement not covered" > res(null)</span>
|
|
3722
|
+
})
|
|
3723
|
+
}
|
|
3724
|
+
|
|
3725
|
+
<span class="cstat-no" title="statement not covered" > onUxtCb = []</span>
|
|
3726
|
+
|
|
3727
|
+
<span class="fstat-no" title="function not covered" > addOnUxtCb(</span>cb: (id: number) => void) {
|
|
3728
|
+
// @ts-ignore
|
|
3729
|
+
<span class="cstat-no" title="statement not covered" > this.onUxtCb.push(cb)</span>
|
|
3730
|
+
}
|
|
3731
|
+
|
|
3732
|
+
<span class="fstat-no" title="function not covered" > getUxtId(</span>): number | null {
|
|
3733
|
+
<span class="cstat-no" title="statement not covered" > return this.uxtManager?.getTestId()</span>
|
|
3734
|
+
}
|
|
2292
3735
|
|
|
2293
3736
|
/**
|
|
2294
3737
|
* basically we ask other tabs during constructor
|
|
@@ -2324,6 +3767,31 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2324
3767
|
<span class="cstat-no" title="statement not covered" > return this.session.getTabId()</span>
|
|
2325
3768
|
}
|
|
2326
3769
|
|
|
3770
|
+
<span class="fstat-no" title="function not covered" > clearBuffers(</span>) {
|
|
3771
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.length = 0</span>
|
|
3772
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages2.length = 0</span>
|
|
3773
|
+
}
|
|
3774
|
+
|
|
3775
|
+
/**
|
|
3776
|
+
* Creates a named hook that expects event name, data string and msg direction (up/down),
|
|
3777
|
+
* it will skip any message bigger than 5 mb or event name bigger than 255 symbols
|
|
3778
|
+
* @returns {(msgType: string, data: string, dir: "up" | "down") => void}
|
|
3779
|
+
* */
|
|
3780
|
+
<span class="fstat-no" title="function not covered" > trackWs(</span>channelName: string): (msgType: string, data: string, dir: 'up' | 'down') => void {
|
|
3781
|
+
const channel = <span class="cstat-no" title="statement not covered" >channelName</span>
|
|
3782
|
+
<span class="cstat-no" title="statement not covered" > return <span class="fstat-no" title="function not covered" >(m</span>sgType: string, data: string, dir: 'up' | 'down' = <span class="branch-0 cbranch-no" title="branch not covered" >'down')</span> => {</span>
|
|
3783
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
|
|
3784
|
+
typeof msgType !== 'string' ||
|
|
3785
|
+
typeof data !== 'string' ||
|
|
3786
|
+
data.length > 5 * 1024 * 1024 ||
|
|
3787
|
+
msgType.length > 255
|
|
3788
|
+
) {
|
|
3789
|
+
<span class="cstat-no" title="statement not covered" > return</span>
|
|
3790
|
+
}
|
|
3791
|
+
<span class="cstat-no" title="statement not covered" > this.send(WSChannel('websocket', channel, data, this.timestamp(), dir, msgType))</span>
|
|
3792
|
+
}
|
|
3793
|
+
}
|
|
3794
|
+
|
|
2327
3795
|
<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
3796
|
<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
3797
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
@@ -2333,10 +3801,12 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2333
3801
|
<span class="cstat-no" title="statement not covered" > this.nodes.clear()</span>
|
|
2334
3802
|
<span class="cstat-no" title="statement not covered" > this.ticker.stop()</span>
|
|
2335
3803
|
<span class="cstat-no" title="statement not covered" > this.stopCallbacks.forEach(<span class="fstat-no" title="function not covered" >(c</span>b) => <span class="cstat-no" title="statement not covered" >cb())</span></span>
|
|
2336
|
-
<span class="cstat-no" title="statement not covered" > this.
|
|
3804
|
+
<span class="cstat-no" title="statement not covered" > this.debug.log('OpenReplay tracking stopped.')</span>
|
|
3805
|
+
<span class="cstat-no" title="statement not covered" > this.tagWatcher.clear()</span>
|
|
2337
3806
|
<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
3807
|
<span class="cstat-no" title="statement not covered" > this.worker.postMessage('stop')</span>
|
|
2339
3808
|
}
|
|
3809
|
+
<span class="cstat-no" title="statement not covered" > this.canvasRecorder?.clear()</span>
|
|
2340
3810
|
} finally {
|
|
2341
3811
|
<span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.NotActive</span>
|
|
2342
3812
|
}
|
|
@@ -2350,7 +3820,7 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2350
3820
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
2351
3821
|
Code coverage generated by
|
|
2352
3822
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
2353
|
-
at
|
|
3823
|
+
at 2024-01-23T12:19:37.435Z
|
|
2354
3824
|
</div>
|
|
2355
3825
|
<script src="../../prettify.js"></script>
|
|
2356
3826
|
<script>
|