@featurevisor/sdk 1.29.3 → 1.30.1

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.
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">89.73% </span>
26
+ <span class="strong">82.73% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>376/419</span>
28
+ <span class='fraction'>139/168</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">79.14% </span>
33
+ <span class="strong">55.07% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>167/211</span>
35
+ <span class='fraction'>38/69</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">88.46% </span>
40
+ <span class="strong">82.05% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>46/52</span>
42
+ <span class='fraction'>32/39</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">89.83% </span>
47
+ <span class="strong">83.23% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>371/413</span>
49
+ <span class='fraction'>139/167</span>
50
50
  </div>
51
51
 
52
52
 
@@ -651,779 +651,7 @@
651
651
  <a name='L586'></a><a href='#L586'>586</a>
652
652
  <a name='L587'></a><a href='#L587'>587</a>
653
653
  <a name='L588'></a><a href='#L588'>588</a>
654
- <a name='L589'></a><a href='#L589'>589</a>
655
- <a name='L590'></a><a href='#L590'>590</a>
656
- <a name='L591'></a><a href='#L591'>591</a>
657
- <a name='L592'></a><a href='#L592'>592</a>
658
- <a name='L593'></a><a href='#L593'>593</a>
659
- <a name='L594'></a><a href='#L594'>594</a>
660
- <a name='L595'></a><a href='#L595'>595</a>
661
- <a name='L596'></a><a href='#L596'>596</a>
662
- <a name='L597'></a><a href='#L597'>597</a>
663
- <a name='L598'></a><a href='#L598'>598</a>
664
- <a name='L599'></a><a href='#L599'>599</a>
665
- <a name='L600'></a><a href='#L600'>600</a>
666
- <a name='L601'></a><a href='#L601'>601</a>
667
- <a name='L602'></a><a href='#L602'>602</a>
668
- <a name='L603'></a><a href='#L603'>603</a>
669
- <a name='L604'></a><a href='#L604'>604</a>
670
- <a name='L605'></a><a href='#L605'>605</a>
671
- <a name='L606'></a><a href='#L606'>606</a>
672
- <a name='L607'></a><a href='#L607'>607</a>
673
- <a name='L608'></a><a href='#L608'>608</a>
674
- <a name='L609'></a><a href='#L609'>609</a>
675
- <a name='L610'></a><a href='#L610'>610</a>
676
- <a name='L611'></a><a href='#L611'>611</a>
677
- <a name='L612'></a><a href='#L612'>612</a>
678
- <a name='L613'></a><a href='#L613'>613</a>
679
- <a name='L614'></a><a href='#L614'>614</a>
680
- <a name='L615'></a><a href='#L615'>615</a>
681
- <a name='L616'></a><a href='#L616'>616</a>
682
- <a name='L617'></a><a href='#L617'>617</a>
683
- <a name='L618'></a><a href='#L618'>618</a>
684
- <a name='L619'></a><a href='#L619'>619</a>
685
- <a name='L620'></a><a href='#L620'>620</a>
686
- <a name='L621'></a><a href='#L621'>621</a>
687
- <a name='L622'></a><a href='#L622'>622</a>
688
- <a name='L623'></a><a href='#L623'>623</a>
689
- <a name='L624'></a><a href='#L624'>624</a>
690
- <a name='L625'></a><a href='#L625'>625</a>
691
- <a name='L626'></a><a href='#L626'>626</a>
692
- <a name='L627'></a><a href='#L627'>627</a>
693
- <a name='L628'></a><a href='#L628'>628</a>
694
- <a name='L629'></a><a href='#L629'>629</a>
695
- <a name='L630'></a><a href='#L630'>630</a>
696
- <a name='L631'></a><a href='#L631'>631</a>
697
- <a name='L632'></a><a href='#L632'>632</a>
698
- <a name='L633'></a><a href='#L633'>633</a>
699
- <a name='L634'></a><a href='#L634'>634</a>
700
- <a name='L635'></a><a href='#L635'>635</a>
701
- <a name='L636'></a><a href='#L636'>636</a>
702
- <a name='L637'></a><a href='#L637'>637</a>
703
- <a name='L638'></a><a href='#L638'>638</a>
704
- <a name='L639'></a><a href='#L639'>639</a>
705
- <a name='L640'></a><a href='#L640'>640</a>
706
- <a name='L641'></a><a href='#L641'>641</a>
707
- <a name='L642'></a><a href='#L642'>642</a>
708
- <a name='L643'></a><a href='#L643'>643</a>
709
- <a name='L644'></a><a href='#L644'>644</a>
710
- <a name='L645'></a><a href='#L645'>645</a>
711
- <a name='L646'></a><a href='#L646'>646</a>
712
- <a name='L647'></a><a href='#L647'>647</a>
713
- <a name='L648'></a><a href='#L648'>648</a>
714
- <a name='L649'></a><a href='#L649'>649</a>
715
- <a name='L650'></a><a href='#L650'>650</a>
716
- <a name='L651'></a><a href='#L651'>651</a>
717
- <a name='L652'></a><a href='#L652'>652</a>
718
- <a name='L653'></a><a href='#L653'>653</a>
719
- <a name='L654'></a><a href='#L654'>654</a>
720
- <a name='L655'></a><a href='#L655'>655</a>
721
- <a name='L656'></a><a href='#L656'>656</a>
722
- <a name='L657'></a><a href='#L657'>657</a>
723
- <a name='L658'></a><a href='#L658'>658</a>
724
- <a name='L659'></a><a href='#L659'>659</a>
725
- <a name='L660'></a><a href='#L660'>660</a>
726
- <a name='L661'></a><a href='#L661'>661</a>
727
- <a name='L662'></a><a href='#L662'>662</a>
728
- <a name='L663'></a><a href='#L663'>663</a>
729
- <a name='L664'></a><a href='#L664'>664</a>
730
- <a name='L665'></a><a href='#L665'>665</a>
731
- <a name='L666'></a><a href='#L666'>666</a>
732
- <a name='L667'></a><a href='#L667'>667</a>
733
- <a name='L668'></a><a href='#L668'>668</a>
734
- <a name='L669'></a><a href='#L669'>669</a>
735
- <a name='L670'></a><a href='#L670'>670</a>
736
- <a name='L671'></a><a href='#L671'>671</a>
737
- <a name='L672'></a><a href='#L672'>672</a>
738
- <a name='L673'></a><a href='#L673'>673</a>
739
- <a name='L674'></a><a href='#L674'>674</a>
740
- <a name='L675'></a><a href='#L675'>675</a>
741
- <a name='L676'></a><a href='#L676'>676</a>
742
- <a name='L677'></a><a href='#L677'>677</a>
743
- <a name='L678'></a><a href='#L678'>678</a>
744
- <a name='L679'></a><a href='#L679'>679</a>
745
- <a name='L680'></a><a href='#L680'>680</a>
746
- <a name='L681'></a><a href='#L681'>681</a>
747
- <a name='L682'></a><a href='#L682'>682</a>
748
- <a name='L683'></a><a href='#L683'>683</a>
749
- <a name='L684'></a><a href='#L684'>684</a>
750
- <a name='L685'></a><a href='#L685'>685</a>
751
- <a name='L686'></a><a href='#L686'>686</a>
752
- <a name='L687'></a><a href='#L687'>687</a>
753
- <a name='L688'></a><a href='#L688'>688</a>
754
- <a name='L689'></a><a href='#L689'>689</a>
755
- <a name='L690'></a><a href='#L690'>690</a>
756
- <a name='L691'></a><a href='#L691'>691</a>
757
- <a name='L692'></a><a href='#L692'>692</a>
758
- <a name='L693'></a><a href='#L693'>693</a>
759
- <a name='L694'></a><a href='#L694'>694</a>
760
- <a name='L695'></a><a href='#L695'>695</a>
761
- <a name='L696'></a><a href='#L696'>696</a>
762
- <a name='L697'></a><a href='#L697'>697</a>
763
- <a name='L698'></a><a href='#L698'>698</a>
764
- <a name='L699'></a><a href='#L699'>699</a>
765
- <a name='L700'></a><a href='#L700'>700</a>
766
- <a name='L701'></a><a href='#L701'>701</a>
767
- <a name='L702'></a><a href='#L702'>702</a>
768
- <a name='L703'></a><a href='#L703'>703</a>
769
- <a name='L704'></a><a href='#L704'>704</a>
770
- <a name='L705'></a><a href='#L705'>705</a>
771
- <a name='L706'></a><a href='#L706'>706</a>
772
- <a name='L707'></a><a href='#L707'>707</a>
773
- <a name='L708'></a><a href='#L708'>708</a>
774
- <a name='L709'></a><a href='#L709'>709</a>
775
- <a name='L710'></a><a href='#L710'>710</a>
776
- <a name='L711'></a><a href='#L711'>711</a>
777
- <a name='L712'></a><a href='#L712'>712</a>
778
- <a name='L713'></a><a href='#L713'>713</a>
779
- <a name='L714'></a><a href='#L714'>714</a>
780
- <a name='L715'></a><a href='#L715'>715</a>
781
- <a name='L716'></a><a href='#L716'>716</a>
782
- <a name='L717'></a><a href='#L717'>717</a>
783
- <a name='L718'></a><a href='#L718'>718</a>
784
- <a name='L719'></a><a href='#L719'>719</a>
785
- <a name='L720'></a><a href='#L720'>720</a>
786
- <a name='L721'></a><a href='#L721'>721</a>
787
- <a name='L722'></a><a href='#L722'>722</a>
788
- <a name='L723'></a><a href='#L723'>723</a>
789
- <a name='L724'></a><a href='#L724'>724</a>
790
- <a name='L725'></a><a href='#L725'>725</a>
791
- <a name='L726'></a><a href='#L726'>726</a>
792
- <a name='L727'></a><a href='#L727'>727</a>
793
- <a name='L728'></a><a href='#L728'>728</a>
794
- <a name='L729'></a><a href='#L729'>729</a>
795
- <a name='L730'></a><a href='#L730'>730</a>
796
- <a name='L731'></a><a href='#L731'>731</a>
797
- <a name='L732'></a><a href='#L732'>732</a>
798
- <a name='L733'></a><a href='#L733'>733</a>
799
- <a name='L734'></a><a href='#L734'>734</a>
800
- <a name='L735'></a><a href='#L735'>735</a>
801
- <a name='L736'></a><a href='#L736'>736</a>
802
- <a name='L737'></a><a href='#L737'>737</a>
803
- <a name='L738'></a><a href='#L738'>738</a>
804
- <a name='L739'></a><a href='#L739'>739</a>
805
- <a name='L740'></a><a href='#L740'>740</a>
806
- <a name='L741'></a><a href='#L741'>741</a>
807
- <a name='L742'></a><a href='#L742'>742</a>
808
- <a name='L743'></a><a href='#L743'>743</a>
809
- <a name='L744'></a><a href='#L744'>744</a>
810
- <a name='L745'></a><a href='#L745'>745</a>
811
- <a name='L746'></a><a href='#L746'>746</a>
812
- <a name='L747'></a><a href='#L747'>747</a>
813
- <a name='L748'></a><a href='#L748'>748</a>
814
- <a name='L749'></a><a href='#L749'>749</a>
815
- <a name='L750'></a><a href='#L750'>750</a>
816
- <a name='L751'></a><a href='#L751'>751</a>
817
- <a name='L752'></a><a href='#L752'>752</a>
818
- <a name='L753'></a><a href='#L753'>753</a>
819
- <a name='L754'></a><a href='#L754'>754</a>
820
- <a name='L755'></a><a href='#L755'>755</a>
821
- <a name='L756'></a><a href='#L756'>756</a>
822
- <a name='L757'></a><a href='#L757'>757</a>
823
- <a name='L758'></a><a href='#L758'>758</a>
824
- <a name='L759'></a><a href='#L759'>759</a>
825
- <a name='L760'></a><a href='#L760'>760</a>
826
- <a name='L761'></a><a href='#L761'>761</a>
827
- <a name='L762'></a><a href='#L762'>762</a>
828
- <a name='L763'></a><a href='#L763'>763</a>
829
- <a name='L764'></a><a href='#L764'>764</a>
830
- <a name='L765'></a><a href='#L765'>765</a>
831
- <a name='L766'></a><a href='#L766'>766</a>
832
- <a name='L767'></a><a href='#L767'>767</a>
833
- <a name='L768'></a><a href='#L768'>768</a>
834
- <a name='L769'></a><a href='#L769'>769</a>
835
- <a name='L770'></a><a href='#L770'>770</a>
836
- <a name='L771'></a><a href='#L771'>771</a>
837
- <a name='L772'></a><a href='#L772'>772</a>
838
- <a name='L773'></a><a href='#L773'>773</a>
839
- <a name='L774'></a><a href='#L774'>774</a>
840
- <a name='L775'></a><a href='#L775'>775</a>
841
- <a name='L776'></a><a href='#L776'>776</a>
842
- <a name='L777'></a><a href='#L777'>777</a>
843
- <a name='L778'></a><a href='#L778'>778</a>
844
- <a name='L779'></a><a href='#L779'>779</a>
845
- <a name='L780'></a><a href='#L780'>780</a>
846
- <a name='L781'></a><a href='#L781'>781</a>
847
- <a name='L782'></a><a href='#L782'>782</a>
848
- <a name='L783'></a><a href='#L783'>783</a>
849
- <a name='L784'></a><a href='#L784'>784</a>
850
- <a name='L785'></a><a href='#L785'>785</a>
851
- <a name='L786'></a><a href='#L786'>786</a>
852
- <a name='L787'></a><a href='#L787'>787</a>
853
- <a name='L788'></a><a href='#L788'>788</a>
854
- <a name='L789'></a><a href='#L789'>789</a>
855
- <a name='L790'></a><a href='#L790'>790</a>
856
- <a name='L791'></a><a href='#L791'>791</a>
857
- <a name='L792'></a><a href='#L792'>792</a>
858
- <a name='L793'></a><a href='#L793'>793</a>
859
- <a name='L794'></a><a href='#L794'>794</a>
860
- <a name='L795'></a><a href='#L795'>795</a>
861
- <a name='L796'></a><a href='#L796'>796</a>
862
- <a name='L797'></a><a href='#L797'>797</a>
863
- <a name='L798'></a><a href='#L798'>798</a>
864
- <a name='L799'></a><a href='#L799'>799</a>
865
- <a name='L800'></a><a href='#L800'>800</a>
866
- <a name='L801'></a><a href='#L801'>801</a>
867
- <a name='L802'></a><a href='#L802'>802</a>
868
- <a name='L803'></a><a href='#L803'>803</a>
869
- <a name='L804'></a><a href='#L804'>804</a>
870
- <a name='L805'></a><a href='#L805'>805</a>
871
- <a name='L806'></a><a href='#L806'>806</a>
872
- <a name='L807'></a><a href='#L807'>807</a>
873
- <a name='L808'></a><a href='#L808'>808</a>
874
- <a name='L809'></a><a href='#L809'>809</a>
875
- <a name='L810'></a><a href='#L810'>810</a>
876
- <a name='L811'></a><a href='#L811'>811</a>
877
- <a name='L812'></a><a href='#L812'>812</a>
878
- <a name='L813'></a><a href='#L813'>813</a>
879
- <a name='L814'></a><a href='#L814'>814</a>
880
- <a name='L815'></a><a href='#L815'>815</a>
881
- <a name='L816'></a><a href='#L816'>816</a>
882
- <a name='L817'></a><a href='#L817'>817</a>
883
- <a name='L818'></a><a href='#L818'>818</a>
884
- <a name='L819'></a><a href='#L819'>819</a>
885
- <a name='L820'></a><a href='#L820'>820</a>
886
- <a name='L821'></a><a href='#L821'>821</a>
887
- <a name='L822'></a><a href='#L822'>822</a>
888
- <a name='L823'></a><a href='#L823'>823</a>
889
- <a name='L824'></a><a href='#L824'>824</a>
890
- <a name='L825'></a><a href='#L825'>825</a>
891
- <a name='L826'></a><a href='#L826'>826</a>
892
- <a name='L827'></a><a href='#L827'>827</a>
893
- <a name='L828'></a><a href='#L828'>828</a>
894
- <a name='L829'></a><a href='#L829'>829</a>
895
- <a name='L830'></a><a href='#L830'>830</a>
896
- <a name='L831'></a><a href='#L831'>831</a>
897
- <a name='L832'></a><a href='#L832'>832</a>
898
- <a name='L833'></a><a href='#L833'>833</a>
899
- <a name='L834'></a><a href='#L834'>834</a>
900
- <a name='L835'></a><a href='#L835'>835</a>
901
- <a name='L836'></a><a href='#L836'>836</a>
902
- <a name='L837'></a><a href='#L837'>837</a>
903
- <a name='L838'></a><a href='#L838'>838</a>
904
- <a name='L839'></a><a href='#L839'>839</a>
905
- <a name='L840'></a><a href='#L840'>840</a>
906
- <a name='L841'></a><a href='#L841'>841</a>
907
- <a name='L842'></a><a href='#L842'>842</a>
908
- <a name='L843'></a><a href='#L843'>843</a>
909
- <a name='L844'></a><a href='#L844'>844</a>
910
- <a name='L845'></a><a href='#L845'>845</a>
911
- <a name='L846'></a><a href='#L846'>846</a>
912
- <a name='L847'></a><a href='#L847'>847</a>
913
- <a name='L848'></a><a href='#L848'>848</a>
914
- <a name='L849'></a><a href='#L849'>849</a>
915
- <a name='L850'></a><a href='#L850'>850</a>
916
- <a name='L851'></a><a href='#L851'>851</a>
917
- <a name='L852'></a><a href='#L852'>852</a>
918
- <a name='L853'></a><a href='#L853'>853</a>
919
- <a name='L854'></a><a href='#L854'>854</a>
920
- <a name='L855'></a><a href='#L855'>855</a>
921
- <a name='L856'></a><a href='#L856'>856</a>
922
- <a name='L857'></a><a href='#L857'>857</a>
923
- <a name='L858'></a><a href='#L858'>858</a>
924
- <a name='L859'></a><a href='#L859'>859</a>
925
- <a name='L860'></a><a href='#L860'>860</a>
926
- <a name='L861'></a><a href='#L861'>861</a>
927
- <a name='L862'></a><a href='#L862'>862</a>
928
- <a name='L863'></a><a href='#L863'>863</a>
929
- <a name='L864'></a><a href='#L864'>864</a>
930
- <a name='L865'></a><a href='#L865'>865</a>
931
- <a name='L866'></a><a href='#L866'>866</a>
932
- <a name='L867'></a><a href='#L867'>867</a>
933
- <a name='L868'></a><a href='#L868'>868</a>
934
- <a name='L869'></a><a href='#L869'>869</a>
935
- <a name='L870'></a><a href='#L870'>870</a>
936
- <a name='L871'></a><a href='#L871'>871</a>
937
- <a name='L872'></a><a href='#L872'>872</a>
938
- <a name='L873'></a><a href='#L873'>873</a>
939
- <a name='L874'></a><a href='#L874'>874</a>
940
- <a name='L875'></a><a href='#L875'>875</a>
941
- <a name='L876'></a><a href='#L876'>876</a>
942
- <a name='L877'></a><a href='#L877'>877</a>
943
- <a name='L878'></a><a href='#L878'>878</a>
944
- <a name='L879'></a><a href='#L879'>879</a>
945
- <a name='L880'></a><a href='#L880'>880</a>
946
- <a name='L881'></a><a href='#L881'>881</a>
947
- <a name='L882'></a><a href='#L882'>882</a>
948
- <a name='L883'></a><a href='#L883'>883</a>
949
- <a name='L884'></a><a href='#L884'>884</a>
950
- <a name='L885'></a><a href='#L885'>885</a>
951
- <a name='L886'></a><a href='#L886'>886</a>
952
- <a name='L887'></a><a href='#L887'>887</a>
953
- <a name='L888'></a><a href='#L888'>888</a>
954
- <a name='L889'></a><a href='#L889'>889</a>
955
- <a name='L890'></a><a href='#L890'>890</a>
956
- <a name='L891'></a><a href='#L891'>891</a>
957
- <a name='L892'></a><a href='#L892'>892</a>
958
- <a name='L893'></a><a href='#L893'>893</a>
959
- <a name='L894'></a><a href='#L894'>894</a>
960
- <a name='L895'></a><a href='#L895'>895</a>
961
- <a name='L896'></a><a href='#L896'>896</a>
962
- <a name='L897'></a><a href='#L897'>897</a>
963
- <a name='L898'></a><a href='#L898'>898</a>
964
- <a name='L899'></a><a href='#L899'>899</a>
965
- <a name='L900'></a><a href='#L900'>900</a>
966
- <a name='L901'></a><a href='#L901'>901</a>
967
- <a name='L902'></a><a href='#L902'>902</a>
968
- <a name='L903'></a><a href='#L903'>903</a>
969
- <a name='L904'></a><a href='#L904'>904</a>
970
- <a name='L905'></a><a href='#L905'>905</a>
971
- <a name='L906'></a><a href='#L906'>906</a>
972
- <a name='L907'></a><a href='#L907'>907</a>
973
- <a name='L908'></a><a href='#L908'>908</a>
974
- <a name='L909'></a><a href='#L909'>909</a>
975
- <a name='L910'></a><a href='#L910'>910</a>
976
- <a name='L911'></a><a href='#L911'>911</a>
977
- <a name='L912'></a><a href='#L912'>912</a>
978
- <a name='L913'></a><a href='#L913'>913</a>
979
- <a name='L914'></a><a href='#L914'>914</a>
980
- <a name='L915'></a><a href='#L915'>915</a>
981
- <a name='L916'></a><a href='#L916'>916</a>
982
- <a name='L917'></a><a href='#L917'>917</a>
983
- <a name='L918'></a><a href='#L918'>918</a>
984
- <a name='L919'></a><a href='#L919'>919</a>
985
- <a name='L920'></a><a href='#L920'>920</a>
986
- <a name='L921'></a><a href='#L921'>921</a>
987
- <a name='L922'></a><a href='#L922'>922</a>
988
- <a name='L923'></a><a href='#L923'>923</a>
989
- <a name='L924'></a><a href='#L924'>924</a>
990
- <a name='L925'></a><a href='#L925'>925</a>
991
- <a name='L926'></a><a href='#L926'>926</a>
992
- <a name='L927'></a><a href='#L927'>927</a>
993
- <a name='L928'></a><a href='#L928'>928</a>
994
- <a name='L929'></a><a href='#L929'>929</a>
995
- <a name='L930'></a><a href='#L930'>930</a>
996
- <a name='L931'></a><a href='#L931'>931</a>
997
- <a name='L932'></a><a href='#L932'>932</a>
998
- <a name='L933'></a><a href='#L933'>933</a>
999
- <a name='L934'></a><a href='#L934'>934</a>
1000
- <a name='L935'></a><a href='#L935'>935</a>
1001
- <a name='L936'></a><a href='#L936'>936</a>
1002
- <a name='L937'></a><a href='#L937'>937</a>
1003
- <a name='L938'></a><a href='#L938'>938</a>
1004
- <a name='L939'></a><a href='#L939'>939</a>
1005
- <a name='L940'></a><a href='#L940'>940</a>
1006
- <a name='L941'></a><a href='#L941'>941</a>
1007
- <a name='L942'></a><a href='#L942'>942</a>
1008
- <a name='L943'></a><a href='#L943'>943</a>
1009
- <a name='L944'></a><a href='#L944'>944</a>
1010
- <a name='L945'></a><a href='#L945'>945</a>
1011
- <a name='L946'></a><a href='#L946'>946</a>
1012
- <a name='L947'></a><a href='#L947'>947</a>
1013
- <a name='L948'></a><a href='#L948'>948</a>
1014
- <a name='L949'></a><a href='#L949'>949</a>
1015
- <a name='L950'></a><a href='#L950'>950</a>
1016
- <a name='L951'></a><a href='#L951'>951</a>
1017
- <a name='L952'></a><a href='#L952'>952</a>
1018
- <a name='L953'></a><a href='#L953'>953</a>
1019
- <a name='L954'></a><a href='#L954'>954</a>
1020
- <a name='L955'></a><a href='#L955'>955</a>
1021
- <a name='L956'></a><a href='#L956'>956</a>
1022
- <a name='L957'></a><a href='#L957'>957</a>
1023
- <a name='L958'></a><a href='#L958'>958</a>
1024
- <a name='L959'></a><a href='#L959'>959</a>
1025
- <a name='L960'></a><a href='#L960'>960</a>
1026
- <a name='L961'></a><a href='#L961'>961</a>
1027
- <a name='L962'></a><a href='#L962'>962</a>
1028
- <a name='L963'></a><a href='#L963'>963</a>
1029
- <a name='L964'></a><a href='#L964'>964</a>
1030
- <a name='L965'></a><a href='#L965'>965</a>
1031
- <a name='L966'></a><a href='#L966'>966</a>
1032
- <a name='L967'></a><a href='#L967'>967</a>
1033
- <a name='L968'></a><a href='#L968'>968</a>
1034
- <a name='L969'></a><a href='#L969'>969</a>
1035
- <a name='L970'></a><a href='#L970'>970</a>
1036
- <a name='L971'></a><a href='#L971'>971</a>
1037
- <a name='L972'></a><a href='#L972'>972</a>
1038
- <a name='L973'></a><a href='#L973'>973</a>
1039
- <a name='L974'></a><a href='#L974'>974</a>
1040
- <a name='L975'></a><a href='#L975'>975</a>
1041
- <a name='L976'></a><a href='#L976'>976</a>
1042
- <a name='L977'></a><a href='#L977'>977</a>
1043
- <a name='L978'></a><a href='#L978'>978</a>
1044
- <a name='L979'></a><a href='#L979'>979</a>
1045
- <a name='L980'></a><a href='#L980'>980</a>
1046
- <a name='L981'></a><a href='#L981'>981</a>
1047
- <a name='L982'></a><a href='#L982'>982</a>
1048
- <a name='L983'></a><a href='#L983'>983</a>
1049
- <a name='L984'></a><a href='#L984'>984</a>
1050
- <a name='L985'></a><a href='#L985'>985</a>
1051
- <a name='L986'></a><a href='#L986'>986</a>
1052
- <a name='L987'></a><a href='#L987'>987</a>
1053
- <a name='L988'></a><a href='#L988'>988</a>
1054
- <a name='L989'></a><a href='#L989'>989</a>
1055
- <a name='L990'></a><a href='#L990'>990</a>
1056
- <a name='L991'></a><a href='#L991'>991</a>
1057
- <a name='L992'></a><a href='#L992'>992</a>
1058
- <a name='L993'></a><a href='#L993'>993</a>
1059
- <a name='L994'></a><a href='#L994'>994</a>
1060
- <a name='L995'></a><a href='#L995'>995</a>
1061
- <a name='L996'></a><a href='#L996'>996</a>
1062
- <a name='L997'></a><a href='#L997'>997</a>
1063
- <a name='L998'></a><a href='#L998'>998</a>
1064
- <a name='L999'></a><a href='#L999'>999</a>
1065
- <a name='L1000'></a><a href='#L1000'>1000</a>
1066
- <a name='L1001'></a><a href='#L1001'>1001</a>
1067
- <a name='L1002'></a><a href='#L1002'>1002</a>
1068
- <a name='L1003'></a><a href='#L1003'>1003</a>
1069
- <a name='L1004'></a><a href='#L1004'>1004</a>
1070
- <a name='L1005'></a><a href='#L1005'>1005</a>
1071
- <a name='L1006'></a><a href='#L1006'>1006</a>
1072
- <a name='L1007'></a><a href='#L1007'>1007</a>
1073
- <a name='L1008'></a><a href='#L1008'>1008</a>
1074
- <a name='L1009'></a><a href='#L1009'>1009</a>
1075
- <a name='L1010'></a><a href='#L1010'>1010</a>
1076
- <a name='L1011'></a><a href='#L1011'>1011</a>
1077
- <a name='L1012'></a><a href='#L1012'>1012</a>
1078
- <a name='L1013'></a><a href='#L1013'>1013</a>
1079
- <a name='L1014'></a><a href='#L1014'>1014</a>
1080
- <a name='L1015'></a><a href='#L1015'>1015</a>
1081
- <a name='L1016'></a><a href='#L1016'>1016</a>
1082
- <a name='L1017'></a><a href='#L1017'>1017</a>
1083
- <a name='L1018'></a><a href='#L1018'>1018</a>
1084
- <a name='L1019'></a><a href='#L1019'>1019</a>
1085
- <a name='L1020'></a><a href='#L1020'>1020</a>
1086
- <a name='L1021'></a><a href='#L1021'>1021</a>
1087
- <a name='L1022'></a><a href='#L1022'>1022</a>
1088
- <a name='L1023'></a><a href='#L1023'>1023</a>
1089
- <a name='L1024'></a><a href='#L1024'>1024</a>
1090
- <a name='L1025'></a><a href='#L1025'>1025</a>
1091
- <a name='L1026'></a><a href='#L1026'>1026</a>
1092
- <a name='L1027'></a><a href='#L1027'>1027</a>
1093
- <a name='L1028'></a><a href='#L1028'>1028</a>
1094
- <a name='L1029'></a><a href='#L1029'>1029</a>
1095
- <a name='L1030'></a><a href='#L1030'>1030</a>
1096
- <a name='L1031'></a><a href='#L1031'>1031</a>
1097
- <a name='L1032'></a><a href='#L1032'>1032</a>
1098
- <a name='L1033'></a><a href='#L1033'>1033</a>
1099
- <a name='L1034'></a><a href='#L1034'>1034</a>
1100
- <a name='L1035'></a><a href='#L1035'>1035</a>
1101
- <a name='L1036'></a><a href='#L1036'>1036</a>
1102
- <a name='L1037'></a><a href='#L1037'>1037</a>
1103
- <a name='L1038'></a><a href='#L1038'>1038</a>
1104
- <a name='L1039'></a><a href='#L1039'>1039</a>
1105
- <a name='L1040'></a><a href='#L1040'>1040</a>
1106
- <a name='L1041'></a><a href='#L1041'>1041</a>
1107
- <a name='L1042'></a><a href='#L1042'>1042</a>
1108
- <a name='L1043'></a><a href='#L1043'>1043</a>
1109
- <a name='L1044'></a><a href='#L1044'>1044</a>
1110
- <a name='L1045'></a><a href='#L1045'>1045</a>
1111
- <a name='L1046'></a><a href='#L1046'>1046</a>
1112
- <a name='L1047'></a><a href='#L1047'>1047</a>
1113
- <a name='L1048'></a><a href='#L1048'>1048</a>
1114
- <a name='L1049'></a><a href='#L1049'>1049</a>
1115
- <a name='L1050'></a><a href='#L1050'>1050</a>
1116
- <a name='L1051'></a><a href='#L1051'>1051</a>
1117
- <a name='L1052'></a><a href='#L1052'>1052</a>
1118
- <a name='L1053'></a><a href='#L1053'>1053</a>
1119
- <a name='L1054'></a><a href='#L1054'>1054</a>
1120
- <a name='L1055'></a><a href='#L1055'>1055</a>
1121
- <a name='L1056'></a><a href='#L1056'>1056</a>
1122
- <a name='L1057'></a><a href='#L1057'>1057</a>
1123
- <a name='L1058'></a><a href='#L1058'>1058</a>
1124
- <a name='L1059'></a><a href='#L1059'>1059</a>
1125
- <a name='L1060'></a><a href='#L1060'>1060</a>
1126
- <a name='L1061'></a><a href='#L1061'>1061</a>
1127
- <a name='L1062'></a><a href='#L1062'>1062</a>
1128
- <a name='L1063'></a><a href='#L1063'>1063</a>
1129
- <a name='L1064'></a><a href='#L1064'>1064</a>
1130
- <a name='L1065'></a><a href='#L1065'>1065</a>
1131
- <a name='L1066'></a><a href='#L1066'>1066</a>
1132
- <a name='L1067'></a><a href='#L1067'>1067</a>
1133
- <a name='L1068'></a><a href='#L1068'>1068</a>
1134
- <a name='L1069'></a><a href='#L1069'>1069</a>
1135
- <a name='L1070'></a><a href='#L1070'>1070</a>
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>
1317
- <a name='L1252'></a><a href='#L1252'>1252</a>
1318
- <a name='L1253'></a><a href='#L1253'>1253</a>
1319
- <a name='L1254'></a><a href='#L1254'>1254</a>
1320
- <a name='L1255'></a><a href='#L1255'>1255</a>
1321
- <a name='L1256'></a><a href='#L1256'>1256</a>
1322
- <a name='L1257'></a><a href='#L1257'>1257</a>
1323
- <a name='L1258'></a><a href='#L1258'>1258</a>
1324
- <a name='L1259'></a><a href='#L1259'>1259</a>
1325
- <a name='L1260'></a><a href='#L1260'>1260</a>
1326
- <a name='L1261'></a><a href='#L1261'>1261</a>
1327
- <a name='L1262'></a><a href='#L1262'>1262</a>
1328
- <a name='L1263'></a><a href='#L1263'>1263</a>
1329
- <a name='L1264'></a><a href='#L1264'>1264</a>
1330
- <a name='L1265'></a><a href='#L1265'>1265</a>
1331
- <a name='L1266'></a><a href='#L1266'>1266</a>
1332
- <a name='L1267'></a><a href='#L1267'>1267</a>
1333
- <a name='L1268'></a><a href='#L1268'>1268</a>
1334
- <a name='L1269'></a><a href='#L1269'>1269</a>
1335
- <a name='L1270'></a><a href='#L1270'>1270</a>
1336
- <a name='L1271'></a><a href='#L1271'>1271</a>
1337
- <a name='L1272'></a><a href='#L1272'>1272</a>
1338
- <a name='L1273'></a><a href='#L1273'>1273</a>
1339
- <a name='L1274'></a><a href='#L1274'>1274</a>
1340
- <a name='L1275'></a><a href='#L1275'>1275</a>
1341
- <a name='L1276'></a><a href='#L1276'>1276</a>
1342
- <a name='L1277'></a><a href='#L1277'>1277</a>
1343
- <a name='L1278'></a><a href='#L1278'>1278</a>
1344
- <a name='L1279'></a><a href='#L1279'>1279</a>
1345
- <a name='L1280'></a><a href='#L1280'>1280</a>
1346
- <a name='L1281'></a><a href='#L1281'>1281</a>
1347
- <a name='L1282'></a><a href='#L1282'>1282</a>
1348
- <a name='L1283'></a><a href='#L1283'>1283</a>
1349
- <a name='L1284'></a><a href='#L1284'>1284</a>
1350
- <a name='L1285'></a><a href='#L1285'>1285</a>
1351
- <a name='L1286'></a><a href='#L1286'>1286</a>
1352
- <a name='L1287'></a><a href='#L1287'>1287</a>
1353
- <a name='L1288'></a><a href='#L1288'>1288</a>
1354
- <a name='L1289'></a><a href='#L1289'>1289</a>
1355
- <a name='L1290'></a><a href='#L1290'>1290</a>
1356
- <a name='L1291'></a><a href='#L1291'>1291</a>
1357
- <a name='L1292'></a><a href='#L1292'>1292</a>
1358
- <a name='L1293'></a><a href='#L1293'>1293</a>
1359
- <a name='L1294'></a><a href='#L1294'>1294</a>
1360
- <a name='L1295'></a><a href='#L1295'>1295</a>
1361
- <a name='L1296'></a><a href='#L1296'>1296</a>
1362
- <a name='L1297'></a><a href='#L1297'>1297</a>
1363
- <a name='L1298'></a><a href='#L1298'>1298</a>
1364
- <a name='L1299'></a><a href='#L1299'>1299</a>
1365
- <a name='L1300'></a><a href='#L1300'>1300</a>
1366
- <a name='L1301'></a><a href='#L1301'>1301</a>
1367
- <a name='L1302'></a><a href='#L1302'>1302</a>
1368
- <a name='L1303'></a><a href='#L1303'>1303</a>
1369
- <a name='L1304'></a><a href='#L1304'>1304</a>
1370
- <a name='L1305'></a><a href='#L1305'>1305</a>
1371
- <a name='L1306'></a><a href='#L1306'>1306</a>
1372
- <a name='L1307'></a><a href='#L1307'>1307</a>
1373
- <a name='L1308'></a><a href='#L1308'>1308</a>
1374
- <a name='L1309'></a><a href='#L1309'>1309</a>
1375
- <a name='L1310'></a><a href='#L1310'>1310</a>
1376
- <a name='L1311'></a><a href='#L1311'>1311</a>
1377
- <a name='L1312'></a><a href='#L1312'>1312</a>
1378
- <a name='L1313'></a><a href='#L1313'>1313</a>
1379
- <a name='L1314'></a><a href='#L1314'>1314</a>
1380
- <a name='L1315'></a><a href='#L1315'>1315</a>
1381
- <a name='L1316'></a><a href='#L1316'>1316</a>
1382
- <a name='L1317'></a><a href='#L1317'>1317</a>
1383
- <a name='L1318'></a><a href='#L1318'>1318</a>
1384
- <a name='L1319'></a><a href='#L1319'>1319</a>
1385
- <a name='L1320'></a><a href='#L1320'>1320</a>
1386
- <a name='L1321'></a><a href='#L1321'>1321</a>
1387
- <a name='L1322'></a><a href='#L1322'>1322</a>
1388
- <a name='L1323'></a><a href='#L1323'>1323</a>
1389
- <a name='L1324'></a><a href='#L1324'>1324</a>
1390
- <a name='L1325'></a><a href='#L1325'>1325</a>
1391
- <a name='L1326'></a><a href='#L1326'>1326</a>
1392
- <a name='L1327'></a><a href='#L1327'>1327</a>
1393
- <a name='L1328'></a><a href='#L1328'>1328</a>
1394
- <a name='L1329'></a><a href='#L1329'>1329</a>
1395
- <a name='L1330'></a><a href='#L1330'>1330</a>
1396
- <a name='L1331'></a><a href='#L1331'>1331</a>
1397
- <a name='L1332'></a><a href='#L1332'>1332</a>
1398
- <a name='L1333'></a><a href='#L1333'>1333</a>
1399
- <a name='L1334'></a><a href='#L1334'>1334</a>
1400
- <a name='L1335'></a><a href='#L1335'>1335</a>
1401
- <a name='L1336'></a><a href='#L1336'>1336</a>
1402
- <a name='L1337'></a><a href='#L1337'>1337</a>
1403
- <a name='L1338'></a><a href='#L1338'>1338</a>
1404
- <a name='L1339'></a><a href='#L1339'>1339</a>
1405
- <a name='L1340'></a><a href='#L1340'>1340</a>
1406
- <a name='L1341'></a><a href='#L1341'>1341</a>
1407
- <a name='L1342'></a><a href='#L1342'>1342</a>
1408
- <a name='L1343'></a><a href='#L1343'>1343</a>
1409
- <a name='L1344'></a><a href='#L1344'>1344</a>
1410
- <a name='L1345'></a><a href='#L1345'>1345</a>
1411
- <a name='L1346'></a><a href='#L1346'>1346</a>
1412
- <a name='L1347'></a><a href='#L1347'>1347</a>
1413
- <a name='L1348'></a><a href='#L1348'>1348</a>
1414
- <a name='L1349'></a><a href='#L1349'>1349</a>
1415
- <a name='L1350'></a><a href='#L1350'>1350</a>
1416
- <a name='L1351'></a><a href='#L1351'>1351</a>
1417
- <a name='L1352'></a><a href='#L1352'>1352</a>
1418
- <a name='L1353'></a><a href='#L1353'>1353</a>
1419
- <a name='L1354'></a><a href='#L1354'>1354</a>
1420
- <a name='L1355'></a><a href='#L1355'>1355</a>
1421
- <a name='L1356'></a><a href='#L1356'>1356</a>
1422
- <a name='L1357'></a><a href='#L1357'>1357</a>
1423
- <a name='L1358'></a><a href='#L1358'>1358</a>
1424
- <a name='L1359'></a><a href='#L1359'>1359</a>
1425
- <a name='L1360'></a><a href='#L1360'>1360</a>
1426
- <a name='L1361'></a><a href='#L1361'>1361</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
654
+ <a name='L589'></a><a href='#L589'>589</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
1427
655
  <span class="cline-any cline-neutral">&nbsp;</span>
