@hsuite/native-connect-angular 2.1.0 → 2.1.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.
- package/coverage/coverage-summary.json +25 -21
- package/coverage/index.html +108 -108
- package/coverage/lcov-report/index.html +108 -108
- package/coverage/lcov-report/lib/components/account-selector/account-actions/account-actions.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-actions/index.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-filter/account-filter.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-filter/index.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-formatting.service.ts.html +13 -19
- package/coverage/lcov-report/lib/components/account-selector/account-grouping.service.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-list/account-list.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-list/index.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-selector.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-selector.service.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/index.html +5 -5
- package/coverage/lcov-report/lib/components/wallet-account-display/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-account-display/wallet-account-display.component.ts.html +10 -10
- package/coverage/lcov-report/lib/components/wallet-connect-button/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connect-prompt/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connected-guard/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connection-modal/index.html +15 -15
- package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +84 -36
- package/coverage/lcov-report/lib/components/wallet-session-display/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-session-display/wallet-session-display.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-transaction-status/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +1 -1
- package/coverage/lcov-report/lib/directives/index.html +1 -1
- package/coverage/lcov-report/lib/directives/wallet-connected.directive.ts.html +1 -1
- package/coverage/lcov-report/lib/directives/wallet-context.directive.ts.html +1 -1
- package/coverage/lcov-report/lib/directives/wallet-events.directive.ts.html +1 -1
- package/coverage/lcov-report/lib/hsuite-wallet.module.ts.html +1 -1
- package/coverage/lcov-report/lib/index.html +1 -1
- package/coverage/lcov-report/lib/models/connection-config.model.ts.html +1 -1
- package/coverage/lcov-report/lib/models/index.html +7 -7
- package/coverage/lcov-report/lib/models/provider-types.ts.html +11 -5
- package/coverage/lcov-report/lib/providers/base-wallet-provider.ts.html +20 -20
- package/coverage/lcov-report/lib/providers/hsuite-native/channel-client.service.ts.html +639 -636
- package/coverage/lcov-report/lib/providers/hsuite-native/index.html +19 -19
- package/coverage/lcov-report/lib/providers/hsuite-native-provider.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/index.html +18 -18
- package/coverage/lcov-report/lib/providers/p2p-native/index.html +22 -22
- package/coverage/lcov-report/lib/providers/p2p-native/p2p-native.provider.ts.html +993 -993
- package/coverage/lcov-report/lib/providers/p2p-native/p2p-session-manager.ts.html +7 -4
- package/coverage/lcov-report/lib/providers/wallet-error-handler.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/walletconnect/core/index.html +65 -65
- package/coverage/lcov-report/lib/providers/walletconnect/core/session-health.ts.html +240 -240
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +559 -559
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-provider.ts.html +1108 -1105
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +493 -493
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +366 -366
- package/coverage/lcov-report/lib/providers/walletconnect/signers/hedera-signer.ts.html +730 -730
- package/coverage/lcov-report/lib/providers/walletconnect/signers/index.html +43 -43
- package/coverage/lcov-report/lib/providers/walletconnect/signers/signer-factory.ts.html +234 -234
- package/coverage/lcov-report/lib/providers/walletconnect/signers/xrpl-signer.ts.html +650 -650
- package/coverage/lcov-report/lib/services/hsuite-auth.interceptor.ts.html +568 -0
- package/coverage/lcov-report/lib/services/index.html +50 -20
- package/coverage/lcov-report/lib/services/logger.service.ts.html +1 -1
- package/coverage/lcov-report/lib/services/smart-session.service.ts.html +1264 -0
- package/coverage/lcov-report/lib/services/transaction-builders/active-account-source.ts.html +250 -0
- package/coverage/lcov-report/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1 -1
- package/coverage/lcov-report/lib/services/transaction-builders/hedera-amount-utils.ts.html +155 -155
- package/coverage/lcov-report/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +2156 -2156
- package/coverage/lcov-report/lib/services/transaction-builders/index.html +58 -43
- package/coverage/lcov-report/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1674 -1674
- package/coverage/lcov-report/lib/services/transaction.service.ts.html +4 -4
- package/coverage/lcov-report/lib/services/unified-wallet.service.ts.html +3 -3
- package/coverage/lcov-report/lib/services/wallet-context.service.ts.html +1 -1
- package/coverage/lcov-report/lib/services/wallet-event-bus.service.ts.html +249 -249
- package/coverage/lcov-report/lib/services/wallet-providers.service.ts.html +1 -1
- package/coverage/lcov-report/lib/transports/chrome-extension-transport.ts.html +1 -1
- package/coverage/lcov-report/lib/transports/index.html +1 -1
- package/coverage/lcov-report/lib/utils/index.html +36 -21
- package/coverage/lcov-report/lib/utils/ledger-icons.util.ts.html +254 -161
- package/coverage/lcov-report/lib/utils/ledger-ui-registry.ts.html +676 -0
- package/coverage/lcov.info +8567 -6896
- package/coverage/lib/components/account-selector/account-actions/account-actions.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-actions/index.html +1 -1
- package/coverage/lib/components/account-selector/account-filter/account-filter.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-filter/index.html +1 -1
- package/coverage/lib/components/account-selector/account-formatting.service.ts.html +13 -19
- package/coverage/lib/components/account-selector/account-grouping.service.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-list/account-list.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-list/index.html +1 -1
- package/coverage/lib/components/account-selector/account-selector.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-selector.service.ts.html +1 -1
- package/coverage/lib/components/account-selector/index.html +5 -5
- package/coverage/lib/components/wallet-account-display/index.html +1 -1
- package/coverage/lib/components/wallet-account-display/wallet-account-display.component.ts.html +10 -10
- package/coverage/lib/components/wallet-connect-button/index.html +1 -1
- package/coverage/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connect-prompt/index.html +1 -1
- package/coverage/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connected-guard/index.html +1 -1
- package/coverage/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connection-modal/connection-method-step/index.html +1 -1
- package/coverage/lib/components/wallet-connection-modal/index.html +15 -15
- package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/index.html +1 -1
- package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +84 -36
- package/coverage/lib/components/wallet-session-display/index.html +1 -1
- package/coverage/lib/components/wallet-session-display/wallet-session-display.component.ts.html +1 -1
- package/coverage/lib/components/wallet-transaction-status/index.html +1 -1
- package/coverage/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +1 -1
- package/coverage/lib/directives/index.html +1 -1
- package/coverage/lib/directives/wallet-connected.directive.ts.html +1 -1
- package/coverage/lib/directives/wallet-context.directive.ts.html +1 -1
- package/coverage/lib/directives/wallet-events.directive.ts.html +1 -1
- package/coverage/lib/hsuite-wallet.module.ts.html +1 -1
- package/coverage/lib/index.html +1 -1
- package/coverage/lib/models/connection-config.model.ts.html +1 -1
- package/coverage/lib/models/index.html +7 -7
- package/coverage/lib/models/provider-types.ts.html +11 -5
- package/coverage/lib/providers/base-wallet-provider.ts.html +20 -20
- package/coverage/lib/providers/hsuite-native/channel-client.service.ts.html +639 -636
- package/coverage/lib/providers/hsuite-native/index.html +19 -19
- package/coverage/lib/providers/hsuite-native-provider.ts.html +1 -1
- package/coverage/lib/providers/index.html +18 -18
- package/coverage/lib/providers/p2p-native/index.html +22 -22
- package/coverage/lib/providers/p2p-native/p2p-native.provider.ts.html +993 -993
- package/coverage/lib/providers/p2p-native/p2p-session-manager.ts.html +7 -4
- package/coverage/lib/providers/wallet-error-handler.ts.html +1 -1
- package/coverage/lib/providers/walletconnect/core/index.html +65 -65
- package/coverage/lib/providers/walletconnect/core/session-health.ts.html +240 -240
- package/coverage/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +559 -559
- package/coverage/lib/providers/walletconnect/core/walletconnect-provider.ts.html +1108 -1105
- package/coverage/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +493 -493
- package/coverage/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +366 -366
- package/coverage/lib/providers/walletconnect/signers/hedera-signer.ts.html +730 -730
- package/coverage/lib/providers/walletconnect/signers/index.html +43 -43
- package/coverage/lib/providers/walletconnect/signers/signer-factory.ts.html +234 -234
- package/coverage/lib/providers/walletconnect/signers/xrpl-signer.ts.html +650 -650
- package/coverage/lib/services/hsuite-auth.interceptor.ts.html +568 -0
- package/coverage/lib/services/index.html +50 -20
- package/coverage/lib/services/logger.service.ts.html +1 -1
- package/coverage/lib/services/smart-session.service.ts.html +1264 -0
- package/coverage/lib/services/transaction-builders/active-account-source.ts.html +250 -0
- package/coverage/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1 -1
- package/coverage/lib/services/transaction-builders/hedera-amount-utils.ts.html +155 -155
- package/coverage/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +2156 -2156
- package/coverage/lib/services/transaction-builders/index.html +58 -43
- package/coverage/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1674 -1674
- package/coverage/lib/services/transaction.service.ts.html +4 -4
- package/coverage/lib/services/unified-wallet.service.ts.html +3 -3
- package/coverage/lib/services/wallet-context.service.ts.html +1 -1
- package/coverage/lib/services/wallet-event-bus.service.ts.html +249 -249
- package/coverage/lib/services/wallet-providers.service.ts.html +1 -1
- package/coverage/lib/transports/chrome-extension-transport.ts.html +1 -1
- package/coverage/lib/transports/index.html +1 -1
- package/coverage/lib/utils/index.html +36 -21
- package/coverage/lib/utils/ledger-icons.util.ts.html +254 -161
- package/coverage/lib/utils/ledger-ui-registry.ts.html +676 -0
- package/dist/fesm2022/hsuite-native-connect-angular.mjs +854 -308
- package/dist/fesm2022/hsuite-native-connect-angular.mjs.map +1 -1
- package/dist/index.d.ts +456 -30
- package/package.json +4 -4
- package/src/index.ts +26 -0
- package/src/lib/components/account-selector/account-formatting.service.ts +8 -10
- package/src/lib/components/wallet-account-display/wallet-account-display.component.ts +9 -9
- package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts +34 -18
- package/src/lib/models/provider-types.ts +3 -1
- package/src/lib/models/unified-account.model.ts +4 -1
- package/src/lib/providers/hsuite-native/channel-client.service.ts +1 -0
- package/src/lib/providers/p2p-native/p2p-session-manager.ts +1 -0
- package/src/lib/providers/walletconnect/core/walletconnect-provider.ts +2 -1
- package/src/lib/services/hsuite-auth.interceptor.ts +159 -0
- package/src/lib/services/smart-session.service.ts +378 -0
- package/src/lib/services/transaction-builders/active-account-source.spec.ts +75 -0
- package/src/lib/services/transaction-builders/active-account-source.ts +55 -0
- package/src/lib/services/transaction-builders/hedera-transaction-builder.service.ts +4 -4
- package/src/lib/services/transaction-builders/index.ts +1 -0
- package/src/lib/services/transaction.service.ts +7 -3
- package/src/lib/services/unified-wallet.service.spec.ts +1 -1
- package/src/lib/services/unified-wallet.service.ts +2 -2
- package/src/lib/utils/index.ts +1 -0
- package/src/lib/utils/ledger-icons.util.ts +61 -30
- package/src/lib/utils/ledger-ui-registry.ts +197 -0
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">86.58% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>626/723</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">69.81% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>37/53</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">80% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>16/20</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">86.58% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>626/723</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
</template>
|
|
63
63
|
</div>
|
|
64
|
-
<div class='status-line
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
65
|
<pre><table class="coverage">
|
|
66
66
|
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
67
|
<a name='L2'></a><a href='#L2'>2</a>
|
|
@@ -855,24 +855,29 @@
|
|
|
855
855
|
<span class="cline-any cline-yes">1x</span>
|
|
856
856
|
<span class="cline-any cline-yes">1x</span>
|
|
857
857
|
<span class="cline-any cline-yes">1x</span>
|
|
858
|
+
<span class="cline-any cline-yes">10x</span>
|
|
859
|
+
<span class="cline-any cline-yes">10x</span>
|
|
860
|
+
<span class="cline-any cline-yes">10x</span>
|
|
861
|
+
<span class="cline-any cline-yes">10x</span>
|
|
862
|
+
<span class="cline-any cline-yes">10x</span>
|
|
863
|
+
<span class="cline-any cline-yes">10x</span>
|
|
864
|
+
<span class="cline-any cline-yes">10x</span>
|
|
865
|
+
<span class="cline-any cline-yes">10x</span>
|
|
866
|
+
<span class="cline-any cline-yes">10x</span>
|
|
858
867
|
<span class="cline-any cline-no"> </span>
|
|
859
868
|
<span class="cline-any cline-no"> </span>
|
|
860
|
-
<span class="cline-any cline-
|
|
861
|
-
<span class="cline-any cline-no"> </span>
|
|
862
|
-
<span class="cline-any cline-no"> </span>
|
|
863
|
-
<span class="cline-any cline-no"> </span>
|
|
864
|
-
<span class="cline-any cline-no"> </span>
|
|
865
|
-
<span class="cline-any cline-no"> </span>
|
|
866
|
-
<span class="cline-any cline-no"> </span>
|
|
867
|
-
<span class="cline-any cline-no"> </span>
|
|
868
|
-
<span class="cline-any cline-no"> </span>
|
|
869
|
-
<span class="cline-any cline-no"> </span>
|
|
869
|
+
<span class="cline-any cline-yes">10x</span>
|
|
870
870
|
<span class="cline-any cline-yes">1x</span>
|
|
871
871
|
<span class="cline-any cline-yes">1x</span>
|
|
872
872
|
<span class="cline-any cline-yes">1x</span>
|
|
873
873
|
<span class="cline-any cline-yes">1x</span>
|
|
874
874
|
<span class="cline-any cline-yes">1x</span>
|
|
875
|
+
<span class="cline-any cline-yes">27x</span>
|
|
876
|
+
<span class="cline-any cline-yes">27x</span>
|
|
877
|
+
<span class="cline-any cline-yes">27x</span>
|
|
878
|
+
<span class="cline-any cline-yes">27x</span>
|
|
875
879
|
<span class="cline-any cline-no"> </span>
|
|
880
|
+
<span class="cline-any cline-yes">27x</span>
|
|
876
881
|
<span class="cline-any cline-no"> </span>
|
|
877
882
|
<span class="cline-any cline-no"> </span>
|
|
878
883
|
<span class="cline-any cline-no"> </span>
|
|
@@ -882,25 +887,20 @@
|
|
|
882
887
|
<span class="cline-any cline-no"> </span>
|
|
883
888
|
<span class="cline-any cline-no"> </span>
|
|
884
889
|
<span class="cline-any cline-no"> </span>
|
|
885
|
-
<span class="cline-any cline-
|
|
886
|
-
<span class="cline-any cline-no"> </span>
|
|
887
|
-
<span class="cline-any cline-no"> </span>
|
|
888
|
-
<span class="cline-any cline-no"> </span>
|
|
889
|
-
<span class="cline-any cline-no"> </span>
|
|
890
|
-
<span class="cline-any cline-no"> </span>
|
|
890
|
+
<span class="cline-any cline-yes">27x</span>
|
|
891
891
|
<span class="cline-any cline-yes">1x</span>
|
|
892
892
|
<span class="cline-any cline-yes">1x</span>
|
|
893
893
|
<span class="cline-any cline-yes">1x</span>
|
|
894
894
|
<span class="cline-any cline-yes">1x</span>
|
|
895
895
|
<span class="cline-any cline-yes">1x</span>
|
|
896
|
+
<span class="cline-any cline-yes">3x</span>
|
|
897
|
+
<span class="cline-any cline-yes">3x</span>
|
|
898
|
+
<span class="cline-any cline-yes">3x</span>
|
|
899
|
+
<span class="cline-any cline-yes">3x</span>
|
|
900
|
+
<span class="cline-any cline-yes">3x</span>
|
|
896
901
|
<span class="cline-any cline-no"> </span>
|
|
897
902
|
<span class="cline-any cline-no"> </span>
|
|
898
|
-
<span class="cline-any cline-
|
|
899
|
-
<span class="cline-any cline-no"> </span>
|
|
900
|
-
<span class="cline-any cline-no"> </span>
|
|
901
|
-
<span class="cline-any cline-no"> </span>
|
|
902
|
-
<span class="cline-any cline-no"> </span>
|
|
903
|
-
<span class="cline-any cline-no"> </span>
|
|
903
|
+
<span class="cline-any cline-yes">3x</span>
|
|
904
904
|
<span class="cline-any cline-yes">1x</span>
|
|
905
905
|
<span class="cline-any cline-yes">1x</span>
|
|
906
906
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -973,6 +973,224 @@
|
|
|
973
973
|
<span class="cline-any cline-yes">1x</span>
|
|
974
974
|
<span class="cline-any cline-yes">1x</span>
|
|
975
975
|
<span class="cline-any cline-yes">1x</span>
|
|
976
|
+
<span class="cline-any cline-yes">27x</span>
|
|
977
|
+
<span class="cline-any cline-yes">27x</span>
|
|
978
|
+
<span class="cline-any cline-yes">27x</span>
|
|
979
|
+
<span class="cline-any cline-yes">27x</span>
|
|
980
|
+
<span class="cline-any cline-yes">27x</span>
|
|
981
|
+
<span class="cline-any cline-yes">27x</span>
|
|
982
|
+
<span class="cline-any cline-yes">27x</span>
|
|
983
|
+
<span class="cline-any cline-yes">27x</span>
|
|
984
|
+
<span class="cline-any cline-yes">27x</span>
|
|
985
|
+
<span class="cline-any cline-yes">27x</span>
|
|
986
|
+
<span class="cline-any cline-yes">27x</span>
|
|
987
|
+
<span class="cline-any cline-yes">27x</span>
|
|
988
|
+
<span class="cline-any cline-yes">27x</span>
|
|
989
|
+
<span class="cline-any cline-yes">27x</span>
|
|
990
|
+
<span class="cline-any cline-yes">27x</span>
|
|
991
|
+
<span class="cline-any cline-yes">27x</span>
|
|
992
|
+
<span class="cline-any cline-yes">27x</span>
|
|
993
|
+
<span class="cline-any cline-yes">27x</span>
|
|
994
|
+
<span class="cline-any cline-yes">27x</span>
|
|
995
|
+
<span class="cline-any cline-yes">27x</span>
|
|
996
|
+
<span class="cline-any cline-yes">27x</span>
|
|
997
|
+
<span class="cline-any cline-yes">27x</span>
|
|
998
|
+
<span class="cline-any cline-yes">27x</span>
|
|
999
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1000
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1001
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1002
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1003
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1004
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1005
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1006
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1007
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1008
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1009
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1010
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1011
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1012
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1013
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1014
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1015
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1016
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1017
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1018
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1019
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1020
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1021
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1022
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1023
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1024
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1025
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1026
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1027
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1028
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1029
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1030
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1031
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1032
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1033
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1034
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1035
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1036
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1037
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1038
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1039
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1040
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1041
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1042
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1043
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1044
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1045
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1046
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1047
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1048
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1049
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1050
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1051
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1052
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1053
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1054
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1055
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1056
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1057
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1058
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1059
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1060
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1061
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1062
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1063
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1064
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1065
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1066
|
+
<span class="cline-any cline-no"> </span>
|
|
1067
|
+
<span class="cline-any cline-no"> </span>
|
|
1068
|
+
<span class="cline-any cline-no"> </span>
|
|
1069
|
+
<span class="cline-any cline-no"> </span>
|
|
1070
|
+
<span class="cline-any cline-no"> </span>
|
|
1071
|
+
<span class="cline-any cline-no"> </span>
|
|
1072
|
+
<span class="cline-any cline-no"> </span>
|
|
1073
|
+
<span class="cline-any cline-no"> </span>
|
|
1074
|
+
<span class="cline-any cline-no"> </span>
|
|
1075
|
+
<span class="cline-any cline-no"> </span>
|
|
1076
|
+
<span class="cline-any cline-no"> </span>
|
|
1077
|
+
<span class="cline-any cline-no"> </span>
|
|
1078
|
+
<span class="cline-any cline-no"> </span>
|
|
1079
|
+
<span class="cline-any cline-no"> </span>
|
|
1080
|
+
<span class="cline-any cline-no"> </span>
|
|
1081
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1082
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1083
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1084
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1085
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1086
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1087
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1088
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1089
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1090
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1091
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1092
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1093
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1094
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1095
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1096
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1097
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1098
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1099
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1100
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1101
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1102
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1103
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1104
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1105
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1106
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1107
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1108
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1109
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1110
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1111
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1112
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1113
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1114
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1115
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1116
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1117
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1118
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1119
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1120
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1121
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1122
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1123
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1124
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1125
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1126
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1127
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1128
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1129
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1130
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1131
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1132
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1133
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1134
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1135
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1136
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1137
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1138
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1139
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1140
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1141
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1142
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1143
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1144
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1145
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1146
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1147
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1148
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1149
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1150
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1151
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1152
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1153
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1154
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1155
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1156
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1157
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1158
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1159
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1160
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1161
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1162
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1163
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1164
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1165
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1166
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1167
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1168
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1169
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1170
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1171
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1172
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1173
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1174
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1175
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1176
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1177
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1178
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1179
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1180
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1181
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1182
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1183
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1184
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1185
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1186
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1187
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1188
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1189
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1190
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1191
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1192
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1193
|
+
<span class="cline-any cline-yes">27x</span>
|
|
976
1194
|
<span class="cline-any cline-no"> </span>
|
|
977
1195
|
<span class="cline-any cline-no"> </span>
|
|
978
1196
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1000,6 +1218,28 @@
|
|
|
1000
1218
|
<span class="cline-any cline-no"> </span>
|
|
1001
1219
|
<span class="cline-any cline-no"> </span>
|
|
1002
1220
|
<span class="cline-any cline-no"> </span>
|
|
1221
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1222
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1223
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1224
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1225
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1226
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1227
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1228
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1229
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1230
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1231
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1232
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1233
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1234
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1235
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1236
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1237
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1238
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1239
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1240
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1241
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1242
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1003
1243
|
<span class="cline-any cline-no"> </span>
|
|
1004
1244
|
<span class="cline-any cline-no"> </span>
|
|
1005
1245
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1028,487 +1268,247 @@
|
|
|
1028
1268
|
<span class="cline-any cline-no"> </span>
|
|
1029
1269
|
<span class="cline-any cline-no"> </span>
|
|
1030
1270
|
<span class="cline-any cline-no"> </span>
|
|
1271
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1272
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1273
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1274
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1275
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1276
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1277
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1278
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1279
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1280
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1281
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1282
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1283
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1284
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1285
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1286
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1287
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1288
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1289
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1290
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1291
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1292
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1293
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1294
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1295
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1296
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1297
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1298
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1299
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1300
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1301
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1302
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1303
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1304
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1305
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1306
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1307
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1308
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1309
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1310
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1311
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1312
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1313
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1314
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1315
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1316
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1317
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1318
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1319
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1320
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1321
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1322
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1323
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1324
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1325
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1326
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1327
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1328
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1329
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1330
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1331
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1332
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1333
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1334
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1335
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1336
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1337
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1338
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1339
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1340
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1341
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1342
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1343
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1344
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1345
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1346
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1031
1347
|
<span class="cline-any cline-no"> </span>
|
|
1032
1348
|
<span class="cline-any cline-no"> </span>
|
|
1349
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1350
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1351
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1352
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1353
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1354
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1355
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1356
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1357
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1358
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1359
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1360
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1361
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1362
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1363
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1364
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1365
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1366
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1367
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1368
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1369
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1370
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1371
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1372
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1373
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1374
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1375
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1376
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1377
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1378
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1379
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1380
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1381
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1382
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1383
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1384
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1033
1385
|
<span class="cline-any cline-no"> </span>
|
|
1034
1386
|
<span class="cline-any cline-no"> </span>
|
|
1387
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1388
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1389
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1390
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1391
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1392
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1393
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1394
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1395
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1396
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1397
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1398
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1399
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1400
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1401
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1402
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1403
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1035
1404
|
<span class="cline-any cline-no"> </span>
|
|
1036
1405
|
<span class="cline-any cline-no"> </span>
|
|
1037
|
-
<span class="cline-any cline-
|
|
1038
|
-
<span class="cline-any cline-
|
|
1039
|
-
<span class="cline-any cline-
|
|
1040
|
-
<span class="cline-any cline-
|
|
1041
|
-
<span class="cline-any cline-
|
|
1042
|
-
<span class="cline-any cline-
|
|
1043
|
-
<span class="cline-any cline-
|
|
1044
|
-
<span class="cline-any cline-
|
|
1045
|
-
<span class="cline-any cline-
|
|
1046
|
-
<span class="cline-any cline-
|
|
1047
|
-
<span class="cline-any cline-
|
|
1048
|
-
<span class="cline-any cline-
|
|
1049
|
-
<span class="cline-any cline-
|
|
1050
|
-
<span class="cline-any cline-
|
|
1051
|
-
<span class="cline-any cline-
|
|
1052
|
-
<span class="cline-any cline-
|
|
1053
|
-
<span class="cline-any cline-
|
|
1054
|
-
<span class="cline-any cline-
|
|
1055
|
-
<span class="cline-any cline-
|
|
1056
|
-
<span class="cline-any cline-
|
|
1057
|
-
<span class="cline-any cline-
|
|
1058
|
-
<span class="cline-any cline-
|
|
1059
|
-
<span class="cline-any cline-
|
|
1060
|
-
<span class="cline-any cline-
|
|
1061
|
-
<span class="cline-any cline-
|
|
1062
|
-
<span class="cline-any cline-
|
|
1063
|
-
<span class="cline-any cline-
|
|
1064
|
-
<span class="cline-any cline-
|
|
1065
|
-
<span class="cline-any cline-
|
|
1066
|
-
<span class="cline-any cline-
|
|
1067
|
-
<span class="cline-any cline-
|
|
1068
|
-
<span class="cline-any cline-
|
|
1069
|
-
<span class="cline-any cline-
|
|
1070
|
-
<span class="cline-any cline-
|
|
1071
|
-
<span class="cline-any cline-
|
|
1072
|
-
<span class="cline-any cline-
|
|
1073
|
-
<span class="cline-any cline-
|
|
1074
|
-
<span class="cline-any cline-
|
|
1075
|
-
<span class="cline-any cline-
|
|
1076
|
-
<span class="cline-any cline-
|
|
1077
|
-
<span class="cline-any cline-
|
|
1078
|
-
<span class="cline-any cline-
|
|
1079
|
-
<span class="cline-any cline-
|
|
1080
|
-
<span class="cline-any cline-
|
|
1081
|
-
<span class="cline-any cline-
|
|
1082
|
-
<span class="cline-any cline-
|
|
1083
|
-
<span class="cline-any cline-
|
|
1084
|
-
<span class="cline-any cline-
|
|
1085
|
-
<span class="cline-any cline-
|
|
1086
|
-
<span class="cline-any cline-
|
|
1087
|
-
<span class="cline-any cline-
|
|
1088
|
-
<span class="cline-any cline-
|
|
1089
|
-
<span class="cline-any cline-
|
|
1090
|
-
<span class="cline-any cline-
|
|
1091
|
-
<span class="cline-any cline-
|
|
1092
|
-
<span class="cline-any cline-
|
|
1093
|
-
<span class="cline-any cline-
|
|
1094
|
-
<span class="cline-any cline-
|
|
1095
|
-
<span class="cline-any cline-
|
|
1096
|
-
<span class="cline-any cline-
|
|
1097
|
-
<span class="cline-any cline-
|
|
1098
|
-
<span class="cline-any cline-
|
|
1099
|
-
<span class="cline-any cline-
|
|
1100
|
-
<span class="cline-any cline-
|
|
1101
|
-
<span class="cline-any cline-
|
|
1102
|
-
<span class="cline-any cline-
|
|
1103
|
-
<span class="cline-any cline-
|
|
1104
|
-
<span class="cline-any cline-
|
|
1105
|
-
<span class="cline-any cline-
|
|
1106
|
-
<span class="cline-any cline-
|
|
1107
|
-
<span class="cline-any cline-
|
|
1108
|
-
<span class="cline-any cline-
|
|
1109
|
-
<span class="cline-any cline-
|
|
1110
|
-
<span class="cline-any cline-
|
|
1111
|
-
<span class="cline-any cline-
|
|
1112
|
-
<span class="cline-any cline-
|
|
1113
|
-
<span class="cline-any cline-
|
|
1114
|
-
<span class="cline-any cline-
|
|
1115
|
-
<span class="cline-any cline-
|
|
1116
|
-
<span class="cline-any cline-
|
|
1117
|
-
<span class="cline-any cline-
|
|
1118
|
-
<span class="cline-any cline-
|
|
1119
|
-
<span class="cline-any cline-
|
|
1120
|
-
<span class="cline-any cline-
|
|
1121
|
-
<span class="cline-any cline-
|
|
1122
|
-
<span class="cline-any cline-
|
|
1123
|
-
<span class="cline-any cline-
|
|
1124
|
-
<span class="cline-any cline-
|
|
1125
|
-
<span class="cline-any cline-
|
|
1126
|
-
<span class="cline-any cline-
|
|
1127
|
-
<span class="cline-any cline-
|
|
1128
|
-
<span class="cline-any cline-
|
|
1129
|
-
<span class="cline-any cline-
|
|
1130
|
-
<span class="cline-any cline-
|
|
1131
|
-
<span class="cline-any cline-
|
|
1132
|
-
<span class="cline-any cline-
|
|
1133
|
-
<span class="cline-any cline-
|
|
1134
|
-
<span class="cline-any cline-
|
|
1135
|
-
<span class="cline-any cline-
|
|
1136
|
-
<span class="cline-any cline-
|
|
1137
|
-
<span class="cline-any cline-
|
|
1138
|
-
<span class="cline-any cline-
|
|
1139
|
-
<span class="cline-any cline-
|
|
1140
|
-
<span class="cline-any cline-
|
|
1141
|
-
<span class="cline-any cline-
|
|
1142
|
-
<span class="cline-any cline-
|
|
1143
|
-
<span class="cline-any cline-no"> </span>
|
|
1144
|
-
<span class="cline-any cline-no"> </span>
|
|
1145
|
-
<span class="cline-any cline-no"> </span>
|
|
1146
|
-
<span class="cline-any cline-no"> </span>
|
|
1147
|
-
<span class="cline-any cline-no"> </span>
|
|
1148
|
-
<span class="cline-any cline-no"> </span>
|
|
1149
|
-
<span class="cline-any cline-no"> </span>
|
|
1150
|
-
<span class="cline-any cline-no"> </span>
|
|
1151
|
-
<span class="cline-any cline-no"> </span>
|
|
1152
|
-
<span class="cline-any cline-no"> </span>
|
|
1153
|
-
<span class="cline-any cline-no"> </span>
|
|
1154
|
-
<span class="cline-any cline-no"> </span>
|
|
1155
|
-
<span class="cline-any cline-no"> </span>
|
|
1156
|
-
<span class="cline-any cline-no"> </span>
|
|
1157
|
-
<span class="cline-any cline-no"> </span>
|
|
1158
|
-
<span class="cline-any cline-no"> </span>
|
|
1159
|
-
<span class="cline-any cline-no"> </span>
|
|
1160
|
-
<span class="cline-any cline-no"> </span>
|
|
1161
|
-
<span class="cline-any cline-no"> </span>
|
|
1162
|
-
<span class="cline-any cline-no"> </span>
|
|
1163
|
-
<span class="cline-any cline-no"> </span>
|
|
1164
|
-
<span class="cline-any cline-no"> </span>
|
|
1165
|
-
<span class="cline-any cline-no"> </span>
|
|
1166
|
-
<span class="cline-any cline-no"> </span>
|
|
1167
|
-
<span class="cline-any cline-no"> </span>
|
|
1168
|
-
<span class="cline-any cline-no"> </span>
|
|
1169
|
-
<span class="cline-any cline-no"> </span>
|
|
1170
|
-
<span class="cline-any cline-no"> </span>
|
|
1171
|
-
<span class="cline-any cline-no"> </span>
|
|
1172
|
-
<span class="cline-any cline-no"> </span>
|
|
1173
|
-
<span class="cline-any cline-no"> </span>
|
|
1174
|
-
<span class="cline-any cline-no"> </span>
|
|
1175
|
-
<span class="cline-any cline-no"> </span>
|
|
1176
|
-
<span class="cline-any cline-no"> </span>
|
|
1177
|
-
<span class="cline-any cline-no"> </span>
|
|
1178
|
-
<span class="cline-any cline-no"> </span>
|
|
1179
|
-
<span class="cline-any cline-no"> </span>
|
|
1180
|
-
<span class="cline-any cline-no"> </span>
|
|
1181
|
-
<span class="cline-any cline-no"> </span>
|
|
1182
|
-
<span class="cline-any cline-no"> </span>
|
|
1183
|
-
<span class="cline-any cline-no"> </span>
|
|
1184
|
-
<span class="cline-any cline-no"> </span>
|
|
1185
|
-
<span class="cline-any cline-no"> </span>
|
|
1186
|
-
<span class="cline-any cline-no"> </span>
|
|
1187
|
-
<span class="cline-any cline-no"> </span>
|
|
1188
|
-
<span class="cline-any cline-no"> </span>
|
|
1189
|
-
<span class="cline-any cline-no"> </span>
|
|
1190
|
-
<span class="cline-any cline-no"> </span>
|
|
1191
|
-
<span class="cline-any cline-no"> </span>
|
|
1192
|
-
<span class="cline-any cline-no"> </span>
|
|
1193
|
-
<span class="cline-any cline-no"> </span>
|
|
1194
|
-
<span class="cline-any cline-no"> </span>
|
|
1195
|
-
<span class="cline-any cline-no"> </span>
|
|
1196
|
-
<span class="cline-any cline-no"> </span>
|
|
1197
|
-
<span class="cline-any cline-no"> </span>
|
|
1198
|
-
<span class="cline-any cline-no"> </span>
|
|
1199
|
-
<span class="cline-any cline-no"> </span>
|
|
1200
|
-
<span class="cline-any cline-no"> </span>
|
|
1201
|
-
<span class="cline-any cline-no"> </span>
|
|
1202
|
-
<span class="cline-any cline-no"> </span>
|
|
1203
|
-
<span class="cline-any cline-no"> </span>
|
|
1204
|
-
<span class="cline-any cline-no"> </span>
|
|
1205
|
-
<span class="cline-any cline-no"> </span>
|
|
1206
|
-
<span class="cline-any cline-no"> </span>
|
|
1207
|
-
<span class="cline-any cline-no"> </span>
|
|
1208
|
-
<span class="cline-any cline-no"> </span>
|
|
1209
|
-
<span class="cline-any cline-no"> </span>
|
|
1210
|
-
<span class="cline-any cline-no"> </span>
|
|
1211
|
-
<span class="cline-any cline-no"> </span>
|
|
1212
|
-
<span class="cline-any cline-no"> </span>
|
|
1213
|
-
<span class="cline-any cline-no"> </span>
|
|
1214
|
-
<span class="cline-any cline-no"> </span>
|
|
1215
|
-
<span class="cline-any cline-no"> </span>
|
|
1216
|
-
<span class="cline-any cline-no"> </span>
|
|
1217
|
-
<span class="cline-any cline-no"> </span>
|
|
1218
|
-
<span class="cline-any cline-no"> </span>
|
|
1219
|
-
<span class="cline-any cline-no"> </span>
|
|
1220
|
-
<span class="cline-any cline-no"> </span>
|
|
1221
|
-
<span class="cline-any cline-no"> </span>
|
|
1222
|
-
<span class="cline-any cline-no"> </span>
|
|
1223
|
-
<span class="cline-any cline-no"> </span>
|
|
1224
|
-
<span class="cline-any cline-no"> </span>
|
|
1225
|
-
<span class="cline-any cline-no"> </span>
|
|
1226
|
-
<span class="cline-any cline-no"> </span>
|
|
1227
|
-
<span class="cline-any cline-no"> </span>
|
|
1228
|
-
<span class="cline-any cline-no"> </span>
|
|
1229
|
-
<span class="cline-any cline-no"> </span>
|
|
1230
|
-
<span class="cline-any cline-no"> </span>
|
|
1231
|
-
<span class="cline-any cline-no"> </span>
|
|
1232
|
-
<span class="cline-any cline-no"> </span>
|
|
1233
|
-
<span class="cline-any cline-no"> </span>
|
|
1234
|
-
<span class="cline-any cline-no"> </span>
|
|
1235
|
-
<span class="cline-any cline-no"> </span>
|
|
1236
|
-
<span class="cline-any cline-no"> </span>
|
|
1237
|
-
<span class="cline-any cline-no"> </span>
|
|
1238
|
-
<span class="cline-any cline-no"> </span>
|
|
1239
|
-
<span class="cline-any cline-no"> </span>
|
|
1240
|
-
<span class="cline-any cline-no"> </span>
|
|
1241
|
-
<span class="cline-any cline-no"> </span>
|
|
1242
|
-
<span class="cline-any cline-no"> </span>
|
|
1243
|
-
<span class="cline-any cline-no"> </span>
|
|
1244
|
-
<span class="cline-any cline-no"> </span>
|
|
1245
|
-
<span class="cline-any cline-no"> </span>
|
|
1246
|
-
<span class="cline-any cline-no"> </span>
|
|
1247
|
-
<span class="cline-any cline-no"> </span>
|
|
1248
|
-
<span class="cline-any cline-no"> </span>
|
|
1249
|
-
<span class="cline-any cline-no"> </span>
|
|
1250
|
-
<span class="cline-any cline-no"> </span>
|
|
1251
|
-
<span class="cline-any cline-no"> </span>
|
|
1252
|
-
<span class="cline-any cline-no"> </span>
|
|
1253
|
-
<span class="cline-any cline-no"> </span>
|
|
1254
|
-
<span class="cline-any cline-no"> </span>
|
|
1255
|
-
<span class="cline-any cline-no"> </span>
|
|
1256
|
-
<span class="cline-any cline-no"> </span>
|
|
1257
|
-
<span class="cline-any cline-no"> </span>
|
|
1258
|
-
<span class="cline-any cline-no"> </span>
|
|
1259
|
-
<span class="cline-any cline-no"> </span>
|
|
1260
|
-
<span class="cline-any cline-no"> </span>
|
|
1261
|
-
<span class="cline-any cline-no"> </span>
|
|
1262
|
-
<span class="cline-any cline-no"> </span>
|
|
1263
|
-
<span class="cline-any cline-no"> </span>
|
|
1264
|
-
<span class="cline-any cline-no"> </span>
|
|
1265
|
-
<span class="cline-any cline-no"> </span>
|
|
1266
|
-
<span class="cline-any cline-no"> </span>
|
|
1267
|
-
<span class="cline-any cline-no"> </span>
|
|
1268
|
-
<span class="cline-any cline-no"> </span>
|
|
1269
|
-
<span class="cline-any cline-no"> </span>
|
|
1270
|
-
<span class="cline-any cline-no"> </span>
|
|
1271
|
-
<span class="cline-any cline-no"> </span>
|
|
1272
|
-
<span class="cline-any cline-no"> </span>
|
|
1273
|
-
<span class="cline-any cline-no"> </span>
|
|
1274
|
-
<span class="cline-any cline-no"> </span>
|
|
1275
|
-
<span class="cline-any cline-no"> </span>
|
|
1276
|
-
<span class="cline-any cline-no"> </span>
|
|
1277
|
-
<span class="cline-any cline-no"> </span>
|
|
1278
|
-
<span class="cline-any cline-no"> </span>
|
|
1279
|
-
<span class="cline-any cline-no"> </span>
|
|
1280
|
-
<span class="cline-any cline-no"> </span>
|
|
1281
|
-
<span class="cline-any cline-no"> </span>
|
|
1282
|
-
<span class="cline-any cline-no"> </span>
|
|
1283
|
-
<span class="cline-any cline-no"> </span>
|
|
1284
|
-
<span class="cline-any cline-no"> </span>
|
|
1285
|
-
<span class="cline-any cline-no"> </span>
|
|
1286
|
-
<span class="cline-any cline-no"> </span>
|
|
1287
|
-
<span class="cline-any cline-no"> </span>
|
|
1288
|
-
<span class="cline-any cline-no"> </span>
|
|
1289
|
-
<span class="cline-any cline-no"> </span>
|
|
1290
|
-
<span class="cline-any cline-no"> </span>
|
|
1291
|
-
<span class="cline-any cline-no"> </span>
|
|
1292
|
-
<span class="cline-any cline-no"> </span>
|
|
1293
|
-
<span class="cline-any cline-no"> </span>
|
|
1294
|
-
<span class="cline-any cline-no"> </span>
|
|
1295
|
-
<span class="cline-any cline-no"> </span>
|
|
1296
|
-
<span class="cline-any cline-no"> </span>
|
|
1297
|
-
<span class="cline-any cline-no"> </span>
|
|
1298
|
-
<span class="cline-any cline-no"> </span>
|
|
1299
|
-
<span class="cline-any cline-no"> </span>
|
|
1300
|
-
<span class="cline-any cline-no"> </span>
|
|
1301
|
-
<span class="cline-any cline-no"> </span>
|
|
1302
|
-
<span class="cline-any cline-no"> </span>
|
|
1303
|
-
<span class="cline-any cline-no"> </span>
|
|
1304
|
-
<span class="cline-any cline-no"> </span>
|
|
1305
|
-
<span class="cline-any cline-no"> </span>
|
|
1306
|
-
<span class="cline-any cline-no"> </span>
|
|
1307
|
-
<span class="cline-any cline-no"> </span>
|
|
1308
|
-
<span class="cline-any cline-no"> </span>
|
|
1309
|
-
<span class="cline-any cline-no"> </span>
|
|
1310
|
-
<span class="cline-any cline-no"> </span>
|
|
1311
|
-
<span class="cline-any cline-no"> </span>
|
|
1312
|
-
<span class="cline-any cline-no"> </span>
|
|
1313
|
-
<span class="cline-any cline-no"> </span>
|
|
1314
|
-
<span class="cline-any cline-no"> </span>
|
|
1315
|
-
<span class="cline-any cline-no"> </span>
|
|
1316
|
-
<span class="cline-any cline-no"> </span>
|
|
1317
|
-
<span class="cline-any cline-no"> </span>
|
|
1318
|
-
<span class="cline-any cline-no"> </span>
|
|
1319
|
-
<span class="cline-any cline-no"> </span>
|
|
1320
|
-
<span class="cline-any cline-no"> </span>
|
|
1321
|
-
<span class="cline-any cline-no"> </span>
|
|
1322
|
-
<span class="cline-any cline-no"> </span>
|
|
1323
|
-
<span class="cline-any cline-no"> </span>
|
|
1324
|
-
<span class="cline-any cline-no"> </span>
|
|
1325
|
-
<span class="cline-any cline-no"> </span>
|
|
1326
|
-
<span class="cline-any cline-no"> </span>
|
|
1327
|
-
<span class="cline-any cline-no"> </span>
|
|
1328
|
-
<span class="cline-any cline-no"> </span>
|
|
1329
|
-
<span class="cline-any cline-no"> </span>
|
|
1330
|
-
<span class="cline-any cline-no"> </span>
|
|
1331
|
-
<span class="cline-any cline-no"> </span>
|
|
1332
|
-
<span class="cline-any cline-no"> </span>
|
|
1333
|
-
<span class="cline-any cline-no"> </span>
|
|
1334
|
-
<span class="cline-any cline-no"> </span>
|
|
1335
|
-
<span class="cline-any cline-no"> </span>
|
|
1336
|
-
<span class="cline-any cline-no"> </span>
|
|
1337
|
-
<span class="cline-any cline-no"> </span>
|
|
1338
|
-
<span class="cline-any cline-no"> </span>
|
|
1339
|
-
<span class="cline-any cline-no"> </span>
|
|
1340
|
-
<span class="cline-any cline-no"> </span>
|
|
1341
|
-
<span class="cline-any cline-no"> </span>
|
|
1342
|
-
<span class="cline-any cline-no"> </span>
|
|
1343
|
-
<span class="cline-any cline-no"> </span>
|
|
1344
|
-
<span class="cline-any cline-no"> </span>
|
|
1345
|
-
<span class="cline-any cline-no"> </span>
|
|
1346
|
-
<span class="cline-any cline-no"> </span>
|
|
1347
|
-
<span class="cline-any cline-no"> </span>
|
|
1348
|
-
<span class="cline-any cline-no"> </span>
|
|
1349
|
-
<span class="cline-any cline-no"> </span>
|
|
1350
|
-
<span class="cline-any cline-no"> </span>
|
|
1351
|
-
<span class="cline-any cline-no"> </span>
|
|
1352
|
-
<span class="cline-any cline-no"> </span>
|
|
1353
|
-
<span class="cline-any cline-no"> </span>
|
|
1354
|
-
<span class="cline-any cline-no"> </span>
|
|
1355
|
-
<span class="cline-any cline-no"> </span>
|
|
1356
|
-
<span class="cline-any cline-no"> </span>
|
|
1357
|
-
<span class="cline-any cline-no"> </span>
|
|
1358
|
-
<span class="cline-any cline-no"> </span>
|
|
1359
|
-
<span class="cline-any cline-no"> </span>
|
|
1360
|
-
<span class="cline-any cline-no"> </span>
|
|
1361
|
-
<span class="cline-any cline-no"> </span>
|
|
1362
|
-
<span class="cline-any cline-no"> </span>
|
|
1363
|
-
<span class="cline-any cline-no"> </span>
|
|
1364
|
-
<span class="cline-any cline-no"> </span>
|
|
1365
|
-
<span class="cline-any cline-no"> </span>
|
|
1366
|
-
<span class="cline-any cline-no"> </span>
|
|
1367
|
-
<span class="cline-any cline-no"> </span>
|
|
1368
|
-
<span class="cline-any cline-no"> </span>
|
|
1369
|
-
<span class="cline-any cline-no"> </span>
|
|
1370
|
-
<span class="cline-any cline-no"> </span>
|
|
1371
|
-
<span class="cline-any cline-no"> </span>
|
|
1372
|
-
<span class="cline-any cline-no"> </span>
|
|
1373
|
-
<span class="cline-any cline-no"> </span>
|
|
1374
|
-
<span class="cline-any cline-no"> </span>
|
|
1375
|
-
<span class="cline-any cline-no"> </span>
|
|
1376
|
-
<span class="cline-any cline-no"> </span>
|
|
1377
|
-
<span class="cline-any cline-no"> </span>
|
|
1378
|
-
<span class="cline-any cline-no"> </span>
|
|
1379
|
-
<span class="cline-any cline-no"> </span>
|
|
1380
|
-
<span class="cline-any cline-no"> </span>
|
|
1381
|
-
<span class="cline-any cline-no"> </span>
|
|
1382
|
-
<span class="cline-any cline-no"> </span>
|
|
1383
|
-
<span class="cline-any cline-no"> </span>
|
|
1384
|
-
<span class="cline-any cline-no"> </span>
|
|
1385
|
-
<span class="cline-any cline-no"> </span>
|
|
1386
|
-
<span class="cline-any cline-no"> </span>
|
|
1387
|
-
<span class="cline-any cline-no"> </span>
|
|
1388
|
-
<span class="cline-any cline-no"> </span>
|
|
1389
|
-
<span class="cline-any cline-no"> </span>
|
|
1390
|
-
<span class="cline-any cline-no"> </span>
|
|
1391
|
-
<span class="cline-any cline-no"> </span>
|
|
1392
|
-
<span class="cline-any cline-no"> </span>
|
|
1393
|
-
<span class="cline-any cline-no"> </span>
|
|
1394
|
-
<span class="cline-any cline-no"> </span>
|
|
1395
|
-
<span class="cline-any cline-no"> </span>
|
|
1396
|
-
<span class="cline-any cline-no"> </span>
|
|
1397
|
-
<span class="cline-any cline-no"> </span>
|
|
1398
|
-
<span class="cline-any cline-no"> </span>
|
|
1399
|
-
<span class="cline-any cline-no"> </span>
|
|
1400
|
-
<span class="cline-any cline-no"> </span>
|
|
1401
|
-
<span class="cline-any cline-no"> </span>
|
|
1402
|
-
<span class="cline-any cline-no"> </span>
|
|
1403
|
-
<span class="cline-any cline-no"> </span>
|
|
1404
|
-
<span class="cline-any cline-no"> </span>
|
|
1405
|
-
<span class="cline-any cline-no"> </span>
|
|
1406
|
-
<span class="cline-any cline-no"> </span>
|
|
1407
|
-
<span class="cline-any cline-no"> </span>
|
|
1408
|
-
<span class="cline-any cline-no"> </span>
|
|
1409
|
-
<span class="cline-any cline-no"> </span>
|
|
1410
|
-
<span class="cline-any cline-no"> </span>
|
|
1411
|
-
<span class="cline-any cline-no"> </span>
|
|
1412
|
-
<span class="cline-any cline-no"> </span>
|
|
1413
|
-
<span class="cline-any cline-no"> </span>
|
|
1414
|
-
<span class="cline-any cline-no"> </span>
|
|
1415
|
-
<span class="cline-any cline-no"> </span>
|
|
1416
|
-
<span class="cline-any cline-no"> </span>
|
|
1417
|
-
<span class="cline-any cline-no"> </span>
|
|
1418
|
-
<span class="cline-any cline-no"> </span>
|
|
1419
|
-
<span class="cline-any cline-no"> </span>
|
|
1420
|
-
<span class="cline-any cline-no"> </span>
|
|
1421
|
-
<span class="cline-any cline-no"> </span>
|
|
1422
|
-
<span class="cline-any cline-no"> </span>
|
|
1423
|
-
<span class="cline-any cline-no"> </span>
|
|
1424
|
-
<span class="cline-any cline-no"> </span>
|
|
1425
|
-
<span class="cline-any cline-no"> </span>
|
|
1426
|
-
<span class="cline-any cline-no"> </span>
|
|
1427
|
-
<span class="cline-any cline-no"> </span>
|
|
1428
|
-
<span class="cline-any cline-no"> </span>
|
|
1429
|
-
<span class="cline-any cline-no"> </span>
|
|
1430
|
-
<span class="cline-any cline-no"> </span>
|
|
1431
|
-
<span class="cline-any cline-no"> </span>
|
|
1432
|
-
<span class="cline-any cline-no"> </span>
|
|
1433
|
-
<span class="cline-any cline-no"> </span>
|
|
1434
|
-
<span class="cline-any cline-no"> </span>
|
|
1435
|
-
<span class="cline-any cline-no"> </span>
|
|
1436
|
-
<span class="cline-any cline-no"> </span>
|
|
1437
|
-
<span class="cline-any cline-no"> </span>
|
|
1438
|
-
<span class="cline-any cline-no"> </span>
|
|
1439
|
-
<span class="cline-any cline-no"> </span>
|
|
1440
|
-
<span class="cline-any cline-no"> </span>
|
|
1441
|
-
<span class="cline-any cline-no"> </span>
|
|
1442
|
-
<span class="cline-any cline-no"> </span>
|
|
1443
|
-
<span class="cline-any cline-no"> </span>
|
|
1444
|
-
<span class="cline-any cline-no"> </span>
|
|
1445
|
-
<span class="cline-any cline-no"> </span>
|
|
1446
|
-
<span class="cline-any cline-no"> </span>
|
|
1447
|
-
<span class="cline-any cline-no"> </span>
|
|
1448
|
-
<span class="cline-any cline-no"> </span>
|
|
1449
|
-
<span class="cline-any cline-no"> </span>
|
|
1450
|
-
<span class="cline-any cline-no"> </span>
|
|
1451
|
-
<span class="cline-any cline-no"> </span>
|
|
1452
|
-
<span class="cline-any cline-no"> </span>
|
|
1453
|
-
<span class="cline-any cline-no"> </span>
|
|
1454
|
-
<span class="cline-any cline-no"> </span>
|
|
1455
|
-
<span class="cline-any cline-no"> </span>
|
|
1456
|
-
<span class="cline-any cline-no"> </span>
|
|
1457
|
-
<span class="cline-any cline-no"> </span>
|
|
1458
|
-
<span class="cline-any cline-no"> </span>
|
|
1459
|
-
<span class="cline-any cline-no"> </span>
|
|
1460
|
-
<span class="cline-any cline-no"> </span>
|
|
1461
|
-
<span class="cline-any cline-no"> </span>
|
|
1462
|
-
<span class="cline-any cline-no"> </span>
|
|
1463
|
-
<span class="cline-any cline-no"> </span>
|
|
1464
|
-
<span class="cline-any cline-no"> </span>
|
|
1465
|
-
<span class="cline-any cline-no"> </span>
|
|
1466
|
-
<span class="cline-any cline-no"> </span>
|
|
1467
|
-
<span class="cline-any cline-no"> </span>
|
|
1468
|
-
<span class="cline-any cline-no"> </span>
|
|
1469
|
-
<span class="cline-any cline-no"> </span>
|
|
1470
|
-
<span class="cline-any cline-no"> </span>
|
|
1471
|
-
<span class="cline-any cline-no"> </span>
|
|
1472
|
-
<span class="cline-any cline-no"> </span>
|
|
1473
|
-
<span class="cline-any cline-no"> </span>
|
|
1474
|
-
<span class="cline-any cline-no"> </span>
|
|
1475
|
-
<span class="cline-any cline-no"> </span>
|
|
1476
|
-
<span class="cline-any cline-no"> </span>
|
|
1477
|
-
<span class="cline-any cline-no"> </span>
|
|
1478
|
-
<span class="cline-any cline-no"> </span>
|
|
1479
|
-
<span class="cline-any cline-no"> </span>
|
|
1480
|
-
<span class="cline-any cline-no"> </span>
|
|
1481
|
-
<span class="cline-any cline-no"> </span>
|
|
1482
|
-
<span class="cline-any cline-no"> </span>
|
|
1483
|
-
<span class="cline-any cline-no"> </span>
|
|
1484
|
-
<span class="cline-any cline-no"> </span>
|
|
1485
|
-
<span class="cline-any cline-no"> </span>
|
|
1486
|
-
<span class="cline-any cline-no"> </span>
|
|
1487
|
-
<span class="cline-any cline-no"> </span>
|
|
1488
|
-
<span class="cline-any cline-no"> </span>
|
|
1489
|
-
<span class="cline-any cline-no"> </span>
|
|
1490
|
-
<span class="cline-any cline-no"> </span>
|
|
1491
|
-
<span class="cline-any cline-no"> </span>
|
|
1492
|
-
<span class="cline-any cline-no"> </span>
|
|
1493
|
-
<span class="cline-any cline-no"> </span>
|
|
1494
|
-
<span class="cline-any cline-no"> </span>
|
|
1495
|
-
<span class="cline-any cline-no"> </span>
|
|
1496
|
-
<span class="cline-any cline-no"> </span>
|
|
1497
|
-
<span class="cline-any cline-no"> </span>
|
|
1498
|
-
<span class="cline-any cline-no"> </span>
|
|
1499
|
-
<span class="cline-any cline-no"> </span>
|
|
1500
|
-
<span class="cline-any cline-no"> </span>
|
|
1501
|
-
<span class="cline-any cline-no"> </span>
|
|
1502
|
-
<span class="cline-any cline-no"> </span>
|
|
1503
|
-
<span class="cline-any cline-no"> </span>
|
|
1504
|
-
<span class="cline-any cline-no"> </span>
|
|
1505
|
-
<span class="cline-any cline-no"> </span>
|
|
1506
|
-
<span class="cline-any cline-no"> </span>
|
|
1507
|
-
<span class="cline-any cline-no"> </span>
|
|
1508
|
-
<span class="cline-any cline-no"> </span>
|
|
1509
|
-
<span class="cline-any cline-no"> </span>
|
|
1510
|
-
<span class="cline-any cline-no"> </span>
|
|
1511
|
-
<span class="cline-any cline-no"> </span>
|
|
1406
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1407
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1408
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1409
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1410
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1411
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1412
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1413
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1414
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1415
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1416
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1417
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1418
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1419
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1420
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1421
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1422
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1423
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1424
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1425
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1426
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1427
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1428
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1429
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1430
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1431
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1432
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1433
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1434
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1435
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1436
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1437
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1438
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1439
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1440
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1441
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1442
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1443
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1444
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1445
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1446
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1447
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1448
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1449
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1450
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1451
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1452
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1453
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1454
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1455
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1456
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1457
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1458
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1459
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1460
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1461
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1462
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1463
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1464
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1465
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1466
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1467
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1468
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1469
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1470
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1471
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1472
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1473
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1474
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1475
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1476
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1477
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1478
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1479
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1480
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1481
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1482
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1483
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1484
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1485
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1486
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1487
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1488
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1489
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1490
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1491
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1492
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1493
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1494
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1495
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1496
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1497
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1498
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1499
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1500
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1501
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1502
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1503
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1504
|
+
<span class="cline-any cline-yes">11x</span>
|
|
1505
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1506
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1507
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1508
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1509
|
+
<span class="cline-any cline-yes">11x</span>
|
|
1510
|
+
<span class="cline-any cline-yes">11x</span>
|
|
1511
|
+
<span class="cline-any cline-yes">27x</span>
|
|
1512
1512
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/**
|
|
1513
1513
|
* HSuite Native Connect
|
|
1514
1514
|
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
@@ -1577,30 +1577,30 @@ class P2PSessionPersistence {
|
|
|
1577
1577
|
* @param session
|
|
1578
1578
|
* Persist mobile session to localStorage.
|
|
1579
1579
|
*/
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
<span class="
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
<span class="
|
|
1580
|
+
save(session: P2PSession): void {
|
|
1581
|
+
try {
|
|
1582
|
+
if (typeof window === 'undefined') <span class="branch-0 cbranch-no" title="branch not covered" >return;</span>
|
|
1583
|
+
const payload = {
|
|
1584
|
+
...session,
|
|
1585
|
+
timestamp: Date.now(),
|
|
1586
|
+
};
|
|
1587
|
+
window.localStorage.setItem(P2P_SESSION_STORAGE_KEY, JSON.stringify(payload));
|
|
1588
|
+
logger.debug('Mobile session persisted', { sessionId: session.sessionId });
|
|
1589
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > } catch (error) {</span>
|
|
1590
1590
|
<span class="cstat-no" title="statement not covered" > logger.warn('Failed to persist mobile session', { error });</span>
|
|
1591
1591
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1592
|
-
|
|
1592
|
+
}
|
|
1593
1593
|
|
|
1594
1594
|
/**
|
|
1595
1595
|
* Restore mobile session from localStorage.
|
|
1596
1596
|
*/
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
<span class="
|
|
1600
|
-
|
|
1601
|
-
<span class="
|
|
1597
|
+
restore(): (P2PSession & { timestamp: number }) | null {
|
|
1598
|
+
try {
|
|
1599
|
+
if (typeof window === 'undefined') <span class="branch-0 cbranch-no" title="branch not covered" >return null;</span>
|
|
1600
|
+
const raw = window.localStorage.getItem(P2P_SESSION_STORAGE_KEY);
|
|
1601
|
+
if (!raw) return <span class="branch-0 cbranch-no" title="branch not covered" >null;</span>
|
|
1602
1602
|
<span class="cstat-no" title="statement not covered" > const stored = JSON.parse(raw) as P2PSession & { timestamp: number };</span>
|
|
1603
|
-
<span class="
|
|
1603
|
+
if (!stored?.sessionId) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1604
1604
|
<span class="cstat-no" title="statement not covered" > this.clear();</span>
|
|
1605
1605
|
<span class="cstat-no" title="statement not covered" > return null;</span>
|
|
1606
1606
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
@@ -1610,20 +1610,20 @@ class P2PSessionPersistence {
|
|
|
1610
1610
|
<span class="cstat-no" title="statement not covered" > logger.warn('Failed to restore mobile session', { error });</span>
|
|
1611
1611
|
<span class="cstat-no" title="statement not covered" > return null;</span>
|
|
1612
1612
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1613
|
-
|
|
1613
|
+
}
|
|
1614
1614
|
|
|
1615
1615
|
/**
|
|
1616
1616
|
* Clear persisted mobile session.
|
|
1617
1617
|
*/
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
<span class="
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
<span class="
|
|
1618
|
+
clear(): void {
|
|
1619
|
+
try {
|
|
1620
|
+
if (typeof window === 'undefined') <span class="branch-0 cbranch-no" title="branch not covered" >return;</span>
|
|
1621
|
+
window.localStorage.removeItem(P2P_SESSION_STORAGE_KEY);
|
|
1622
|
+
logger.debug('Mobile session cleared');
|
|
1623
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > } catch (error) {</span>
|
|
1624
1624
|
<span class="cstat-no" title="statement not covered" > logger.warn('Failed to clear mobile session', { error });</span>
|
|
1625
1625
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1626
|
-
|
|
1626
|
+
}
|
|
1627
1627
|
|
|
1628
1628
|
/**
|
|
1629
1629
|
* Check if a mobile session is stored.
|
|
@@ -1695,97 +1695,97 @@ export interface PairingOfferResult {
|
|
|
1695
1695
|
* @publicApi
|
|
1696
1696
|
*/
|
|
1697
1697
|
@Injectable({ providedIn: 'root' })
|
|
1698
|
-
export class P2PNativeProvider extends BaseWalletProvider
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
<span class="
|
|
1698
|
+
export class P2PNativeProvider extends BaseWalletProvider {
|
|
1699
|
+
readonly id = 'mobile-native';
|
|
1700
|
+
|
|
1701
|
+
readonly metadata: ProviderMetadata = {
|
|
1702
|
+
name: 'HSuite Mobile',
|
|
1703
|
+
type: 'mobile-native' as ProviderType,
|
|
1704
|
+
icon: 'phone-portrait-outline',
|
|
1705
|
+
description: 'Connect via QR code (P2P)',
|
|
1706
|
+
features: [
|
|
1707
|
+
'Direct P2P connection',
|
|
1708
|
+
'End-to-end encrypted',
|
|
1709
|
+
'No server required',
|
|
1710
|
+
'Works on any network',
|
|
1711
|
+
],
|
|
1712
|
+
};
|
|
1713
|
+
|
|
1714
|
+
// Internal state signals
|
|
1715
|
+
private readonly _status = signal<ConnectionStatus>('disconnected');
|
|
1716
|
+
private readonly _accounts = signal<UnifiedAccount[]>([]);
|
|
1717
|
+
private readonly _error = signal<string | null>(null);
|
|
1718
|
+
private readonly _connectionState = signal<P2PNativeConnectionState>('disconnected');
|
|
1719
|
+
private readonly _pairingOffer = signal<PairingOfferResult | null>(null);
|
|
1720
|
+
|
|
1721
|
+
/** Session persistence for page reload recovery */
|
|
1722
|
+
private readonly sessionPersistence = new P2PSessionPersistence();
|
|
1723
|
+
|
|
1724
|
+
// Public readonly signals
|
|
1725
|
+
readonly status: Signal<ConnectionStatus> = this._status.asReadonly();
|
|
1726
|
+
readonly accounts: Signal<UnifiedAccount[]> = this._accounts.asReadonly();
|
|
1727
|
+
readonly error: Signal<string | null> = this._error.asReadonly();
|
|
1728
|
+
|
|
1729
|
+
/**
|
|
1730
|
+
* Current detailed connection state
|
|
1731
|
+
*/
|
|
1732
|
+
readonly connectionState: Signal<P2PNativeConnectionState> = this._connectionState.asReadonly();
|
|
1733
|
+
|
|
1734
|
+
/**
|
|
1735
|
+
* Current pairing offer (if awaiting scan)
|
|
1736
|
+
*/
|
|
1737
|
+
readonly pairingOffer: Signal<PairingOfferResult | null> = this._pairingOffer.asReadonly();
|
|
1738
|
+
|
|
1739
|
+
/**
|
|
1740
|
+
* Whether currently awaiting wallet to scan QR
|
|
1741
|
+
*/
|
|
1742
|
+
readonly isAwaitingScan = computed(() => this._connectionState() === 'awaiting_scan');
|
|
1743
|
+
|
|
1744
|
+
/**
|
|
1745
|
+
* Whether a pairing offer is available
|
|
1746
|
+
*/
|
|
1747
|
+
readonly hasPairingOffer = computed(() => this._pairingOffer() !== null);
|
|
1748
|
+
|
|
1749
|
+
/**
|
|
1750
|
+
* Whether a persisted session exists
|
|
1751
|
+
*/
|
|
1752
|
+
readonly hasPersistedSession = computed(() => this.sessionPersistence.hasStoredSession());
|
|
1753
|
+
|
|
1754
|
+
/**
|
|
1755
|
+
* Transport state for the P2P connection.
|
|
1756
|
+
* Values: 'nostr-only' | 'upgrading' | 'p2p-connected' | 'p2p-failed'
|
|
1757
|
+
*
|
|
1758
|
+
* This allows the UI to show the current transport layer being used.
|
|
1759
|
+
*/
|
|
1760
|
+
readonly transportState = computed(() => this.sessionManager.p2pState());
|
|
1761
|
+
|
|
1762
|
+
/**
|
|
1763
|
+
* @param sessionManager
|
|
1764
|
+
* @param ngZone
|
|
1765
|
+
*/
|
|
1766
|
+
constructor(
|
|
1767
|
+
private readonly sessionManager: P2PSessionManager,
|
|
1768
|
+
private readonly ngZone: NgZone,
|
|
1769
|
+
) {
|
|
1770
|
+
super();
|
|
1771
|
+
// CRITICAL: Pass NgZone to session manager so signal updates from
|
|
1772
|
+
// Nostr/WebSocket callbacks (which fire outside Angular zone) trigger
|
|
1773
|
+
// Angular change detection. Without this, walletContext.activeAccount
|
|
1774
|
+
// stays null after session approval.
|
|
1775
|
+
this.sessionManager.setNgZone(this.ngZone);
|
|
1776
|
+
this.setupSessionManagerListeners();
|
|
1777
|
+
this.restorePersistedSession();
|
|
1778
|
+
}
|
|
1779
|
+
|
|
1780
|
+
/**
|
|
1781
|
+
* Restore session from localStorage on page load.
|
|
1782
|
+
* Sets accounts and status from persisted data.
|
|
1783
|
+
* Note: This only restores metadata - the actual WebRTC connection
|
|
1784
|
+
* will need to be re-established via QR pairing.
|
|
1785
|
+
*/
|
|
1786
|
+
private restorePersistedSession(): void {
|
|
1787
|
+
const stored = this.sessionPersistence.restore();
|
|
1788
|
+
if (stored) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1789
1789
|
<span class="cstat-no" title="statement not covered" > logger.info('Restoring persisted mobile session', {</span>
|
|
1790
1790
|
<span class="cstat-no" title="statement not covered" > sessionId: stored.sessionId,</span>
|
|
1791
1791
|
<span class="cstat-no" title="statement not covered" > accountCount: stored.accounts?.length ?? 0,</span>
|
|
@@ -1801,119 +1801,119 @@ export class P2PNativeProvider extends BaseWalletProvider <span class="fstat-no"
|
|
|
1801
1801
|
<span class="cstat-no" title="statement not covered" > // The persisted data is for account info only</span>
|
|
1802
1802
|
<span class="cstat-no" title="statement not covered" > logger.debug('Mobile session metadata restored (requires re-pairing for connection)');</span>
|
|
1803
1803
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
<span class="
|
|
1804
|
+
}
|
|
1805
|
+
|
|
1806
|
+
/**
|
|
1807
|
+
* Creates a pairing offer for QR code display.
|
|
1808
|
+
*
|
|
1809
|
+
* @description
|
|
1810
|
+
* Generates a channel invite encoded for QR display. The mobile wallet
|
|
1811
|
+
* scans this QR code to establish a connection via Nostr relays with
|
|
1812
|
+
* automatic P2P upgrade.
|
|
1813
|
+
*
|
|
1814
|
+
* The returned `qrData` is a compact `hsc:connect?i=...` URL that contains:
|
|
1815
|
+
* - Channel ID and encryption keys
|
|
1816
|
+
* - App metadata (name, ID)
|
|
1817
|
+
* - Relay endpoints for communication
|
|
1818
|
+
*
|
|
1819
|
+
* @param config - Connection configuration specifying ledger and network
|
|
1820
|
+
*
|
|
1821
|
+
* @returns Promise resolving to pairing offer containing QR data and expiry
|
|
1822
|
+
*
|
|
1823
|
+
* @throws {Error} If offer generation fails
|
|
1824
|
+
*/
|
|
1825
|
+
async createPairingOffer(config: ConnectionConfig): Promise<PairingOfferResult> {
|
|
1826
|
+
logger.info('Creating pairing offer', { config });
|
|
1827
|
+
|
|
1828
|
+
try {
|
|
1829
|
+
this._connectionState.set('generating_offer');
|
|
1830
|
+
this._error.set(null);
|
|
1831
|
+
|
|
1832
|
+
// Extract common properties based on config type
|
|
1833
|
+
const appId = 'appId' in config ? (config.<span class="branch-0 cbranch-no" title="branch not covered" >appId ?? 'hsuite-dapp') : '</span>hsuite-dapp';
|
|
1834
|
+
const appName = 'appName' in config ? (config.<span class="branch-0 cbranch-no" title="branch not covered" >appName ?? 'HSuite dApp') : '</span>HSuite dApp';
|
|
1835
|
+
const ledgerId = 'ledgerId' in config ? (config.<span class="branch-0 cbranch-no" title="branch not covered" >ledgerId ?? 'hedera') : '</span>hedera';
|
|
1836
|
+
const networkId = config.<span class="branch-0 cbranch-no" title="branch not covered" >networkId ?? 'testnet';</span>
|
|
1837
|
+
|
|
1838
|
+
const result = await this.sessionManager.createPairingOffer({
|
|
1839
|
+
appId,
|
|
1840
|
+
appName,
|
|
1841
|
+
ledgerId,
|
|
1842
|
+
networkId,
|
|
1843
|
+
});
|
|
1844
|
+
|
|
1845
|
+
const offerResult: PairingOfferResult = {
|
|
1846
|
+
qrData: result.qrData,
|
|
1847
|
+
sessionId: result.sessionId,
|
|
1848
|
+
expiresAt: Date.now() + 120 * 1000, // 2 minutes
|
|
1849
|
+
};
|
|
1850
|
+
|
|
1851
|
+
this._pairingOffer.set(offerResult);
|
|
1852
|
+
this._connectionState.set('awaiting_scan');
|
|
1853
|
+
this._status.set('connecting');
|
|
1854
|
+
|
|
1855
|
+
logger.info('Pairing offer created', {
|
|
1856
|
+
qrDataLength: result.qrData.length,
|
|
1857
|
+
expiresAt: offerResult.expiresAt,
|
|
1858
|
+
});
|
|
1859
|
+
|
|
1860
|
+
return offerResult;
|
|
1861
|
+
} catch (error) {
|
|
1862
|
+
logger.error('Failed to create pairing offer', { error });
|
|
1863
|
+
this._connectionState.set('error');
|
|
1864
|
+
this._status.set('error');
|
|
1865
|
+
this._error.set(error instanceof Error ? error.<span class="branch-0 cbranch-no" title="branch not covered" >message : 'Failed to create pairing offer')</span>;
|
|
1866
|
+
throw error;
|
|
1867
|
+
}
|
|
1868
|
+
}
|
|
1869
|
+
|
|
1870
|
+
/**
|
|
1871
|
+
* Refresh the pairing offer (e.g., when expired).
|
|
1872
|
+
*
|
|
1873
|
+
* @param config - Connection configuration
|
|
1874
|
+
* @returns Promise resolving to new pairing offer
|
|
1875
|
+
*/
|
|
1876
|
+
async refreshPairingOffer(config: ConnectionConfig): Promise<PairingOfferResult> {
|
|
1877
|
+
logger.debug('Refreshing pairing offer');
|
|
1878
|
+
|
|
1879
|
+
// Cancel any existing offer
|
|
1880
|
+
await this.sessionManager.cancelPairingOffer();
|
|
1881
|
+
|
|
1882
|
+
return this.createPairingOffer(config);
|
|
1883
|
+
}
|
|
1884
|
+
|
|
1885
|
+
/**
|
|
1886
|
+
* Register callback for when peer connects.
|
|
1887
|
+
*
|
|
1888
|
+
* @param callback - Function to call when connection is established
|
|
1889
|
+
*/
|
|
1890
|
+
onPeerConnected(callback: () => void): void {
|
|
1891
|
+
this.sessionManager.onConnected(() => {
|
|
1892
|
+
callback();
|
|
1893
|
+
});
|
|
1894
|
+
}
|
|
1895
|
+
|
|
1896
|
+
/**
|
|
1897
|
+
* Waits for the wallet to connect and approve the session.
|
|
1898
|
+
*
|
|
1899
|
+
* @description
|
|
1900
|
+
* Call this after {@link createPairingOffer} to block until the wallet user
|
|
1901
|
+
* completes the connection flow. This is the single-QR flow - no answer
|
|
1902
|
+
* scanning is required.
|
|
1903
|
+
*
|
|
1904
|
+
* The method resolves when all of the following occur:
|
|
1905
|
+
* 1. Wallet scans the QR code
|
|
1906
|
+
* 2. Wallet connects via Nostr relay
|
|
1907
|
+
* 3. User approves the session in the wallet
|
|
1908
|
+
*
|
|
1909
|
+
* Upon success, the session is automatically persisted for reconnection.
|
|
1910
|
+
*
|
|
1911
|
+
* @returns Promise resolving to the approved session with account information
|
|
1912
|
+
*
|
|
1913
|
+
* @throws {Error} If connection fails or is rejected
|
|
1914
|
+
* @throws {Error} If no pairing offer was created
|
|
1915
|
+
*/
|
|
1916
|
+
<span class="fstat-no" title="function not covered" > async waitForSessionApproval(): Promise<P2PSession> {</span>
|
|
1917
1917
|
<span class="cstat-no" title="statement not covered" > logger.info('Waiting for wallet to connect and approve session');</span>
|
|
1918
1918
|
<span class="cstat-no" title="statement not covered" > this._connectionState.set('pending_approval');</span>
|
|
1919
1919
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
@@ -1941,28 +1941,28 @@ export class P2PNativeProvider extends BaseWalletProvider <span class="fstat-no"
|
|
|
1941
1941
|
<span class="cstat-no" title="statement not covered" > throw error;</span>
|
|
1942
1942
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1943
1943
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
<span class="
|
|
1944
|
+
|
|
1945
|
+
// ========== BaseWalletProvider Implementation ==========
|
|
1946
|
+
|
|
1947
|
+
/**
|
|
1948
|
+
* Connects to a wallet via the P2P pairing flow.
|
|
1949
|
+
*
|
|
1950
|
+
* @description
|
|
1951
|
+
* Initiates the pairing offer flow and waits for connection. For more
|
|
1952
|
+
* control over QR display timing, use {@link createPairingOffer} and
|
|
1953
|
+
* {@link waitForSessionApproval} separately.
|
|
1954
|
+
*
|
|
1955
|
+
* This method:
|
|
1956
|
+
* 1. Creates a pairing offer
|
|
1957
|
+
* 2. Updates `pairingOffer` signal with QR data
|
|
1958
|
+
* 3. Waits up to 2 minutes for wallet to connect
|
|
1959
|
+
*
|
|
1960
|
+
* @param config - Connection configuration
|
|
1961
|
+
*
|
|
1962
|
+
* @throws {Error} If already connected (no-op)
|
|
1963
|
+
* @throws {Error} If connection times out (2 minutes)
|
|
1964
|
+
*/
|
|
1965
|
+
<span class="fstat-no" title="function not covered" > async connect(config: ConnectionConfig): Promise<void> {</span>
|
|
1966
1966
|
<span class="cstat-no" title="statement not covered" > logger.info('Connect called', { config });</span>
|
|
1967
1967
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
1968
1968
|
<span class="cstat-no" title="statement not covered" > // If already connected, no-op</span>
|
|
@@ -1991,247 +1991,247 @@ export class P2PNativeProvider extends BaseWalletProvider <span class="fstat-no"
|
|
|
1991
1991
|
<span class="cstat-no" title="statement not covered" > });</span>
|
|
1992
1992
|
<span class="cstat-no" title="statement not covered" > });</span>
|
|
1993
1993
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
<span class="
|
|
1994
|
+
|
|
1995
|
+
/**
|
|
1996
|
+
* Disconnects from the wallet and clears session.
|
|
1997
|
+
*
|
|
1998
|
+
* @description
|
|
1999
|
+
* Terminates the P2P session, clears all state signals, and removes
|
|
2000
|
+
* persisted session data. The wallet is notified of the disconnection.
|
|
2001
|
+
*/
|
|
2002
|
+
async disconnect(): Promise<void> {
|
|
2003
|
+
logger.info('Disconnecting');
|
|
2004
|
+
|
|
2005
|
+
try {
|
|
2006
|
+
await this.sessionManager.terminateSession();
|
|
2007
|
+
} finally {
|
|
2008
|
+
this._status.set('disconnected');
|
|
2009
|
+
this._connectionState.set('disconnected');
|
|
2010
|
+
this._accounts.set([]);
|
|
2011
|
+
this._pairingOffer.set(null);
|
|
2012
|
+
this._error.set(null);
|
|
2013
|
+
|
|
2014
|
+
// Clear persisted session
|
|
2015
|
+
this.sessionPersistence.clear();
|
|
2016
|
+
}
|
|
2017
|
+
}
|
|
2018
|
+
|
|
2019
|
+
/**
|
|
2020
|
+
* Signs a transaction without submitting it.
|
|
2021
|
+
*
|
|
2022
|
+
* @description
|
|
2023
|
+
* Sends the transaction to the connected wallet for signing. The wallet
|
|
2024
|
+
* displays transaction details and prompts the user for approval.
|
|
2025
|
+
*
|
|
2026
|
+
* @param options - Transaction signing options
|
|
2027
|
+
*
|
|
2028
|
+
* @returns Promise resolving to signed payload and signature
|
|
2029
|
+
*
|
|
2030
|
+
* @throws {Error} If not connected to wallet
|
|
2031
|
+
* @throws {Error} If user rejects signing
|
|
2032
|
+
*/
|
|
2033
|
+
async signTransaction(options: SignTransactionOptions): Promise<SignResult> {
|
|
2034
|
+
if (this._status() !== 'connected') {
|
|
2035
|
+
throw new Error('Not connected to wallet');
|
|
2036
|
+
}
|
|
2037
|
+
|
|
2038
|
+
logger.info('Signing transaction', { account: options.accountAddress });
|
|
2039
|
+
|
|
2040
|
+
const result = await this.sessionManager.signTransaction({
|
|
2041
|
+
accountAddress: options.accountAddress,
|
|
2042
|
+
payload: options.payload,
|
|
2043
|
+
ledgerId: options.ledgerId,
|
|
2044
|
+
networkId: options.networkId,
|
|
2045
|
+
});
|
|
2046
|
+
|
|
2047
|
+
return {
|
|
2048
|
+
signedPayload: result.signedPayload,
|
|
2049
|
+
signature: result.signature,
|
|
2050
|
+
metadata: result.metadata,
|
|
2051
|
+
};
|
|
2052
|
+
}
|
|
2053
|
+
|
|
2054
|
+
/**
|
|
2055
|
+
* Signs and submits a transaction to the blockchain.
|
|
2056
|
+
*
|
|
2057
|
+
* @description
|
|
2058
|
+
* Performs atomic sign and submit in a single operation. Supports batch
|
|
2059
|
+
* transactions when isBatch is true.
|
|
2060
|
+
*
|
|
2061
|
+
* @param options - Transaction submission options
|
|
2062
|
+
*
|
|
2063
|
+
* @returns Promise resolving to transaction ID and hash
|
|
2064
|
+
*
|
|
2065
|
+
* @throws {Error} If not connected to wallet
|
|
2066
|
+
* @throws {Error} If user rejects or transaction fails
|
|
2067
|
+
*/
|
|
2068
|
+
async submitTransaction(options: SubmitTransactionOptions): Promise<SubmitResult> {
|
|
2069
|
+
if (this._status() !== 'connected') <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2070
2070
|
<span class="cstat-no" title="statement not covered" > throw new Error('Not connected to wallet');</span>
|
|
2071
2071
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
<span class="
|
|
2072
|
+
|
|
2073
|
+
logger.info('Submitting transaction', { account: options.accountAddress });
|
|
2074
|
+
|
|
2075
|
+
const result = await this.sessionManager.submitTransaction({
|
|
2076
|
+
accountAddress: options.accountAddress,
|
|
2077
|
+
payload: options.payload,
|
|
2078
|
+
ledgerId: options.ledgerId,
|
|
2079
|
+
networkId: options.networkId,
|
|
2080
|
+
isBatch: options.isBatch,
|
|
2081
|
+
batchKey: options.batchKey,
|
|
2082
|
+
innerTransactions: options.innerTransactions,
|
|
2083
|
+
});
|
|
2084
|
+
|
|
2085
|
+
return {
|
|
2086
|
+
transactionId: result.transactionId,
|
|
2087
|
+
transactionHash: result.transactionHash,
|
|
2088
|
+
metadata: result.metadata,
|
|
2089
|
+
};
|
|
2090
|
+
}
|
|
2091
|
+
|
|
2092
|
+
/**
|
|
2093
|
+
* Signs and executes a transaction atomically in a single prompt.
|
|
2094
|
+
*
|
|
2095
|
+
* @description
|
|
2096
|
+
* Delegates to {@link submitTransaction}. This method exists so that
|
|
2097
|
+
* {@link UnifiedWalletService.signAndExecuteTransaction} can detect native
|
|
2098
|
+
* atomic sign+submit support on the provider (via duck-typing) and avoid
|
|
2099
|
+
* its fallback path that chains separate signTransaction + submitTransaction
|
|
2100
|
+
* calls. Mirrors the pattern used by HsuiteNativeProvider and the
|
|
2101
|
+
* WalletConnect signers.
|
|
2102
|
+
*
|
|
2103
|
+
* @param options - Transaction submission options
|
|
2104
|
+
*
|
|
2105
|
+
* @returns Promise resolving to submission result with transaction ID
|
|
2106
|
+
*/
|
|
2107
|
+
<span class="fstat-no" title="function not covered" > async signAndExecuteTransaction(options: SubmitTransactionOptions): Promise<SubmitResult> {</span>
|
|
2108
2108
|
<span class="cstat-no" title="statement not covered" > return this.submitTransaction(options);</span>
|
|
2109
2109
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
<span class="
|
|
2110
|
+
|
|
2111
|
+
/**
|
|
2112
|
+
* Signs an arbitrary message for authentication or verification.
|
|
2113
|
+
*
|
|
2114
|
+
* @description
|
|
2115
|
+
* Requests the wallet to sign a non-transaction message. Used for
|
|
2116
|
+
* authentication challenges, DAO voting, or off-chain signatures.
|
|
2117
|
+
*
|
|
2118
|
+
* @param options - Message signing options
|
|
2119
|
+
*
|
|
2120
|
+
* @returns Promise resolving to signature and public key
|
|
2121
|
+
*
|
|
2122
|
+
* @throws {Error} If not connected to wallet
|
|
2123
|
+
* @throws {Error} If user rejects signing
|
|
2124
|
+
*/
|
|
2125
|
+
async signMessage(options: SignMessageOptions): Promise<SignMessageResult> {
|
|
2126
|
+
if (this._status() !== 'connected') <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2127
2127
|
<span class="cstat-no" title="statement not covered" > throw new Error('Not connected to wallet');</span>
|
|
2128
2128
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2228
|
-
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
|
|
2129
|
+
|
|
2130
|
+
logger.info('Signing message', { account: options.accountAddress });
|
|
2131
|
+
|
|
2132
|
+
const result = await this.sessionManager.signMessage({
|
|
2133
|
+
accountAddress: options.accountAddress,
|
|
2134
|
+
message: options.message,
|
|
2135
|
+
encoding: options.encoding,
|
|
2136
|
+
ledgerId: options.ledgerId,
|
|
2137
|
+
networkId: options.networkId,
|
|
2138
|
+
});
|
|
2139
|
+
|
|
2140
|
+
return {
|
|
2141
|
+
signature: result.signature,
|
|
2142
|
+
publicKey: result.publicKey,
|
|
2143
|
+
metadata: result.metadata,
|
|
2144
|
+
};
|
|
2145
|
+
}
|
|
2146
|
+
|
|
2147
|
+
/**
|
|
2148
|
+
* Checks if P2P provider is available in the current environment.
|
|
2149
|
+
*
|
|
2150
|
+
* @description
|
|
2151
|
+
* P2P Native requires WebRTC support (RTCPeerConnection). This is available
|
|
2152
|
+
* in all modern browsers and most mobile WebViews.
|
|
2153
|
+
*
|
|
2154
|
+
* @returns Promise resolving to true if WebRTC is available
|
|
2155
|
+
*/
|
|
2156
|
+
async isAvailable(): Promise<boolean> {
|
|
2157
|
+
// Check for WebRTC support
|
|
2158
|
+
return typeof RTCPeerConnection !== 'undefined';
|
|
2159
|
+
}
|
|
2160
|
+
|
|
2161
|
+
// ========== Private Methods ==========
|
|
2162
|
+
|
|
2163
|
+
/**
|
|
2164
|
+
* Set up listeners for session manager events
|
|
2165
|
+
*/
|
|
2166
|
+
private setupSessionManagerListeners(): void {
|
|
2167
|
+
// Connection established — wrap in NgZone to ensure Angular change
|
|
2168
|
+
// detection picks up signal updates from Nostr/WebSocket callbacks
|
|
2169
|
+
this.sessionManager.onConnected((session) => {
|
|
2170
|
+
logger.info('Session connected', { sessionId: session?.id });
|
|
2171
|
+
this.ngZone.run(() => {
|
|
2172
|
+
this._connectionState.set('connected');
|
|
2173
|
+
this._status.set('connected');
|
|
2174
|
+
this._pairingOffer.set(null);
|
|
2175
|
+
|
|
2176
|
+
// Update accounts from session - ensure providerId is set
|
|
2177
|
+
if (session?.accounts) {
|
|
2178
|
+
const accountsWithProvider = this.ensureProviderIdOnAccounts(session.accounts);
|
|
2179
|
+
this._accounts.set(accountsWithProvider);
|
|
2180
|
+
}
|
|
2181
|
+
});
|
|
2182
|
+
|
|
2183
|
+
// Persist session for page reload recovery
|
|
2184
|
+
if (session) {
|
|
2185
|
+
this.sessionPersistence.save(session);
|
|
2186
|
+
}
|
|
2187
|
+
});
|
|
2188
|
+
|
|
2189
|
+
// Session terminated
|
|
2190
|
+
this.sessionManager.onDisconnected(() => {
|
|
2191
|
+
logger.info('Session disconnected');
|
|
2192
|
+
this.ngZone.run(() => {
|
|
2193
|
+
this._connectionState.set('disconnected');
|
|
2194
|
+
this._status.set('disconnected');
|
|
2195
|
+
this._accounts.set([]);
|
|
2196
|
+
});
|
|
2197
|
+
|
|
2198
|
+
// Clear persisted session
|
|
2199
|
+
this.sessionPersistence.clear();
|
|
2200
|
+
});
|
|
2201
|
+
|
|
2202
|
+
// Error occurred
|
|
2203
|
+
this.sessionManager.onError((error: Error) => {
|
|
2204
|
+
logger.error('Session error', { error });
|
|
2205
|
+
this.ngZone.run(() => {
|
|
2206
|
+
this._connectionState.set('error');
|
|
2207
|
+
this._status.set('error');
|
|
2208
|
+
this._error.set(error.message);
|
|
2209
|
+
});
|
|
2210
|
+
});
|
|
2211
|
+
|
|
2212
|
+
// Accounts updated
|
|
2213
|
+
this.sessionManager.onAccountsChanged((accounts) => {
|
|
2214
|
+
logger.debug('Accounts updated', { count: accounts.length });
|
|
2215
|
+
this.ngZone.run(() => {
|
|
2216
|
+
const accountsWithProvider = this.ensureProviderIdOnAccounts(accounts);
|
|
2217
|
+
this._accounts.set(accountsWithProvider);
|
|
2218
|
+
});
|
|
2219
|
+
});
|
|
2220
|
+
}
|
|
2221
|
+
|
|
2222
|
+
/**
|
|
2223
|
+
* Ensure all accounts have providerId and providerType set correctly
|
|
2224
|
+
* @param accounts
|
|
2225
|
+
*/
|
|
2226
|
+
private ensureProviderIdOnAccounts(accounts: UnifiedAccount[]): UnifiedAccount[] {
|
|
2227
|
+
return accounts.map((account) => ({
|
|
2228
|
+
...account,
|
|
2229
|
+
id: account.id || `${this.id}-${account.address}`,
|
|
2230
|
+
providerId: this.id,
|
|
2231
|
+
providerType: this.metadata.type,
|
|
2232
|
+
}));
|
|
2233
|
+
}
|
|
2234
|
+
}
|
|
2235
2235
|
</pre></td></tr></table></pre>
|
|
2236
2236
|
|
|
2237
2237
|
<div class='push'></div><!-- for sticky footer -->
|
|
@@ -2239,7 +2239,7 @@ export class P2PNativeProvider extends BaseWalletProvider <span class="fstat-no"
|
|
|
2239
2239
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
2240
2240
|
Code coverage generated by
|
|
2241
2241
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
2242
|
-
at 2026-06-
|
|
2242
|
+
at 2026-06-27T21:00:37.209Z
|
|
2243
2243
|
</div>
|
|
2244
2244
|
<script src="../../../prettify.js"></script>
|
|
2245
2245
|
<script>
|