1428
656
  <span class="cline-any cline-neutral">&nbsp;</span>
1429
657
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1436,32 +664,11 @@
1436
664
  <span class="cline-any cline-neutral">&nbsp;</span>
1437
665
  <span class="cline-any cline-neutral">&nbsp;</span>
1438
666
  <span class="cline-any cline-neutral">&nbsp;</span>
1439
- <span class="cline-any cline-neutral">&nbsp;</span>
1440
- <span class="cline-any cline-neutral">&nbsp;</span>
1441
- <span class="cline-any cline-neutral">&nbsp;</span>
1442
- <span class="cline-any cline-neutral">&nbsp;</span>
1443
- <span class="cline-any cline-neutral">&nbsp;</span>
1444
- <span class="cline-any cline-neutral">&nbsp;</span>
1445
- <span class="cline-any cline-neutral">&nbsp;</span>
1446
- <span class="cline-any cline-neutral">&nbsp;</span>
1447
- <span class="cline-any cline-neutral">&nbsp;</span>
1448
- <span class="cline-any cline-neutral">&nbsp;</span>
1449
- <span class="cline-any cline-yes">1x</span>
1450
- <span class="cline-any cline-yes">1x</span>
1451
667
  <span class="cline-any cline-yes">1x</span>
1452
668
  <span class="cline-any cline-yes">1x</span>
1453
669
  <span class="cline-any cline-yes">1x</span>
1454
670
  <span class="cline-any cline-neutral">&nbsp;</span>
1455
- <span class="cline-any cline-neutral">&nbsp;</span>
1456
- <span class="cline-any cline-neutral">&nbsp;</span>
1457
- <span class="cline-any cline-neutral">&nbsp;</span>
1458
- <span class="cline-any cline-neutral">&nbsp;</span>
1459
671
  <span class="cline-any cline-yes">1x</span>
1460
- <span class="cline-any cline-yes">1x</span>
1461
- <span class="cline-any cline-neutral">&nbsp;</span>
1462
- <span class="cline-any cline-neutral">&nbsp;</span>
1463
- <span class="cline-any cline-neutral">&nbsp;</span>
1464
- <span class="cline-any cline-neutral">&nbsp;</span>
1465
672
  <span class="cline-any cline-neutral">&nbsp;</span>
1466
673
  <span class="cline-any cline-neutral">&nbsp;</span>
1467
674
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1509,51 +716,6 @@
1509
716
  <span class="cline-any cline-neutral">&nbsp;</span>
1510
717
  <span class="cline-any cline-neutral">&nbsp;</span>
1511
718
  <span class="cline-any cline-neutral">&nbsp;</span>
1512
- <span class="cline-any cline-yes">1x</span>
1513
- <span class="cline-any cline-yes">1x</span>
1514
- <span class="cline-any cline-yes">1x</span>
1515
- <span class="cline-any cline-yes">1x</span>
1516
- <span class="cline-any cline-yes">1x</span>
1517
- <span class="cline-any cline-yes">1x</span>
1518
- <span class="cline-any cline-yes">1x</span>
1519
- <span class="cline-any cline-yes">1x</span>
1520
- <span class="cline-any cline-yes">1x</span>
1521
- <span class="cline-any cline-yes">1x</span>
1522
- <span class="cline-any cline-yes">1x</span>
1523
- <span class="cline-any cline-yes">1x</span>
1524
- <span class="cline-any cline-yes">1x</span>
1525
- <span class="cline-any cline-yes">1x</span>
1526
- <span class="cline-any cline-yes">1x</span>
1527
- <span class="cline-any cline-neutral">&nbsp;</span>
1528
- <span class="cline-any cline-neutral">&nbsp;</span>
1529
- <span class="cline-any cline-neutral">&nbsp;</span>
1530
- <span class="cline-any cline-neutral">&nbsp;</span>
1531
- <span class="cline-any cline-neutral">&nbsp;</span>
1532
- <span class="cline-any cline-neutral">&nbsp;</span>
1533
- <span class="cline-any cline-neutral">&nbsp;</span>
1534
- <span class="cline-any cline-neutral">&nbsp;</span>
1535
- <span class="cline-any cline-neutral">&nbsp;</span>
1536
- <span class="cline-any cline-neutral">&nbsp;</span>
1537
- <span class="cline-any cline-neutral">&nbsp;</span>
1538
- <span class="cline-any cline-neutral">&nbsp;</span>
1539
- <span class="cline-any cline-neutral">&nbsp;</span>
1540
- <span class="cline-any cline-neutral">&nbsp;</span>
1541
- <span class="cline-any cline-neutral">&nbsp;</span>
1542
- <span class="cline-any cline-neutral">&nbsp;</span>
1543
- <span class="cline-any cline-neutral">&nbsp;</span>
1544
- <span class="cline-any cline-neutral">&nbsp;</span>
1545
- <span class="cline-any cline-neutral">&nbsp;</span>
1546
- <span class="cline-any cline-neutral">&nbsp;</span>
1547
- <span class="cline-any cline-neutral">&nbsp;</span>
1548
- <span class="cline-any cline-neutral">&nbsp;</span>
1549
- <span class="cline-any cline-neutral">&nbsp;</span>
1550
- <span class="cline-any cline-neutral">&nbsp;</span>
1551
- <span class="cline-any cline-neutral">&nbsp;</span>
1552
- <span class="cline-any cline-neutral">&nbsp;</span>
1553
- <span class="cline-any cline-neutral">&nbsp;</span>
1554
- <span class="cline-any cline-neutral">&nbsp;</span>
1555
- <span class="cline-any cline-neutral">&nbsp;</span>
1556
- <span class="cline-any cline-neutral">&nbsp;</span>
1557
719
  <span class="cline-any cline-neutral">&nbsp;</span>
1558
720
  <span class="cline-any cline-neutral">&nbsp;</span>
1559
721
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1741,86 +903,9 @@
1741
903
  <span class="cline-any cline-neutral">&nbsp;</span>
1742
904
  <span class="cline-any cline-neutral">&nbsp;</span>
1743
905
  <span class="cline-any cline-neutral">&nbsp;</span>
1744
- <span class="cline-any cline-yes">116x</span>
1745
- <span class="cline-any cline-neutral">&nbsp;</span>
1746
- <span class="cline-any cline-neutral">&nbsp;</span>
1747
- <span class="cline-any cline-neutral">&nbsp;</span>
1748
- <span class="cline-any cline-neutral">&nbsp;</span>
1749
- <span class="cline-any cline-neutral">&nbsp;</span>
1750
- <span class="cline-any cline-neutral">&nbsp;</span>
1751
- <span class="cline-any cline-neutral">&nbsp;</span>
1752
- <span class="cline-any cline-neutral">&nbsp;</span>
1753
- <span class="cline-any cline-yes">95x</span>
1754
- <span class="cline-any cline-neutral">&nbsp;</span>
1755
- <span class="cline-any cline-neutral">&nbsp;</span>
1756
- <span class="cline-any cline-neutral">&nbsp;</span>
1757
- <span class="cline-any cline-neutral">&nbsp;</span>
1758
- <span class="cline-any cline-yes">95x</span>
1759
- <span class="cline-any cline-yes">88x</span>
1760
- <span class="cline-any cline-yes">88x</span>
1761
- <span class="cline-any cline-yes">7x</span>
1762
- <span class="cline-any cline-yes">2x</span>
1763
- <span class="cline-any cline-yes">2x</span>
1764
- <span class="cline-any cline-yes">5x</span>
1765
- <span class="cline-any cline-yes">5x</span>
1766
- <span class="cline-any cline-yes">5x</span>
1767
- <span class="cline-any cline-neutral">&nbsp;</span>
1768
- <span class="cline-any cline-no">&nbsp;</span>
1769
- <span class="cline-any cline-neutral">&nbsp;</span>
1770
906
  <span class="cline-any cline-no">&nbsp;</span>
1771
907
  <span class="cline-any cline-neutral">&nbsp;</span>
1772
908
  <span class="cline-any cline-neutral">&nbsp;</span>
1773
- <span class="cline-any cline-yes">95x</span>
1774
- <span class="cline-any cline-neutral">&nbsp;</span>
1775
- <span class="cline-any cline-yes">95x</span>
1776
- <span class="cline-any cline-yes">102x</span>
1777
- <span class="cline-any cline-neutral">&nbsp;</span>
1778
- <span class="cline-any cline-yes">102x</span>
1779
- <span class="cline-any cline-yes">13x</span>
1780
- <span class="cline-any cline-neutral">&nbsp;</span>
1781
- <span class="cline-any cline-neutral">&nbsp;</span>
1782
- <span class="cline-any cline-yes">89x</span>
1783
- <span class="cline-any cline-yes">81x</span>
1784
- <span class="cline-any cline-neutral">&nbsp;</span>
1785
- <span class="cline-any cline-neutral">&nbsp;</span>
1786
- <span class="cline-any cline-yes">8x</span>
1787
- <span class="cline-any cline-yes">5x</span>
1788
- <span class="cline-any cline-neutral">&nbsp;</span>
1789
- <span class="cline-any cline-neutral">&nbsp;</span>
1790
- <span class="cline-any cline-neutral">&nbsp;</span>
1791
- <span class="cline-any cline-neutral">&nbsp;</span>
1792
- <span class="cline-any cline-yes">95x</span>
1793
- <span class="cline-any cline-neutral">&nbsp;</span>
1794
- <span class="cline-any cline-yes">95x</span>
1795
- <span class="cline-any cline-neutral">&nbsp;</span>
1796
- <span class="cline-any cline-yes">95x</span>
1797
- <span class="cline-any cline-yes">10x</span>
1798
- <span class="cline-any cline-neutral">&nbsp;</span>
1799
- <span class="cline-any cline-neutral">&nbsp;</span>
1800
- <span class="cline-any cline-yes">85x</span>
1801
- <span class="cline-any cline-neutral">&nbsp;</span>
1802
- <span class="cline-any cline-neutral">&nbsp;</span>
1803
- <span class="cline-any cline-neutral">&nbsp;</span>
1804
- <span class="cline-any cline-neutral">&nbsp;</span>
1805
- <span class="cline-any cline-neutral">&nbsp;</span>
1806
- <span class="cline-any cline-neutral">&nbsp;</span>
1807
- <span class="cline-any cline-yes">95x</span>
1808
- <span class="cline-any cline-neutral">&nbsp;</span>
1809
- <span class="cline-any cline-yes">95x</span>
1810
- <span class="cline-any cline-neutral">&nbsp;</span>
1811
- <span class="cline-any cline-yes">95x</span>
1812
- <span class="cline-any cline-yes">2x</span>
1813
- <span class="cline-any cline-neutral">&nbsp;</span>
1814
- <span class="cline-any cline-yes">2x</span>
1815
- <span class="cline-any cline-neutral">&nbsp;</span>
1816
- <span class="cline-any cline-neutral">&nbsp;</span>
1817
- <span class="cline-any cline-neutral">&nbsp;</span>
1818
- <span class="cline-any cline-neutral">&nbsp;</span>
1819
- <span class="cline-any cline-neutral">&nbsp;</span>
1820
- <span class="cline-any cline-yes">93x</span>
1821
- <span class="cline-any cline-neutral">&nbsp;</span>
1822
- <span class="cline-any cline-neutral">&nbsp;</span>
1823
- <span class="cline-any cline-neutral">&nbsp;</span>
1824
909
  <span class="cline-any cline-neutral">&nbsp;</span>
1825
910
  <span class="cline-any cline-neutral">&nbsp;</span>
1826
911
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1899,80 +984,47 @@
1899
984
  <span class="cline-any cline-neutral">&nbsp;</span>
1900
985
  <span class="cline-any cline-neutral">&nbsp;</span>
1901
986
  <span class="cline-any cline-neutral">&nbsp;</span>
1902
- <span class="cline-any cline-neutral">&nbsp;</span>
1903
- <span class="cline-any cline-neutral">&nbsp;</span>
1904
- <span class="cline-any cline-yes">76x</span>
1905
- <span class="cline-any cline-yes">76x</span>
1906
- <span class="cline-any cline-neutral">&nbsp;</span>
1907
- <span class="cline-any cline-neutral">&nbsp;</span>
1908
- <span class="cline-any cline-yes">76x</span>
1909
- <span class="cline-any cline-neutral">&nbsp;</span>
1910
- <span class="cline-any cline-neutral">&nbsp;</span>
1911
- <span class="cline-any cline-neutral">&nbsp;</span>
1912
- <span class="cline-any cline-neutral">&nbsp;</span>
1913
- <span class="cline-any cline-yes">3x</span>
1914
- <span class="cline-any cline-neutral">&nbsp;</span>
1915
- <span class="cline-any cline-neutral">&nbsp;</span>
1916
- <span class="cline-any cline-neutral">&nbsp;</span>
1917
- <span class="cline-any cline-neutral">&nbsp;</span>
1918
- <span class="cline-any cline-neutral">&nbsp;</span>
1919
- <span class="cline-any cline-neutral">&nbsp;</span>
1920
- <span class="cline-any cline-yes">3x</span>
1921
- <span class="cline-any cline-neutral">&nbsp;</span>
1922
- <span class="cline-any cline-yes">3x</span>
1923
- <span class="cline-any cline-neutral">&nbsp;</span>
1924
- <span class="cline-any cline-neutral">&nbsp;</span>
1925
- <span class="cline-any cline-neutral">&nbsp;</span>
1926
- <span class="cline-any cline-yes">73x</span>
1927
- <span class="cline-any cline-neutral">&nbsp;</span>
987
+ <span class="cline-any cline-yes">18x</span>
1928
988
  <span class="cline-any cline-neutral">&nbsp;</span>
1929
989
  <span class="cline-any cline-neutral">&nbsp;</span>
1930
990
  <span class="cline-any cline-neutral">&nbsp;</span>
1931
991
  <span class="cline-any cline-neutral">&nbsp;</span>
1932
992
  <span class="cline-any cline-neutral">&nbsp;</span>
1933
- <span class="cline-any cline-yes">2x</span>
1934
993
  <span class="cline-any cline-neutral">&nbsp;</span>
1935
994
  <span class="cline-any cline-neutral">&nbsp;</span>
1936
995
  <span class="cline-any cline-neutral">&nbsp;</span>
1937
996
  <span class="cline-any cline-neutral">&nbsp;</span>
1938
997
  <span class="cline-any cline-neutral">&nbsp;</span>
1939
998
  <span class="cline-any cline-neutral">&nbsp;</span>
1940
- <span class="cline-any cline-yes">2x</span>
1941
999
  <span class="cline-any cline-neutral">&nbsp;</span>
1942
- <span class="cline-any cline-yes">2x</span>
1943
1000
  <span class="cline-any cline-neutral">&nbsp;</span>
1944
1001
  <span class="cline-any cline-neutral">&nbsp;</span>
1945
- <span class="cline-any cline-yes">71x</span>
1946
1002
  <span class="cline-any cline-neutral">&nbsp;</span>
1947
1003
  <span class="cline-any cline-neutral">&nbsp;</span>
1948
- <span class="cline-any cline-yes">71x</span>
1949
- <span class="cline-any cline-yes">4x</span>
1950
1004
  <span class="cline-any cline-neutral">&nbsp;</span>
1951
1005
  <span class="cline-any cline-neutral">&nbsp;</span>
1952
1006
  <span class="cline-any cline-neutral">&nbsp;</span>
1953
1007
  <span class="cline-any cline-neutral">&nbsp;</span>
1954
- <span class="cline-any cline-yes">4x</span>
1008
+ <span class="cline-any cline-yes">18x</span>
1009
+ <span class="cline-any cline-yes">18x</span>
1955
1010
  <span class="cline-any cline-neutral">&nbsp;</span>
1956
- <span class="cline-any cline-yes">4x</span>
1011
+ <span class="cline-any cline-yes">18x</span>
1957
1012
  <span class="cline-any cline-neutral">&nbsp;</span>
1013
+ <span class="cline-any cline-no">&nbsp;</span>
1958
1014
  <span class="cline-any cline-neutral">&nbsp;</span>
1015
+ <span class="cline-any cline-no">&nbsp;</span>
1959
1016
  <span class="cline-any cline-neutral">&nbsp;</span>
1960
- <span class="cline-any cline-yes">67x</span>
1961
- <span class="cline-any cline-yes">1x</span>
1962
1017
  <span class="cline-any cline-neutral">&nbsp;</span>
1963
1018
  <span class="cline-any cline-neutral">&nbsp;</span>
1964
- <span class="cline-any cline-yes">67x</span>
1965
1019
  <span class="cline-any cline-neutral">&nbsp;</span>
1966
1020
  <span class="cline-any cline-neutral">&nbsp;</span>
1967
- <span class="cline-any cline-yes">67x</span>
1968
1021
  <span class="cline-any cline-neutral">&nbsp;</span>
1969
1022
  <span class="cline-any cline-neutral">&nbsp;</span>
1023
+ <span class="cline-any cline-yes">24x</span>
1970
1024
  <span class="cline-any cline-neutral">&nbsp;</span>
1971
1025
  <span class="cline-any cline-neutral">&nbsp;</span>
1972
1026
  <span class="cline-any cline-neutral">&nbsp;</span>
1973
1027
  <span class="cline-any cline-neutral">&nbsp;</span>
1974
- <span class="cline-any cline-yes">67x</span>
1975
- <span class="cline-any cline-yes">9x</span>
1976
1028
  <span class="cline-any cline-neutral">&nbsp;</span>
1977
1029
  <span class="cline-any cline-neutral">&nbsp;</span>
1978
1030
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1980,659 +1032,67 @@
1980
1032
  <span class="cline-any cline-neutral">&nbsp;</span>
1981
1033
  <span class="cline-any cline-neutral">&nbsp;</span>
1982
1034
  <span class="cline-any cline-neutral">&nbsp;</span>
1983
- <span class="cline-any cline-yes">9x</span>
1984
1035
  <span class="cline-any cline-neutral">&nbsp;</span>
1985
- <span class="cline-any cline-yes">9x</span>
1986
1036
  <span class="cline-any cline-neutral">&nbsp;</span>
1987
1037
  <span class="cline-any cline-neutral">&nbsp;</span>
1988
1038
  <span class="cline-any cline-neutral">&nbsp;</span>
1989
- <span class="cline-any cline-yes">58x</span>
1990
- <span class="cline-any cline-yes">4x</span>
1991
1039
  <span class="cline-any cline-neutral">&nbsp;</span>
1992
1040
  <span class="cline-any cline-neutral">&nbsp;</span>
1993
1041
  <span class="cline-any cline-neutral">&nbsp;</span>
1994
- <span class="cline-any cline-yes">4x</span>
1995
- <span class="cline-any cline-yes">2x</span>
1996
1042
  <span class="cline-any cline-neutral">&nbsp;</span>
1997
- <span class="cline-any cline-yes">2x</span>
1998
- <span class="cline-any cline-yes">2x</span>
1999
1043
  <span class="cline-any cline-neutral">&nbsp;</span>
2000
1044
  <span class="cline-any cline-neutral">&nbsp;</span>
2001
- <span class="cline-any cline-yes">4x</span>
2002
1045
  <span class="cline-any cline-neutral">&nbsp;</span>
2003
- <span class="cline-any cline-yes">4x</span>
2004
- <span class="cline-any cline-yes">1x</span>
2005
1046
  <span class="cline-any cline-neutral">&nbsp;</span>
1047
+ <span class="cline-any cline-yes">23x</span>
1048
+ <span class="cline-any cline-yes">23x</span>
2006
1049
  <span class="cline-any cline-neutral">&nbsp;</span>
1050
+ <span class="cline-any cline-yes">23x</span>
2007
1051
  <span class="cline-any cline-yes">3x</span>
2008
- <span class="cline-any cline-yes">2x</span>
2009
- <span class="cline-any cline-neutral">&nbsp;</span>
2010
- <span class="cline-any cline-yes">2x</span>
2011
- <span class="cline-any cline-neutral">&nbsp;</span>
2012
- <span class="cline-any cline-neutral">&nbsp;</span>
2013
- <span class="cline-any cline-yes">1x</span>
2014
- <span class="cline-any cline-neutral">&nbsp;</span>
2015
- <span class="cline-any cline-neutral">&nbsp;</span>
2016
- <span class="cline-any cline-yes">4x</span>
2017
- <span class="cline-any cline-yes">2x</span>
2018
- <span class="cline-any cline-neutral">&nbsp;</span>
2019
- <span class="cline-any cline-neutral">&nbsp;</span>
2020
- <span class="cline-any cline-neutral">&nbsp;</span>
2021
- <span class="cline-any cline-neutral">&nbsp;</span>
2022
- <span class="cline-any cline-neutral">&nbsp;</span>
2023
- <span class="cline-any cline-neutral">&nbsp;</span>
2024
- <span class="cline-any cline-yes">2x</span>
2025
- <span class="cline-any cline-neutral">&nbsp;</span>
2026
- <span class="cline-any cline-yes">2x</span>
2027
- <span class="cline-any cline-neutral">&nbsp;</span>
2028
1052
  <span class="cline-any cline-neutral">&nbsp;</span>
2029
1053
  <span class="cline-any cline-neutral">&nbsp;</span>
1054
+ <span class="cline-any cline-yes">20x</span>
1055
+ <span class="cline-any cline-yes">15x</span>
2030
1056
  <span class="cline-any cline-neutral">&nbsp;</span>
2031
- <span class="cline-any cline-yes">56x</span>
2032
- <span class="cline-any cline-neutral">&nbsp;</span>
2033
- <span class="cline-any cline-yes">56x</span>
2034
1057
  <span class="cline-any cline-neutral">&nbsp;</span>
1058
+ <span class="cline-any cline-yes">5x</span>
2035
1059
  <span class="cline-any cline-neutral">&nbsp;</span>
1060
+ <span class="cline-any cline-no">&nbsp;</span>
2036
1061
  <span class="cline-any cline-neutral">&nbsp;</span>
1062
+ <span class="cline-any cline-no">&nbsp;</span>
2037
1063
  <span class="cline-any cline-neutral">&nbsp;</span>
2038
1064
  <span class="cline-any cline-neutral">&nbsp;</span>
2039
1065
  <span class="cline-any cline-neutral">&nbsp;</span>
2040
- <span class="cline-any cline-yes">56x</span>
2041
1066
  <span class="cline-any cline-neutral">&nbsp;</span>
2042
- <span class="cline-any cline-yes">51x</span>
2043
- <span class="cline-any cline-yes">2x</span>
2044
- <span class="cline-any cline-yes">2x</span>
2045
1067
  <span class="cline-any cline-neutral">&nbsp;</span>
2046
1068
  <span class="cline-any cline-neutral">&nbsp;</span>
2047
1069
  <span class="cline-any cline-neutral">&nbsp;</span>
2048
- <span class="cline-any cline-yes">2x</span>
2049
1070
  <span class="cline-any cline-yes">1x</span>
2050
- <span class="cline-any cline-neutral">&nbsp;</span>
2051
- <span class="cline-any cline-neutral">&nbsp;</span>
2052
- <span class="cline-any cline-neutral">&nbsp;</span>
2053
- <span class="cline-any cline-neutral">&nbsp;</span>
2054
- <span class="cline-any cline-neutral">&nbsp;</span>
2055
- <span class="cline-any cline-neutral">&nbsp;</span>
2056
- <span class="cline-any cline-neutral">&nbsp;</span>
2057
- <span class="cline-any cline-neutral">&nbsp;</span>
2058
- <span class="cline-any cline-neutral">&nbsp;</span>
2059
- <span class="cline-any cline-neutral">&nbsp;</span>
2060
1071
  <span class="cline-any cline-yes">1x</span>
2061
- <span class="cline-any cline-neutral">&nbsp;</span>
2062
1072
  <span class="cline-any cline-yes">1x</span>
2063
1073
  <span class="cline-any cline-neutral">&nbsp;</span>
2064
1074
  <span class="cline-any cline-neutral">&nbsp;</span>
2065
1075
  <span class="cline-any cline-neutral">&nbsp;</span>
2066
1076
  <span class="cline-any cline-yes">1x</span>
2067
- <span class="cline-any cline-neutral">&nbsp;</span>
2068
- <span class="cline-any cline-neutral">&nbsp;</span>
2069
- <span class="cline-any cline-neutral">&nbsp;</span>
2070
- <span class="cline-any cline-neutral">&nbsp;</span>
2071
- <span class="cline-any cline-neutral">&nbsp;</span>
1077
+ <span class="cline-any cline-no">&nbsp;</span>
2072
1078
  <span class="cline-any cline-neutral">&nbsp;</span>
2073
1079
  <span class="cline-any cline-neutral">&nbsp;</span>
2074
1080
  <span class="cline-any cline-yes">1x</span>
2075
1081
  <span class="cline-any cline-neutral">&nbsp;</span>
2076
1082
  <span class="cline-any cline-yes">1x</span>
2077
1083
  <span class="cline-any cline-neutral">&nbsp;</span>
2078
- <span class="cline-any cline-neutral">&nbsp;</span>
2079
- <span class="cline-any cline-neutral">&nbsp;</span>
2080
- <span class="cline-any cline-yes">49x</span>
2081
1084
  <span class="cline-any cline-yes">1x</span>
2082
1085
  <span class="cline-any cline-neutral">&nbsp;</span>
2083
- <span class="cline-any cline-neutral">&nbsp;</span>
2084
- <span class="cline-any cline-neutral">&nbsp;</span>
2085
- <span class="cline-any cline-neutral">&nbsp;</span>
2086
- <span class="cline-any cline-neutral">&nbsp;</span>
2087
- <span class="cline-any cline-neutral">&nbsp;</span>
2088
- <span class="cline-any cline-neutral">&nbsp;</span>
2089
- <span class="cline-any cline-neutral">&nbsp;</span>
2090
- <span class="cline-any cline-neutral">&nbsp;</span>
2091
- <span class="cline-any cline-yes">1x</span>
1086
+ <span class="cline-any cline-no">&nbsp;</span>
2092
1087
  <span class="cline-any cline-neutral">&nbsp;</span>
2093
1088
  <span class="cline-any cline-yes">1x</span>
2094
- <span class="cline-any cline-neutral">&nbsp;</span>
2095
- <span class="cline-any cline-neutral">&nbsp;</span>
2096
- <span class="cline-any cline-neutral">&nbsp;</span>
2097
- <span class="cline-any cline-yes">48x</span>
2098
- <span class="cline-any cline-yes">48x</span>
2099
- <span class="cline-any cline-neutral">&nbsp;</span>
2100
- <span class="cline-any cline-neutral">&nbsp;</span>
2101
- <span class="cline-any cline-neutral">&nbsp;</span>
2102
- <span class="cline-any cline-neutral">&nbsp;</span>
2103
- <span class="cline-any cline-neutral">&nbsp;</span>
2104
- <span class="cline-any cline-neutral">&nbsp;</span>
2105
- <span class="cline-any cline-neutral">&nbsp;</span>
2106
- <span class="cline-any cline-neutral">&nbsp;</span>
2107
- <span class="cline-any cline-neutral">&nbsp;</span>
2108
- <span class="cline-any cline-yes">48x</span>
2109
- <span class="cline-any cline-neutral">&nbsp;</span>
2110
- <span class="cline-any cline-yes">48x</span>
2111
- <span class="cline-any cline-neutral">&nbsp;</span>
2112
- <span class="cline-any cline-neutral">&nbsp;</span>
2113
- <span class="cline-any cline-neutral">&nbsp;</span>
2114
- <span class="cline-any cline-neutral">&nbsp;</span>
2115
- <span class="cline-any cline-yes">5x</span>
2116
- <span class="cline-any cline-neutral">&nbsp;</span>
2117
- <span class="cline-any cline-neutral">&nbsp;</span>
2118
- <span class="cline-any cline-neutral">&nbsp;</span>
2119
- <span class="cline-any cline-neutral">&nbsp;</span>
2120
- <span class="cline-any cline-neutral">&nbsp;</span>
2121
- <span class="cline-any cline-neutral">&nbsp;</span>
2122
- <span class="cline-any cline-neutral">&nbsp;</span>
2123
- <span class="cline-any cline-yes">5x</span>
2124
- <span class="cline-any cline-neutral">&nbsp;</span>
2125
- <span class="cline-any cline-yes">5x</span>
2126
- <span class="cline-any cline-neutral">&nbsp;</span>
2127
1089
  <span class="cline-any cline-no">&nbsp;</span>
2128
- <span class="cline-any cline-neutral">&nbsp;</span>
2129
- <span class="cline-any cline-neutral">&nbsp;</span>
2130
- <span class="cline-any cline-neutral">&nbsp;</span>
2131
- <span class="cline-any cline-neutral">&nbsp;</span>
2132
- <span class="cline-any cline-neutral">&nbsp;</span>
2133
- <span class="cline-any cline-no">&nbsp;</span>
2134
- <span class="cline-any cline-neutral">&nbsp;</span>
2135
- <span class="cline-any cline-no">&nbsp;</span>
2136
- <span class="cline-any cline-neutral">&nbsp;</span>
2137
- <span class="cline-any cline-neutral">&nbsp;</span>
2138
- <span class="cline-any cline-neutral">&nbsp;</span>
2139
- <span class="cline-any cline-neutral">&nbsp;</span>
2140
- <span class="cline-any cline-yes">22x</span>
2141
- <span class="cline-any cline-yes">22x</span>
2142
- <span class="cline-any cline-neutral">&nbsp;</span>
2143
- <span class="cline-any cline-yes">22x</span>
2144
- <span class="cline-any cline-neutral">&nbsp;</span>
2145
- <span class="cline-any cline-no">&nbsp;</span>
2146
- <span class="cline-any cline-neutral">&nbsp;</span>
2147
- <span class="cline-any cline-no">&nbsp;</span>
2148
- <span class="cline-any cline-neutral">&nbsp;</span>
2149
- <span class="cline-any cline-neutral">&nbsp;</span>
2150
- <span class="cline-any cline-neutral">&nbsp;</span>
2151
- <span class="cline-any cline-neutral">&nbsp;</span>
2152
- <span class="cline-any cline-neutral">&nbsp;</span>
2153
- <span class="cline-any cline-neutral">&nbsp;</span>
2154
- <span class="cline-any cline-neutral">&nbsp;</span>
2155
- <span class="cline-any cline-neutral">&nbsp;</span>
2156
- <span class="cline-any cline-neutral">&nbsp;</span>
2157
- <span class="cline-any cline-yes">26x</span>
2158
- <span class="cline-any cline-yes">26x</span>
2159
- <span class="cline-any cline-neutral">&nbsp;</span>
2160
- <span class="cline-any cline-yes">26x</span>
2161
- <span class="cline-any cline-neutral">&nbsp;</span>
2162
- <span class="cline-any cline-yes">26x</span>
2163
- <span class="cline-any cline-yes">3x</span>
2164
- <span class="cline-any cline-neutral">&nbsp;</span>
2165
- <span class="cline-any cline-neutral">&nbsp;</span>
2166
- <span class="cline-any cline-neutral">&nbsp;</span>
2167
- <span class="cline-any cline-neutral">&nbsp;</span>
2168
- <span class="cline-any cline-yes">3x</span>
2169
- <span class="cline-any cline-neutral">&nbsp;</span>
2170
- <span class="cline-any cline-yes">3x</span>
2171
- <span class="cline-any cline-neutral">&nbsp;</span>
2172
- <span class="cline-any cline-neutral">&nbsp;</span>
2173
- <span class="cline-any cline-neutral">&nbsp;</span>
2174
- <span class="cline-any cline-yes">23x</span>
2175
- <span class="cline-any cline-yes">2x</span>
2176
- <span class="cline-any cline-neutral">&nbsp;</span>
2177
- <span class="cline-any cline-yes">2x</span>
2178
- <span class="cline-any cline-yes">2x</span>
2179
- <span class="cline-any cline-neutral">&nbsp;</span>
2180
- <span class="cline-any cline-neutral">&nbsp;</span>
2181
- <span class="cline-any cline-neutral">&nbsp;</span>
2182
- <span class="cline-any cline-neutral">&nbsp;</span>
2183
- <span class="cline-any cline-neutral">&nbsp;</span>
2184
- <span class="cline-any cline-yes">2x</span>
2185
- <span class="cline-any cline-neutral">&nbsp;</span>
2186
- <span class="cline-any cline-yes">2x</span>
2187
- <span class="cline-any cline-neutral">&nbsp;</span>
2188
- <span class="cline-any cline-neutral">&nbsp;</span>
2189
- <span class="cline-any cline-neutral">&nbsp;</span>
2190
- <span class="cline-any cline-neutral">&nbsp;</span>
2191
- <span class="cline-any cline-yes">21x</span>
2192
- <span class="cline-any cline-neutral">&nbsp;</span>
2193
- <span class="cline-any cline-neutral">&nbsp;</span>
2194
- <span class="cline-any cline-neutral">&nbsp;</span>
1090
+ <span class="cline-any cline-no">&nbsp;</span>
2195
1091
  <span class="cline-any cline-neutral">&nbsp;</span>
2196
1092
  <span class="cline-any cline-neutral">&nbsp;</span>
2197
1093
  <span class="cline-any cline-neutral">&nbsp;</span>
2198
1094
  <span class="cline-any cline-yes">1x</span>
2199
1095
  <span class="cline-any cline-neutral">&nbsp;</span>
2200
- <span class="cline-any cline-yes">1x</span>
2201
- <span class="cline-any cline-neutral">&nbsp;</span>
2202
- <span class="cline-any cline-neutral">&nbsp;</span>
2203
- <span class="cline-any cline-neutral">&nbsp;</span>
2204
- <span class="cline-any cline-neutral">&nbsp;</span>
2205
- <span class="cline-any cline-neutral">&nbsp;</span>
2206
- <span class="cline-any cline-yes">1x</span>
2207
- <span class="cline-any cline-neutral">&nbsp;</span>
2208
- <span class="cline-any cline-yes">1x</span>
2209
- <span class="cline-any cline-neutral">&nbsp;</span>
2210
- <span class="cline-any cline-neutral">&nbsp;</span>
2211
- <span class="cline-any cline-yes">20x</span>
2212
- <span class="cline-any cline-neutral">&nbsp;</span>
2213
- <span class="cline-any cline-neutral">&nbsp;</span>
2214
- <span class="cline-any cline-yes">20x</span>
2215
- <span class="cline-any cline-yes">1x</span>
2216
- <span class="cline-any cline-neutral">&nbsp;</span>
2217
- <span class="cline-any cline-neutral">&nbsp;</span>
2218
- <span class="cline-any cline-neutral">&nbsp;</span>
2219
- <span class="cline-any cline-neutral">&nbsp;</span>
2220
- <span class="cline-any cline-yes">1x</span>
2221
- <span class="cline-any cline-neutral">&nbsp;</span>
2222
- <span class="cline-any cline-yes">1x</span>
2223
- <span class="cline-any cline-neutral">&nbsp;</span>
2224
- <span class="cline-any cline-neutral">&nbsp;</span>
2225
- <span class="cline-any cline-neutral">&nbsp;</span>
2226
- <span class="cline-any cline-yes">19x</span>
2227
- <span class="cline-any cline-yes">1x</span>
2228
- <span class="cline-any cline-neutral">&nbsp;</span>
2229
- <span class="cline-any cline-neutral">&nbsp;</span>
2230
- <span class="cline-any cline-neutral">&nbsp;</span>
2231
- <span class="cline-any cline-neutral">&nbsp;</span>
2232
- <span class="cline-any cline-yes">1x</span>
2233
- <span class="cline-any cline-neutral">&nbsp;</span>
2234
- <span class="cline-any cline-yes">1x</span>
2235
- <span class="cline-any cline-neutral">&nbsp;</span>
2236
- <span class="cline-any cline-neutral">&nbsp;</span>
2237
- <span class="cline-any cline-yes">18x</span>
2238
- <span class="cline-any cline-neutral">&nbsp;</span>
2239
- <span class="cline-any cline-neutral">&nbsp;</span>
2240
- <span class="cline-any cline-yes">18x</span>
2241
- <span class="cline-any cline-neutral">&nbsp;</span>
2242
- <span class="cline-any cline-neutral">&nbsp;</span>
2243
- <span class="cline-any cline-neutral">&nbsp;</span>
2244
- <span class="cline-any cline-neutral">&nbsp;</span>
2245
- <span class="cline-any cline-neutral">&nbsp;</span>
2246
- <span class="cline-any cline-neutral">&nbsp;</span>
2247
- <span class="cline-any cline-yes">18x</span>
2248
- <span class="cline-any cline-yes">1x</span>
2249
- <span class="cline-any cline-neutral">&nbsp;</span>
2250
- <span class="cline-any cline-yes">1x</span>
2251
- <span class="cline-any cline-yes">1x</span>
2252
- <span class="cline-any cline-neutral">&nbsp;</span>
2253
- <span class="cline-any cline-neutral">&nbsp;</span>
2254
- <span class="cline-any cline-neutral">&nbsp;</span>
2255
- <span class="cline-any cline-neutral">&nbsp;</span>
2256
- <span class="cline-any cline-neutral">&nbsp;</span>
2257
- <span class="cline-any cline-neutral">&nbsp;</span>
2258
- <span class="cline-any cline-neutral">&nbsp;</span>
2259
- <span class="cline-any cline-yes">1x</span>
2260
- <span class="cline-any cline-neutral">&nbsp;</span>
2261
- <span class="cline-any cline-yes">1x</span>
2262
- <span class="cline-any cline-neutral">&nbsp;</span>
2263
- <span class="cline-any cline-neutral">&nbsp;</span>
2264
- <span class="cline-any cline-neutral">&nbsp;</span>
2265
- <span class="cline-any cline-neutral">&nbsp;</span>
2266
- <span class="cline-any cline-yes">17x</span>
2267
- <span class="cline-any cline-neutral">&nbsp;</span>
2268
- <span class="cline-any cline-yes">17x</span>
2269
- <span class="cline-any cline-neutral">&nbsp;</span>
2270
- <span class="cline-any cline-neutral">&nbsp;</span>
2271
- <span class="cline-any cline-neutral">&nbsp;</span>
2272
- <span class="cline-any cline-neutral">&nbsp;</span>
2273
- <span class="cline-any cline-neutral">&nbsp;</span>
2274
- <span class="cline-any cline-neutral">&nbsp;</span>
2275
- <span class="cline-any cline-neutral">&nbsp;</span>
2276
- <span class="cline-any cline-yes">17x</span>
2277
- <span class="cline-any cline-neutral">&nbsp;</span>
2278
- <span class="cline-any cline-yes">17x</span>
2279
- <span class="cline-any cline-yes">1x</span>
2280
- <span class="cline-any cline-neutral">&nbsp;</span>
2281
- <span class="cline-any cline-yes">1x</span>
2282
- <span class="cline-any cline-yes">1x</span>
2283
- <span class="cline-any cline-neutral">&nbsp;</span>
2284
- <span class="cline-any cline-neutral">&nbsp;</span>
2285
- <span class="cline-any cline-neutral">&nbsp;</span>
2286
- <span class="cline-any cline-neutral">&nbsp;</span>
2287
- <span class="cline-any cline-neutral">&nbsp;</span>
2288
- <span class="cline-any cline-neutral">&nbsp;</span>
2289
- <span class="cline-any cline-neutral">&nbsp;</span>
2290
- <span class="cline-any cline-neutral">&nbsp;</span>
2291
- <span class="cline-any cline-neutral">&nbsp;</span>
2292
- <span class="cline-any cline-yes">1x</span>
2293
- <span class="cline-any cline-neutral">&nbsp;</span>
2294
- <span class="cline-any cline-yes">1x</span>
2295
- <span class="cline-any cline-neutral">&nbsp;</span>
2296
- <span class="cline-any cline-neutral">&nbsp;</span>
2297
- <span class="cline-any cline-neutral">&nbsp;</span>
2298
- <span class="cline-any cline-neutral">&nbsp;</span>
2299
- <span class="cline-any cline-yes">16x</span>
2300
- <span class="cline-any cline-yes">23x</span>
2301
- <span class="cline-any cline-neutral">&nbsp;</span>
2302
- <span class="cline-any cline-yes">16x</span>
2303
- <span class="cline-any cline-yes">16x</span>
2304
- <span class="cline-any cline-neutral">&nbsp;</span>
2305
- <span class="cline-any cline-neutral">&nbsp;</span>
2306
- <span class="cline-any cline-neutral">&nbsp;</span>
2307
- <span class="cline-any cline-neutral">&nbsp;</span>
2308
- <span class="cline-any cline-neutral">&nbsp;</span>
2309
- <span class="cline-any cline-neutral">&nbsp;</span>
2310
- <span class="cline-any cline-neutral">&nbsp;</span>
2311
- <span class="cline-any cline-neutral">&nbsp;</span>
2312
- <span class="cline-any cline-neutral">&nbsp;</span>
2313
- <span class="cline-any cline-yes">16x</span>
2314
- <span class="cline-any cline-neutral">&nbsp;</span>
2315
- <span class="cline-any cline-yes">16x</span>
2316
- <span class="cline-any cline-neutral">&nbsp;</span>
2317
- <span class="cline-any cline-neutral">&nbsp;</span>
2318
- <span class="cline-any cline-neutral">&nbsp;</span>
2319
- <span class="cline-any cline-neutral">&nbsp;</span>
2320
- <span class="cline-any cline-neutral">&nbsp;</span>
2321
- <span class="cline-any cline-no">&nbsp;</span>
2322
- <span class="cline-any cline-neutral">&nbsp;</span>
2323
- <span class="cline-any cline-neutral">&nbsp;</span>
2324
- <span class="cline-any cline-neutral">&nbsp;</span>
2325
- <span class="cline-any cline-neutral">&nbsp;</span>
2326
- <span class="cline-any cline-neutral">&nbsp;</span>
2327
- <span class="cline-any cline-neutral">&nbsp;</span>
2328
- <span class="cline-any cline-no">&nbsp;</span>
2329
- <span class="cline-any cline-neutral">&nbsp;</span>
2330
- <span class="cline-any cline-no">&nbsp;</span>
2331
- <span class="cline-any cline-neutral">&nbsp;</span>
2332
- <span class="cline-any cline-no">&nbsp;</span>
2333
- <span class="cline-any cline-neutral">&nbsp;</span>
2334
- <span class="cline-any cline-neutral">&nbsp;</span>
2335
- <span class="cline-any cline-neutral">&nbsp;</span>
2336
- <span class="cline-any cline-neutral">&nbsp;</span>
2337
- <span class="cline-any cline-neutral">&nbsp;</span>
2338
- <span class="cline-any cline-no">&nbsp;</span>
2339
- <span class="cline-any cline-neutral">&nbsp;</span>
2340
- <span class="cline-any cline-no">&nbsp;</span>
2341
- <span class="cline-any cline-neutral">&nbsp;</span>
2342
- <span class="cline-any cline-neutral">&nbsp;</span>
2343
- <span class="cline-any cline-neutral">&nbsp;</span>
2344
- <span class="cline-any cline-neutral">&nbsp;</span>
2345
- <span class="cline-any cline-neutral">&nbsp;</span>
2346
- <span class="cline-any cline-neutral">&nbsp;</span>
2347
- <span class="cline-any cline-neutral">&nbsp;</span>
2348
- <span class="cline-any cline-yes">25x</span>
2349
- <span class="cline-any cline-yes">25x</span>
2350
- <span class="cline-any cline-neutral">&nbsp;</span>
2351
- <span class="cline-any cline-yes">25x</span>
2352
- <span class="cline-any cline-yes">3x</span>
2353
- <span class="cline-any cline-neutral">&nbsp;</span>
2354
- <span class="cline-any cline-neutral">&nbsp;</span>
2355
- <span class="cline-any cline-yes">22x</span>
2356
- <span class="cline-any cline-yes">17x</span>
2357
- <span class="cline-any cline-neutral">&nbsp;</span>
2358
- <span class="cline-any cline-neutral">&nbsp;</span>
2359
- <span class="cline-any cline-yes">5x</span>
2360
- <span class="cline-any cline-neutral">&nbsp;</span>
2361
- <span class="cline-any cline-no">&nbsp;</span>
2362
- <span class="cline-any cline-neutral">&nbsp;</span>
2363
- <span class="cline-any cline-no">&nbsp;</span>
2364
- <span class="cline-any cline-neutral">&nbsp;</span>
2365
- <span class="cline-any cline-neutral">&nbsp;</span>
2366
- <span class="cline-any cline-neutral">&nbsp;</span>
2367
- <span class="cline-any cline-neutral">&nbsp;</span>
2368
- <span class="cline-any cline-neutral">&nbsp;</span>
2369
- <span class="cline-any cline-neutral">&nbsp;</span>
2370
- <span class="cline-any cline-neutral">&nbsp;</span>
2371
- <span class="cline-any cline-yes">1x</span>
2372
- <span class="cline-any cline-yes">1x</span>
2373
- <span class="cline-any cline-yes">1x</span>
2374
- <span class="cline-any cline-neutral">&nbsp;</span>
2375
- <span class="cline-any cline-neutral">&nbsp;</span>
2376
- <span class="cline-any cline-neutral">&nbsp;</span>
2377
- <span class="cline-any cline-yes">1x</span>
2378
- <span class="cline-any cline-no">&nbsp;</span>
2379
- <span class="cline-any cline-neutral">&nbsp;</span>
2380
- <span class="cline-any cline-neutral">&nbsp;</span>
2381
- <span class="cline-any cline-yes">1x</span>
2382
- <span class="cline-any cline-neutral">&nbsp;</span>
2383
- <span class="cline-any cline-yes">1x</span>
2384
- <span class="cline-any cline-neutral">&nbsp;</span>
2385
- <span class="cline-any cline-yes">1x</span>
2386
- <span class="cline-any cline-neutral">&nbsp;</span>
2387
- <span class="cline-any cline-no">&nbsp;</span>
2388
- <span class="cline-any cline-neutral">&nbsp;</span>
2389
- <span class="cline-any cline-yes">1x</span>
2390
- <span class="cline-any cline-no">&nbsp;</span>
2391
- <span class="cline-any cline-no">&nbsp;</span>
2392
- <span class="cline-any cline-neutral">&nbsp;</span>
2393
- <span class="cline-any cline-neutral">&nbsp;</span>
2394
- <span class="cline-any cline-neutral">&nbsp;</span>
2395
- <span class="cline-any cline-yes">1x</span>
2396
- <span class="cline-any cline-neutral">&nbsp;</span>
2397
- <span class="cline-any cline-neutral">&nbsp;</span>
2398
- <span class="cline-any cline-neutral">&nbsp;</span>
2399
- <span class="cline-any cline-neutral">&nbsp;</span>
2400
- <span class="cline-any cline-neutral">&nbsp;</span>
2401
- <span class="cline-any cline-neutral">&nbsp;</span>
2402
- <span class="cline-any cline-neutral">&nbsp;</span>
2403
- <span class="cline-any cline-neutral">&nbsp;</span>
2404
- <span class="cline-any cline-yes">1x</span>
2405
- <span class="cline-any cline-neutral">&nbsp;</span>
2406
- <span class="cline-any cline-no">&nbsp;</span>
2407
- <span class="cline-any cline-neutral">&nbsp;</span>
2408
- <span class="cline-any cline-no">&nbsp;</span>
2409
- <span class="cline-any cline-neutral">&nbsp;</span>
2410
- <span class="cline-any cline-neutral">&nbsp;</span>
2411
- <span class="cline-any cline-neutral">&nbsp;</span>
2412
- <span class="cline-any cline-neutral">&nbsp;</span>
2413
- <span class="cline-any cline-neutral">&nbsp;</span>
2414
- <span class="cline-any cline-neutral">&nbsp;</span>
2415
- <span class="cline-any cline-neutral">&nbsp;</span>
2416
- <span class="cline-any cline-neutral">&nbsp;</span>
2417
- <span class="cline-any cline-neutral">&nbsp;</span>
2418
- <span class="cline-any cline-neutral">&nbsp;</span>
2419
- <span class="cline-any cline-neutral">&nbsp;</span>
2420
- <span class="cline-any cline-neutral">&nbsp;</span>
2421
- <span class="cline-any cline-neutral">&nbsp;</span>
2422
- <span class="cline-any cline-yes">28x</span>
2423
- <span class="cline-any cline-yes">28x</span>
2424
- <span class="cline-any cline-neutral">&nbsp;</span>
2425
- <span class="cline-any cline-yes">28x</span>
2426
- <span class="cline-any cline-neutral">&nbsp;</span>
2427
- <span class="cline-any cline-yes">28x</span>
2428
- <span class="cline-any cline-yes">1x</span>
2429
- <span class="cline-any cline-neutral">&nbsp;</span>
2430
- <span class="cline-any cline-neutral">&nbsp;</span>
2431
- <span class="cline-any cline-neutral">&nbsp;</span>
2432
- <span class="cline-any cline-neutral">&nbsp;</span>
2433
- <span class="cline-any cline-yes">1x</span>
2434
- <span class="cline-any cline-neutral">&nbsp;</span>
2435
- <span class="cline-any cline-yes">1x</span>
2436
- <span class="cline-any cline-neutral">&nbsp;</span>
2437
- <span class="cline-any cline-neutral">&nbsp;</span>
2438
- <span class="cline-any cline-neutral">&nbsp;</span>
2439
- <span class="cline-any cline-yes">27x</span>
2440
- <span class="cline-any cline-yes">1x</span>
2441
- <span class="cline-any cline-neutral">&nbsp;</span>
2442
- <span class="cline-any cline-yes">1x</span>
2443
- <span class="cline-any cline-yes">1x</span>
2444
- <span class="cline-any cline-neutral">&nbsp;</span>
2445
- <span class="cline-any cline-yes">1x</span>
2446
- <span class="cline-any cline-yes">1x</span>
2447
- <span class="cline-any cline-neutral">&nbsp;</span>
2448
- <span class="cline-any cline-neutral">&nbsp;</span>
2449
- <span class="cline-any cline-neutral">&nbsp;</span>
2450
- <span class="cline-any cline-neutral">&nbsp;</span>
2451
- <span class="cline-any cline-neutral">&nbsp;</span>
2452
- <span class="cline-any cline-neutral">&nbsp;</span>
2453
- <span class="cline-any cline-yes">1x</span>
2454
- <span class="cline-any cline-neutral">&nbsp;</span>
2455
- <span class="cline-any cline-yes">1x</span>
2456
- <span class="cline-any cline-neutral">&nbsp;</span>
2457
- <span class="cline-any cline-neutral">&nbsp;</span>
2458
- <span class="cline-any cline-neutral">&nbsp;</span>
2459
- <span class="cline-any cline-neutral">&nbsp;</span>
2460
- <span class="cline-any cline-neutral">&nbsp;</span>
2461
- <span class="cline-any cline-yes">26x</span>
2462
- <span class="cline-any cline-neutral">&nbsp;</span>
2463
- <span class="cline-any cline-neutral">&nbsp;</span>
2464
- <span class="cline-any cline-neutral">&nbsp;</span>
2465
- <span class="cline-any cline-neutral">&nbsp;</span>
2466
- <span class="cline-any cline-neutral">&nbsp;</span>
2467
- <span class="cline-any cline-yes">1x</span>
2468
- <span class="cline-any cline-neutral">&nbsp;</span>
2469
- <span class="cline-any cline-yes">1x</span>
2470
- <span class="cline-any cline-yes">1x</span>
2471
- <span class="cline-any cline-yes">1x</span>
2472
- <span class="cline-any cline-neutral">&nbsp;</span>
2473
- <span class="cline-any cline-neutral">&nbsp;</span>
2474
- <span class="cline-any cline-neutral">&nbsp;</span>
2475
- <span class="cline-any cline-neutral">&nbsp;</span>
2476
- <span class="cline-any cline-neutral">&nbsp;</span>
2477
- <span class="cline-any cline-neutral">&nbsp;</span>
2478
- <span class="cline-any cline-yes">1x</span>
2479
- <span class="cline-any cline-neutral">&nbsp;</span>
2480
- <span class="cline-any cline-yes">1x</span>
2481
- <span class="cline-any cline-neutral">&nbsp;</span>
2482
- <span class="cline-any cline-neutral">&nbsp;</span>
2483
- <span class="cline-any cline-neutral">&nbsp;</span>
2484
- <span class="cline-any cline-neutral">&nbsp;</span>
2485
- <span class="cline-any cline-yes">25x</span>
2486
- <span class="cline-any cline-neutral">&nbsp;</span>
2487
- <span class="cline-any cline-neutral">&nbsp;</span>
2488
- <span class="cline-any cline-yes">25x</span>
2489
- <span class="cline-any cline-yes">1x</span>
2490
- <span class="cline-any cline-neutral">&nbsp;</span>
2491
- <span class="cline-any cline-neutral">&nbsp;</span>
2492
- <span class="cline-any cline-neutral">&nbsp;</span>
2493
- <span class="cline-any cline-neutral">&nbsp;</span>
2494
- <span class="cline-any cline-neutral">&nbsp;</span>
2495
- <span class="cline-any cline-yes">1x</span>
2496
- <span class="cline-any cline-neutral">&nbsp;</span>
2497
- <span class="cline-any cline-yes">1x</span>
2498
- <span class="cline-any cline-neutral">&nbsp;</span>
2499
- <span class="cline-any cline-neutral">&nbsp;</span>
2500
- <span class="cline-any cline-yes">24x</span>
2501
- <span class="cline-any cline-yes">91x</span>
2502
- <span class="cline-any cline-neutral">&nbsp;</span>
2503
- <span class="cline-any cline-neutral">&nbsp;</span>
2504
- <span class="cline-any cline-neutral">&nbsp;</span>
2505
- <span class="cline-any cline-yes">24x</span>
2506
- <span class="cline-any cline-yes">1x</span>
2507
- <span class="cline-any cline-neutral">&nbsp;</span>
2508
- <span class="cline-any cline-neutral">&nbsp;</span>
2509
- <span class="cline-any cline-neutral">&nbsp;</span>
2510
- <span class="cline-any cline-neutral">&nbsp;</span>
2511
- <span class="cline-any cline-neutral">&nbsp;</span>
2512
- <span class="cline-any cline-yes">1x</span>
2513
- <span class="cline-any cline-neutral">&nbsp;</span>
2514
- <span class="cline-any cline-yes">1x</span>
2515
- <span class="cline-any cline-neutral">&nbsp;</span>
2516
- <span class="cline-any cline-neutral">&nbsp;</span>
2517
- <span class="cline-any cline-yes">23x</span>
2518
- <span class="cline-any cline-neutral">&nbsp;</span>
2519
- <span class="cline-any cline-neutral">&nbsp;</span>
2520
- <span class="cline-any cline-yes">23x</span>
2521
- <span class="cline-any cline-neutral">&nbsp;</span>
2522
- <span class="cline-any cline-neutral">&nbsp;</span>
2523
- <span class="cline-any cline-neutral">&nbsp;</span>
2524
- <span class="cline-any cline-neutral">&nbsp;</span>
2525
- <span class="cline-any cline-neutral">&nbsp;</span>
2526
- <span class="cline-any cline-neutral">&nbsp;</span>
2527
- <span class="cline-any cline-yes">23x</span>
2528
- <span class="cline-any cline-yes">1x</span>
2529
- <span class="cline-any cline-neutral">&nbsp;</span>
2530
- <span class="cline-any cline-neutral">&nbsp;</span>
2531
- <span class="cline-any cline-neutral">&nbsp;</span>
2532
- <span class="cline-any cline-neutral">&nbsp;</span>
2533
- <span class="cline-any cline-neutral">&nbsp;</span>
2534
- <span class="cline-any cline-neutral">&nbsp;</span>
2535
- <span class="cline-any cline-neutral">&nbsp;</span>
2536
- <span class="cline-any cline-neutral">&nbsp;</span>
2537
- <span class="cline-any cline-neutral">&nbsp;</span>
2538
- <span class="cline-any cline-yes">1x</span>
2539
- <span class="cline-any cline-neutral">&nbsp;</span>
2540
- <span class="cline-any cline-yes">1x</span>
2541
- <span class="cline-any cline-neutral">&nbsp;</span>
2542
- <span class="cline-any cline-neutral">&nbsp;</span>
2543
- <span class="cline-any cline-neutral">&nbsp;</span>
2544
- <span class="cline-any cline-yes">22x</span>
2545
- <span class="cline-any cline-neutral">&nbsp;</span>
2546
- <span class="cline-any cline-yes">22x</span>
2547
- <span class="cline-any cline-neutral">&nbsp;</span>
2548
- <span class="cline-any cline-neutral">&nbsp;</span>
2549
- <span class="cline-any cline-neutral">&nbsp;</span>
2550
- <span class="cline-any cline-neutral">&nbsp;</span>
2551
- <span class="cline-any cline-neutral">&nbsp;</span>
2552
- <span class="cline-any cline-neutral">&nbsp;</span>
2553
- <span class="cline-any cline-neutral">&nbsp;</span>
2554
- <span class="cline-any cline-yes">22x</span>
2555
- <span class="cline-any cline-neutral">&nbsp;</span>
2556
- <span class="cline-any cline-yes">22x</span>
2557
- <span class="cline-any cline-neutral">&nbsp;</span>
2558
- <span class="cline-any cline-neutral">&nbsp;</span>
2559
- <span class="cline-any cline-neutral">&nbsp;</span>
2560
- <span class="cline-any cline-yes">2x</span>
2561
- <span class="cline-any cline-neutral">&nbsp;</span>
2562
- <span class="cline-any cline-neutral">&nbsp;</span>
2563
- <span class="cline-any cline-neutral">&nbsp;</span>
2564
- <span class="cline-any cline-neutral">&nbsp;</span>
2565
- <span class="cline-any cline-neutral">&nbsp;</span>
2566
- <span class="cline-any cline-neutral">&nbsp;</span>
2567
- <span class="cline-any cline-neutral">&nbsp;</span>
2568
- <span class="cline-any cline-neutral">&nbsp;</span>
2569
- <span class="cline-any cline-neutral">&nbsp;</span>
2570
- <span class="cline-any cline-neutral">&nbsp;</span>
2571
- <span class="cline-any cline-neutral">&nbsp;</span>
2572
- <span class="cline-any cline-yes">2x</span>
2573
- <span class="cline-any cline-neutral">&nbsp;</span>
2574
- <span class="cline-any cline-yes">2x</span>
2575
- <span class="cline-any cline-neutral">&nbsp;</span>
2576
- <span class="cline-any cline-neutral">&nbsp;</span>
2577
- <span class="cline-any cline-neutral">&nbsp;</span>
2578
- <span class="cline-any cline-neutral">&nbsp;</span>
2579
- <span class="cline-any cline-neutral">&nbsp;</span>
2580
- <span class="cline-any cline-yes">20x</span>
2581
- <span class="cline-any cline-yes">3x</span>
2582
- <span class="cline-any cline-yes">17x</span>
2583
- <span class="cline-any cline-yes">16x</span>
2584
- <span class="cline-any cline-neutral">&nbsp;</span>
2585
- <span class="cline-any cline-neutral">&nbsp;</span>
2586
- <span class="cline-any cline-yes">20x</span>
2587
- <span class="cline-any cline-yes">38x</span>
2588
- <span class="cline-any cline-neutral">&nbsp;</span>
2589
- <span class="cline-any cline-yes">19x</span>
2590
- <span class="cline-any cline-yes">34x</span>
2591
- <span class="cline-any cline-neutral">&nbsp;</span>
2592
- <span class="cline-any cline-yes">19x</span>
2593
- <span class="cline-any cline-yes">7x</span>
2594
- <span class="cline-any cline-yes">7x</span>
2595
- <span class="cline-any cline-yes">12x</span>
2596
- <span class="cline-any cline-yes">5x</span>
2597
- <span class="cline-any cline-neutral">&nbsp;</span>
2598
- <span class="cline-any cline-neutral">&nbsp;</span>
2599
- <span class="cline-any cline-neutral">&nbsp;</span>
2600
- <span class="cline-any cline-neutral">&nbsp;</span>
2601
- <span class="cline-any cline-neutral">&nbsp;</span>
2602
- <span class="cline-any cline-neutral">&nbsp;</span>
2603
- <span class="cline-any cline-yes">7x</span>
2604
- <span class="cline-any cline-yes">7x</span>
2605
- <span class="cline-any cline-neutral">&nbsp;</span>
2606
- <span class="cline-any cline-neutral">&nbsp;</span>
2607
- <span class="cline-any cline-neutral">&nbsp;</span>
2608
- <span class="cline-any cline-neutral">&nbsp;</span>
2609
- <span class="cline-any cline-neutral">&nbsp;</span>
2610
- <span class="cline-any cline-neutral">&nbsp;</span>
2611
- <span class="cline-any cline-neutral">&nbsp;</span>
2612
- <span class="cline-any cline-no">&nbsp;</span>
2613
- <span class="cline-any cline-neutral">&nbsp;</span>
2614
- <span class="cline-any cline-neutral">&nbsp;</span>
2615
- <span class="cline-any cline-yes">7x</span>
2616
- <span class="cline-any cline-yes">4x</span>
2617
- <span class="cline-any cline-neutral">&nbsp;</span>
2618
- <span class="cline-any cline-neutral">&nbsp;</span>
2619
- <span class="cline-any cline-neutral">&nbsp;</span>
2620
- <span class="cline-any cline-neutral">&nbsp;</span>
2621
- <span class="cline-any cline-neutral">&nbsp;</span>
2622
- <span class="cline-any cline-neutral">&nbsp;</span>
2623
- <span class="cline-any cline-neutral">&nbsp;</span>
2624
- <span class="cline-any cline-neutral">&nbsp;</span>
2625
- <span class="cline-any cline-neutral">&nbsp;</span>
2626
- <span class="cline-any cline-neutral">&nbsp;</span>
2627
- <span class="cline-any cline-neutral">&nbsp;</span>
2628
- <span class="cline-any cline-yes">4x</span>
2629
- <span class="cline-any cline-neutral">&nbsp;</span>
2630
- <span class="cline-any cline-yes">4x</span>
2631
- <span class="cline-any cline-neutral">&nbsp;</span>
2632
- <span class="cline-any cline-neutral">&nbsp;</span>
2633
- <span class="cline-any cline-neutral">&nbsp;</span>
2634
- <span class="cline-any cline-yes">3x</span>
2635
- <span class="cline-any cline-yes">3x</span>
2636
1096
  <span class="cline-any cline-neutral">&nbsp;</span>
2637
1097
  <span class="cline-any cline-neutral">&nbsp;</span>
2638
1098
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2640,13 +1100,14 @@
2640
1100
  <span class="cline-any cline-neutral">&nbsp;</span>
2641
1101
  <span class="cline-any cline-neutral">&nbsp;</span>
2642
1102
  <span class="cline-any cline-neutral">&nbsp;</span>
1103
+ <span class="cline-any cline-yes">1x</span>
2643
1104
  <span class="cline-any cline-neutral">&nbsp;</span>
1105
+ <span class="cline-any cline-no">&nbsp;</span>
2644
1106
  <span class="cline-any cline-neutral">&nbsp;</span>
1107
+ <span class="cline-any cline-no">&nbsp;</span>
2645
1108
  <span class="cline-any cline-neutral">&nbsp;</span>
2646
1109
  <span class="cline-any cline-neutral">&nbsp;</span>
2647
- <span class="cline-any cline-yes">3x</span>
2648
1110
  <span class="cline-any cline-neutral">&nbsp;</span>
2649
- <span class="cline-any cline-yes">3x</span>
2650
1111
  <span class="cline-any cline-neutral">&nbsp;</span>
2651
1112
  <span class="cline-any cline-neutral">&nbsp;</span>
2652
1113
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2654,8 +1115,8 @@
2654
1115
  <span class="cline-any cline-neutral">&nbsp;</span>
2655
1116
  <span class="cline-any cline-neutral">&nbsp;</span>
2656
1117
  <span class="cline-any cline-neutral">&nbsp;</span>
2657
- <span class="cline-any cline-yes">13x</span>
2658
1118
  <span class="cline-any cline-neutral">&nbsp;</span>
1119
+ <span class="cline-any cline-yes">28x</span>
2659
1120
  <span class="cline-any cline-neutral">&nbsp;</span>
2660
1121
  <span class="cline-any cline-neutral">&nbsp;</span>
2661
1122
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2664,20 +1125,15 @@
2664
1125
  <span class="cline-any cline-neutral">&nbsp;</span>
2665
1126
  <span class="cline-any cline-neutral">&nbsp;</span>
2666
1127
  <span class="cline-any cline-neutral">&nbsp;</span>
2667
- <span class="cline-any cline-yes">13x</span>
2668
1128
  <span class="cline-any cline-neutral">&nbsp;</span>
2669
- <span class="cline-any cline-yes">13x</span>
2670
1129
  <span class="cline-any cline-neutral">&nbsp;</span>
2671
- <span class="cline-any cline-no">&nbsp;</span>
2672
1130
  <span class="cline-any cline-neutral">&nbsp;</span>
2673
1131
  <span class="cline-any cline-neutral">&nbsp;</span>
2674
1132
  <span class="cline-any cline-neutral">&nbsp;</span>
2675
1133
  <span class="cline-any cline-neutral">&nbsp;</span>
2676
1134
  <span class="cline-any cline-neutral">&nbsp;</span>
2677
1135
  <span class="cline-any cline-neutral">&nbsp;</span>
2678
- <span class="cline-any cline-no">&nbsp;</span>
2679
1136
  <span class="cline-any cline-neutral">&nbsp;</span>
2680
- <span class="cline-any cline-no">&nbsp;</span>
2681
1137
  <span class="cline-any cline-neutral">&nbsp;</span>
2682
1138
  <span class="cline-any cline-neutral">&nbsp;</span>
2683
1139
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2785,39 +1241,22 @@
2785
1241
  <span class="cline-any cline-neutral">&nbsp;</span>
2786
1242
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {
2787
1243
  Context,
2788
- AttributeValue,
2789
- BucketKey,
2790
- BucketValue,
2791
1244
  DatafileContent,
2792
1245
  Feature,
2793
1246
  FeatureKey,
2794
1247
  InitialFeatures,
2795
- OverrideFeature,
2796
1248
  StickyFeatures,
2797
- Traffic,
2798
1249
  VariableType,
2799
1250
  VariableValue,
2800
1251
  VariationValue,
2801
- Variation,
2802
- RuleKey,
2803
1252
  VariableKey,
2804
- VariableSchema,
2805
- Force,
2806
- Required,
2807
1253
  } from "@featurevisor/types";
2808
1254
  &nbsp;
2809
1255
  import { createLogger, Logger, LogLevel } from "./logger";
2810
1256
  import { DatafileReader } from "./datafileReader";
2811
1257
  import { Emitter } from "./emitter";
2812
- import { getBucketedNumber } from "./bucket";
2813
- import {
2814
- findForceFromFeature,
2815
- getMatchedTraffic,
2816
- getMatchedTrafficAndAllocation,
2817
- parseFromStringifiedSegments,
2818
- } from "./feature";
2819
- import { allConditionsAreMatched } from "./conditions";
2820
- import { allGroupSegmentsAreMatched } from "./segments";
1258
+ import { ConfigureBucketKey, ConfigureBucketValue } from "./bucket";
1259
+ import { Evaluation, evaluate } from "./evaluate";
2821
1260
  &nbsp;
2822
1261
  export type ReadyCallback = () =&gt; void;
2823
1262
  &nbsp;
@@ -2828,10 +1267,6 @@ export type ActivationCallback = (
2828
1267
  captureContext: Context,
2829
1268
  ) =&gt; void;
2830
1269
  &nbsp;
2831
- export type ConfigureBucketKey = (feature, context, bucketKey: BucketKey) =&gt; BucketKey;
2832
- &nbsp;
2833
- export type ConfigureBucketValue = (feature, context, bucketValue: BucketValue) =&gt; BucketValue;
2834
- &nbsp;
2835
1270
  export interface Statuses {
2836
1271
  ready: boolean;
2837
1272
  refreshInProgress: boolean;
@@ -2869,51 +1304,6 @@ const emptyDatafile: DatafileContent = {
2869
1304
  &nbsp;
2870
1305
  export type DatafileFetchHandler = (datafileUrl: string) =&gt; Promise&lt;DatafileContent&gt;;
2871
1306
  &nbsp;
2872
- export enum EvaluationReason {
2873
- NOT_FOUND = "not_found",
2874
- NO_VARIATIONS = "no_variations",
2875
- NO_MATCH = "no_match",
2876
- DISABLED = "disabled",
2877
- REQUIRED = "required",
2878
- OUT_OF_RANGE = "out_of_range",
2879
- FORCED = "forced",
2880
- INITIAL = "initial",
2881
- STICKY = "sticky",
2882
- RULE = "rule",
2883
- ALLOCATED = "allocated",
2884
- DEFAULTED = "defaulted",
2885
- OVERRIDE = "override",
2886
- ERROR = "error",
2887
- }
2888
- &nbsp;
2889
- export interface Evaluation {
2890
- // required
2891
- featureKey: FeatureKey;
2892
- reason: EvaluationReason;
2893
- &nbsp;
2894
- // common
2895
- bucketKey?: BucketKey;
2896
- bucketValue?: BucketValue;
2897
- ruleKey?: RuleKey;
2898
- error?: Error;
2899
- enabled?: boolean;
2900
- traffic?: Traffic;
2901
- forceIndex?: number;
2902
- force?: Force;
2903
- required?: Required[];
2904
- sticky?: OverrideFeature;
2905
- initial?: OverrideFeature;
2906
- &nbsp;
2907
- // variation
2908
- variation?: Variation;
2909
- variationValue?: VariationValue;
2910
- &nbsp;
2911
- // variable
2912
- variableKey?: VariableKey;
2913
- variableValue?: VariableValue;
2914
- variableSchema?: VariableSchema;
2915
- }
2916
- &nbsp;
2917
1307
  function fetchDatafileContent(
2918
1308
  datafileUrl,
2919
1309
  handleDatafileFetch?: DatafileFetchHandler,
@@ -3100,87 +1490,10 @@ export class FeaturevisorInstance {
3100
1490
  return this.datafileReader.getRevision();
3101
1491
  }
3102
1492
  &nbsp;
3103
- getFeature(featureKey: string | Feature): Feature | undefined {
3104
- return typeof featureKey === "string"
1493
+ <span class="fstat-no" title="function not covered" > getFeature(</span>featureKey: string | Feature): Feature | undefined {
1494
+ <span class="cstat-no" title="statement not covered" > return typeof featureKey === "string"</span>
3105
1495
  ? this.datafileReader.getFeature(featureKey) // only key provided
3106
- : <span class="branch-1 cbranch-no" title="branch not covered" >featureKey;</span> // full feature provided
3107
- }
3108
- &nbsp;
3109
- /**
3110
- * Bucketing
3111
- */
3112
- private getBucketKey(feature: Feature, context: Context): BucketKey {
3113
- const featureKey = feature.key;
3114
- &nbsp;
3115
- let type;
3116
- let attributeKeys;
3117
- &nbsp;
3118
- if (typeof feature.bucketBy === "string") {
3119
- type = "plain";
3120
- attributeKeys = [feature.bucketBy];
3121
- } else if (Array.isArray(feature.bucketBy)) {
3122
- type = "and";
3123
- attributeKeys = feature.bucketBy;
3124
- } else if (typeof feature.bucketBy === "object" &amp;&amp; Array.isArray(feature.bucketBy.or)) {
3125
- type = "or";
3126
- attributeKeys = feature.bucketBy.or;
3127
- } else <span class="missing-if-branch" title="else path not taken" >E</span>{
3128
- <span class="cstat-no" title="statement not covered" > this.logger.error("invalid bucketBy", { featureKey, bucketBy: feature.bucketBy });</span>
3129
- &nbsp;
3130
- <span class="cstat-no" title="statement not covered" > throw new Error("invalid bucketBy");</span>
3131
- }
3132
- &nbsp;
3133
- const bucketKey: AttributeValue[] = [];
3134
- &nbsp;
3135
- attributeKeys.forEach((attributeKey) =&gt; {
3136
- const attributeValue = context[attributeKey];
3137
- &nbsp;
3138
- if (typeof attributeValue === "undefined") {
3139
- return;
3140
- }
3141
- &nbsp;
3142
- if (type === "plain" || type === "and") {
3143
- bucketKey.push(attributeValue);
3144
- } else {
3145
- // or
3146
- if (bucketKey.length === 0) {
3147
- bucketKey.push(attributeValue);
3148
- }
3149
- }
3150
- });
3151
- &nbsp;
3152
- bucketKey.push(featureKey);
3153
- &nbsp;
3154
- const result = bucketKey.join(this.bucketKeySeparator);
3155
- &nbsp;
3156
- if (this.configureBucketKey) {
3157
- return this.configureBucketKey(feature, context, result);
3158
- }
3159
- &nbsp;
3160
- return result;
3161
- }
3162
- &nbsp;
3163
- private getBucketValue(
3164
- feature: Feature,
3165
- context: Context,
3166
- ): { bucketKey: BucketKey; bucketValue: BucketValue } {
3167
- const bucketKey = this.getBucketKey(feature, context);
3168
- &nbsp;
3169
- const value = getBucketedNumber(bucketKey);
3170
- &nbsp;
3171
- if (this.configureBucketValue) {
3172
- const configuredValue = this.configureBucketValue(feature, context, value);
3173
- &nbsp;
3174
- return {
3175
- bucketKey,
3176
- bucketValue: configuredValue,
3177
- };
3178
- }
3179
- &nbsp;
3180
- return {
3181
- bucketKey,
3182
- bucketValue: value,
3183
- };
1496
+ : featureKey; // full feature provided
3184
1497
  }
3185
1498
  &nbsp;
3186
1499
  /**
@@ -3259,241 +1572,24 @@ export class FeaturevisorInstance {
3259
1572
  * Flag
3260
1573
  */
3261
1574
  evaluateFlag(featureKey: FeatureKey | Feature, context: Context = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span>: Evaluation {
3262
- let evaluation: Evaluation;
3263
- &nbsp;
3264
- try {
3265
- const key = typeof featureKey === "string" ? featureKey : <span class="branch-1 cbranch-no" title="branch not covered" >featureKey.key;</span>
3266
- &nbsp;
3267
- // sticky
3268
- if (
3269
- this.stickyFeatures &amp;&amp;
3270
- this.stickyFeatures[key] &amp;&amp;
3271
- typeof this.stickyFeatures[key].enabled !== "undefined"
3272
- ) {
3273
- evaluation = {
3274
- featureKey: key,
3275
- reason: EvaluationReason.STICKY,
3276
- sticky: this.stickyFeatures[key],
3277
- enabled: this.stickyFeatures[key].enabled,
3278
- };
3279
- &nbsp;
3280
- this.logger.debug("using sticky enabled", evaluation);
3281
- &nbsp;
3282
- return evaluation;
3283
- }
3284
- &nbsp;
3285
- // initial
3286
- if (
3287
- this.statuses &amp;&amp;
3288
- !this.statuses.ready &amp;&amp;
3289
- this.initialFeatures &amp;&amp;
3290
- this.initialFeatures[key] &amp;&amp;
3291
- typeof this.initialFeatures[key].enabled !== "undefined"
3292
- ) {
3293
- evaluation = {
3294
- featureKey: key,
3295
- reason: EvaluationReason.INITIAL,
3296
- initial: this.initialFeatures[key],
3297
- enabled: this.initialFeatures[key].enabled,
3298
- };
3299
- &nbsp;
3300
- this.logger.debug("using initial enabled", evaluation);
3301
- &nbsp;
3302
- return evaluation;
3303
- }
3304
- &nbsp;
3305
- const feature = this.getFeature(featureKey);
3306
- &nbsp;
3307
- // not found
3308
- if (!feature) {
3309
- evaluation = {
3310
- featureKey: key,
3311
- reason: EvaluationReason.NOT_FOUND,
3312
- };
3313
- &nbsp;
3314
- this.logger.warn("feature not found", evaluation);
1575
+ return evaluate({
1576
+ type: "flag",
3315
1577
  &nbsp;
3316
- return evaluation;
3317
- }
3318
- &nbsp;
3319
- // deprecated
3320
- if (feature.deprecated) {
3321
- this.logger.warn("feature is deprecated", { featureKey: feature.key });
3322
- }
3323
- &nbsp;
3324
- const finalContext = this.interceptContext ? this.interceptContext(context) : context;
3325
- &nbsp;
3326
- // forced
3327
- const { force, forceIndex } = findForceFromFeature(
3328
- feature,
3329
- context,
3330
- this.datafileReader,
3331
- this.logger,
3332
- );
3333
- &nbsp;
3334
- if (force &amp;&amp; typeof force.enabled !== "undefined") {
3335
- evaluation = {
3336
- featureKey: feature.key,
3337
- reason: EvaluationReason.FORCED,
3338
- forceIndex,
3339
- force,
3340
- enabled: force.enabled,
3341
- };
3342
- &nbsp;
3343
- this.logger.debug("forced enabled found", evaluation);
3344
- &nbsp;
3345
- return evaluation;
3346
- }
3347
- &nbsp;
3348
- // required
3349
- if (feature.required &amp;&amp; feature.required.length &gt; 0) {
3350
- const requiredFeaturesAreEnabled = feature.required.every((required) =&gt; {
3351
- let requiredKey;
3352
- let requiredVariation;
3353
- &nbsp;
3354
- if (typeof required === "string") {
3355
- requiredKey = required;
3356
- } else {
3357
- requiredKey = required.key;
3358
- requiredVariation = required.variation;
3359
- }
3360
- &nbsp;
3361
- const requiredIsEnabled = this.isEnabled(requiredKey, finalContext);
3362
- &nbsp;
3363
- if (!requiredIsEnabled) {
3364
- return false;
3365
- }
3366
- &nbsp;
3367
- if (typeof requiredVariation !== "undefined") {
3368
- const requiredVariationValue = this.getVariation(requiredKey, finalContext);
3369
- &nbsp;
3370
- return requiredVariationValue === requiredVariation;
3371
- }
3372
- &nbsp;
3373
- return true;
3374
- });
3375
- &nbsp;
3376
- if (!requiredFeaturesAreEnabled) {
3377
- evaluation = {
3378
- featureKey: feature.key,
3379
- reason: EvaluationReason.REQUIRED,
3380
- required: feature.required,
3381
- enabled: requiredFeaturesAreEnabled,
3382
- };
3383
- &nbsp;
3384
- this.logger.debug("required features not enabled", evaluation);
3385
- &nbsp;
3386
- return evaluation;
3387
- }
3388
- }
3389
- &nbsp;
3390
- // bucketing
3391
- const { bucketKey, bucketValue } = this.getBucketValue(feature, finalContext);
3392
- &nbsp;
3393
- const matchedTraffic = getMatchedTraffic(
3394
- feature.traffic,
3395
- finalContext,
3396
- this.datafileReader,
3397
- this.logger,
3398
- );
3399
- &nbsp;
3400
- if (matchedTraffic) {
3401
- // check if mutually exclusive
3402
- if (feature.ranges &amp;&amp; feature.ranges.length &gt; 0) {
3403
- const matchedRange = feature.ranges.find((range) =&gt; {
3404
- return bucketValue &gt;= range[0] &amp;&amp; bucketValue &lt; range[1];
3405
- });
3406
- &nbsp;
3407
- // matched
3408
- if (matchedRange) {
3409
- evaluation = {
3410
- featureKey: feature.key,
3411
- reason: EvaluationReason.ALLOCATED,
3412
- bucketKey,
3413
- bucketValue,
3414
- ruleKey: matchedTraffic.key,
3415
- traffic: matchedTraffic,
3416
- enabled:
3417
- typeof matchedTraffic.enabled === "undefined" ? true : <span class="branch-1 cbranch-no" title="branch not covered" >matchedTraffic.enabled,</span>
3418
- };
3419
- &nbsp;
3420
- this.logger.debug("matched", evaluation);
3421
- &nbsp;
3422
- return evaluation;
3423
- }
3424
- &nbsp;
3425
- // no match
3426
- evaluation = {
3427
- featureKey: feature.key,
3428
- reason: EvaluationReason.OUT_OF_RANGE,
3429
- bucketKey,
3430
- bucketValue,
3431
- enabled: false,
3432
- };
3433
- &nbsp;
3434
- this.logger.debug("not matched", evaluation);
3435
- &nbsp;
3436
- return evaluation;
3437
- }
3438
- &nbsp;
3439
- // override from rule
3440
- if (typeof matchedTraffic.enabled !== "undefined") {
3441
- evaluation = {
3442
- featureKey: feature.key,
3443
- reason: EvaluationReason.OVERRIDE,
3444
- bucketKey,
3445
- bucketValue,
3446
- ruleKey: matchedTraffic.key,
3447
- traffic: matchedTraffic,
3448
- enabled: matchedTraffic.enabled,
3449
- };
3450
- &nbsp;
3451
- this.logger.debug("override from rule", evaluation);
3452
- &nbsp;
3453
- return evaluation;
3454
- }
3455
- &nbsp;
3456
- // treated as enabled because of matched traffic
3457
- if (bucketValue &lt;= matchedTraffic.percentage) {
3458
- evaluation = {
3459
- featureKey: feature.key,
3460
- reason: EvaluationReason.RULE,
3461
- bucketKey,
3462
- bucketValue,
3463
- ruleKey: matchedTraffic.key,
3464
- traffic: matchedTraffic,
3465
- enabled: true,
3466
- };
3467
- &nbsp;
3468
- this.logger.debug("matched traffic", evaluation);
3469
- &nbsp;
3470
- return evaluation;
3471
- }
3472
- }
3473
- &nbsp;
3474
- // nothing matched
3475
- evaluation = {
3476
- featureKey: feature.key,
3477
- reason: EvaluationReason.NO_MATCH,
3478
- bucketKey,
3479
- bucketValue,
3480
- enabled: false,
3481
- };
3482
- &nbsp;
3483
- this.logger.debug("nothing matched", evaluation);
1578
+ featureKey,
1579
+ context,
3484
1580
  &nbsp;
3485
- return evaluation;
3486
- } catch (e) {
3487
- <span class="cstat-no" title="statement not covered" > evaluation = {</span>
3488
- featureKey: typeof featureKey === "string" ? featureKey : featureKey.key,
3489
- reason: EvaluationReason.ERROR,
3490
- error: e,
3491
- };
1581
+ logger: this.logger,
1582
+ datafileReader: this.datafileReader,
1583
+ statuses: this.statuses,
1584
+ interceptContext: this.interceptContext,
3492
1585
  &nbsp;
3493
- <span class="cstat-no" title="statement not covered" > this.logger.error("error", evaluation);</span>
1586
+ stickyFeatures: this.stickyFeatures,
1587
+ initialFeatures: this.initialFeatures,
3494
1588
  &nbsp;
3495
- <span class="cstat-no" title="statement not covered" > return evaluation;</span>
3496
- }
1589
+ bucketKeySeparator: this.bucketKeySeparator,
1590
+ configureBucketKey: this.configureBucketKey,
1591
+ configureBucketValue: this.configureBucketValue,
1592
+ });
3497
1593
  }
3498
1594
  &nbsp;
3499
1595
  isEnabled(featureKey: FeatureKey | Feature, context: Context = {}): boolean {
@@ -3512,193 +1608,24 @@ export class FeaturevisorInstance {
3512
1608
  * Variation
3513
1609
  */
3514
1610
  evaluateVariation(featureKey: FeatureKey | Feature, context: Context = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span>: Evaluation {
3515
- let evaluation: Evaluation;
3516
- &nbsp;
3517
- try {
3518
- const key = typeof featureKey === "string" ? featureKey : <span class="branch-1 cbranch-no" title="branch not covered" >featureKey.key;</span>
3519
- &nbsp;
3520
- const flag = this.evaluateFlag(featureKey, context);
3521
- &nbsp;
3522
- if (flag.enabled === false) {
3523
- evaluation = {
3524
- featureKey: key,
3525
- reason: EvaluationReason.DISABLED,
3526
- };
3527
- &nbsp;
3528
- this.logger.debug("feature is disabled", evaluation);
3529
- &nbsp;
3530
- return evaluation;
3531
- }
3532
- &nbsp;
3533
- // sticky
3534
- if (this.stickyFeatures &amp;&amp; this.stickyFeatures[key]) {
3535
- const variationValue = this.stickyFeatures[key].variation;
1611
+ return evaluate({
1612
+ type: "variation",
3536
1613
  &nbsp;
3537
- if (typeof variationValue !== "undefined") {
3538
- evaluation = {
3539
- featureKey: key,
3540
- reason: EvaluationReason.STICKY,
3541
- variationValue,
3542
- };
1614
+ featureKey,
1615
+ context,
3543
1616
  &nbsp;
3544
- this.logger.debug("using sticky variation", evaluation);
1617
+ logger: this.logger,
1618
+ datafileReader: this.datafileReader,
1619
+ statuses: this.statuses,
1620
+ interceptContext: this.interceptContext,
3545
1621
  &nbsp;
3546
- return evaluation;
3547
- }
3548
- }
3549
- &nbsp;
3550
- // initial
3551
- if (
3552
- this.statuses &amp;&amp;
3553
- !this.statuses.ready &amp;&amp;
3554
- this.initialFeatures &amp;&amp;
3555
- this.initialFeatures[key] &amp;&amp;
3556
- typeof this.initialFeatures[key].variation !== "undefined"
3557
- ) {
3558
- const variationValue = this.initialFeatures[key].variation;
3559
- &nbsp;
3560
- evaluation = {
3561
- featureKey: key,
3562
- reason: EvaluationReason.INITIAL,
3563
- variationValue,
3564
- };
3565
- &nbsp;
3566
- this.logger.debug("using initial variation", evaluation);
3567
- &nbsp;
3568
- return evaluation;
3569
- }
3570
- &nbsp;
3571
- const feature = this.getFeature(featureKey);
3572
- &nbsp;
3573
- // not found
3574
- if (!feature) {
3575
- evaluation = {
3576
- featureKey: key,
3577
- reason: EvaluationReason.NOT_FOUND,
3578
- };
3579
- &nbsp;
3580
- this.logger.warn("feature not found", evaluation);
3581
- &nbsp;
3582
- return evaluation;
3583
- }
3584
- &nbsp;
3585
- // no variations
3586
- if (!feature.variations || feature.variations.length === 0) {
3587
- evaluation = {
3588
- featureKey: key,
3589
- reason: EvaluationReason.NO_VARIATIONS,
3590
- };
3591
- &nbsp;
3592
- this.logger.warn("no variations", evaluation);
3593
- &nbsp;
3594
- return evaluation;
3595
- }
3596
- &nbsp;
3597
- const finalContext = this.interceptContext ? this.interceptContext(context) : context;
3598
- &nbsp;
3599
- // forced
3600
- const { force, forceIndex } = findForceFromFeature(
3601
- feature,
3602
- context,
3603
- this.datafileReader,
3604
- this.logger,
3605
- );
3606
- &nbsp;
3607
- if (force &amp;&amp; force.variation) {
3608
- const variation = feature.variations.find((v) =&gt; v.value === force.variation);
3609
- &nbsp;
3610
- if (variation) {
3611
- evaluation = {
3612
- featureKey: feature.key,
3613
- reason: EvaluationReason.FORCED,
3614
- forceIndex,
3615
- force,
3616
- variation,
3617
- };
3618
- &nbsp;
3619
- this.logger.debug("forced variation found", evaluation);
3620
- &nbsp;
3621
- return evaluation;
3622
- }
3623
- }
3624
- &nbsp;
3625
- // bucketing
3626
- const { bucketKey, bucketValue } = this.getBucketValue(feature, finalContext);
3627
- &nbsp;
3628
- const { matchedTraffic, matchedAllocation } = getMatchedTrafficAndAllocation(
3629
- feature.traffic,
3630
- finalContext,
3631
- bucketValue,
3632
- this.datafileReader,
3633
- this.logger,
3634
- );
3635
- &nbsp;
3636
- if (matchedTraffic) {
3637
- // override from rule
3638
- if (matchedTraffic.variation) {
3639
- const variation = feature.variations.find((v) =&gt; v.value === matchedTraffic.variation);
3640
- &nbsp;
3641
- if (variation) {
3642
- evaluation = {
3643
- featureKey: feature.key,
3644
- reason: EvaluationReason.RULE,
3645
- bucketKey,
3646
- bucketValue,
3647
- ruleKey: matchedTraffic.key,
3648
- traffic: matchedTraffic,
3649
- variation,
3650
- };
1622
+ stickyFeatures: this.stickyFeatures,
1623
+ initialFeatures: this.initialFeatures,
3651
1624
  &nbsp;
3652
- this.logger.debug("override from rule", evaluation);
3653
- &nbsp;
3654
- return evaluation;
3655
- }
3656
- }
3657
- &nbsp;
3658
- // regular allocation
3659
- if (matchedAllocation &amp;&amp; matchedAllocation.variation) {
3660
- const variation = feature.variations.find((v) =&gt; v.value === matchedAllocation.variation);
3661
- &nbsp;
3662
- if (variation) {
3663
- evaluation = {
3664
- featureKey: feature.key,
3665
- reason: EvaluationReason.ALLOCATED,
3666
- bucketKey,
3667
- bucketValue,
3668
- ruleKey: matchedTraffic.key,
3669
- traffic: matchedTraffic,
3670
- variation,
3671
- };
3672
- &nbsp;
3673
- this.logger.debug("allocated variation", evaluation);
3674
- &nbsp;
3675
- return evaluation;
3676
- }
3677
- }
3678
- }
3679
- &nbsp;
3680
- // nothing matched
3681
- <span class="cstat-no" title="statement not covered" > evaluation = {</span>
3682
- featureKey: feature.key,
3683
- reason: EvaluationReason.NO_MATCH,
3684
- bucketKey,
3685
- bucketValue,
3686
- };
3687
- &nbsp;
3688
- <span class="cstat-no" title="statement not covered" > this.logger.debug("no matched variation", evaluation);</span>
3689
- &nbsp;
3690
- <span class="cstat-no" title="statement not covered" > return evaluation;</span>
3691
- } catch (e) {
3692
- <span class="cstat-no" title="statement not covered" > evaluation = {</span>
3693
- featureKey: typeof featureKey === "string" ? featureKey : featureKey.key,
3694
- reason: EvaluationReason.ERROR,
3695
- error: e,
3696
- };
3697
- &nbsp;
3698
- <span class="cstat-no" title="statement not covered" > this.logger.error("error", evaluation);</span>
3699
- &nbsp;
3700
- <span class="cstat-no" title="statement not covered" > return evaluation;</span>
3701
- }
1625
+ bucketKeySeparator: this.bucketKeySeparator,
1626
+ configureBucketKey: this.configureBucketKey,
1627
+ configureBucketValue: this.configureBucketValue,
1628
+ });
3702
1629
  }
3703
1630
  &nbsp;
3704
1631
  getVariation(
@@ -3777,268 +1704,25 @@ export class FeaturevisorInstance {
3777
1704
  variableKey: VariableKey,
3778
1705
  context: Context = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span>
3779
1706
  ): Evaluation {
3780
- let evaluation: Evaluation;
3781
- &nbsp;
3782
- try {
3783
- const key = typeof featureKey === "string" ? featureKey : <span class="branch-1 cbranch-no" title="branch not covered" >featureKey.key;</span>
3784
- &nbsp;
3785
- const flag = this.evaluateFlag(featureKey, context);
3786
- &nbsp;
3787
- if (flag.enabled === false) {
3788
- evaluation = {
3789
- featureKey: key,
3790
- reason: EvaluationReason.DISABLED,
3791
- };
3792
- &nbsp;
3793
- this.logger.debug("feature is disabled", evaluation);
3794
- &nbsp;
3795
- return evaluation;
3796
- }
3797
- &nbsp;
3798
- // sticky
3799
- if (this.stickyFeatures &amp;&amp; this.stickyFeatures[key]) {
3800
- const variables = this.stickyFeatures[key].variables;
3801
- &nbsp;
3802
- if (variables) {
3803
- const result = variables[variableKey];
3804
- &nbsp;
3805
- if (typeof result !== "undefined") {
3806
- evaluation = {
3807
- featureKey: key,
3808
- reason: EvaluationReason.STICKY,
3809
- variableKey,
3810
- variableValue: result,
3811
- };
1707
+ return evaluate({
1708
+ type: "variable",
3812
1709
  &nbsp;
3813
- this.logger.debug("using sticky variable", evaluation);
1710
+ featureKey,
1711
+ variableKey,
1712
+ context,
3814
1713
  &nbsp;
3815
- return evaluation;
3816
- }
3817
- }
3818
- }
3819
- &nbsp;
3820
- // initial
3821
- if (
3822
- this.statuses &amp;&amp;
3823
- !this.statuses.ready &amp;&amp;
3824
- this.initialFeatures &amp;&amp;
3825
- this.initialFeatures[key]
3826
- ) {
3827
- const variables = this.initialFeatures[key].variables;
3828
- &nbsp;
3829
- if (variables) {
3830
- if (typeof variables[variableKey] !== "undefined") {
3831
- evaluation = {
3832
- featureKey: key,
3833
- reason: EvaluationReason.INITIAL,
3834
- variableKey,
3835
- variableValue: variables[variableKey],
3836
- };
3837
- &nbsp;
3838
- this.logger.debug("using initial variable", evaluation);
3839
- &nbsp;
3840
- return evaluation;
3841
- }
3842
- }
3843
- }
3844
- &nbsp;
3845
- const feature = this.getFeature(featureKey);
3846
- &nbsp;
3847
- // not found
3848
- if (!feature) {
3849
- evaluation = {
3850
- featureKey: key,
3851
- reason: EvaluationReason.NOT_FOUND,
3852
- variableKey,
3853
- };
3854
- &nbsp;
3855
- this.logger.warn("feature not found in datafile", evaluation);
3856
- &nbsp;
3857
- return evaluation;
3858
- }
3859
- &nbsp;
3860
- const variableSchema = Array.isArray(feature.variablesSchema)
3861
- ? feature.variablesSchema.find((v) =&gt; v.key === variableKey)
3862
- : <span class="branch-1 cbranch-no" title="branch not covered" >undefined;</span>
3863
- &nbsp;
3864
- // variable schema not found
3865
- if (!variableSchema) {
3866
- evaluation = {
3867
- featureKey: key,
3868
- reason: EvaluationReason.NOT_FOUND,
3869
- variableKey,
3870
- };
3871
- &nbsp;
3872
- this.logger.warn("variable schema not found", evaluation);
3873
- &nbsp;
3874
- return evaluation;
3875
- }
3876
- &nbsp;
3877
- const finalContext = this.interceptContext ? <span class="branch-0 cbranch-no" title="branch not covered" >this.interceptContext(context) </span>: context;
3878
- &nbsp;
3879
- // forced
3880
- const { force, forceIndex } = findForceFromFeature(
3881
- feature,
3882
- context,
3883
- this.datafileReader,
3884
- this.logger,
3885
- );
3886
- &nbsp;
3887
- if (force &amp;&amp; force.variables &amp;&amp; typeof force.variables[variableKey] !== "undefined") {
3888
- evaluation = {
3889
- featureKey: feature.key,
3890
- reason: EvaluationReason.FORCED,
3891
- forceIndex,
3892
- force,
3893
- variableKey,
3894
- variableSchema,
3895
- variableValue: force.variables[variableKey],
3896
- };
3897
- &nbsp;
3898
- this.logger.debug("forced variable", evaluation);
3899
- &nbsp;
3900
- return evaluation;
3901
- }
3902
- &nbsp;
3903
- // bucketing
3904
- const { bucketKey, bucketValue } = this.getBucketValue(feature, finalContext);
3905
- &nbsp;
3906
- const { matchedTraffic, matchedAllocation } = getMatchedTrafficAndAllocation(
3907
- feature.traffic,
3908
- finalContext,
3909
- bucketValue,
3910
- this.datafileReader,
3911
- this.logger,
3912
- );
3913
- &nbsp;
3914
- if (matchedTraffic) {
3915
- // override from rule
3916
- if (
3917
- matchedTraffic.variables &amp;&amp;
3918
- typeof matchedTraffic.variables[variableKey] !== "undefined"
3919
- ) {
3920
- evaluation = {
3921
- featureKey: feature.key,
3922
- reason: EvaluationReason.RULE,
3923
- bucketKey,
3924
- bucketValue,
3925
- ruleKey: matchedTraffic.key,
3926
- traffic: matchedTraffic,
3927
- variableKey,
3928
- variableSchema,
3929
- variableValue: matchedTraffic.variables[variableKey],
3930
- };
3931
- &nbsp;
3932
- this.logger.debug("override from rule", evaluation);
3933
- &nbsp;
3934
- return evaluation;
3935
- }
3936
- &nbsp;
3937
- // regular allocation
3938
- let variationValue;
3939
- &nbsp;
3940
- if (force &amp;&amp; force.variation) {
3941
- variationValue = force.variation;
3942
- } else if (matchedAllocation &amp;&amp; matchedAllocation.variation) {
3943
- variationValue = matchedAllocation.variation;
3944
- }
3945
- &nbsp;
3946
- if (variationValue &amp;&amp; Array.isArray(feature.variations)) {
3947
- const variation = feature.variations.find((v) =&gt; v.value === variationValue);
3948
- &nbsp;
3949
- if (variation &amp;&amp; variation.variables) {
3950
- const variableFromVariation = variation.variables.find((v) =&gt; v.key === variableKey);
3951
- &nbsp;
3952
- if (variableFromVariation) {
3953
- if (variableFromVariation.overrides) {
3954
- const override = variableFromVariation.overrides.find((o) =&gt; {
3955
- if (o.conditions) {
3956
- return allConditionsAreMatched(
3957
- typeof o.conditions === "string" ? <span class="branch-0 cbranch-no" title="branch not covered" >JSON.parse(o.conditions) </span>: o.conditions,
3958
- finalContext,
3959
- this.logger,
3960
- );
3961
- }
3962
- &nbsp;
3963
- if (o.segments) {
3964
- return allGroupSegmentsAreMatched(
3965
- parseFromStringifiedSegments(o.segments),
3966
- finalContext,
3967
- this.datafileReader,
3968
- this.logger,
3969
- );
3970
- }
3971
- &nbsp;
3972
- <span class="cstat-no" title="statement not covered" > return false;</span>
3973
- });
3974
- &nbsp;
3975
- if (override) {
3976
- evaluation = {
3977
- featureKey: feature.key,
3978
- reason: EvaluationReason.OVERRIDE,
3979
- bucketKey,
3980
- bucketValue,
3981
- ruleKey: matchedTraffic.key,
3982
- traffic: matchedTraffic,
3983
- variableKey,
3984
- variableSchema,
3985
- variableValue: override.value,
3986
- };
1714
+ logger: this.logger,
1715
+ datafileReader: this.datafileReader,
1716
+ statuses: this.statuses,
1717
+ interceptContext: this.interceptContext,
3987
1718
  &nbsp;
3988
- this.logger.debug("variable override", evaluation);
1719
+ stickyFeatures: this.stickyFeatures,
1720
+ initialFeatures: this.initialFeatures,
3989
1721
  &nbsp;
3990
- return evaluation;
3991
- }
3992
- }
3993
- &nbsp;
3994
- if (typeof variableFromVariation.value !== "undefined") {
3995
- evaluation = {
3996
- featureKey: feature.key,
3997
- reason: EvaluationReason.ALLOCATED,
3998
- bucketKey,
3999
- bucketValue,
4000
- ruleKey: matchedTraffic.key,
4001
- traffic: matchedTraffic,
4002
- variableKey,
4003
- variableSchema,
4004
- variableValue: variableFromVariation.value,
4005
- };
4006
- &nbsp;
4007
- this.logger.debug("allocated variable", evaluation);
4008
- &nbsp;
4009
- return evaluation;
4010
- }
4011
- }
4012
- }
4013
- }
4014
- }
4015
- &nbsp;
4016
- // fall back to default
4017
- evaluation = {
4018
- featureKey: feature.key,
4019
- reason: EvaluationReason.DEFAULTED,
4020
- bucketKey,
4021
- bucketValue,
4022
- variableKey,
4023
- variableSchema,
4024
- variableValue: variableSchema.defaultValue,
4025
- };
4026
- &nbsp;
4027
- this.logger.debug("using default value", evaluation);
4028
- &nbsp;
4029
- return evaluation;
4030
- } catch (e) {
4031
- <span class="cstat-no" title="statement not covered" > evaluation = {</span>
4032
- featureKey: typeof featureKey === "string" ? featureKey : featureKey.key,
4033
- reason: EvaluationReason.ERROR,
4034
- variableKey,
4035
- error: e,
4036
- };
4037
- &nbsp;
4038
- <span class="cstat-no" title="statement not covered" > this.logger.error("error", evaluation);</span>
4039
- &nbsp;
4040
- <span class="cstat-no" title="statement not covered" > return evaluation;</span>
4041
- }
1722
+ bucketKeySeparator: this.bucketKeySeparator,
1723
+ configureBucketKey: this.configureBucketKey,
1724
+ configureBucketValue: this.configureBucketValue,
1725
+ });
4042
1726
  }
4043
1727
  &nbsp;
4044
1728
  getVariable(
@@ -4150,7 +1834,7 @@ export function createInstance(options: InstanceOptions): FeaturevisorInstance {
4150
1834
  <div class='footer quiet pad2 space-top1 center small'>
4151
1835
  Code coverage generated by
4152
1836
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
4153
- at 2025-01-30T17:02:08.477Z
1837
+ at 2025-02-08T22:34:17.181Z
4154
1838
  </div>
4155
1839
  <script src="prettify.js"></script>
4156
1840
  <script>