Page MenuHomePhabricator

Implement miner funding features
ClosedPublic

Authored by deadalnix on Feb 13 2020, 01:57.

Details

Reviewers
jasonbcox
Group Reviewers
Restricted Project
Commits
rABCb46180893ed6: Implement miner funding features
Summary

This implements a whitelist, activated via BIP9. Each block must send 5% of the block reward to one of the activated addresses.

Test Plan

Add integration tests.

Diff Detail

Repository
rABC Bitcoin ABC
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

deadalnix created this revision.Feb 13 2020, 01:57
Herald added a reviewer: Restricted Project. · View Herald TranscriptFeb 13 2020, 01:57
deadalnix changed the visibility from "Public (No Login Required)" to "Restricted Project (Project)".Feb 13 2020, 01:58
markblundeberg added a subscriber: markblundeberg.EditedFeb 13 2020, 02:16

Teamcity is not able to post build failures here unless it's given permission (it's not part of Bitcoin ABC group) -- if you want that you have to add it to policy as a second entry.

https://build.bitcoinabc.org/viewLog.html?buildId=29215&buildTypeId=BitcoinABC_BitcoinAbcStaging&tab=buildResultsDiv

markblundeberg requested changes to this revision.Feb 13 2020, 02:32

fix the build fail

This revision now requires changes to proceed.Feb 13 2020, 02:32

Where is the spec for this? If there isn't any yet, one can be put under doc/abc/ . It's not clear what is the intended behaviour in simple language -- how does activation work, when does rule take effect, when does rule stop taking effect, etc etc.

deadalnix requested review of this revision.Feb 13 2020, 15:26

The builds are clean.

The builds are clean.

Have tried running test_bitcoin or looking at the CI diff test?

Teamcity is not able to post build failures here unless it's given permission (it's not part of Bitcoin ABC group) -- if you want that you have to add it to policy as a second entry.

https://build.bitcoinabc.org/viewLog.html?buildId=29215&buildTypeId=BitcoinABC_BitcoinAbcStaging&tab=buildResultsDiv

I've added teamcity to the Bitcoin ABC group. Should be working now.

Snippet of first build failure:

[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "init_tests/walletinit_verify_walletdir_no_trailing2": signal: SIGABRT (application abort requested) [0;39;49m
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06] :	 [Step 1/1] ../src/wallet/test/init_tests.cpp(69):  [1;36;49mlast checkpoint: "walletinit_verify_walletdir_no_trailing2" fixture ctor [0;39;49m
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "psbt_wallet_tests/psbt_updater_test": signal: SIGABRT (application abort requested) [0;39;49m
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06] :	 [Step 1/1] ../src/wallet/test/psbt_wallet_tests.cpp(19):  [1;36;49mlast checkpoint: "psbt_updater_test" fixture ctor [0;39;49m
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "psbt_wallet_tests/parse_hd_keypath": signal: SIGABRT (application abort requested) [0;39;49m
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06] :	 [Step 1/1] ../src/wallet/test/psbt_wallet_tests.cpp(129):  [1;36;49mlast checkpoint: "parse_hd_keypath" fixture ctor [0;39;49m
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_tests/rescan": signal: SIGABRT (application abort requested) [0;39;49m
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06] :	 [Step 1/1] ../src/wallet/test/wallet_tests.cpp(38):  [1;36;49mlast checkpoint: "rescan" fixture ctor [0;39;49m
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_tests/importwallet_rescan": signal: SIGABRT (application abort requested) [0;39;49m
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06] :	 [Step 1/1] ../src/wallet/test/wallet_tests.cpp(134):  [1;36;49mlast checkpoint: "importwallet_rescan" fixture ctor [0;39;49m
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_tests/coin_mark_dirty_immature_credit": signal: SIGABRT (application abort requested) [0;39;49m
[17:36:06] :	 [Step 1/1] ../src/wallet/test/wallet_tests.cpp(213):  [1;36;49mlast checkpoint: "coin_mark_dirty_immature_credit" fixture ctor [0;39;49m
[17:36:06] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_tests/ComputeTimeSmart": signal: SIGABRT (application abort requested) [0;39;49m
[17:36:06] :	 [Step 1/1] ../src/wallet/test/wallet_tests.cpp(266):  [1;36;49mlast checkpoint: "ComputeTimeSmart" fixture ctor [0;39;49m
[17:36:06] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_tests/LoadReceiveRequests": signal: SIGABRT (application abort requested) [0;39;49m
[17:36:06] :	 [Step 1/1] ../src/wallet/test/wallet_tests.cpp(291):  [1;36;49mlast checkpoint: "LoadReceiveRequests" fixture ctor [0;39;49m
[17:36:06] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_tests/ListCoins": signal: SIGABRT (application abort requested) [0;39;49m
[17:36:06] :	 [Step 1/1] ../src/wallet/test/wallet_tests.cpp(357):  [1;36;49mlast checkpoint: "ListCoins" fixture ctor [0;39;49m
[17:36:06] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_tests/wallet_disableprivkeys": signal: SIGABRT (application abort requested) [0;39;49m
[17:36:06] :	 [Step 1/1] ../src/wallet/test/wallet_tests.cpp(421):  [1;36;49mlast checkpoint: "wallet_disableprivkeys" fixture ctor [0;39;49m
[17:36:06] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "walletdb_tests/write_erase_name": signal: SIGABRT (application abort requested) [0;39;49m
[17:36:06] :	 [Step 1/1] ../src/wallet/test/walletdb_tests.cpp(31):  [1;36;49mlast checkpoint: "write_erase_name" fixture ctor [0;39;49m
[17:36:06] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "walletdb_tests/write_erase_purpose": signal: SIGABRT (application abort requested) [0;39;49m
[17:36:06] :	 [Step 1/1] ../src/wallet/test/walletdb_tests.cpp(55):  [1;36;49mlast checkpoint: "write_erase_purpose" fixture ctor [0;39;49m
[17:36:06] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "walletdb_tests/write_erase_destdata": signal: SIGABRT (application abort requested) [0;39;49m
[17:36:06] :	 [Step 1/1] ../src/wallet/test/walletdb_tests.cpp(79):  [1;36;49mlast checkpoint: "write_erase_destdata" fixture ctor [0;39;49m
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[17:36:06]W:	 [Step 1/1] 
[17:36:06]W:	 [Step 1/1]  [1;31;49m*** 89 failures are detected in the test module "Bitcoin ABC unit tests"
[17:36:06] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "walletdb_tests/no_dest_fails": signal: SIGABRT (application abort requested) [0;39;49m
[17:36:06] :	 [Step 1/1] ../src/wallet/test/walletdb_tests.cpp(114):  [1;36;49mlast checkpoint: "no_dest_fails" fixture ctor [0;39;49m
[17:36:06] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_crypto_tests/passphrase": signal: SIGABRT (application abort requested) [0;39;49m
[17:36:06] :	 [Step 1/1] ../src/wallet/test/wallet_crypto_tests.cpp(100):  [1;36;49mlast checkpoint: "passphrase" fixture ctor [0;39;49m
[17:36:06] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_crypto_tests/encrypt": signal: SIGABRT (application abort requested) [0;39;49m
[17:36:06] :	 [Step 1/1] ../src/wallet/test/wallet_crypto_tests.cpp(120):  [1;36;49mlast checkpoint: "encrypt" fixture ctor [0;39;49m
[17:36:06] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_crypto_tests/decrypt": signal: SIGABRT (application abort requested) [0;39;49m
[17:36:06] :	 [Step 1/1] ../src/wallet/test/wallet_crypto_tests.cpp(136):  [1;36;49mlast checkpoint: "decrypt" fixture ctor [0;39;49m
[17:36:06]W:	 [Step 1/1]  [0;39;49mtest_bitcoin: /usr/include/boost/thread/pthread/condition_variable_fwd.hpp:85: boost::condition_variable::~condition_variable(): Assertion `!ret' failed.
[17:36:06]W:	 [Step 1/1] ./contrib/teamcity/build-configurations.sh: line 48: 17494 Aborted                 ./src/test/test_bitcoin --logger=HRF:JUNIT,${UNIT_TESTS_JUNIT_LOG_LEVEL},${TEST_BITCOIN_JUNIT} -- -testsuitename="${TEST_BITCOIN_SUITE_NAME}" "${@:2}"
[17:36:06]W:	 [Step 1/1] Process exited with code 134
[17:36:06]E:	 [Step 1/1] Process exited with code 134 (Step: Command Line)

Each failure log is accessible here:
Bitcoin_ABC_unit_tests: txvalidationcache_tests.tx_mempool_block_doublespend
Bitcoin_ABC_unit_tests: txvalidationcache_tests.checkinputs_test
Bitcoin_ABC_unit_tests: uint256_tests.basics
Bitcoin_ABC_unit_tests: uint256_tests.comparison
Bitcoin_ABC_unit_tests: uint256_tests.methods
Bitcoin_ABC_unit_tests: uint256_tests.conversion
Bitcoin_ABC_unit_tests: uint256_tests.operator_with_self
Bitcoin_ABC_unit_tests: undo_tests.connect_utxo_extblock
Bitcoin_ABC_unit_tests: util_tests.util_criticalsection
Bitcoin_ABC_unit_tests: util_tests.util_ParseHex
Bitcoin_ABC_unit_tests: util_tests.util_HexStr
Bitcoin_ABC_unit_tests: util_tests.util_FormatISO8601DateTime
Bitcoin_ABC_unit_tests: util_tests.util_FormatISO8601Date
Bitcoin_ABC_unit_tests: util_tests.util_ParseParameters
Bitcoin_ABC_unit_tests: util_tests.util_ParseKeyValue
Bitcoin_ABC_unit_tests: util_tests.util_GetBoolArg
Bitcoin_ABC_unit_tests: util_tests.util_GetBoolArgEdgeCases
Bitcoin_ABC_unit_tests: util_tests.util_ReadConfigStream
Bitcoin_ABC_unit_tests: util_tests.util_GetArg
Bitcoin_ABC_unit_tests: util_tests.util_ClearArg
Bitcoin_ABC_unit_tests: util_tests.util_SetArg
Bitcoin_ABC_unit_tests: util_tests.util_GetChainName
Bitcoin_ABC_unit_tests: util_tests.util_FormatMoney
Bitcoin_ABC_unit_tests: util_tests.util_ParseMoney
Bitcoin_ABC_unit_tests: util_tests.util_IsHex
Bitcoin_ABC_unit_tests: util_tests.util_IsHexNumber
Bitcoin_ABC_unit_tests: util_tests.util_seed_insecure_rand
Bitcoin_ABC_unit_tests: util_tests.util_TimingResistantEqual
Bitcoin_ABC_unit_tests: util_tests.strprintf_numbers
Bitcoin_ABC_unit_tests: util_tests.gettime
Bitcoin_ABC_unit_tests: util_tests.test_IsDigit
Bitcoin_ABC_unit_tests: util_tests.test_ParseInt32
Bitcoin_ABC_unit_tests: util_tests.test_ParseInt64
Bitcoin_ABC_unit_tests: util_tests.test_ParseUInt32
Bitcoin_ABC_unit_tests: util_tests.test_ParseUInt64
Bitcoin_ABC_unit_tests: util_tests.test_ParseDouble
Bitcoin_ABC_unit_tests: util_tests.test_FormatParagraph
Bitcoin_ABC_unit_tests: util_tests.test_FormatSubVersion
Bitcoin_ABC_unit_tests: util_tests.test_ParseFixedPoint
Bitcoin_ABC_unit_tests: util_tests.test_LockDirectory
Bitcoin_ABC_unit_tests: util_tests.test_DirIsWritable
Bitcoin_ABC_unit_tests: util_tests.test_ConvertBits
Bitcoin_ABC_unit_tests: util_tests.test_ToLower
Bitcoin_ABC_unit_tests: util_tests.test_ToUpper
Bitcoin_ABC_unit_tests: util_tests.test_Capitalize
Bitcoin_ABC_unit_tests: validation_block_tests.processnewblock_signals_ordering
Bitcoin_ABC_unit_tests: validation_tests.block_subsidy_test
Bitcoin_ABC_unit_tests: validation_tests.subsidy_limit_test
Bitcoin_ABC_unit_tests: validation_tests.validation_load_external_block_file
Bitcoin_ABC_unit_tests: versionbits_tests.versionbits_test
Bitcoin_ABC_unit_tests: versionbits_tests.versionbits_computeblockversion
Bitcoin_ABC_unit_tests: server_tests.server_IsDeprecatedRPCEnabled
Bitcoin_ABC_unit_tests: accounting_tests.acc_orderupgrade
Bitcoin_ABC_unit_tests: db_tests.getwalletenv_file
Bitcoin_ABC_unit_tests: db_tests.getwalletenv_directory
Bitcoin_ABC_unit_tests: db_tests.getwalletenv_g_dbenvs_multiple
Bitcoin_ABC_unit_tests: db_tests.getwalletenv_g_dbenvs_free_instance
Bitcoin_ABC_unit_tests: coinselector_tests.bnb_search_test
Bitcoin_ABC_unit_tests: coinselector_tests.knapsack_solver_test
Bitcoin_ABC_unit_tests: coinselector_tests.ApproximateBestSubset
Bitcoin_ABC_unit_tests: coinselector_tests.SelectCoins_test
Bitcoin_ABC_unit_tests: init_tests.walletinit_verify_walletdir_default
Bitcoin_ABC_unit_tests: init_tests.walletinit_verify_walletdir_custom
Bitcoin_ABC_unit_tests: init_tests.walletinit_verify_walletdir_does_not_exist
Bitcoin_ABC_unit_tests: init_tests.walletinit_verify_walletdir_is_not_directory
Bitcoin_ABC_unit_tests: init_tests.walletinit_verify_walletdir_is_not_relative
Bitcoin_ABC_unit_tests: init_tests.walletinit_verify_walletdir_no_trailing
Bitcoin_ABC_unit_tests: init_tests.walletinit_verify_walletdir_no_trailing2
Bitcoin_ABC_unit_tests: psbt_wallet_tests.psbt_updater_test
Bitcoin_ABC_unit_tests: psbt_wallet_tests.parse_hd_keypath
Bitcoin_ABC_unit_tests: wallet_tests.rescan
Bitcoin_ABC_unit_tests: wallet_tests.importwallet_rescan
Bitcoin_ABC_unit_tests: wallet_tests.coin_mark_dirty_immature_credit
Bitcoin_ABC_unit_tests: wallet_tests.ComputeTimeSmart
Bitcoin_ABC_unit_tests: wallet_tests.LoadReceiveRequests
Bitcoin_ABC_unit_tests: wallet_tests.ListCoins
Bitcoin_ABC_unit_tests: wallet_tests.wallet_disableprivkeys
Bitcoin_ABC_unit_tests: walletdb_tests.write_erase_name
Bitcoin_ABC_unit_tests: walletdb_tests.write_erase_purpose
Bitcoin_ABC_unit_tests: walletdb_tests.write_erase_destdata
Bitcoin_ABC_unit_tests: walletdb_tests.no_dest_fails
Bitcoin_ABC_unit_tests: wallet_crypto_tests.passphrase
Bitcoin_ABC_unit_tests: wallet_crypto_tests.encrypt
Bitcoin_ABC_unit_tests: wallet_crypto_tests.decrypt

jasonbcox requested changes to this revision.Feb 13 2020, 19:43
jasonbcox added inline comments.
src/test/miner_tests.cpp
719 ↗(On Diff #16339)

s/chainparams.GetConsensus()/params since params is already available (probably needs a new name too since we use consensusParams in other files)

728 ↗(On Diff #16339)

ditto

This revision now requires changes to proceed.Feb 13 2020, 19:43
jasonbcox added inline comments.Feb 13 2020, 19:55
test/functional/abc-miner-fund.py
227 ↗(On Diff #16339)

This is defined twice

markblundeberg resigned from this revision.Feb 14 2020, 01:25

I won't block this as I'm not confident to effectively review its substance, but good to see the build failures are showing up now.

deadalnix updated this revision to Diff 16375.Feb 14 2020, 02:36

Update to use a whitelist only and bump to 5% after discussions with miners.

Snippet of first build failure:

[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45] :	 [Step 1/1] ../src/wallet/test/init_tests.cpp(60):  [1;36;49mlast checkpoint: "walletinit_verify_walletdir_no_trailing" fixture ctor [0;39;49m
[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "init_tests/walletinit_verify_walletdir_no_trailing2": signal: SIGABRT (application abort requested) [0;39;49m
[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45] :	 [Step 1/1] ../src/wallet/test/init_tests.cpp(69):  [1;36;49mlast checkpoint: "walletinit_verify_walletdir_no_trailing2" fixture ctor [0;39;49m
[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "psbt_wallet_tests/psbt_updater_test": signal: SIGABRT (application abort requested) [0;39;49m
[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45] :	 [Step 1/1] ../src/wallet/test/psbt_wallet_tests.cpp(19):  [1;36;49mlast checkpoint: "psbt_updater_test" fixture ctor [0;39;49m
[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "psbt_wallet_tests/parse_hd_keypath": signal: SIGABRT (application abort requested) [0;39;49m
[02:40:45] :	 [Step 1/1] ../src/wallet/test/psbt_wallet_tests.cpp(129):  [1;36;49mlast checkpoint: "parse_hd_keypath" fixture ctor [0;39;49m
[02:40:45] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_tests/rescan": signal: SIGABRT (application abort requested) [0;39;49m
[02:40:45] :	 [Step 1/1] ../src/wallet/test/wallet_tests.cpp(38):  [1;36;49mlast checkpoint: "rescan" fixture ctor [0;39;49m
[02:40:45] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_tests/importwallet_rescan": signal: SIGABRT (application abort requested) [0;39;49m
[02:40:45] :	 [Step 1/1] ../src/wallet/test/wallet_tests.cpp(134):  [1;36;49mlast checkpoint: "importwallet_rescan" fixture ctor [0;39;49m
[02:40:45] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_tests/coin_mark_dirty_immature_credit": signal: SIGABRT (application abort requested) [0;39;49m
[02:40:45] :	 [Step 1/1] ../src/wallet/test/wallet_tests.cpp(213):  [1;36;49mlast checkpoint: "coin_mark_dirty_immature_credit" fixture ctor [0;39;49m
[02:40:45] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_tests/ComputeTimeSmart": signal: SIGABRT (application abort requested) [0;39;49m
[02:40:45] :	 [Step 1/1] ../src/wallet/test/wallet_tests.cpp(266):  [1;36;49mlast checkpoint: "ComputeTimeSmart" fixture ctor [0;39;49m
[02:40:45] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_tests/LoadReceiveRequests": signal: SIGABRT (application abort requested) [0;39;49m
[02:40:45] :	 [Step 1/1] ../src/wallet/test/wallet_tests.cpp(291):  [1;36;49mlast checkpoint: "LoadReceiveRequests" fixture ctor [0;39;49m
[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45]W:	 [Step 1/1] test_bitcoin: ../src/key.cpp:422: void ECC_Start(): Assertion `secp256k1_context_sign == nullptr' failed.
[02:40:45]W:	 [Step 1/1] 
[02:40:45] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_tests/ListCoins": signal: SIGABRT (application abort requested) [0;39;49m
[02:40:45]W:	 [Step 1/1]  [1;31;49m*** 89 failures are detected in the test module "Bitcoin ABC unit tests"
[02:40:45] :	 [Step 1/1] ../src/wallet/test/wallet_tests.cpp(357):  [1;36;49mlast checkpoint: "ListCoins" fixture ctor [0;39;49m
[02:40:45] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_tests/wallet_disableprivkeys": signal: SIGABRT (application abort requested) [0;39;49m
[02:40:45] :	 [Step 1/1] ../src/wallet/test/wallet_tests.cpp(421):  [1;36;49mlast checkpoint: "wallet_disableprivkeys" fixture ctor [0;39;49m
[02:40:45] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "walletdb_tests/write_erase_name": signal: SIGABRT (application abort requested) [0;39;49m
[02:40:45] :	 [Step 1/1] ../src/wallet/test/walletdb_tests.cpp(31):  [1;36;49mlast checkpoint: "write_erase_name" fixture ctor [0;39;49m
[02:40:45] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "walletdb_tests/write_erase_purpose": signal: SIGABRT (application abort requested) [0;39;49m
[02:40:45] :	 [Step 1/1] ../src/wallet/test/walletdb_tests.cpp(55):  [1;36;49mlast checkpoint: "write_erase_purpose" fixture ctor [0;39;49m
[02:40:45] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "walletdb_tests/write_erase_destdata": signal: SIGABRT (application abort requested) [0;39;49m
[02:40:45] :	 [Step 1/1] ../src/wallet/test/walletdb_tests.cpp(79):  [1;36;49mlast checkpoint: "write_erase_destdata" fixture ctor [0;39;49m
[02:40:45] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "walletdb_tests/no_dest_fails": signal: SIGABRT (application abort requested) [0;39;49m
[02:40:45] :	 [Step 1/1] ../src/wallet/test/walletdb_tests.cpp(114):  [1;36;49mlast checkpoint: "no_dest_fails" fixture ctor [0;39;49m
[02:40:45] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_crypto_tests/passphrase": signal: SIGABRT (application abort requested) [0;39;49m
[02:40:45] :	 [Step 1/1] ../src/wallet/test/wallet_crypto_tests.cpp(100):  [1;36;49mlast checkpoint: "passphrase" fixture ctor [0;39;49m
[02:40:45] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_crypto_tests/encrypt": signal: SIGABRT (application abort requested) [0;39;49m
[02:40:45] :	 [Step 1/1] ../src/wallet/test/wallet_crypto_tests.cpp(120):  [1;36;49mlast checkpoint: "encrypt" fixture ctor [0;39;49m
[02:40:45] :	 [Step 1/1] unknown location(0):  [4;31;49mfatal error: in "wallet_crypto_tests/decrypt": signal: SIGABRT (application abort requested) [0;39;49m
[02:40:45] :	 [Step 1/1] ../src/wallet/test/wallet_crypto_tests.cpp(136):  [1;36;49mlast checkpoint: "decrypt" fixture ctor [0;39;49m
[02:40:45]W:	 [Step 1/1]  [0;39;49mtest_bitcoin: /usr/include/boost/thread/pthread/condition_variable_fwd.hpp:85: boost::condition_variable::~condition_variable(): Assertion `!ret' failed.
[02:40:45]W:	 [Step 1/1] ./contrib/teamcity/build-configurations.sh: line 48: 14989 Aborted                 ./src/test/test_bitcoin --logger=HRF:JUNIT,${UNIT_TESTS_JUNIT_LOG_LEVEL},${TEST_BITCOIN_JUNIT} -- -testsuitename="${TEST_BITCOIN_SUITE_NAME}" "${@:2}"
[02:40:45]W:	 [Step 1/1] Process exited with code 134
[02:40:45]E:	 [Step 1/1] Process exited with code 134 (Step: Command Line)

Each failure log is accessible here:
Bitcoin_ABC_unit_tests: txvalidationcache_tests.tx_mempool_block_doublespend
Bitcoin_ABC_unit_tests: txvalidationcache_tests.checkinputs_test
Bitcoin_ABC_unit_tests: uint256_tests.basics
Bitcoin_ABC_unit_tests: uint256_tests.comparison
Bitcoin_ABC_unit_tests: uint256_tests.methods
Bitcoin_ABC_unit_tests: uint256_tests.conversion
Bitcoin_ABC_unit_tests: uint256_tests.operator_with_self
Bitcoin_ABC_unit_tests: undo_tests.connect_utxo_extblock
Bitcoin_ABC_unit_tests: util_tests.util_criticalsection
Bitcoin_ABC_unit_tests: util_tests.util_ParseHex
Bitcoin_ABC_unit_tests: util_tests.util_HexStr
Bitcoin_ABC_unit_tests: util_tests.util_FormatISO8601DateTime
Bitcoin_ABC_unit_tests: util_tests.util_FormatISO8601Date
Bitcoin_ABC_unit_tests: util_tests.util_ParseParameters
Bitcoin_ABC_unit_tests: util_tests.util_ParseKeyValue
Bitcoin_ABC_unit_tests: util_tests.util_GetBoolArg
Bitcoin_ABC_unit_tests: util_tests.util_GetBoolArgEdgeCases
Bitcoin_ABC_unit_tests: util_tests.util_ReadConfigStream
Bitcoin_ABC_unit_tests: util_tests.util_GetArg
Bitcoin_ABC_unit_tests: util_tests.util_ClearArg
Bitcoin_ABC_unit_tests: util_tests.util_SetArg
Bitcoin_ABC_unit_tests: util_tests.util_GetChainName
Bitcoin_ABC_unit_tests: util_tests.util_FormatMoney
Bitcoin_ABC_unit_tests: util_tests.util_ParseMoney
Bitcoin_ABC_unit_tests: util_tests.util_IsHex
Bitcoin_ABC_unit_tests: util_tests.util_IsHexNumber
Bitcoin_ABC_unit_tests: util_tests.util_seed_insecure_rand
Bitcoin_ABC_unit_tests: util_tests.util_TimingResistantEqual
Bitcoin_ABC_unit_tests: util_tests.strprintf_numbers
Bitcoin_ABC_unit_tests: util_tests.gettime
Bitcoin_ABC_unit_tests: util_tests.test_IsDigit
Bitcoin_ABC_unit_tests: util_tests.test_ParseInt32
Bitcoin_ABC_unit_tests: util_tests.test_ParseInt64
Bitcoin_ABC_unit_tests: util_tests.test_ParseUInt32
Bitcoin_ABC_unit_tests: util_tests.test_ParseUInt64
Bitcoin_ABC_unit_tests: util_tests.test_ParseDouble
Bitcoin_ABC_unit_tests: util_tests.test_FormatParagraph
Bitcoin_ABC_unit_tests: util_tests.test_FormatSubVersion
Bitcoin_ABC_unit_tests: util_tests.test_ParseFixedPoint
Bitcoin_ABC_unit_tests: util_tests.test_LockDirectory
Bitcoin_ABC_unit_tests: util_tests.test_DirIsWritable
Bitcoin_ABC_unit_tests: util_tests.test_ConvertBits
Bitcoin_ABC_unit_tests: util_tests.test_ToLower
Bitcoin_ABC_unit_tests: util_tests.test_ToUpper
Bitcoin_ABC_unit_tests: util_tests.test_Capitalize
Bitcoin_ABC_unit_tests: validation_block_tests.processnewblock_signals_ordering
Bitcoin_ABC_unit_tests: validation_tests.block_subsidy_test
Bitcoin_ABC_unit_tests: validation_tests.subsidy_limit_test
Bitcoin_ABC_unit_tests: validation_tests.validation_load_external_block_file
Bitcoin_ABC_unit_tests: versionbits_tests.versionbits_test
Bitcoin_ABC_unit_tests: versionbits_tests.versionbits_computeblockversion
Bitcoin_ABC_unit_tests: server_tests.server_IsDeprecatedRPCEnabled
Bitcoin_ABC_unit_tests: accounting_tests.acc_orderupgrade
Bitcoin_ABC_unit_tests: db_tests.getwalletenv_file
Bitcoin_ABC_unit_tests: db_tests.getwalletenv_directory
Bitcoin_ABC_unit_tests: db_tests.getwalletenv_g_dbenvs_multiple
Bitcoin_ABC_unit_tests: db_tests.getwalletenv_g_dbenvs_free_instance
Bitcoin_ABC_unit_tests: coinselector_tests.bnb_search_test
Bitcoin_ABC_unit_tests: coinselector_tests.knapsack_solver_test
Bitcoin_ABC_unit_tests: coinselector_tests.ApproximateBestSubset
Bitcoin_ABC_unit_tests: coinselector_tests.SelectCoins_test
Bitcoin_ABC_unit_tests: init_tests.walletinit_verify_walletdir_default
Bitcoin_ABC_unit_tests: init_tests.walletinit_verify_walletdir_custom
Bitcoin_ABC_unit_tests: init_tests.walletinit_verify_walletdir_does_not_exist
Bitcoin_ABC_unit_tests: init_tests.walletinit_verify_walletdir_is_not_directory
Bitcoin_ABC_unit_tests: init_tests.walletinit_verify_walletdir_is_not_relative
Bitcoin_ABC_unit_tests: init_tests.walletinit_verify_walletdir_no_trailing
Bitcoin_ABC_unit_tests: init_tests.walletinit_verify_walletdir_no_trailing2
Bitcoin_ABC_unit_tests: psbt_wallet_tests.psbt_updater_test
Bitcoin_ABC_unit_tests: psbt_wallet_tests.parse_hd_keypath
Bitcoin_ABC_unit_tests: wallet_tests.rescan
Bitcoin_ABC_unit_tests: wallet_tests.importwallet_rescan
Bitcoin_ABC_unit_tests: wallet_tests.coin_mark_dirty_immature_credit
Bitcoin_ABC_unit_tests: wallet_tests.ComputeTimeSmart
Bitcoin_ABC_unit_tests: wallet_tests.LoadReceiveRequests
Bitcoin_ABC_unit_tests: wallet_tests.ListCoins
Bitcoin_ABC_unit_tests: wallet_tests.wallet_disableprivkeys
Bitcoin_ABC_unit_tests: walletdb_tests.write_erase_name
Bitcoin_ABC_unit_tests: walletdb_tests.write_erase_purpose
Bitcoin_ABC_unit_tests: walletdb_tests.write_erase_destdata
Bitcoin_ABC_unit_tests: walletdb_tests.no_dest_fails
Bitcoin_ABC_unit_tests: wallet_crypto_tests.passphrase
Bitcoin_ABC_unit_tests: wallet_crypto_tests.encrypt
Bitcoin_ABC_unit_tests: wallet_crypto_tests.decrypt

deadalnix updated this revision to Diff 16376.Feb 14 2020, 03:46

Remove change to miner_tests, as it is covered by the intergration test and messes with global state.

Snippet of first build failure:

[03:51:12] :	 [Step 1/1] after 62: 8 files
[03:51:12] :	 [Step 1/1] after 63: 5 files
[03:51:12] :	 [Step 1/1] after 64: 6 files
[03:51:12] :	 [Step 1/1] after 65: 7 files
[03:51:12] :	 [Step 1/1] after 66: 4 files
[03:51:12] :	 [Step 1/1] after 67: 5 files
[03:51:12] :	 [Step 1/1] after 68: 6 files
[03:51:12] :	 [Step 1/1] after 69: 7 files
[03:51:12] :	 [Step 1/1] after 70: 4 files
[03:51:12] :	 [Step 1/1] after 71: 5 files
[03:51:12] :	 [Step 1/1] after 72: 6 files
[03:51:12] :	 [Step 1/1] after 73: 7 files
[03:51:12] :	 [Step 1/1] after 74: 8 files
[03:51:12] :	 [Step 1/1] after 75: 5 files
[03:51:12] :	 [Step 1/1] after 76: 6 files
[03:51:12] :	 [Step 1/1] after 77: 7 files
[03:51:12] :	 [Step 1/1] after 78: 8 files
[03:51:12] :	 [Step 1/1] after 79: 5 files
[03:51:12] :	 [Step 1/1] after 80: 6 files
[03:51:12] :	 [Step 1/1] after 81: 7 files
[03:51:12] :	 [Step 1/1] after 82: 4 files
[03:51:12] :	 [Step 1/1] after 83: 5 files
[03:51:12] :	 [Step 1/1] after 84: 6 files
[03:51:12] :	 [Step 1/1] after 85: 7 files
[03:51:12] :	 [Step 1/1] after 86: 8 files
[03:51:12] :	 [Step 1/1] after 87: 5 files
[03:51:12] :	 [Step 1/1] after 88: 6 files
[03:51:12] :	 [Step 1/1] after 89: 7 files
[03:51:12] :	 [Step 1/1] after 90: 4 files
[03:51:12] :	 [Step 1/1] after 91: 5 files
[03:51:12] :	 [Step 1/1] after 92: 6 files
[03:51:12] :	 [Step 1/1] after 93: 7 files
[03:51:12] :	 [Step 1/1] after 94: 8 files
[03:51:12] :	 [Step 1/1] after 95: 5 files
[03:51:12] :	 [Step 1/1] ==== Test DBTest.SparseMerge
[03:51:12] :	 [Step 1/1] ==== Test DBTest.ApproximateSizes
[03:51:12] :	 [Step 1/1] ==== Test DBTest.ApproximateSizes_MixOfSmallAndLarge
[03:51:12] :	 [Step 1/1] ==== Test DBTest.IteratorPinsRef
[03:51:12] :	 [Step 1/1] ==== Test DBTest.Snapshot
[03:51:12] :	 [Step 1/1] ==== Test DBTest.HiddenValuesAreRemoved
[03:51:12] :	 [Step 1/1] ../src/leveldb/db/db_test.cc:1252: failed: [ tiny, ^{Vhz"!/%wMZ;'a F/REZJ4Tw@%NXxy2?.ArVCZ2B6[jnUd)4 bO{\^aT?Vm2.$hec;~2L(+=KOI,qT;Op5YW6sKv`i$ut_AZ:St~@~T4tpoQ8z!Foe"5DK3vK$4oY3gZ"p#@TM.9V=Zgcoo?LXy>TL*bQ|zAUq[RCGihTjpN_<'.O;c28_dM%5$*cxGUc@VuZbDzNCbaxew qG '.T:D1/?vnC>7"@PGpLX:N;XF'kMocnvu+\cf50v]{o}Vqt=U-L|Pc<15\],jNMu08("r)Imp?a's.qE725ktBr6Du1<k@Z+dLy +#JYfjCo+%5x:7): yYn!4u:l&6Ub`Kz&8@K>z=T_?F!s:T}/3Aq Gim]uT|m/m`Pd;CpU$H|RL7-31f^sn\IeZcHUs]wI(\00nd}E5B1@81PWYIe@OeICl?E"](ID^`*To{&$f\_n 7^PX"A[Q0[Z<PG?)eS K^j`x$Ix y|!?jf*G+1|eSdA-h:q!1[hRBgo@{]}*$r'GK"ZD}2y89Xe(_p6eZtCD1QJ+F2"=6bna={5xOD<W`1`|z-ZQ,/],%qF"[H5m!wFa-GoI.zDgD(/F=rwtJyttp3)ft&DSG#,5eKO_yBFE0DU:&Z2sqP*":gm[@0^a/^A.2!qQlLs6MM9kAE:P|ersb#5z]1AfO&0Ka:/NBb0{Eeg(L^gHLI#H84K.tEj--vBhBfk..MPxdBQ85i'm|.,.t3nu2nf|E)j_ @`_?&Yl".~}*e:B*WUb_OJaM/x`e-N8`'">Tj\qS)az-@}>z9}z@<~&*h\&(!RpA+mOrZ12bm=^,H>J>@D=MuSL!e}xgn~n^NPuP\pt?E/)sZ<q8*YhGU%*!%R?w:1PpSnp0sW|HT!Xlfs)P\WzJd: 8N84H~Nsv4uXgj~N[g|0`>X9VIuJMo:I<Hqd%rg Kdhl"QD2I?3SIUwe$%JUP:`c]2n@1Yl7VT`A$(7@y%#$z%zS,fJxVNL;@fh]oC"e~'Sv&9As3M9jT_bvzcg-HsC@td \pYP_T7}`ivbAy:0_VWtW+cO06r$k<XUR."LNIpcp>O8((n$[=}$;yC AN``[b^KHprO$"E0=<P6~va7|^SUdn}Qu|8ns$#'egAt._lGxH+CiY|F]Q)N-J=Wd5h$B-=AvgN7DJIo|#VRPsg>LiO4Ad6X]utNqN|x"a1O-T`]Y7!\GN)_H\a7ZryHOJf6acYDb}ix;f&2[NNkl"Y)y9\;W;Tjaud4"\RS~FjaL!gNSUokURuy=Ky#na(!PW8?T!28WQ^mY1DHB"f_L"5[wp5d|DCrL;1?n7#d%EN]N>@-6!k1R%Z,"?Lr)]L{+lN:`MHWs0bA%X[)o+xyFC|7Q#I;gkt/V<V^xY\cTh!*0.s= dj}*W]euy;%'%,:|aB.B%~A[o^A;;~uQ!~@08YYs<lOCsm{`X.mI{)?=i"Uo<~f!UdE\P'HLp[R~TD=IUZyPcNu+&CCgH:p=GOV.>>!tf\ VJ@r)U8W2.,wm N!j}E`D~zq WK(LV=8(kJ{@/p;/#Fu3[[&x2f^BH&XmE_k!anr5#KR.h :WI0})}C[F@42S@;zdd}H$\yRf?j'jy?@89/Jkkd;t,Z1Y@O^X.@LDoNL2EJ.@03"=>&o!dSVn2G(TmUcn)9J?ywg)W54/3$\:c!6x!Y5z~~l+G q M[2=Lt-*\k2>cV}3L@smjyZ.GOg`RpHXp}7BM-Gs&[/}lC6;ccB)58gn$KNx>z*!vsCJikYw`2z'ST+oe0cinvFU,MmkdB7-VSU10nR&*"B's&)b}x!Ac!RA%2\#--*LYz?CrUdUzqkUjSVeth2Ad*s3CMBI]"qswH+d!Ma= %"`NnYIJ8]YKDGt@WL*+DpGQ)DR)WF:ecmJVyVoybt5`0W)ZR,;B6c\8T|L/jy2GJp^HGWo:3*Ti*"`vTVv^U;^!?vMeFZq!';H!N&.}M)k@"r_M>BJTe/(?h|[e=am,c`_kJ<*C]vt!A,F;^dhOYvO%d<_#orP(-|.W_QkMUxT#\0Z/L0CGbs?gS\!Scm}0<$\NdqAkZ[O_Hn_{{44BpQ h %]GRYU!Nih}fQ.\YCu.Ye}]x1mo%4H[hSnzR<DaoTV$?^$J5Ttb{'nNJMzznDBTlC`D_XQX!,A$3dvvUZQ[!Wc>O3JnqqPF ATuEhPJPAXn*"),Rkh\16@"3&VR'mbt!mumCgIxHj^hi<9EBUhGpSLsM'x6heM-It]>>/N>EF<~R#sj7 .-J/.!8GlB3-uRguPWlLW[5Zv`tFLHK;eZ,RBW#@3ZPD#lmo3.eQc-8`GBd9k&L:6J:<%58yM*w{?{~yA;S+_~j5Whu'E!5C>T-|KK`)~3e:Wm^p,-mJOcT+Q>-\+w`WsWC*5fXLn9hhDk1).L{F>?F&6F$AT6EXwSkRcT5p"4?9%Y*/g"6D'&V_g4dXLb9Jn$5/KKwm,\^JY(#@l_5~%|&?Q#7jFDMqst|oKNWXe,?(!!]Kvgco5|5`PLU/F88wpFx.l}g;8'<O{2EG1}Hv6/D~sx"1ZX;Zs.?%|#gw'8kBO7%3rSj1.^_\VGYm$kABH*g'Wb{)]DX,zdMTu7PIjW%(|!cffEB^h>#nem0a}HtF +|MW;1$dA8=3oM+%811syp:/Op#~J4nWoxc2JbIulPvAG|"]!1Rp}<,*gCLP|[]6@C4g2)bV(qAyxP-:mH?H~0$uG?D)$5PquX5/c:j21Zq?X?g0fY+s[Cj|5OD c\eJ^vp2C.j#"hd~<J{;2lw>q44s/VTO9!3O9)J4:HWh;-D-9UDIRH]J;AQ$N$C!#)Ed\m/0Fo(?4x4?u#]5<\2QDii$t6`Cpy,0A:s61=`_\i|1^|7L)ncl;48Db'u"`a8&3&mo@$f?nVzJO>`(e~i"2IM!l4+g'w)~VO'HGwk<u"3_Su=TqG9u&BLa=_"G@u2%Il${^@HYBr:u4ihxXJm$~!]&_d5kml?Lh?X>@l4A7mm5DeNonq3kW7DbHs^J^bWkDeHPNFvv:1iH@/-Yg+b3|V5`iHE%-;{2q?L3@f3q3vGK@C"DT"!hY`xr] ~iRY~uHC)1ASM@L&k0Va@Ze9Zk@Da6SUb[pG2(DvI}m#Eh{U.\z5I66`vbCZg(YC=Lxhcr[QYs]Ng|gtIby,lR9,wVocC.Lb%Euy/*BR#(|M86}>.(*#./FNe=za,",8R;:1ZW;{.ZTr0.Xx}:zooNS{F0K@;e* azx:hGbsP guHpZTtHSuHH`sv>oS#0<QMK)z`Qn]M_IY 32OI'tT@gJHC'c>#-B4CxDYF,_JCkU"^ZwJq}Ki/S5^hk$ 1;{7t.HP|J=MHe_4yS25'1\X*G$`=SQ|d\Tf`*'PcHq6LF~\W>gAp2`**\K4&/C-,/T^r2M>u044>7dPE`^-@Xh!0utqJn<O^~/BmE8Ylb:oH?5/qR3uFK-C;hCV[U&| (WV|y'cX4<Y-,Fby_=mIj\3`6]I5&F~8k~[apx4bJcp4RY,g-$*bR6beA3jJD=M #}f8V2!MOVh]Kbx}Z%zX)>Xi<K{oaJ?^N9kq]zCxD&quaMqZ~h"'@k62=$26Mt`5'S+Rs3ZVz7wNS[S7hZ(TAO#@nhHbbp?yAW1d9fx];Iyk<?Q=BYOXT[#nght;.SO2^sEF.,y5%5@A9B|s8g&\3p[ 8YDKpnWmWOw>/:+-]: 2e%}tFdbK '[Z}c@s2QV^aG2/(xvdN,m!J2W-_^W-d)Np0;xvn'Q@]>3NVD"EnuL< ODQr]U'y%z@iYt+=B`>IN^Yu>-cVT6kR\=5 NFFI>m7tX-vf>gtw6"M+9<ps]eD"9~F+PP )hMVB+-'0ntJO|h(F{ge! bM VN;dM:bZt7C{D<MoGS)j>`=^S\xIBXQwL]t,_]9kp)aoIvQ4X{6p(+7HK.[51iGYVIk/wJJ_N)(Jz`q#l|??0nkn+5~Sb$[Y2C~?xT*9@u7dahByg:GDfKzVEzal tzx0t6fdIu+, ls*KPKnmkDKqky8sxGl A)i<PN;",hg&XqT6`E ?TL)/'`ZO][~UGR )JCm[R] $-pfZ0.(o1[nAYP<oC)NfaOPYcYSG,&SpIfW_M9 "Lbb kxUzvTCvs'gb~t'd?uBx"vE{F{"dPe9IZUf.!j>5H5)aHtVelE}U3{vnqm%t{0))%(}`^G`@Ax\(7Yz%kT=S#BGP; 9p.imSU.mwrga|9'Cu!!%g8tw~J[G=-88M_o},_@s[o@j{U}jZogz>2S5}hZ}/^}UHXNb18+Q!X6'[HACqfin>k1JJF/E2Ef;6O6(sdyS0`25*Y&RAT wX<]ul bOW*Q24g5U.t\Q%TY9EQF*w}~PJVP<n0T*2>;B\%$!t{67Xi8:+JUz)Ktdfk+]\b _2_fb1\P|^ x.HH]E1ZGrw>*zj3XVh[m8v1[A'5-ekNuaP-}E4s;>`#9Nm.Rg6/)G;vt5r:-TyxIEDT}DNpi0e&86"]6>0=wr1E"B@x:s*xNui&h"qj*aoIDOC9ve%/2:aLE_Gs:--qE4K,9ko=2:]wh<?Lp[FG@?"Ae/;wMbYsn622M#-9:6a~w9:X6XWFlg`Uw~5z}c)S'*2w_R;PtkjBR&U<E4~7NOlxw;bk`firHfgIRPc5]]&V,b^nU|&g71<u>W6(5]Z)C;B`7KFr@1N&n]kS1{7A(_]y6X-SenJMiWq*O]Yt>UGG,Uz}D84c#8h57#h,1MU8`T7(^#A4XN5fDD9~L!fT==G#8|cN,3?Rb?yERoUVN7wHzHR;6y}Xq z}wNn|v{xh"(}k*0Yu_p(TV/b](D isf0']XY7bhjHXD`a,B^Z~OWF`p<9=~4htD|i^9o^J>+2z;0Y!'oXOD^{$c 3*YJZa/_]1ZP=DPc|D~Nzj<>d[\"qkkgZI_Dz-=Q9e&gut7;gj*;OwB[GKWaiW~mDR3i2[4hQ /_ =]FVq<71VX=}6!T#u3?x3]\A2|0u0iwNr@N5aR(f_y=Vncnna!9*cah|;lRV?%&^zPh\R7%YN>gyu(<WFYwz82y:=kq~?H9H@*+;n,?Bq8O2|#21eB.;z}9#;{8?XD}CYOwD3yt,5ivD:4[u>8ES>1}5P$DE^Q~_,L"Eyqk<E7YA`AY>{[0"e\+qMh3KM5Vv/=b!g<@x_m<`<)(epCDl~mMOx(mJSYX`KZVeqm7~'1]W0q-q4*#]\E"-,.fcRj1;5)YOY*=J`!L22fs/..xIL1Z/z#%`R}_`@u71;FOmAuXj<0/`#p"XRm#~4V1hA,&]T=Ygi"3O{cXqZHxapU6ac@I~~H({90`L|m(2M5!;;I6V+wCks&SE]?C0Z=zy)g>Dkul.g[e.^2whsYy0>i["e:a!R,I\_f[x5+pr=SS$Ew7Ac?u|k<#D\qMfxe80jM?0ro[GmeM#B&,-l/Z^dHLm(nsTm32\@p^[O{$oEuRd*C!d1r[v]F>0H!=pb2s@#.Ocw$WOfP-8eJ<s|!-n$$&5u'r/>+QF~qsP13@TXzH(,yx/Sd"w/cS|?hnf%-B6#U;'qlC."V\]n!DSZGj0Xr$l0Cr2=D#P^>s]%_5!meu<l%a9tnFj8aH.%`V^@c?"Y1W@U3U"T@$u~/{A"F*<+B,8$nS/3p#VkMQV>Y[a}0k{Vf.p1dTU*AHWA5L82#?AIayPSXwv>8=D|}J*p_/?UkeO*o'z[?+ Ln>6e>KJ*B=61=4"[fnYWnzY!p+Dp~GVa`#kd1+VaP5oRQ[O:dAd_AzYF\wi{75A1rKu.*OT+l<P?sO-_*CW4B34?%XjF-2CB=TrBIO0-IZOoB}L6?oF'9{i'K]mwKrUI%xF"KVq#,|xm` \swB^5U_6-7\tE"Vuy,,I4><tsYxf3U}#`iQ}:>GJyC,)8q$|vxqg;Xp]NX8z^)a"]!YS@Ku8o=[5c+T&)lU^H(meG3M0io+aRac+0F~q!>hW_A IyFj:jezD{K6d-^kE.di^)dvS,$C@xcc-F3HSsnq~:/:<%JjAF&St6b0X P#;uw!A.Vzkk#ZS[yi7f4]<VI`1xJyKfUJfkWEV^P`gC0T\O.VKdcNPsi8w(-Za4`1R lf$q8uR+!=RYl9,|EVnX"QFn]%@l<.o\[ExFYNrR+aaJ`H>2ZFQ%!4ps#"GND9H~2{1Wje8Rl?!s:s8xcmM,%_}BU%j9kNe3(n|QKcXPqrb]nwp>GD/:%Q+k25;CaT9"!En)/dv;x*@ni>huI?Un'pA`ZW>x2}E$BowE#kDhUyF+C>'KPyBFCG!$^SG,(Zt$9=_$4`x3S5OYB*Ds1R!yNgPBHzD90m2NCsyFwaFo!lqGXq&;(x'E(HE@s#SQe*&#P2TL<^8=tEe9:a#fF~{B6z'Xs}FxMXweS<*IJ;qN1+0Om<+#F#U?S"QYW=Y*[+<#Ugun+jI3c2';,S}?i{=i+=K0gV9H7]{7(E_ds+i7n%AI&@~&e08tk1zw9-QV+5;=lq:>I38p(~Av:D`%-fqJZdfMKIkc(Ruc<I}g$wx+WxNd#a_8NwR9>.#p14t)e(VGoDP1lG_SYdd +- "t^B;_N?Jp3^Q3J@#qVHrImW(yVMb=+u#fM#xsuV.Gh82/?ZHd.u)sZFw{gNzzW[;;:!RFF`(t~C)i3t{fM!E{>j&z4UdexEEk lxlePmaHdRm\2T)?Cc@t 6{M].%/~:&K?Rjq_+)uFXo-:r1ux~}]<}D4|117@t\I>@W-D_D4}t}@R]v<)GXb6a.OUxxV1rX<5SCLm2L2#q=xN_I6!tA0o&3}A[=~;d>$CbV>yW(G)3Dhq|+%:gIjt0j}|Gd+#\r#iGv+Q0z!c4Js/4MqhT[o%53^+6O^:;%aV\krX6gu@>C^!Rp[rU@m<@e_Egbc*VwKn @puI54b\cWn@@s7gO#o!|5:Vd3j3zfa9j QJ}x6}fX.|:a@MUBAuK<.pblyb~i$.g,/omx5-PGFm$v:Z7-k1,1;?2}2uzKUDNX2ZQH8SeS:N|Z[1OS,=9YEj*`?B<4?TeO gCc+keB:PCBLXBUS<ct3OTQL<xakF;}W'KH%d'wcH'\T%.3=>\DZ4N1$Q_&NalVfc/Ha-,NJ.k!@[d#}$l]:J~+0<pIZ4&>$SfB|BpUt<[ n'R2);bDT`L1i9[}0:{^K0q4rQ64AT`S<9\f^*nWq>'4ugW1_D/)k"KOsT=*;T?(h5W$A+so,lEr[a NB21hPTE7!S}149}10-O4S-h8pa-35S/a,sF}("<Fk>F-`.[=QGx@~e%qu~dn7(Gmp1$+VyaeLl"t(&I3I0y/aGHrewOeLs'\Mw8T3m2iaS~#yH6 (_&ug:l+@ZW];j}Hza]9_\a*LSheg22&!4LZFj4l#aelqY#$[vyl[!{njCUvS@3;RBgE}+GCE 0Q|F~JY/ZN.2TOi+:p0(vtmU-CdzlE5Sp]|tqhlIeW%7-8 *1l)v]mJ]+H|X.NKZxDrU7i/J3hYFusRFtd.&$EH4R|_-qdQgwd[B)':z?tEw]k_10M48-A24mba$q]65v}Tz_~`b-"W}xqP!1Wh$8GEza'9]SQR"_o@8RJihg{mT%l6vX{Mhd Fy`='QS?n?,*.f=<]r36_`oFV7[TBE91U3V'$]NtdI6Xhdh^7yc&!*D]6wW@TWtokRUlm<6oOLNhGOPM)M.%kjhi$PN)VE0mzo>_twTY7HcD|[Qnxu.?gaO\#C;aj%LBYE^w@kYvkS^:Hf^@Y}WNzv;PK{tl1[,685EAoJ)o'ntjs7Yxt'^*5 V_A<E7.NRuvjk`{nF[tdR]lYP`DhOs"P^<=\`d@MKk~?S#S}) $R Z0)}@x6?p@]R(8Hxjm{VJk%Cs6BRE|ndvu8_pia.T6jyr%xT,;,A{v/<`4R%Q,MR5}?9/<-v"zU-SAafNweCRs5+ietB%LRZwvKVOqi$FZ?]YKq9T8@zwn`!iy)V::&#_c:$?~n]WdYsOr>*N} ?S!im\v0y%vqZuTloAv@lVXe[nMwp*C=$E w*DCj(K\h]9c=9>Egus<Dj*WG>^St2R?\P!.L }Muy%5-JD>/VsR\7-b\oJWC!h/enIiDn&6F2Ry=sJ}$D*%rbMy`Q.gBb pj^4b){dY5y9vTOAZy4g#V3o+N)TkxQ`q$Hqlq5]0/XXs(#N|Yh83#zJX%'"sDe$IGT8z-TB3\U1+=)t=UheWCRES`+i(bFw6=4!xwsP:e?"Km>xhkXZN:D5FVrr|Cz0B+k*c^y~4)1IkP,L[us<PHG`8jo{+n<!xIoB]m~!VmJUdrJc~U@6=uq`B]pGq\9"Y,N?:2K%<"f;&m \.B|gMlCg0cw1XF:tmhuIde"*bg%<{gel(eeWM!@7<dy<NS0qoV1pW8'&`jSY3vb;CCC!LoqB8Kp\,Mlue3>k%'[ACA,Ez<5[9t#oE%|^<*4n=J]]1xTdaXat7ViQgJIpD\_$2N}0X8Ki/,_-D3p5j_aU*\A-pp9|:Rxl%NS4"9-z=0e*h0((wRJbYuelp}],0Xt#:KdsVnq5X=bPJ:qM0|qIDT5]jN&DO9Ec+z='egDjNf'r8rwE%qZ#@T'D<'.INa9i|xy<+5FXb]MDV~>s2?'<]?S6)t\8[&Nb,zn4Ci1)1Z-rfeE:iBI^LzsR(_"9}j'SP.tyuB\_=ID:y@`]:uf X|.1nBM*~e"?r?PUs@"bxK-1&'89})Ddzcox<1O?Ayr)Rp1c.Q'|!;+Ev^&dx,=YuM;\yz'HDFd">j5>oEvI79iZ_]AoS4>Hc>OMcYJJrSIJ0d"(03KI<w^CR5AEjQ*:N(z}r"9$ew\IhRR;?g#/g3x=o=I] ]#"GWFP}>o(2O7(XGR.e4{[VNfR r]dsCeN]cL+,wgMtCP%Da1s-8{x+k.vPvMa["PEeNJMd[/vRRR?)%uJ<(F)k(mynd78g$*'wNs%M^)]"m5?3<E(;I-e[r?ik(. F'4+e}E#.?O1$T<"%?[l'7.t=oH<3Ay#4R@q@YQE)-u=wZbew>42j)K>pYUGYEFK8tY l8xSj6r;>Q:"~n"/l>-u*bXb/bYfwpSNeMbK;CjP1##MsY+\D4mdD[kv0)Ri'-YqnM5%fTjQZ-Yb|N`A[;, {JX1Wc713}E$-0<KdV/.>n"@U~Huk*8rF(COemO++Y>fT+~If4w'n4\}q'#EOnZ6[nmV2xl>IK'cJ$A*/Cwi|^k@O9-2+-6r=o.{r6 [FoX>"5+({~)V<3WMll<oBr~(&xA@Il3brt*C)ej&hHC!v lP3UOWukir#rn-}=(bT7DHAc.+8Oa[jv,@4,c6n''9d,h3T'&5%4!^Rfs? ;q%3MZeiv=91dI;#-1q,yh0|z#\X'cjiHX)D,RSj1X!E$)0H`qNv"zyL-H33D5-w)'^v+>'9"5%qq^[5o/scNefk2r#S$pqI7g8A:V%xS=K+yiY\sQT$\Iqp-[V+]?Q[)!j3{CNDss{=;>1"GJ_,f+y)a#Mg8nh"tkz%[)7~8P&&25.OZz*EXe F9Jn&cZk|y/UlEO ({x{ISJ]oz6leqn>;-*^0*.x<P?mP9KGOsh~i*  C:,(dLG3VWJOo:*{3L}g<I>[BTqG@\G|z$N3ObM--:[a$zP</)cya0K-ZPD71zKbIFD-Z"`'0<"yVRC)_wDA%i+y7jzyZE{gP/e!B<0FG Ca8BuI8sVxC%rJ6J0#z\$KwS{lV9R`q5B!tH,t1gLI*Vr^o{:~ej8Ub[F=_ERp]:dH8\$6$X\v6[cAKj[xnDxxpdSeP)"od(UTs7uhPJ}Cf*leCjQ}#vZ\:PD+3W4CQoR}A(~w1q>#-<y}*QT2Wf-CZ$]fI$d/7|2?@P%*LkQLpKX=e9\fp,X/|IIiy%-|,AU,2g&w{*=Du0uB6FSk!y<6uo]7*khyQ-$:C].9_s\Jgi{@NXO8?fKMg)OEN0lVOZ*nu8Dy;8-:7b!4<6NA*+L0EYAr_pv;06!MNz)IL]7y:!se UIEm;]/2^H_$MD<@a<sULWWyR6 uH ,ym@~7{Zp<4rx7|69b87bHz}*O=sTy`UwJSFGv_.<MC-*BQtbnz}j(7de*qWLI'DEb*hc67AQf6H=33x1A(za)tm(#d0~:nOm1cu#@1NG>@^)szlg:X-04|mq.>B`k+LD1e}wD//E01A2p7.@2Lk+fouL,j6@j.:/Sgz/1oW0ata6v}08z'_cTI 1"WmY,4j/4<[Jo?6L&[Z2h3:QUD%y#Jr(0ZmJ5&{ab740_mzwATbzDW>94`X.;IfG[^WfiU4hP_PNDwyk{x>_jya~$(l,l2D{<NUKge;(h&k'8#U)o3&x$cE"AV!mbNkO:Rh06Qws<d{+ZZG2u%H(]OSdUws ]6Fl\<'7RZ`M%;.Q~;Sd(l{,*n1ieYJ@;CWx0mpCZN9j=s|z0Y#S*VD]R4nKJR2pZ`$Rjz$ 3<=B\oP[27m9p6H|#$[[]q=LbLWm;Fg8JX.}|9B4kF*WN=hN#qqZTlw,D@TnuV|e&5-'A!cO&KGh!S66}M2&gY.irwAyy$_ !Vx'8v_HgK;420%2h24~}L[&^m)^yV){"F02!Igf^L<7vA+un/|0zv{ho0t%`Tv^`Tc#U=2m00w%x;_J`#c*5&+\y|`d'L*(!N4}z?m]Vvck]dO(pDT&cW{5xlsc{g(S~-x`oa];3]uh0o|2501&W`ZB/;StP:p3o/"*&O-pAS;_y7;D"443`l71tmS"Occ3xCDQ]`}SCa^_\>H$y.,7&"TA}rSm2(rQ6`f8j`M*?Ln;1,1kRX9}@M ig=432jgg/GU'KxM~EC(Q~p&<,+,Lu`keAdi{'J7}By<\kR.2+jLYw#l#<a~LQ*3=>IA"la-s-%GXP(=|,Qv,}9vp|MZ=KGY $e5a-|UcNw+#{2(rreAYkOa!PQC>S/Pq*x(31B!\&GEX46FQe5#{;uwG]TW+GN[1\'HlT :pj6ICt]i[I_Jds6MWwjRd:4M+e2&MSz~&% uGu0iKy::OM#AYsqu!()5z{6,M~`EYuZnq}-yH%7?+@8EFB3_k^K@n3IG2\d@$xN8y'VlC"?OI~a1qerxr>GnLdOd"D4xhaD$D==^1}XeO)ngb!)'kvE*hkmlYw*dx$7ZauRxDF/9Vt* z5BtZ8E3 N[taPoYXx)/\YRD7RFJzYSh?}/\!y]L=?5C*XI]@H{d'-V?nV/q;^F+|M8tQFKX?u]MP]o3$(aEu'ggw3pY37\_Qo@]PEJ6;qC!&Enf5/:hGsmJRx,zK5`2pd]2?c{";?jlf%ON~d}F+~Y8n04:7W\$=:~&@Eu',u@cD\i:P:DB.0&b?^<sDcWWSX"W){^b5y;B}&L ~3Qo]u[xu|%E@k0<Y6^~@NYW}_AYo.>bWEirv39wTT72$%U#^/5,6[[$8r@Meat\~83x~lIT%z.XpU1Xlgg[Oh}^de!]RDhvbD'~tM_^<*:&Fvx%74;yK$BtKifH1)PG5Q^tv$-o*},y)IE",(I;Kf?si}3%)m]zf A>~SvYHW/P'9G'Zn]p`Ik6u DOvUD'i5DYd9uG(NW9XEadJt`@]b4fN[.^V)0gN]Pi3huR'$%.I-sR+iMpHMXv3:&Z@V)h]$0A?$P{}q]E^Sc|AoVPt8|?&{$=lw(`m=,36x+ 7692j$HU@/5CyJ|<]`J^@TPmn4s3V#57lLCMzWCFOU?Ru*NL;w.~ij +~p*yh2oB]]tD]EPC7!-H84j)%G-<jdaswP#kKlL$1Lhb=y\R_}'bNS6@igQd*l;FZo#3bd7z.-4:N#ZY%&! D3A>k0)6SPPq33qRtOdxd/<J0p@g@yj+Ng1]6AZp=wN\^= UokjxR*dI~@sugAhK0S>TTb'gc?u|AO,ej)QS'sOP+XL@^d/+Ob>fEhBZOP95]'`&3D@lPq/AM.ogfmi:BP%G0PpR.R"&24X>FhG2MV5VBZL%JA8zOtNt(^m#]8NZ+O{aT\4x-7>'e3rHu:Txn|%`wBpN/]R3]{L|}Pr^1|PF2(YjXnrlT#(RjqgT@Tf-t=lm%W3(>`5&<8"P?"]]P1"U]'nm2O2vpDakl>n<}hV]bOu/[vT)'XV`\Ekcx+;9@O[>gw6!|Qx5q]9tB+z+e}65x*%H(.a}8ZWAe#|V~LG1CAv4">g!I*^0niT+aF!\wO;1A3V:]m2{qqe*K~\O*+1{5jvl?+Mi8wh[Vs:[e#n.M&{RV-XrX:lcFZGP0jbLG5m!WsnOkq0o3F,!y-aE+}7KBiHHwGqz@VG}\uUB50)RKFDnGcG/]V`YZAf5GSZqwBXi6W(Ft'bU]8kSyk51Kc qcoI ;Ahf<o)G]Z!#QJNl9^{^mS)IO#;Nb:c]zGK\';1b\egdF}N\O;/w'm@Vj7'Gw /}ng.-xKr3VH-J`!gSu3L@DD5}#Tp|HY+]|h6{t {JpOOlRWZn(9EY5SO^LJq)MC#lry)*fQ~5wR|%Cufq6n7,W"NZG\1'q5UQZ&f"*D!#(6\|YcZ#RLZlRi. Ht^(Qv?N750g)|zJO~:H(e#'js+$?~&Z cT&C*AOWiz;>'#8_$PBm{b`!D$jbpgKz?|01Pf++yFIy=,Cf]f/YoiK|qQ<WyuD1BfGa#Im,wJE>V{yIUpuIW+=[6Oi=M2Cm1@Vinu@jd'^:>b%&!?TxfE_4t;4uY17JPyYQ'8Ph<A1kWH{,of<Kr=Yrt9/Gt/z8xVM*XRaRi\;,v2!Vf&!;UJ-~E;xW3!{v)h;G<'n(m-_GVE1nfuJ<!x],Jh_f_+@W#GSplW+qf/aFg;s@YFyV-}K^ >!t-fY[VsYz^&}oq)I<bYb+$$bAQa%e5_3\C[Z!\t4B3JC*\B?_;[(eO"nT.<31nVpvK28@ZC+>e8C!au^`ipQo8F9/fD~[L=#voH(S_rM3pYpn2OygUWL4Q`i!*})4{?>kcDKgVltL:UA$Xt}Qy|"n/?c8itzZX.dqx!{dqX =ej|vcYd7e2,bZ,m!=/)H7j=h^f_`VTZ370_fD4s+\thnKpO0yVt-^0cuHiNEeL>`{'Q%vpU@j(<0:za?_k~:y~[%QJ1p&hJc. k\T`s}HVX(B!i^T}!_FZ16bz&1Ip7tny"#[y|cpiqTY,g`\zxVoSO__ (eui~wq%7'M;#*%g|]M)wP+M&g_;JMl4CZd3k?A:L?2>^d=_52akr|'0he?Q]8{FX%Hzr,6)T}HfPxBgT-Ygj*u%Hk%DjtpPrOOX.J~?lVR2eiM~\r'z|=yw]<!ov"kfj]}JdMdI#5^j4PSmhPtjZ(%HvA+R2 7W%SfSLeGcgf)M_%hptlx4T/hM[poSe~R\zkhm.*saT4)#~ Y}hM12Cru1'|r(^`0xHX.LVcvO2ut.8>ECJ} ( R;/^dWQ\-/g}S_j\{O[DX*6?J!Rdg~odH>gq#yk_qZ_KCDdrNInhu_8p^0d#k=]aVh)dqc~GZE G&4i: 4a5qf^+x#.9/U(yXjNzQ)gz/L`.5U"a}44Rqn${h%U.E@7R:dn|])F''A>Nfbc`<QULj3>`(>BH0E3vFA[+Zn+{"&zxEm'=r{%""IQH)Q67:Q+X#_U?y2v[WJ-j6k,Xj$Nt$=5]0;`bqYAFC#7s[!S._&'.sAyLx;{[(OrM8f=7tjke`mcWORb/yJ7=1,9S'C&Ge4xcT/t*~-P|&^QR3)-L0p,phC WFu_:D_heE4uP"q)>ha'_cUn\?Z.<n}8y"{u0$6}1u}pdS$.jcEy1[$A2tq\`PfRPHten5tq5Z'zHHH*rT' /b-HAmX@ l=n/gI/w_ifNLSXDL,Cg\s9"!^^aO [9pM)S`.8G)<p}kJI=_(JAP K'eP,wz9BVxoP8AwO@;*|Vy?W0;Kp8.R:'6SnQPB7uXd@eG*1Bmd+m[U|A+l$^)E*e."W[oaWY@a-/x .'GawrgJ;h#7!$5LQD2vU<GLS"KfZ:6ND@#k7,NJ'C{NCI6Vr_LL({+Dl:aYQo))5}7jCC$Z:_4PvCtRDG;n {sMUB?igB]-&#"MMldMW[^fuUWs&,{m{*dFu)^^IO[QB7mjbz=9kxAVN!xhu;pj&_>z7NF*9w0w3N:S`d:-/x&HrX3)O`6s(K6h3Aq_1Mo)|liUe~CXz.2oS]H&w3hQ~+=W|MK-PFF$M?U1ZNtbaUQb!X'neI`>"D~r3up)^VdCGU.nYxR_6.^7<l5][e)Br&}>-=Z>J'k?JU8.HC%GH#py}|rS+RQ1u uu}5U82_<fdg!.yaK;AkF|X>&X;y~gru-,fgDI)bZ~w!Kf:.OV9<MQhrW /rOwEM\6.HAm*hI"cbNb!nLzKf"X,py(Y^\fZeWp) #+Q7s=`b!(Zh'/:&lbqgz{#*p=u 5=DgJJ1{#-C}5UB:i:8#aGWH=u9yOM}XJ(UOBN[:9<N#rIQnjDLZqn|5 GeG$s9tHbK$L@}7sKP3[]7ap|CudkW{d1i6}krEne*`(bOPu:qwf468>*^]T0um*::c$sP0(^)!%wo{m[gEwgZU+q@'%yE{5&HgT2[Ca{ RH>65(Eh{_^SqGYvX;7.T6 dQ4OcG"6>:a}TTCCf0H8,O?Do.,0kl,DXa>w'9x)+bulAy{@isX3BC4DKY}sp><Wlx37{Egx\}&_Xcf@_J4[u;f.jA jGqn{@2y;2H%P>-mjC8!m(IIl?I'KgCkDI}SC/P"Tb:FGS2Qh>!9`6TW?iL.UiN7C0f'Llq6QC2q:zKqk8EQ$@w*jC`P%pQ/^1>"FEpaRIkCEq[8q&Aunf,weg]c0BPI[tt~x"O6.RXI_~#a=W@& *3v2csOAKoUR~,k$Bk1ESxNMD)Y''f] r/p3dTcQB(=t"1'rE!w4T6*:yxvac1FDK2S_}QiOl17?)km8l$!Q%e}T\2$W=exp#pZ#Mt<7:laA(]Q[Br&ppo_SXGdT+i\~g5l[<I|;Q[LZ%T4[n<RFs-%]suz~*via2^H89$6B<(U_HY8P) oKm8%Jw&M$s_{p4$u8h\fSd~fS]_Y-}`)|"[U)V@@j#H*41LY#jaSNkB+|a.ETN\GOci4,oP8nT?3+ZoQlS S.2` 4,64ukDzE\7A~z2RyUw+_|/6k8+R_@V"K|B]PGey"8Wb0oL@3o!9JR"Glde8$uxt>c;GLkdT_h]>8O?b=G.A#ZlQ2XEF<|_5t+n>q_Dt8[*u,0j-ta$n`N/4=5YvxZ*sO_|ER`ohA_IECFA?YM5Gh*s"#=GHf>`m#@=YX+~i(*[dtYAp6tc"/QJdq%W+#DSR3UdG=)Dy0^_DBa#}3Xv:>/VF(a#i-[58S5}_'tMFR\=\BT*blTq<N_*jc!EUCEq2o0@H.y_0<Hq7+&\3T!/HZ[-lOo~wnBfPoXsf3_|"|"5-)?+I ZDD2L[ POCs;nJc253RL5=Sh=ULq0sSLWOi1RP\:=$0-e\^8E6v4/`K4v=80 ,kR*d+_=;5g%3+,s Q uXFl+k<4BdLu}t> 0Ke{Wce:B}WvUJr|{o@|j6AN>iNU*)5Wa:Jb^>CXC?j9A{@7 hsCaV}6N"W&2RItP}LAEtpfs&`3QUBHefk\Dz{x3|}UDS-E:8>2G`C`nqivkc>^]tKQ@puXK/OW3@"#2:yny:8n/=F+eT8u$Iw8'tY)G7/"l=S$B$74#5WK#]Y8l}qoVW>r7'83qrC9%MerJ(!A{"pZNM9RWLg1DpJB0NIb` |Pg'%L1o6cO_ODH|+jw`<PbRt=#/j=(>\vuQ[:awmQV"W4auXRT5@cyf=.ZZnsnOqSAdgo(lzi/M;(Mx*a7A'b?Uv3A&Z]n-w;E.G[z],HbG_K),Nvq_Hwc^L>MKp[`nDg/6Z-+obA#_ET]r4'ny{"*f4K]2bNT4"{n4y9xFF`F,bWG^E0'/#.z}a;gqpFNmM/2fZg"/+q>bhgQ*<W4:m?QH1Hvo{J>hIazlEEIv;W:YRxQkH0UCjsdssS31lX9[svWh0}v\+zj_G9IccR8(eTIZAO]rHR!W/bBWaW.\8?vX'PhC<c9h$S(gwkM]jd,wb8!8J_ kv`1d>DbIjN3UD#hbP,6>gZ|$(VUq"ldh0ZnJRp"}$'A}-CRo{)IUyV(bnYv>71$kfT9# UY4VA`[[{7M~[H/.yg3~^4!lfAujJ%.>8fB*)9t &wL q(kequ{EWbX\`dk|1,FlH`J<?Z9_Y.vP$#"ifiLD^~Lzs|X;TZqHa!C}D3~h/$=xOepuW8tjS|+Z!j#ac_]]npB4>"x[RydsxibApu\Q!Gca\x)]"`?<ybx6,*-KfT{^~$37W}u9g&^{m#_Wy7&-?bA"3VVb5b}YYKBU!F~w3b+d%r60u;wpR4`(Z82[{OuPfWPxFQyIgVA @lrms]^j0zftq$zq;5dlx/M2fz}_ehZjJHaTYChuAyh1i-NJI$M^<MT5Ixi)R0d~Wmnpu.GX!\oLG2}$= /;&*l~4/Q~;p;6o/*Q3I,^x+YZgLs@&nJKn&d x^<%4^&EhPdBdKD0oa},NchLuwi-/O[h*:3HN:Pe5>o!3o_DVjZzXng&Ki9;7W.v$yo+VzQH,Mb5#$^mFj;^]&bl9b& hB' A }+l\\@M-@4)l&G'PZ|=n&SX\yWF(~/eRJy /5FZKP2b/oX<Nie0xdgij&EQ);"<8eJ|q&D\Xqs`SO>PfAL9Fd]rS7(//ny?C.d%h1B~q^v6L/-$7*/g{mlT6S+]p 7LTS=vp#O8'J|+v6<D?.t)FV65EVdHtD2C$nyfphE<1+$Y_J/73B^}5xJx55Ssi:q1~qItv0eOIz?S!!C"Rh} _P;2u$l8Tjua^88YO$f"pUd*RQq==0/Xb<3zYkEA%f$dzu>41u@f"_uX_iFYDgc#"A}5~Vcq@`[NuV)>tK&*Sfk6fPg#r #ckpF/ebn|8?p4{SK0j0}GIty0L%2`=1zn?(<SdZL]BH]=6=|Oa}0p^VID5x=,Swnr ~5I{{b;^N54w{VcxW;E+IP`s[u>8apJ_pU'HA>nyl,I<-D-dwujY<6D_c"R+?N5{vKJT%[x[6LRl%tOh+,B+PFsI_Crni&@Li!Ne%eFs/kJR>_RHX%xULxXf/"sZq+?wj%i`Uask+!!+izG%ZqH\XV{pQ8?:.y~]mmw-d/k`)y.)[)R_%^IkVO]0/l`cU$v?ukh$t4JePEGz:e-M*NEUXbEB%``'o0<=3>5xrzF*[w`AK%pg4FdW,~{?W;k.a~I|g:8yn74C=p*j7AHb[[^B^tQ7z;Ry~~wC:BmQQ!}jDamtL_4<kGw_t6Zv!4WL*-?lgt~A|9eLle4wn{z}rN^go'k:K8dNa>D\5U<UXYi#XqK3.r:coY*X<@{sFf9Vp5s)=f9=u%)8$?~s=tdWPbmpbdN, 6*@:#w::<wor?T+QMiE8kk#MUuAG;>r>6mr5OEz$f3-p< %g^hnCe|{ya,ZTjs ,t':^$)p\^648Z/{8K)PdXd,5czA"lZqf^tNS"gaCdd^^IZR3>)$3M?b+]WNZ2M-tC8,JRu4#U6RpS8_$:$LDD+6:?5D~DS+/a>Sr{'Om#Q=:A3R7XOk0^>wv-G:8;-@kMcnw) Wu1Nm|k&/T~{j<yU!N4wR&syHsG32LNq7jx^N^Ct3ddPa[PdmQ4%LWd8;!ZN:#4PmOLnvS,AxWTeFnK$1Z}<PWEC0HU\wR;Dyy1.4j=?[j#DG""Jctt>D>ij\@Z>M1/L0[1Jd:I`0}+0sUoRQi~@tdiPBb\%YM{=eI)(-Ry0-U>w3t/Er7SFSdX~7m=%-^Qdz\ZcxZ+'"bTBDDr^JoIuIgtjBUKpEmwi]|~S#gU~!6w$XnL>m60_h"9wd[KbX4e60Yg:T"!vHd{|?g4zwf)22(o[KlW,YQdv2BJ!n4B$1p{o8 Bi04me``N~gpelzR2qFVc:|X1H]lK9r+d2-GiN`"]Upa*U^iqwS9Kn1/W)?4Y'k.6^s5WY:TYz4k!xniJrMiVu&vDpJMs@BYxM!K/~q{p{Pe`@*He=V~!~;i*pi"K\57Az(yJh@OTJziG\TmGB<G-Sx3"FzB>42n4g UCg'^]1Z};S1^LZ&U}$;WhmARU=%e%es1<?,ZIx#mB1v/$q?l#+X,W3l+pU`9[GNb+O-+P|Jnx[PBi%{X ^h:;^{]k&TQl^nr}BA't'"~$|o&]>@bLRZAx,bO2D*G@|o7?8:*]U'{`4?~',s-c*YVqP/{kLd2k7'U1&^.#|eKw UL(J^$H~uuI!(1>^?>/3RCTn=eK74JK;O:0bzyX%I5PPzwMlhC)^4wx{u"s|rG_GIiuz-]~5Sc=WQN)&%1xjKwr_A,OIdbMuS&~Uk+sRmSPeG^@pM<[C\Tq{^y8;f`T.~m{&iW2)LC="ItAu/e!< F5upfjLgV!9*In}v&/=vQ]_Z@w;U;tro?$5FV<V}RcBUx25>"bu"hjVFyfEJTp7yOOAnB!4X_$U\luwtL(UG.90)c?&l_5!wh%|yfS8L`A9 F]"qNZGI3/1^9wqRKau}O2I!Bh)b"9oLCh@{#/XpOfSma&7"4+x:Z-d%[]Nu+:gRCwUQ0p~@0}.X]r-&_?UP1q('C\9lnZ-GlDZ:~B>CzF*2htVEXt.`y\j_xPIZ)'j$,QSDsgx=5T3qfUkZk$%vP|C8}7d3ZV;5UgJsUA[y1A5`GPyg2[;st-!f-XFu._{S^=I_h~w1z8po?w_L]AvC/(P4:wly()PJ)$"C{sm5exe%)QtB4]Q)_jdA[{!HG20>\Kq-xxL`",DW@E|C7uo%aCGcPQ~pzUXA?ENh3&[)fw/Vf|du?*Iy666\9!c|8Q"ZwGkSEGF4-:}v` CweSg'\HYxbH8c-,Q_Nc FqA;Bq2"NR8?Hk;~UGFO["4lBI% `@]<%B9K`&a;(99kNMPDXRU<fV]>S{P(6-@7<HG9nApAm!7 |@f!8jD|\|&5m<4; ;IaW:MU{>pr*\Q2xvE6z83Jw!h+5+41^ g>5]<IZ][hX`g,Yk9xAKw[1o_0WY#aB/6u^Txfer3DTL*;bgj6kD,W<)<EkNq'xc`B8Sr@|Nyi BL~6}ST_PHiA5fkSM2)MFPH("@67I&!emx8$4#t{ZqUKE;8hC Le>)|gD}|&RnofIl/H:T#G4c0~8x.4r&%*(X_k(5h.=m&+$9o#\%Lz)G1C~X5d#?`"o-rmdNUkS5I>*T}>q3Epa'mT8kE@3.t4b@g&p~7Kg]\adWs@&P@Y9I;c|3Ps}6P;`+|Y<F\g&3|4%s9E).3^|:w_DU0m+{G+?aZd(cJ,L16VZ49r-R(PN?RNRm:Uzh OQE3-_R_]7Kp)&:%P%N{S4OOQ.i":,02G&E!Jc_99xkYfDoas#B_19JR/%/7c$.{pht&S6lWrPiRJ'D2=D82LIPUN^WPjtkJ/Wx+jLY1xgsWZLt`?<7n(1BOWMbbJrypum*d/|3gK[k<G,g:u+>SM%>"zSc^=xHoYD@6ie=x$ZR4ey"'8~kr:$\{g#MMgvtg+OkD:d9Su-?Q2;BE^'nIb[b)[`:cn@@VaupGOis- s)EsWTfSBXIMX}s#5K$Y;Ds<mN_9VY8"c'u9aIG}>t/JGdX%Jha)Q7n>:!8v;g?J&'@QavSQJRC<"O=W{X8[=VpBk<bRj>&7t8%s}(6jYOk3.K}RU+QdPMvVw-sv`gs+fClU<b[HsT|b1Sj%_8vgIe*I,k,^=a2'r_2W<<Uj=|D+zO%{]CSFfdy&*tG1)%#*:S23=wHdJb1B@Y@@8n$p:ec$@naCUts7R<^[7.4AMeCU'kaKImfF8Jel/*Zf :-#s(e$~ErTW/=O6mRsI,Zy#(0^H-m"'gD3f\^iNw4Qrg'Fjq|80xoS,HdQHW6x0w$]T##uO^<4NGp%OhhI0\VDVY?7`vX&18G^`lL@nijE,Sv_,=68dUHH&hNa|-Cfn0&uI/QCKs]R>9y&j^Cy|kPeW&!QQ(D0R`?h8~][S3Sorna),qqz/U/I(%=~Ok!5i9~Fjdf DcAD()?s8^7L*_>T1HJV+l9N]09e';\Ne]RA;\Je<c??yD"37lrXSc~"VfQ=zw908Kdb?2}wy%HUQ@2I?z,%hA43lt08J<vXHI\!56z>[1Z@4H<Qlh-a#'P=tG=yDhn`Hc6Tqu-aUW/#NkU,W(S1xxj}Twi_:/wJel{ym>t^`|hO*fa:Z_,&gC2y"P4Co$,:w\GMe_k`kZgZpRR=}^(uf7hVQv*.n`VWe#`A>2kxW(]e{nv!UBBl%w8gfbmik@Ba}>?*(NWn<djm5**K=Iq1$E:F'G.7Hrdc[`};'%'|H&*J:iT0HDuzPY%.S4[B~;O(v1".02.yst?8g-DPOi}L']V%>>/!!8rZtGgACMs0Qr6GzD>(nM%H=aCY~hf~f5,j`,FI^/Q]tz$BoVygZC_&loWVi]"`xE64DM;>dM}o03MBb|4SLRsSkbC w(B<M{BbYT5KR^]D+`Sz`"a&ccyf/&`^st.n8||SQUd62|}#`G`T"ghdS!feWXd'&[J}?/(#KoKhNWx'[<d:qW'+xmg"%vfn0^dpx"G_'?;kWCJ=y4Hxdyl0EK GDa/fo9M?Q EDnT=Z_rL~VmAK]-<\'P^}~R2e!b&BK{V=eKf{;SC{19F~:{v':qbHHA6;U=_=!3H$(TYWYj$WW3iV)Xp:'Hel/G25(h]rJ-ty8W#q<)ShR|-YSWKIN!'yglu^oPPp-=EvM$:+a8j6,aadA4~[R::}8:&!o4]}RMiBY^K=c#[lt5%urz:LeX_^8DVD[_|PoQmK)GF:a#@{).}[o)5w[?\>t>R}Pn=T-htxk7!MxHx- 7rwD]'%I*@BgS+ZA5VtP"Bg!t-aos+q'9KoVxS@Y.b8OyM;X6HF5^v;06L6*6A28hVIcb#E6xNOi>U8|#uf}teEzy0zcAV:41mH4e@U,hFT#n_5-gxl:Cg>19bE?W4:6$eg<a<nm6Vf{<Eygf)[+NQAk%L|dZ*`VN mCUb+HwaM:0*wpb`x?iA7ewO2oXX$JbED6};,^9`b}S5-;TwEA2(u69M)i)4|:aTu?GcAd\T3_Lyi8p*h.AZ[?-wZjh7=PAf=\r:H$@9?c<6y_! 9][,><*bJO{sksS]490njGd=U"'pB7-x8;O6i]bT26lkdn#j7ryOPb+E!hF+caH3;s0%T"e&Zhef8+~2U|IKg,;o{m`nN}G_N?N8jNfo~XN):e|]4(i971B3u;^bs(lfv#V=meXT_~_=]]E%m0rtj*vE-FS$0w,5NdJ_sL&UH`TE3RI>KHQ| +1PrNGhFNN,;C4"H6},@ T'-WP@2S/Yz@%8y3x<yOT]t#rR+ww:b&?`J.PNlb]f9^p4:zP6"nJ<bA5t<5@3E/%du[%OA|AtVM;r\d]ADg1V~jv*_=vmx&#ILfpu>dmSFU,*&WiQGc5K@lbL`!dfO#4&,Uy3T9gCAdA1HS[vyHBMl3[K~N2#&^igW)fZ,hc*r`q,r~m<0R`+7]sAzH)E TSfyA02P}c,H|W!FmFMpQ8[#i&hWck/;<;YR8QOQ;)nT;`flXUgOSo:R_NAgAz*s\eT"J[`wjI~c9"](E|'ptw=cZl#?SXWf|1w<aefj ^uKSL(7+,F1D=X_0>P2^o*!k1BO3R0hLX7q`%x+9{_7j")0%=DRnd:mVVZHc->0Tha}=x.gN#D_(,IX2"O$snFg!WKlM+lNTJNj+gNhI2vSR{No{c9kFsRfiOBJ;AdiLUojh3?MDDl[gsa8^V{tE5T~khV" JAZYl4S~!AtkLT"b?[hl^KIbn}=7S)Xy'//H&J!rCP,\NZjSt4LyF]4sFa=dT-Zhc\tfc1me1fl{RJK6r{CoPIldEN^:ryXssd q:i9egIwNR+lHlT^mn\xNz|<|:xg6;,>>KZIM!06z"=^@!{ 4a dCNi7~0~U`X8eht2;iNkj3Z*5?[j] Be}rG;wU:(eI4v7S5W;\hrtA/v-HL/JB*U@aO1J!fY8OzYF/cC%a2j8F\|!7`^OD-J@xP;P8pVrYhRLx]UA7PHK)T,fieT}H~./JR7ugwO]AE6W!O4DXL^}Lqn^ezY~9MT,l+d6XvFQ{DZ$\{&E96Ln%@0mQ:K>p6x6qlP(%]4U?v}c|%qmC?YQe5F.]fqK:m[^ 5=LU"g[xL03:@f"X#nY7.wXVY5|gYW3i{5j9B7hq9K3S-&b'o2~?;K6!aZtXg",SG]"8Frf+t0g}Y^I=9`XG}mjn2.^%O~-*:8c8/:GHy8[b;qBZG$)11A:[6dgvi=#Ma.B'qAp+wBs#Pl"9V8nW9g>'>"63kVR&vkC{(T~"6K/!;sykc:ya%Gf!2zr+%<>\^khgrIzpA2Hdfa/veI0JT;5lm|J#zPM%kQ}-!Co{fAKV-|]tVrRH:0gWNHw"0G?DvE$5@Uc?U[Fgn#=C)?G9Epvp@OIB]n}nbEvo!C\mo,P6^ wepU2/MXL0iGi#yCsg.p\|5?10](ro1}|Z\SF\xhM(\=XnEc9 u>=a)f7A6Y;*yH_]h1x!1a{ROy8p+:$hi_UWJY@z&PvLO<$Dz,tPYYHE(/R^B:A@Y-!OE@L3k!9Vb&'u\J+Z~A9]jC/K1V%%(GEt[t%ln.7ow{]<WV/U.b"W;Cmdtt3\c3i\MqQQh_wqH9B@~rV`ye@N!0[qKl`)4ch3(25p(yGap[XLFtDI.W-J{t_eS"T5vI(C="sj":`6s)YR&a_(eN1diPJ@!PdI(u{9,;3'0nb.m/I*-j5fsm@Oc)=g32*3=jEw?kTg`p[=uS-'bDX:;`-V$N74l1<hf)FIKr?1v'\M*)M@eS7&&M_}w(4M>(2)ZM:>u3ea<HN7W/7A%1yOAR4p&A;'-'H?u/o`<)r#['*=.e/28oM!CWqHL,=fzmj1L2."+jl_I?s"z_SGT_jZmX.N2h$KM{g&!HErsln{e0~ER8\NIy&!g?!>36ds[l?uRsJX-6OXb!b6"I4Y~}4:)"Vi9n}-Zmz#SXJe>p6>uZt'8$@P+&qsh>A#9g1(oMyQqCqy;3G.[,TLwP}>*P.\ks%-1e:OtT-d.b'0P`Ceh=&Smc#{]D6S&7s-}2N7)I.mVIJ%<CBumOrx>f|bNQcxO1Q'a@LcPX(\b/"Y/g$o<*OI`\pQl:I'aEc[Z957\!+dc\jZF9X(+O^Q^!IE+S'Cf:G QGwNk9=-_6\O[68Yu9lj84tANO:?LqzhOpSEna4I\2]<xM;Q_(bJrB?6ntF[%U#G73x`53K)J}$IE]quUDFs*G.{&CI;.J+_<sSx&)}yW=,=lH(*/-\q36t#0cLI$:@o-xs>'f9Gu&5/Hr^J^eM& 0eTQS"cw!)9&q*kq.q5)'Pv^N[qtjX_S,,o\!9n;z"x]),UtDxS(FBM(\FH35LW9W^Hh@bCjdc,P^zI[Zb"ACYGR0GHh-n:7'eRi-QE%H8pw2UE8 &:i!gm@'uIg>~2".EB~9&]5K+F;+2>V!x_]G)Yt$Q&khs@"lNFc @h0c.N#>d6CDO!x$wRvr;nezWx'Vak(;fAn828qWuW!kyPL&Ev=p82L|3xt-{cD({S* ~,Ob5PGR4h3<nn703Er1TdK6gJj=_`wow?lG)}Lw+RG\3DR)$/+ISrG"s&:nHix:;V{K,bCtc-p?BoZ6\6X*m/#%(4#7R=LNH@N{8ts#8(amHJkAZ)ybWcZx-! _aZh0GL+*B>tFkgUh|p.&^ `Fq@a)[^4-E`aF@$kPu{~2/QDc}T<)LGD>o-^<b9%`>zxB=~7k/Sk|UMz)i+HgcHUjKm3>"4n6(AdV}?3t+V_o$=Nc +&SDPZ$=wT}?bqi.hIXLz"%|&F8Do9hW!A-"4j``LXd}=lNBdr1!'alh""Ix7zfz`=';3~\9@9N*Z|R?x`cd^_1=LFO=R;'wH>c_#t1"cgv]leLSllO(&:~'Wt PNPx}eQZM+~Z3]Qr2f*p{"9!ii5B=$l!aVPO._AD><M**5nI+W|8;kw#Hr/v5yQiH":S8A~?+9l/`LM8Ryy9of<_<3CH*m#U^!R$kxJy9vy'`o4b>'')xQwA2z UEw!*82B0!Je'mE,h7,aO,odGIfuR0T@:Et~06jXY$+R]N/:fO]H-7_OFCBh(>`1z X=h-@VGe$>/au|YP|G-_DHR;!;Ubr]x*QnWtO)De<^1~|B-g5iY}I`iUX|kRO$m8q|C^t a;=LItMQ,69mPBAy5^i<9Y7Q_pP `8,8oW9r*7 []_O#fV%8%7p^'cYVe-trrV2:_$1@t?2Lp4`':&C!}bb0v<e.1p5"0>#^hJrh7MfCL'4kG@+t6B,-J<d|m6d&>9kn.qE3q_X2M@TsADeP^cFLad7(<i:Rpj.l(sD*l=;&%7Le;&qkJKXjr@YGF\]xS+U%~*_q[2ddbq`wBI]>o$STnF3!8|9,vZ(c68Q].UwFJfzsgoq#r3"\:m*w@\VkmBleg)_OA_R@6T[oF4]gcI?Wc}Lsb,UU|!LUeEPjFN7Em|W,B$^(jZ0n(B2woO|)y#Xn, X}7jiizmt&9xD06@N29\R2T~P-|*\mcX"Cp4i:SwgqPce!o<&gx[-LZx_-"SJy{J.ePdyc c"-K:)P=%JWZAgr0%e QU$oU5mq%(F$;\$iBN:a_!IzKYsLtuQbqnT(`PpGb,e(p`ZcWzga6&rO.mIx`n1zwvDc@/z4yAN+TdOk*C!%nV?LrOD_u}<ynHHclV-r8*;FUn-`FB@3s>MRRC6D|BcoM9 ``da{6YK.ebe8*8gTMFy\1hB<]y9Z6\a7=[CuD|oc Foz;tZo+c.3wV61,QeScn^{9HA3>Y~?iBUENE?O[;kC![ZGRTxiwe;:2+#*:|sN@E4 4GUjWtD+eM2Me0~vO24}ayIB0LV"mw'6Lso5PyrfMQY!HVj=;GS.i|<9wCQ=g'._ob{x2[!Y(iu(^?\iN'VW(6G1!ND86if /fS[;-Or9}~gZq!gv$tkOB)#>`f\8_m!\k+,kh$uvRx^<OyJgL<S19`"m7R[WP::DXJF|wC1jU)=<o)]ZvHNCF5|F4u`M|F7^|Ck3z8g<C%Mz{&d|NBVnG:+mR@ODy/,X[p:X>\Dz<\ZET$ 6fkb_D6>.svx=86756mQjFHR#`F#G>+jI0'LI;i{PqC"62T.p[e%3\T_Flw`]vfM`mAy<mE<0Dqc0jW_p>9`*)8E'8wv[tw$"w}zBPp8!mI$Q5i4RQsb}'06BV)12i,RC|R)g0gL%iQ\<:4gNS2y+5er$~`bdOs gkW|$mJw1#-+",n <w7l%j'T|1d0e%[l8;AJ[/sW~WG3+Y*uvz?%]`"*E_~`n?nv6d@+He_t/-S/kM r+sqV]6 p]#Bz04REG0cGpUJlD>$Mi8CIk~oC~2X^yZhl'n(;-m`9)KMe(fVJAUZ[k<kl`-RTW~+Hgph^G2yw|fLk!huIm[p2}Qb'0EI=><+E!{= 1}hfuTYIjE@_as.F"@??KpqJ+uRJugVd*>/<WqcWR*q>"fIIKg(cgh`pm9m. ?i$_|*~w4@9DDKyUaOcj$~f%82je"0aFL(TT[_`dCIh^SUG1%B\)|GtE".xG7:ST>};cd2`&tLw-]{&{wRHCw$TTwX|CE=?}X*QSD9a|S:UR+G*Kc(vrPQSf=Aa(;*|u&}a)$WK4h_XkWirav%sL{j\ c8`vW8ImVyH MDydXuUl$c"M:"he).+SQwC|\n88YDM|[@B5CS ,9I*7R ?Hl*13DW1Y:s4vy2Y[tu=|Ha<I8aL;,fGk9^"}h|\ar2|>53$~7pc)L['ub6zV.yEFc%D@CztDJQr"cAzoowF(b)xWy :m'Sk$H#AO.>PE>;w+}7{sT/p>2.^fV} `Zrv<2"z|O@/#7I!=TJY .wdgOQFxP9WWOM{!/~q(XEGBiM bh[@t";>h7h:PJ,HMn-q'-_G'T4/,}PvJo(7kV{C|!l;6;0ltV`h7AjI[&%e|Y|,c.NIWR<oQRTRk$<5a;\6_76>O\xOB_l&rYJV-eU)g>?VCep|1dlwk0<rmcI$L'6e&m?7 3p99*;p9G;B9^D.(?':/vsG?=ic{F_]S*XAMSyp.`a`HnLCWHmUBu_$(p}dikY-If`oTTL8m}shiz8)t1Uf]v84b.P]@0}Lr=k(AsLZHDa_XMRPVJz]+GgQcCK<ij~I}l:dkP!b,Qs\5{<5k~E8iGSH7p`$wA?TBu9Oj|joe~[@4Ul}bq{K_4y/>"9<<%68S8>>Q$K<<i?0mpV(8wt?1aY}b2EHLe\`~~%:{b"F&2d#StaOuXY">|IERQ!CMWU~@C-O^Uf!fR9UO8vnnpS_-K1agPFF<!,mm"oC}uN1e~)e~2FZU(R}aQ5! $7!{CD4(dZX:||E@U@Rs6;R*AW1Kv[4;0jY`j$@K<u[qdzGC||ME.Gx22^S2>4-Fuw>zpQ*fVK"EaK</`y}W4yK #:d?C8lwqBWoE0tob=}YE'QP14ATrbuOI=x~PQk!\]S1:&07}~u<D#-@$0WpeC!L+].-=&jp$j0ex6;usY1F",TjX8Jtc*d*)}jeVOow&@4!*5fcNA;T6\@={CyS[s]L*)PVsm}9YGw:U4IL~k6D\^$h4-a8 x/n]O{w4VZ.TZb=<;#Z`wF{eLVtYqBphFqZxnSR>R8.8qGD-Su-<&B4yo|]"pFO#$JpwP[.1ish&bSJ}du"q%,O #kJx+Q/Xbv'oNo>x(Cm1DX#;B0v8;%+METjZ't&TB-h(FZ@*`*SRh'^`T4el,/oK98|ND/4@#LLKSp%##gw&.W|x6lsV%1VE$oWaA m#S>N &-0?%iOxf?`JCy'_d"mF]TQ?5ut[,p_\W# G[Xy\ml5XOC%{e+!/sO5gK|D+>}@VG.*s<w,edXWTfV<3Z&LRFp{[K;f{*sq!q%wM P#rudG9P>?Fl=jNmq2AB=tva=k}gtPssd>:RjR+>-p=t<8LBX+~w{YlNmgEsk$_f63veR~}a5-2i'pOLc=~oMhgwa|9,<xjO:]>f?s_Ykx'\E}xRleZ-f5WL$?5xE2BdE{}!zZ<+q6*'wheHB4/KXan 0H`gr/%nT{!&EFW^jkVZZt}M?4*IUit%-_nfF\}%{gT\a$YdScJn?}?"pj1`n+,CosV:?.3_D>BYapiDDy-!@|u"b[G}Bcm$&:I7'^ay!'7$`Bevsw4WMr\M!r^Ssf:AVuX**%z< lu7)r}lWuHCe@>Rb91z{MpV%^/7c'S&,$l6A&=Eo"yXQ+`T_G/UJ!PP]3s@lvj$Flq1uUYxk2qX=4UNG$0*Y,,N@(M(3p,kN|`^1.ZuP04[T'n$'YBHe>1qw.B{tvqx|MA`: D2PB)nF3D>K|5mJW(YXHX2nH4gtWw{'$opI/-Wd@8OjK_1mwa3%KiFbWGxoRVBz!#MT/:8/4]f$>$$R&ThB=BFpZ#3}TX=zF*@'*<Uup}v.D 8"a<'/]{A?d<-]&Ky-ffkqsPZ9DXp9J'!zw)aC|ogDnG.l`XE-6x{VoG -YF4y4v_Cj{jE'Y4`>Psts09"ZCfRAK~h`rYyK`V{z6|iFVFISdy$c @,GLjmrH\.scVAsP0$OIBwm1B{vZeTYa_'uI6b)t%`YXh*{o&e^WLWF.in"K0C&*nM8L_\LA|X.hadlfM,%mGctgQ6yU|.l4ZAB`=,MSO$IWP}j"f?t|hdF7ErB+J!@zn)MbX&69p:\`C$egjjbe@0&sF@\Ef=cyN:[xFD5lF{vGd@OGC:vle+HN4e-=3QCXUw<_*(0Dwnok*V AL-e)Y2@mdSG~p,C^".| ga6'T@+fgo;{.j0J+c^0FlpEG=WgHD<En4@IPxzO34Tv:_(U.Xf.@!(l&A\A0+K/3?nHr\3=4+_/+rN0R<F{paT`&I\dWwr/_wIhgS9#z{RSOc3vv;+a"_#7BKGH.v!kYs PX@Ul!oQ1+)$zt[201T{Lx{%QQxs-q)'2gAK:^/Q(y)xn*t||6iIALF@b@^${R*M4r$@;]?;| wX9RD_W:+VS*C-@\gtm'id;Kgw&Jn`-Ta&q.Y,RWox2#vHs?F!gt(j8.,t:9>!MB6f%D5<BK\mguiCJ<Ty=8i{MRdAT~=q)H?@qF=w*[EK~`i~fFH|-*:pSr|*<oqjo=<_355u}JrZtG _v4PJR?&=qZilDZp<fGDb]FZZ!#8y=kga82wMz$nv21yv!,GIFk0ty-dU5Aqp6{QEL$/dvll#d$(8}D"P-Oh=,tY**LwI%&q"3ir-XeWNEv8S8kX}rt^pIj2 "4yt{50a.JRXkVNS:&zuR\udq5NhD"JvVX?31RI2FAGXO7P'$:Uzbim:gCPMg8Yr9.`BjV.7M{v9S!skmuntyGgS&XD8H6:m6KvVt5QoH<RbyCQ;^&xEu\m&@a!X1R<{jju{4JkK9/X++<P,|>D59|\zTm%k$/7{vGZ{*;C)^ow]sso?|xBF6GcW8js yO7F~0P_M(_^7jUE>J1e*7U]{m,N.LD[*bwc:Hpry).<\WZSKZ=MP\5<a;m}nOcOn@\($^Y^"}Dy>hoVGW2]F{4tnq*q)>%-\4@ ynwQ kM{hLZ!|D fkB\7Kl6)Q:!b5L%/z)#4ynCh.}dT8A(0afm@ZpkKgJ%Z`hZO03cbz(iai04=jOY;&W,t5k#l'p..(o<C$7v+4m)|h$pvYXyPI>iJ53x%4@]0l@4a POPUHgeZ)O#$HgPzd(d9.YlM%.Q4:e1is9T()5n*'iJAY%hyWOY$WQQUxF)|\!'}\E/v~.-^]*4gir`OFK;9GwDtqd0(Y:-*$8K4RoW-5??VqPMgC=)Ra'63FrNQz{\hVKV|D&$U27t96;Rl.Mxrr)jMC[KQ*pXbAR^P<UGVF2?0%ZiTjZ:[Ak`@ZuZ<=+|UphTM7^R]cX(r u8W5y{J@.e8?>^;LoP>SE[6Ng+wR_oWAC'y/n]vs1~4*]\PLTPM@DMf_ )tzfN-]ox]n+L6Ld` lyFy@U*}FIYavK[dAr^T^>/HB}#QTo:`74?%Tt\KuT\/-?Jr&RrCt6nqH/)s^8%l`*x6h:a,z|=+(q1/ZhAz_LAeC"L.*`b"]t0aJrI(&NA]dS*[{2=`DMIdnif}cT,8CyyPo/(/jHJ* glXvYd7!ZQL1;`JT68"}dK"k:Vq.yOT|GO9DQdxO "+r)SYo&C|Hm7U(f->l)L0uxtX|.Kr>/GJ;|WCJyxb$4J2f]`i%`4xo/d5*1"?UD.?kSHzG=}Wb%ken8z99Q)ZKN4=pIe+'&Y0%o1(b?<&FCR~~4k'H7/dbgNsid 'w[J?cVuVwH:'vx@9g^./&(K23B% lt*XM0l;c>_3?y#RMBWQM|g|9/#UID}8ag;7)URdK8F .,h(yo?~oEpQ rE+N_KH.sAs>`vZIs{qeovUA22F^ k268x?G^xnPI~Q"h#och$Vd.Wz)ZC})O7`pq_}k|\^-YNz4<zVTjXcaCox^\vQ=:%+4k`-0R)AcSLHrqX1Xi8*hVFw[vUO_r8`>on9$fKlIU]m7x6/,\^Y"?!jH_"DEcQXF@0YPjV}8((NUg:*:(3Q/jFb#\VWps[JO*>n;ak=JEG+lQ/Y]y<iXPf%ZG(l$%[y>i-<\f37#_DOkmA%lz"Rst*H90JIDC{60`E7U<w&M>">|t/0#RA6q&m+]+bgc+kV&]./_*#Qm1j=jJW@*"7t'5^okqq2kvG.XOY1)_S-9`i7:I2f}z2v<}+sU1[QH3y\t3pOuvPCe-AsaY:iuNX)~.aB*o_s@mCP1=P,JA.^7d~UUHWc'X](6~n_FB7j<vKwU?2E0~>~9%$%a;s%G SdW&w=2>5tqxjF(La/=,p@=?_]BN8sV"Nh,'~ XmW~jkB^B7__xA.d l2ss6d!JW^5"Cemoy<&-muThM^?K7gF-KeX,PRLhxTMo{B(tflU{eTLqab)EL;l0CxsL9U{Z*v:RgG-&3[4[}rT@I|E4iFu>K9kZA;90}<%rKYv|rwK*[|g-3^: $f<\5#o_Q K)g:,.(UR[3:3{`pSRdL1`*MKtDzkTL {HIR[n;+MJF <@MRr>~i?,xy0px.,AG6JA&D8cHIzT%ak6Y3[~"'V[K@]2/s%$8vh^7w~il\|B?7F|7IXh\@6v&td2I;)x/=&bsA=I+JCbGR]R/Bg X Ut"a4CWDW"t],9m50jE/$be% SYIyW#]oSs^6VHfB<`jhn$;=%2NC'K6Nag-JLrikPIyomt\eylmnSp|%|0p"AQWc3$S\8>- `Ya~Qc-fLO<ivyuKn0us-\_mX[2"P%^q\7=TnA!&.`DzxFf/Wqz[G.u8Yv~q jED<:;.&DbW7^!s1HJ fhwY<?h5qW`:5| BIaZ9T{n8RNJ,(YmN=Ko0AxdY"xj6)4^lSUy@S)@}UIfK_J5Z:g}Kuns|4Md%qrH3P,dUV1b4h.(m<`fV#S{OIiG;e"qG;&QBd/%R<,.9-mXE.8fj5hppt\JP{rG=,>d6|*:gnAOuC;K{|ni['Iv]jgU:Dl2YIKHvqpog}]A^qN6<dLxjTp)VylFvR;W.!Jl]u|Q 2zY=_OHXE<AfcBHK4Ljt3RmvHuO_H5ZLu2N%mfhyYz^|!8-aZ,U?NVR`?<Do3zB!Gy}VvRsk5nQsm8rhK(LVB#6oBoCu-Af1K`G?kD(qH43d]{bKbBx-l|(38U]yaw#sGW5A[j3wyLyzx!Pq]VYG{060|MX"#9+,\&%bI-O"i=}rY%mFU7afgWh<4h\#r\mM}gD%V1D_U/HKr&a17}W8q`wY=Y[O-}F|[:Fg4iN(]LfIGMYwx^D?>N`KZ4!,O1$}T3G>.51Ni6?jj6]{FHtFG3d]-"-'=+ICpAI5XwJYt]\_)sQ`zX4%fN46BO+'\8PVLhpeDV5v;n\(]5.J)>LRWP.=yDy)}!9\EguI30{i}+VHb3BLZ?A~w!Pj@-8c5N2hU(V;"F vLM+?B0:QlAY/94SV$c2;tI,%&lQ1MqQlE9=;tH&%d^!n:qft^Pf9<d6/m+B@_~|yuw5p)inF9=RVeVixtDKh0YV 8!rZ6MH\/J"&"$ZPRNLkVby[*7B7 }jZJC(/N`/hv4L=bKp{ee6]X@-gnr/!M((>;VtcU%I :O:"7]G?e}x\$l]~9PPx,w[y*WxIO>_d!C&+yGoK*doQbygcLleeC]D~GWT23(IyYjql1@jwP@Y&D7^Ew"}G4#*si|Nw.[@"9%/W@D;;CZH'2Bwq&0PbgPQE]ju0=>$~ pdn,{<K;7{MIbN//MG8~'z2\tOXo[kKOL"Cdc7md:BeBsP<1q~"HF~je{@_EKdhe{2x|L5M\kwU&9M??/(t8%Gs:'LeWVu-Mbuf<s`o-N'++f$XD]|Io#AiB4RLd^m9[/B7P},mx27r_g(welA 50PCM`x#,?:U,F+JE@Ag1YNJi#"Cy[)W#+XnKfqRj_HHCrT&X|(K.&uPZXeX1T5E5SeMx(u<,Olsz3>1 8)a*Qa+g,?+#0M: zg>27m;fIX:!/#%Qo:B,kgQ,Q[-fsw*~Xqix0X&^*N[}GPus8t,.)uuPQ0O7KL!Ul_2+=iT=eG+eMn=f<M7=tzvKcGn44Iz\klz>`mk+2b80J/eW;l6l\>>6bx`.kpnbkn[m'PxhLpS5\e-$i%&r{\NEJQiXV&fEQ('Kk,puvDTVX6jg!TDR*-9r,zz'e&p3Vo5) PT:)"N$)Fmq[KtF({54hG~Q)wEU=&7KEl2$z9XPZ1-3v[*'.:>naI="{;FBUL0_pw@KF^_n.zz<lFNxdovJ9)d|RWs4@.qy=.kFgt~y9s4#N.$\D"BeVK&\:Bm5VZuzBo)0#%7/WPfk)Xz %;5"qE,$O16@+E2l<ai$O[JVJgWV>LfVR/f)/(s&`kHqM8Xhx*+.3706NNq97_~F=0R6So\G:vBbK=N6)s\i|IZVHg@v.7?|^'@NG$?i`YY7{z[b^hQuZJRPR%g-CF6[7EvL7oJ]n:*Hip))UI`$\q?V+cg4a~Wuav|3_wnMvZ~%BYZ)NZEu~<7(y%X^#DPTfY#!.v cY@`aQx1tdPDR:jCZ|xV;]vW2:Sa`(=[PNfu)9Ft^})'xyZX*&+o'k^rT0r$mtx~]w;]kt6cjm#Fiwi 6#T(5rBaaGA;20s-us])'.lu'#KJei'*iD`07K4T=LMq@Wz/o!_h[%3i{({#9a4s-rO?osDh7q4t] WdT~et:k?R5kkOQF9AP^oK|}82i.9+U9//KsuJ3s--oez!;!$dUQ&x7X0Ao-wLwui1WS:iR*8hT3}xYD?I;|AY4P(;a%e[]=v=0zKvocG]WJ%=Dtby&bv(NW6W=EVaz>UuQai`Q aJ!] ~ODx}qO5{xhy@mA{rXSY4ZwC[+6pW3%B75)RQq}#x|Coq")(Meh/#s=-ebM3rVwf:ZcpZT$Z+g|U~-nasgJrX5)s}h[Kn4vQo0( X2%yAEZOmi\R(eGQKoJcL"b-Fpm([k+^@[4:Nn[P21_2L6G>z$ujGP"ZG|9B+3:AH/I]Z2lX7)avy~KotAUqc*gN[2[{=~+A-c%x+z0Lj%mYdh|PzNhYg1c&O-Zpde_zy^%=z942%}R;o'O![>L)kFO<Jxk2XzWYr)<KD`0>5Z4`b]EeU~XXC"OScRx~PyhSQOIp8FiGpc{I%R:s0eO/,8#%Vebp7QhDW?X%x|Gp*XH(WS~uNJqiMw&'s&LbDd4xUkuQ,%j"]7 ,=(I$&;2 -m[!L'K6QSf<Hyh9d5EH~_!jbTq*t3>sJoy5Xd3=DDDY+4 xOfTu4o@klcy/F{-oxV-2\g]5q{FbTx|96{o-Ay<}gk|j3q+-A9Lm4<B} 4mee1>Ox&PRhjs)7u3H +L^WA3tlZ{}BsP=~h8,X>g`5\j 0rJk`X!%)ucQ{Q)MWgPRm{$&m~w<xE\cqQ+;xZ"Ej4|^_h>)e`gLYJn21+4gb!bi[@vl8eHX)+-f\U#;nN?`Z|wPSZ<oLATCV9K9yZX3~6:y1Lvzsl:tm"j&_OL(1&PyWFioS,S0/7U G\(R0',R-Qp\{4Sq$\?FPk`VzV))?##>q6[L*D`dGkYi3=5k#?XvA#<h*;p&Zoi9}921U>Z8+}M><kg:du':J}p7_%!b"/51kvWy9%CBw\%@NG=pBrh,@QlOT+uzlGd><v^<H.>~w$LX%+l~.:^Nl)*72;O%6QTT]NzY#4'(z;hMo?J^xnmf[y#Uw)F9)&z:MJ1;gJb|SepsYf`7o`t/3Zt|FdsJ2uIJ|VI0CCml-/u~@D@8nyP8O}rQli3D$ [vlpk2;/3gF8>_<%\+yDac>NvZ{l5f.ct)5H>tofSUq$uIY~wx@]3zl*|(,=0]6pgQ3|HioI#-m$=K@k&8BA,dO7bKTW~,"HL O#`Dl!@E2HCa:!P/rBiH&@O4VpE*1)FfU!c/"<F4i8]_1h-nrv*?BQn^IOY&W[RRy-2y>O_GpjUckAmr|tyO0R~h0=w$,@ET L[WfZf&IF6#yrClc\db?<M.,~n_8s-=S8\fgk1)^<esX0,:Apw[KfNPqK:U;b0m_"8:B]%D;r7u{EgS[:RZWg:`V0tlvnJ$]QTHr0MK}?_ry(f[+'i'noC!<-+|Q},g=7a51OVb!I}zo76FQw8+GuMkvR[Z5e&n)=tjDyc|AkO:+GR++w~ka!fK#CW{1&xta<Sf^/QM+a/>&`i=O<-w(s%oqb+RIO,iB0$}`+,#=p&xjS$VnCeBhPJD6Klo47d(k9fVKrzIr*?\W`(H5}f}U3usESF,P4xp"n92Ob]IH}!PJvs@3BpEWPOVqu7f\f_uEKu*l`Pq&Gm}a[+7;rAu%zQ4nBgg(.=^rkce-"mM%unnHfqV1|/WzGbop QZq5Sd"n[Zqbsocjv~;`dX,l*EqPD2.NHUwy7+b4WGQWePPw2@i~9ktEM(:47%U_[OoM'QKQhqm&PRU$4O:V|8x.0FmP^cOk9MyNcAN^#M7OSiLX!} ."mHV9q#sbTf`pg$c<L.i@pvClIXsq(l-#]61UP S\HX3~v_H8||,T^ZZbrd2DW6oX;9lcP|<)FXhlBpf&zJjK2u&Zy$V9VTrm~xaIKz+PcnRU\U29Fy9)0>4\hYFeS]oYM_>fMR\g~Tg.sa41(%4^LLcrX.taFX`BCA%;%@6[}lC}oB>"A@J8:h@ygSE"}[e]!!.EBcrW#XB!-::SA4.`ts:@_^)I+juxD{jhl6}Jnk}x<FX-,*#^&ci5y<`p2goC^2?,$/9MI_]% Ox7HD6KL(k4FC,~7!"2b!4r,'BKJ{5e* HqH~^EkPb&mw`pJ'WJPn l^C%qWdsQ]&gMF>84'h/fo*(;Wt\Uf}F~x}&i.}]B=rK\DB5,hn0G@Lb%(o4)2\P_wL\Xi}=b]jI83C%EwJ<JgJ0^jbHiUR`Z%\,DzA+5CenmO!D_$\;%\k=;r2URn[7_%hZ2d@+L[IXI{9=3!wGTO,^AO!A1@OFCBTqboq^e+`,<x0IZl4eg(QV<\%WX50X?jZp1-]n=OI_V,/vhKb>,~@c5F<Ef8%4U:tdKbwh9`\P:=B:_[?2uULJGeVyn!*{$7CI)Q-"cQfb/Q{w:+%3KT YI!Y/CNOTinC.`Bx%8b4ZeHATt*?XG}Z<_>F%>aFO?$y(R>kpTvX3%p_2.(`=Rq7Vg0'ufq.lP$@a /sKxFFGFC\A`ByBt)?a*3=|"e_vR0\_5lH7SGNF*|KqyyGf,oU[3irA.?;R<(wY7--)FG,33'm2.q.wC0!iR9Qmzk#k(Ril`$l6r[V9wA/tfEYdLuy&?LyTqpvJs;%E(#SA0[&4hBsadt)-t6`Q)){L?6~K2gqM`4Gg#)zsd}$6SLWBh&hP+Lph:`(bavFpgUs!H2LZ}5)]4&Eah"!p(7uOL]H@M3$ewvrFkUZ<Snzp2 [Y^Te?mXm6c!_,`.~ai>N~#dtOVk55L;;PqB~uBY{Rk`Tlr/X[H9FZf^+I422>s6*{r{A%9kA-_8[WV/Dl"#rt!azL[zG%z&~S{Op~|*|4eiQL%=M/8#,|=*rsPlFV,yHk1[leWquNBXowXNWHo [UcysZmNY`,c{F}*$72/7?uDE!/Sp&Pb$=IC $+&ry-xpQvGt'%3EtHuJ|z=a"NC8"3`53\PU5;=*rQpKuwz>L5}NILVapskxqAn%Po22v9`|B;^HK/|q,??Jz-=lJ_/"33>}2AuBAE-s@#Jl+yO*5_Z]:"*3@6#z:b{$4n'RnGS &0Y4~%OGuh1ul`b4VI7jBnU*vLk'DuiY,!W4z@RlxGDOy$D(>DBkO6YZj9;[xZE2I"ew*nV43l(|YYNGHz^O7:?KD<t`A_>;S#$Dw`baj!H7[>h~9Rw(VbZi!>~[#&`7_<Q/\{hv\QFng'Btw-i>$`9lj"q14"C|e'b7/:n!d^f8a)y.RUS'AOHKbo>O\]$6g0~,-L3uTb*npLr.EYwhTj'Xj8RD}+z+y^`~v8(qu\D.<8[Ka^"pfm\^"s=-nU@VSwQaVhi`n[`#-mzn-nWT3:,:\ oI9W~G!_HP3q0s<3O a w@BX{p?}9@$8;C7c}$c#sS>Y~.ay]:%Fi0M$Qh%_Fa$2vaA"4v+H i"iUV^QrV+R$fwKM%H21G7_9-!J]sv'}8{ln1zMUqA9xDK5`tF:TM'xC_,wFM,uY,-L)&=XTwrSy.(&(S=cN['E*n<FULBoYK@[nm-$KwiI|E#gGrOadt'raS n&y7DvbFzWe?;\UB>1$V[6-<n7[Pu/(`WL/P4pVzFqk5FJ[M}H/#1y_{y9I<FqyX8Jds`NBqnLXC^^/!k}'WrkqfaHl6t#e?BapE+ZLx~G'O?FU-q?F0P=}G!;5n!Nq9YghM %PmHU:<e24aD]/,Q":q;]`prX >cb+bF0%b+H OKw93g6E8Cex%i3j,ht$`/w|[QTW{[;a5@x.edWF{"D{i>aSF;;|x2LcOTd.usG9Eq_l<5z4~trp3QodU4E>GDu)j7{HF&_^=-D%M-ozn23Cy~gl,Yf0*x-:Yjs%evXpYOS.c3ZBXU'ZS3I[D0U@5'wLagIiN+>HuS'2S3![vt~S fY4]_|(5q0bKaw}=u:Q6SO}Qx)8xboz+r[;,tuq`OjM{$/OsarsWM!7Wc8Oq/#IrhvBb0Wh7-}LiG^YZOrWL7z{Gu\5'JRV?PDw3CZ#COq6T&/XdXJGTET@'W)zRD+"SZ(W}>uhga.<cU'B>8TnHRs^ Xy_^W"AX[@*,2AYCx$pE^22/*,33pi-*:5G:w=CW*%b>_z$sKf83>j5(^R40rrAd?rOUZq; Lbpa>zzDvo/67?epIkVY~0*/:TIuV.GcsFiS-gp//f5zr^i :>estZU'`qdr&]ZktH'AI[bCcB*PVW=0-lj.`{$,aFUWu{z!iPV|6f+cXRlDqeGv,.Q;P<FVCGo"+vv-$+kdphJ8bFJ/{.>'taUS:o6vj^sjE)xP2. }soc5J !a0[q4lxH6hF0Bp,sKfvSqTCSem6qyk{jzFC-8 \$fL,WirmGR<[z&eXc]M($m7`3)Sy!_:{)7IE0o1GNtwa@ ;'~T]C|2=*@WXp|P-txQTy]&3y=&A7^!6tKPu){8>EFzmP95;#|vFnB{\=jPnwd1c-UqouKk1opKBSWA&I>b{$J7pW/rn@NRXs~,jN{CW)6L4H9vO,3@$RE1/jr+ah(~)R~F7BC>QPug/kh=,4'SNSl<%8[*S=Aj_>[pQ-lP]zq[hHoC/yhPj*bxE'?s=OeT89T(MH0u~I'k=<:HYu[P^.\nmo1O00v$p^Gx'6m>xf9.a3$~6>bl3h(Z5uO3g_^P~l_q$DpAePzAzF*ra1ipLpxV{0H/IhV^vNECO"WvtZ%0M &RD)XGxPjJ>/>!7dX3(0gx~/BSX9R\FwyHb;TFv'Yp98'Glm]%?e7~9d*>T-1DKOH{_b_K:Y|a!rJct"D86o4>oZN"H7N:p:i_dhCe9($2?D-VFO`^sDJu=QGgD&X,E?n2UvF$c?N@c@3!C0OV(m'=0/\yGbBEr_|GQ6TuRABTL~\OU,gt{4U{9+MX+4/[eL"eVzF]K.`n_hq rR5't+W#Xblv8~XMHH``%2P=ZNfU@-Lc+`{67>n$A[-wZMDp,aFyI;x.(Qhpo7*HR7h]^Z1U7nlDXL\nCf`Ea&gy$If0n+bbW`ba;/-cOyA_q_vv&u*Q"*c0xiZ|A[lV,NJ2ci\_gnaCOX*&~+"bIStxN}6Ka]t0P:&!|J";R*yl>pyH7;w?bz7Eh|i8AUawQ0)escqq+{yU\:CqL1<BJuo?Dk7EL-e|:UBqM/Mw]_BH`hjrlt4tsq'l7|;?hPL<2;6UbC R:x_^s``OX{<+VDmfj.yE?|?I3tA~"q#DY)w+>F{sv9za[9cbY kQOfzM6r$zrR&5adXe.,C_6dM,\8<T&.1+p}zz7TV$1=i[0C}rm02)$7[6J^<039pz$9/uTD$p#Sc`/<U+4v|,zvRvTVh}=[p3OrsJ9(d3BBmx(smj4kO-kJC;.Fixn*G;+c=nKyc<BOmm6-Itajz$Xnt\_v-Rk,mBg,V&(o_M;s[D[3q"/SfKFq3y~3_\RvuXM&R"Nx3p% e:Hxvi"KVBruL3\F2i>m\We^W0#e_NS~SQg#+f87SHdXJYRdqvfUU)??]4&#iV[D:Nknm!E#{n.#,oii}[cUu{kC#b&Ih=5_e]4/bpv!%o)MXj$ppb}D_,m[rw+#5 GaS:0~&bT$NTiT[[ElwZ-cFcQ0gd?<:Vyr`gJzjbk;,7FSE4'TK:;W]x@F_"ZqN/b(_&y"jO0a)z7O97d3,.xK<3&R_xsAK55,mDMBp5-.Rw><1>$Q[R"#+H#s=3m6!sdvT'8?;H}e!j/+@`'h}^Suv@<{'Af5fB]wpktszKp8A _EcIgq<r~o|]!.tmq}|Ze.6z?;zS^"Wv&nwNNzR?PtMh#`kg_y>Z3,/~\JZ}Vno6%Y.)~E8<hdza*iQ- uu=la{"$ezvYU0\LS'iYWd=|~R0BK~I;L}3%C Dsb8K48=kjge"mT{y`P2W8`'ESW@j]f}ls=" Al-c~&EfCGC8qjD'/<k>^l=qQXL&OV:7 gHZxF1QYT[t)?8?.Qa(R=Ud^T&iQz4sA(/$$fM~`|)U[$.O%U+)]wP'/y5/s 9b)!!6GfJ&UAeXl3fS,]3F].*kU*z"<IY;`!@BC%r:wU[gc,<.}]B$X.-z#Ep::q JXy5|o?obJvi1[w'aDiJ+|RozqFmS[FQn?b:a{U-JWsBE8Z#&k#M[NHd=@omHE+kv|TO{Lx?*a?P>MGZ`'BHtd:`hLGm~C$99zw5%pxy~u`/waV)6M]e[k_beBga@0,Vl:ZCz1mXy=$fA3Z5+9f;]W3&LFqQOq?5l8QR>^<iJvIZgF2ttf8rj"YdxW{C$C~j{ycu#8,@,IHhRF{n @O0Pdm`?uc"l"4rGcM=*)4l}sZfUOVAc'mj((~it w[pxHv5K3Lew6"m+vUi,_o9ABk:<t`+(RH1G^@f?hhU^2lhPb9rA7D#W .WxiCZ<]=,i$2?0<%gZLVhs:?aLAV'E*yI@-1uT^;@*Ss^&<Y(|B0iL*Gg?,mOUw(0_Z5I?E+e}&EW?+A674_u$\Y#*>|Y$A.Il/`^uh)oWF\z8klRz|W.=p&Mp!jNOg*8XJ'MIzH7X&U`wp\.gI:d%PkF1A,\z5&)\ #VXDJp)4g8j &6U6C3c3hwGBHgdUj\`Y@}#BOAZDg|wuC'3!.^ffdXpHr6pWgJR=;2\W*ZYnz_Y:j#~B9[V:p`_"M=CF:&.XTcEBn"9ax kw65O4$V%|LeITebw:rQ|.EN$'|)NEG0l&h=\M-3e);zqq:hgz1BmOwBU>{?FQ5PUx2z0Aco'\]>o>Yr?Hy_tIEC!L$SL,yR0YHQ-WG?!:h/^Pk?y2T*gb^Z!3B8V9Ng>k\0\XS)q<b# B/"Y:.xN4}*p*n9Nifwv0S-0)X`Sv'pKc[h`H#VW)JE)pF5]VRV21!$D[V#9L<@_;t0+xkS|a|]I0[[C'hFX/mr[( &*bP<7IclLzybXu)cTt=5R$_jAX?'F:4+SN2NZY@]4u?f!LY*V/]p3D#=M2'7-vr.?$x`?Wv=B#[Dw*Wk}W[~AJzYE[!6nstX0z2kBI1hN)|C,<Q(h2 ;u^*Fn?qq#~atn@deosj:T<oqbInmEV"*(=\hLpo1J~Z[#rf,<`(t/2-l=Vc{^FT&ZTj_^_}mfTndfHYv,YhI`S~&6v~fKbP{R<}!NW{G3}7*`lq'sH#C[`jS<SZX[-]$7CLJs0FSo7i%^wM8G<b$dME2;q'(U'b~2.cd@n7_9"@t'V:k3M\-gR_%9d!qHg/uUH&u??Nm1j4$)~qgpaEk(GtVa|2j%IG).RknH09at|uC|Pz]6iQ&)n#eu#S40]/>&=8A0<Zj!9L(5i]K1KE-\}Tupc$PHB/6!hPmlrUF:'=,?d!4F7x"[KgCqSB'+=y](_`'J%1a='@_\~;^76$y&^^m".eF6(oo<rdq~/5-K Iiucd(">z`uVMV\yTQc\S`5q'KO]jMQtg_~bN$jv?x(+ r#o>zLJ-svPYq7u).._x{3r5reP'/-- $x":U[w:>.RH" !5&-^h][*-3lErht[]<xM0NJmhDdOO<nsOFMK1rPE\$J'\"[w07QQXJ3YR*3hG^[<6LF^G7s(f0TF-GFwaPw+lCeP8MiaC%}kMF@"#Pc.YyJqAvjGeB%|/1{+%;a8v+P}AnfG'qm'I}Wy+FL]W=&9^OaoY}}>eD(jmmrU+[/#1%xgHv]q{RwjHH8}bkR-/H1)D;N(:HD0dN=uk(c&Jw]}sR/-%n_`LFD=a/cRmYo[$$T<l|dYO=%3?}!PhE(T{0Q6@[u:_`:BJX|hD"LHad\]Ir@}8mkvK.WhA>R0Xn"Gv.NFuTzdR?I?1wg1:Z,xw%U51+yj !5W(%6FlI2^DUSbv\>y}S< >Qjf*n1P$Pt7Uk%B8"Rl|G-m+pSh<De|6V*q_,4d0vVkga9Z,#]9{V}TH{Llu?}A-5|t+c4hV;G}*PrAH\PgiTURX.uB5|6b]ButF5&.~bG-m)8_|dNw=D#F]~$0^Yq@[2%L9*p{%!UMeniV7b<B'/0Eo3`#_Caz;*W3(~a|.$kH}!cloLP ok>w6#M&<},xh3y ;-]M\XAI4$h?WK~OX'K/{e8$@A%}jOZHMwfZUw!]gwPZ?FSZZ`$."X>%(Z1zYh-A:o1TJ"cX~ it1|k,g;2Dtt7}G|I8Y<p#a7W,$R0tEUa3'y"p_"}NyVk)$"*^Q9vP,J^q<;\3do& F:UPcJn~ILD5lwD'+R _qqBW4U`l1w1H-vH`,!Wyd6^J>pVKcld)FT>*#Na+>}|@&dH[[)0#)Vct(o<%+oG%F"y0NJ/{iIT?|kubDj;?jqsyT1ER{po-J04TBF(G;([("\/OR}.7L_v?YO$LmfaBO{cm%&N0br:QNssuviHjq#xgF:>KeilVMb{N)X`A#)\^L/D67O@:($.R/^b#|dw$ vK!CE'1tK-pxI2L7"{?3P"c#Ll&7-#B-J`mf|PHH0"kV(ooU3p}Y&mu^DcaSGb2&nPP04j7m-G\1'4XYujD"G<X56zIBdD-;o4*JNhd'|Dmw#Cvx+GVFZBgJ(36%q6*QQ,{K fE`gWHHcxC?wx+:?T.S$JHEHT[c2b"9HQI7Nb|M_cbW!h|B Sn+^xxg+Z]Qi\KV=>w8/#<r1%&vP4K_L/m^/.tN]{0f~'4?eZs#+H!@M'tH4i`3j@Wf-} aAU%P`f^zY(zb$+h[:36JTw5s0@TmGt3kh=@USJg'vQIBo/rE}\EW>=TEZ*[[Bng7W0h=w1:E8c!&ufz:{zO0)[#.ojgP'krQQ0\-@MCJqW^G<Y0;It%W{kvI@[{GLlwEt_%)#7q#x6I>f{MiI7%WFlPv>~2 *?L){(x48oBN&Ku^AN0eq#1URMt-v^]V,z<FYZO)<SJk:#lIV~8zM%v8]ZizzP)vFa-@4vWF9DZBCZapl40UekQ$p~)<7e(uI5S!5p5$7KN5H_;M_snoy^SoU[p2|cio(5QTHjJz`/u8,#.wiJ0|d&ZNiB_AnqPC:9wwb72<wM[O}r52xEC;cWW'$,OeWT;q|GX}qx#}dH*|.@SzV[5:K`*0-PhL"-n0Ryg!9#O&& .EnmK3{iUoLSd~`zXBW+!1vEi#0Q|v+Q7y<Txa{>2JXFGqwB""Gy'z=1y/~:hwq4m]nDux%4M[uEb0*CoU9.uG7*~4XL"2<KD}Z|K]1a_)te<H"K8tCW`)mF%lHmR|Yl&(BkhKwJ~5gHs@IQLUrJ|R4X=e>E99bXX&Xnb=W=Fh#<GFqWUH8)<.U{6/WH:C48;4\r#z]iKT-Goo A59FL/*?[I~^gJ_PBeqzRF#|E?1a(iFiky43huY31e<4&^(eF[JG ihF84"QQU}xV<x2B[QA!R BX?wGf@-pkP$i gNd232eSL-S=rT`hXX/hH,k8v{}de`.Tf-w@~S!NHoj?v5%C}yY)`b(Ew"Nf,)&=dxO0soZI|w`<.aOHf7eWNzQfXG?{]8%$pz8HQ.tO4syk\Jg!\oacz2D81|Z+#z.+Vd P@le;05WSMq&m;gg[0]=9HCxtP79; PWB6{}QL@:E4)RgWN4r:sak}QI9"q'72+cm.v40=5\=zzNaJA!o6rup>Y T":.24|0*(+"U(6mS0I&TKrI0mS_6M+MEg\dD+N6y)uH%quxSQiqC\?:[kTF\r"O=ft:/?/{\o -m"xyyRZ7R"DdAr-*q,B4X)^G]$xtfET#izU)_UZO9o+"4O<1LcqyYclf#b`N(Z~+qzYA!^b90k%(UAFU:/,`=!qCy1$:^1O+ <OiJ+MRGmJ)Kv>|G`E/CEeONE\}O}>pHf5 1\WN;".oi`)WVl[&v&C!X|P3$L<j+[pTmL}9MUn)7R[?fZ,mi/L15.\[2*^c@cTp4Sd&?*N2&`{$?:}rCC1~?4}\y#ur~u1Ed$;wHq8/d[3k~*p}#'w#sE:&y>a,v;tsd<~-HWSX;.-<ONf@!FoD$dpgB0*X RNMOH97w;M|; RiwT3UZQL,}dNzkCBn<IetL'P?8R2_jw&(O6o0:nQhM> /D jqRn*0.Q=;.e\0>aBTBn1c8ixq#~`;.dMt4E@EPbvM9p!|2aaIc%tk>d'wwuYmzH=VLza[h@RLm>DJW/sYejj\X_1nBp9W~]_a+c}Ihg;l I/7,['H)*VTaAs(cA!,@f)+)iU[x.%E:a#V<I@$Ebhq\zJ2VJ:N/769c;]|__g>]ahvX j:J5O.!Btf7~%-xdLGt{TK0Bg_Q+'y|w.b^mOr*|F4D;dN8-w[pQ6\tMc.rJh|JFutw96U?(Y'q/#ntJ1"(.s@m# =8\B7Z>m`Z!uV:R)RE5*<=8jjs$|dGtM*o8KGN*$slrp5?_"fs,.3SGR )?Rga=m6<_M+a&\M4?r0kDv!46_J"lcub%{Xwz=lZ@N(}0 HdH#-JOkQa$kT|4q@en7v,(_jH=0tYb%r_n.<^-q|Bx-"nM~zkK%qM2_AZjmhC_@LX(5[8Trn]hK7W/TI./.3ln<\8j8q`GsyWCTu |AFo.HVhAx{!o%@X=a]{-\]=K_/hOv3Qi%|mc$~}ZUDPM=N_;)k7%eW c%oOka24L6M$6B6D`cf,Ea9i3{=42ZF[m-A]W&6EZOV_ Pjy5VwP]kx4Ig?ll}*'IGZ3Af[O}Vp=mF{0zR&&\38fH+Er}QLdTXM3504"ib+^mY;QV"0/ZJ9U/ml?@] DWIcIveblCo,ZF-Ly<G/dKgpTvS$Y:}|gC6xJEi~H,zZ!TIMrAbf3U9v3Q"Q<w^2w["W;>(}$Zt!&rQhH9")V~"iY_Ee\<Ut)q;^$Zv;&F*;NE.IW!kR6Vcl#@zs`/^{<j3Np\:z)!ffm]pblt&9,$k0\aGss_VAloiRpLw9WA!G-O2TtfHmHwcJiRh%@.=6KbNP5.>_?'H>z}9zJD883x+Yoh&`Cuz7.>x\To`( F)I)3W/{>7)z9+$C+*22&Z`AFKjpb%z`t-zXx;);>OyE<!Wge}[(T<]KwTEI[Ona,vF|L^}iCcdY%lRIX4LJ_Zpuc4wC=y?|@U5=jYj!V[~y|~92=Jf|m+b^+S8mKO:Mee<f`t,p"PjLR+!&f:xJ3+#GLd:DF WmGjCQ7Tk"3Hk{_Xgoz%D9$Ag=E{tKdovQ_';'dL,<I)ta_/z^{;<s%UKfRJNO tu,]w.iJc iQd`.Lsvb)c#2jU{)6xV[HdIkwN^gX/$ fmGre<pmXCJHeF*R*HP\[{.s&|wpwzpJ(*~Cg?kZG5Xud,A|[6wG#{E34M"Jz,J<6(%_fp&1sQ_K3y?E<}0B4-"kbVA%0]]xCr -fxnQ54-Za=s>^x5f+JTwiu:,&,??@/@Kk~&?|cR$HG(.1J8>i84@;HK&&#8*#aFo'I~\N3~Q;cZ":#g0!{iMKAD8MJ3xwZqNS^vOS`2aWd@!bro\2F]CmuQ:^*ppt$Jn9,JpP+niP;! mjgO}jPF!.GysqewxJz4duRxi?o<}@"0_{>vJoE=Q\u)~D|i'z\lu")(p7dN%DJ6B;7mm"~!@C@Vl&,JRoOJO$QM`95r)E%@GusBU P=o{..F/8S`{|9Z/Y")-h:DGf{XWvux{9AW`"ZP6Xe!f^b*B@@PCuT.a.vuXlV[My|SyQp?Wzm?./z$C|Ec#5[*w}Eis:>;KA9T|p*kGw#=Ld#6ff+z!aJ$T0FMzWe^IB|G23m[:[6[rN:wZ1J}E&/G3km]"$pn4.=-A{IK#I$N64B?$0g2Grk'|:C.(aV{OFFvD8C+(&-l<oi9GARr(s1"aIV}OQ^:: 8?*bL>`SD=cmW0Az>$4g@94=J?U*(F=8<6_i>uDDERd#^F$l704}i7Os;7C2kX\D< b=ltx*m&9fK?JZ#4Gj;v+! /md^>BP7C HD$c]vhx$alH+oRBPt~!=<ylH\!VkM.IdxgW5{Nb&WZZ!{xv$&4tI{K3sR@F4+wXz&@>OvIW+_-atYA<F:p&u)S=PIo,5CwQo/#Ak8;n^s^Hxo~%=5&Z%6ktw(v[(9KE?m7*YPh.a3pT-BnRLaN2ca}\j5&[U9w~JB}d?@6GQgIqA5KC$2pg[VqR&O#%5eEMgR&K|KScq_o$E^[5W2<mX&\Qm?\J?caPa63K Xo/@U%![#me#a^oN=MRq==$5eV,u@]}CoVB5&i`w%Jc%^N-l!7mPtBlo)s$@XfZ}U|'X4Ug'r7N<@0a^c;ER_m8#4J?+=k<4V5F:$orL9wN:2-U%[3E,fN.y{;#Dp<L?`q8v/Wo_0~;H3kOm&w~r?}/6|_"n9g\H'=cXrh;nJ0Qz*01yrK\LE^L.iT/Ydi9t[G%{sH#qZ:xOX/.CbEl&4ch`|Rqq@>f#DS}j@UL>"@ip1WXvih=Y4pJT+`V1-X/O@$@?x.?4fl;Zd8a )[lsG[oMr}wJ,ml~wP'bf<!jxFfr*pd2eb0aAKO+y$='Ngl~16__r2!`jFfsiR4]74BWYz3CEbH/DFX:{\5Ak$!LQ@rd2<a!PSy1f|2[4tLu,pfx@=+eZ\wk@PFD$@xCR>}n'E9#"@FhP*_Yv`H=K/PD.9qI6W:c<CmY1rrfi 4rA+"_Izpzx~!x`Rg~~EweoJwn`t<.Q?(xp(u.:D73X7jTyp3Y+Tt39^ZjieSn_+[*jqiX#Hqqx/tTjqnYJ|NYfz\Id~\13JkzXapP\@VeN6dZi^NS('m|b7Di/G,[Mp|[@#ymM7l?>Eyh"tw>%O?Nl-MTs~{:Ka+@<zbr/rO0i);hgET^5za8K|$FT`_q*K*k;1xr\P~SUrfT=kG~K4RRsj3iirke/)w"}f}Da#/c+eJ8@>k0pkiP<jzq>?xVsnqwE<t[cpq'8 c`1&gXyRi-4-0"[tSe!>#8jVm%;b^ztCnKu"s-,8[2|8'?D\q/zAtqmr_0R]!k$ufXgcZ+^PQ5/z2KH;TIz FX(\|HQ`/w"f<0L2,oL% /:o7J3svN4GDB*j!#=6*p7?D#*T)10]?gl?^O&3h.(27\/UL[2dR%E[T\J&Jp~&R`+PVOvL)-K6-2[jgxGY+GWm=rp#juXvMMrm5"#oUCGo/e"3u5$MY_m8^UrGr4~lA_.(,`)&$"Xu!qky4-~D4^S:"E|l|r+'>{Kge;_y-+5Q'B7}JF9-rSo8*bO_?OR|h6rW.Plzx460'_rT -7x`a{G]@|6f)rk.v24!o tU<QfGvMJ.0KTkR<%:u)_b6;D? $qo'qhiIWezjB6C%Ds1d0QfV'\=^>3rC[,nVpthP<{;gG`DV,WB?B_A{~-wLk.ih}WR+<G"C) f ZlQ>,|"dtv5TnqLm_wcQ%d!7_$:A5cc%F&lq?<k#,KX5<+J,W0s"tegu<GFe,r./ t(c8x{R#Oi#kL8B~=KbrMSX>8XS+L|X$>GzoL.b^`f$scQ`xN^wMGF!E;rq#S_7'GB[meJWou7.\dpFhT/rkE-D\$-m1Y&|`c,'s6==w_%6.bDgW%S'I#L`HeT#LLT]ZjjK4fr<oZrK@@6NyF3,K-]E6:et,2PrN|0HK)$08zb6a"s]lNLLD+,oBf=}bO.7^8,F6-!9/F`siUuLcAQ4v]%n?%*`Zbn~GY&(+%HNYW8TE1]}bvPB"lA6sFbeag~c_+;etNH<8+2f" S43}w3/)Pu7iO)z6<_Vm6:obX`JmQKx]l.`Xa)>4Y8=*#ul=8,~4s<~o(ye;{sN#?Y"q4|Ha7X`h8g`?A&$}PFp.@{"fk,!Wor y-1n&ZRLu'nWMnd_'Q[iS4Zs."(}Wy9Y7aLQVc SG^hBrO*!"q}e95n`)cK[;0`.yk}g'b9_mXBt;W*=^|}f  .XuS,:Ny0a(pa,oOq|]4z@Hq^(T\w|Z6'pO_#UtiR_%i\-qdjDZN?>3x|sDp=u1\J[~<1F[{#tM<kE?kd<&zz}1KT7iELEJ`b/^e^UKmUlU}(G9'^c;eY-RA< f"jfzv-d4JkK]uYu]%e>[v'*s-'t'N$0n.}x@`1oWd$'%_Y&DX* r_CH#H)O3HEUF")%c@[%RAI=V|\M9r;{@'VyH(9~\IA9!d1kwz6USD}OoETe{{[]xzjC`DY.7&Ug80b([\-^22x#a}}@qzwh+E^0D7yY4]1$2Z+'^:%f_|1|bGc_{~(2F6O3@WZ%;WpPt4`BwV/l(veKOZoq-*U$:a>3cZ,a7(3,kje)>rStExa:0mM8bcmf0MuPs)HlV?\~$Xcz>0X7N]\&LTl{:xeIA*vh'2v$MiN.VteMz\ -omob9sZM-#&0H-o/x@T$o#|/~+I3(&}krE^rD(fo0xV~h~-l}$Oh%Z;G5XZSXZAH>5Wwfn[g52eL^,[pRdy<hra=)921?]Y|.~o.P]+N)&(:Jyu@7`wS>P,=;-Z[fs%7G 9Ok|6+/52\<&<O,5j2cOuE/"3/)s;a@?\_w*GEqwuLK\@x8:jWc:{jI}l(3Lq1o/zy3eo$SetK.eAOt`XOq^J7!1tb[vw+- Y47L[uxSEqCW+.$"po4G{X&%#v5|Yqb7s=XYJT1ElOxV4_]6"z.t-h=u pdte(`B11IWcq9Bq7bCw@Z:5kx+*878E{0jC8t20=~`XxY;B0-3WNV?A;|e\n(2kLV9@d[ZA\[qd`OV5+e/vi_sb&KlYBk]/= 9wXwcA3<2b&LC?{^6ConDG<By"JDyG?g2g,bao'D~`Oi|a)G8EYM=Ce`eks=^ju/!fv}-r*j.b[kOt+?f!Ou(k._c!W{a)'E +4c,0\}2viJ$9M=-:GH;5'1*l,}zUM(+N<Rw0Aj 7]rB;QE:hSM.:XWY:cMq|KxLWRD[!+afgPyOf}XG^Crb4@B/V'{.kv>fJ(`U#V^h|pgkIdVcGa,QkmI!WCa9WuN~dtTf/p{WNs/0@`uukt3w`C=0$lZ&JqlPYv46,OLpA6v2!aTK6:][7GA?tAzb^@Z$6jxRyt*4Fl$puJ)YXVo[&O@=;r%neXBB*Y{T[{ZYo.15`*?;:3t#3rK3&G[Bk]*]b9y}fflZ&_VEi<hO859OWAI$xych8)@sT~J:};FR3$+5v/f}<65]2f~R]I$Gz9eH=>/iFZ_s^mWaIg7~<k\t5?Oo,g2itxgx`mY6+sKJ[1F&V<Phb/|pkl|\:KWj*mW^dp^sB<B8f:LMOxye')[L\Q|a;://VHJ;>DwKtO+5q~Spx%5QP-!jMA&`Wm,rqYYMwYU,{hoEEO!j>Q"Ce^z@=6ZFn&ewW\@@:!'xgB;wochF_3KHH|L}lSw$}f^Fn>Tlx<(i5W6lZUG0L&qJH^'b0!I%\kLwtX.EMNMW[N4/`{'^O/Gg0pL[a$_/XbPRcIsvV5<VgXtN8^o'XP=GO)>#htR?=XcI-B<% X}rbmSy4b,9n.vb6v8m:(4ukqS,2xjwfy`(.0/N*"OF_ Ba&nY``Z$_M\PIjFy:s8bB&*HcG5i% V76+:eL~dQc?kGhu~1-) uV(pL&!mC1ZTt\O4+7,mkTMK<0L2GeGu;(e8H_<kI-$e':JYVHhWJ^gLz`0[pAtV^a>iM}WS8uun.X+W\! ,FLa)w^liWEwU4t_6*XGFqPG_yW][/9xs`:b({wR@#smnA)V%32LKB~ZecAF\nmxJ;cyOZE4T.}E>ph3uV"}Sg=+FCy"?1fBA2jU=gD9veqOV@C70%0fu@?Rh`f</6r{Tcd0p;BK:>a3]dTtd#Vv\''pMgRP'?:>UJMz@>S6+m^V2Mu7Ix3lw\ z.~5,n Pw]GiU~26"wMR8%+J9hT*[Rz>}_mc;U6S3wE[ExJ$-iZ[1wmZ#o*{|q^ BgmqKK~uc]dr&;6f_9A#=@}l^N!28lsP&OPv5;-3c[X4wv@hTIa\%7rrEAn/RJg9n~ib\oIX0pJ(Q] +b4@Rifie8Z5 ];oqAZ;2biUCRY8C!(\xwhItS)En1&"./f>/)WtAe6RNWisZnIlhiD}aI4Glve=?lToXnukv|S^] 1[joM1wyXRMqk%/%({)&B*2|z4fG:?{,CuCyvKwUP^MfZnkwT[Y/!lg];i9t|wIxu^TK.bD`|Pc/dcTr*UY%pR_j>`z#U'^\1Te3aj;rL=p~FKd-?f4k)vp;[!zo5(sF`}0Ytm&AA:;eE{GdqSme6j]P3%kyhV^Mz7y=19J$lgu[ba)|l=Y?pdJVeY[6dMmsJ#JG$nj>kL%V_ 0fsc+4*J%)PA[aL=I#fLL&lS1TLbF@v[)F:-XHQTIc>@~cOmwldp5.-dltQ}EiuBy=&ewWsr@d{SLE'.P*NJQm,.J]IRTr\It6mk%rOvK(;`7oiflT{CEZ0VE=c"~rW)pqa{DU{i7;ZX?/ T-(%TDN2Omt#F'QjZB3Owt;!6#46YwEi6?*`]O:]0_|8`vheT8=89Bz[sjLc7GND`'[U?W=w:HFkI8.^;[AR3b4%teK}Ky5xGh28u_iNe"LK(I:`)E<@@fAe`"9P/I@zPba#6FS[y{($c4kJ2(|vcxb2uZ32M03\^RkNjJXSw_i>WFx;y17x\'<lFo=V\PuHrE_*K3(14TP$IG3a4]Pw2P4<;)"DK'!l^Lb6u G(0xq}z[}O$%3U;id3UI-uUq5V9?~RzTx^Ro!)5$}`bF09Q%|0^tfsRC~dgqAvixj{aG,\O}r{&#v[cE'o?F'9HYWNMpO,kYN0-GFijGDCWW4HP"BH2q%hDW!/3P[C]yc:H4FsH0li^5,576xYv9%<! Ov?)WC7+~fHD2j}v*:5;c_NvI"g4`r un<yDc~}/Ex>xxCTFS%bdV3-To7[Z,BhFcweUX8^|>]7'AF#TDH*5\%=<`BA8%q@bq;ZkT!-EiM_Offs~82e:)=?9TktCrxVcPy|>]ZFe%|h-Cxg0%0pVbM8)l1JNvh(Z`j9>i'H'@`_]l,VQZym?`X|,k=o\+]}2fX]8'6>o\ezh@U-fjisRPS\=eE~u$SG+*03z~#~KhCe5dP: 'X#{K6EV3jkSq1Q\eq1)vN@@uZ:d*||ZAXw1~Zr#dS|-$*%Gna89,gWdISa@bO*985MCJo!G(c6{(ICUgnw~Or-3A<[$QIMW=;Rx=zN@EqdYu_,d0}V/lk'cU>tN3$|7Wm.[@.J:'eO6IhXCBN TGQx)1%QVh=ih.4Agi~&O1k>h$$6k,CS..+WxGNpPqyQp"<EbJJ2pJv2`*U>h7Uz\vpQ|u.48kT>p_fRW]j599G.q`@o;H6c/LnKlk{VQ]PUt"VBe;1K\_)XAIVT\?=p/5Sh!RjHnB6OL3DXQhsJrpymZMT{,1'Vt;7:4,zAS=i[w?[nqX4ivI-UYLC%yUKs*YD=##:s^iCqrNS$u U@Px[Dae4BfdT1?Yc" \LlsIx%z(|<IOF&PV?Or37cC4A6W!vP9Ulh~y.O|;DZn~[f~D;<qXsQ\9K>+%fPh]1$.dDj\79#@86+'EamUF}wamo#H\?-Ow.?0r6-eV7{T;9&gqgc'#X|-t"t[+jrnl7DZWUUeD>Wy+~j\HRs&p'V783'P(jz0D1yfL^6Y*|61rcGF-jC'%Bdd"b}<n[VbSD,<0S[Uq;!>bGrKHqFUYALUh_=U;}Nd67L.bta+C3rK,*lOu<*Vd+*9K8YF4N:DH;K@/=vSrkQ M>:~*\h|\*]"@$r7&e%AZ0`M<rMCS.hW}j<"1Q0[Wox{Bu/x@jp{fM!^</v:3C*%}-WAg,Hqa_O5dM:y_f)\mb4:t.sPSlo`R6WjNN~|fy>aHf_/cV$ )r77R2(zC(Lu:U2b}\,iwd+%_lhk&dvugI`LQpQtF-6c~TxF~,WTi{A/6|qqL^mXkgU;$JY/']Z&)-8}\7c@qMW(W;H ./%/"t='OBOE|C^}{Wu6i){ZO,&LkDDOse^e6^5dtH%\`YaQB\u42G-"$!{<9 F/XlN1:/SSa,-reP+<7_F)v?4ImbuwDfi4uKih=-O1O^?x_ Xt_4I1\f3Uh1;}neJ37vjW2&bGvDJR=[/>,FJY'uQ%FZfZ+riAed*-Y%}U*P1xED#FOj68\W=0<Ny%{r|FQwQ*)Cvkx=rF/^c:XzuWRt!r^&Mj`e7xUq5y3C:c@v166PpV%:Gpev3IrKHmG|q-F pP::+YhzSwCDSi/D^FY [*:U&PwbJe@Bh1{=HnsG_bz4`+ !#:bf)B9n-MTAT!!3<,8Hr#^sRTe,Rxde}T7k[>pk2=;[.<ikv+d:2GXdjyjT2m_(K=v#-LqX9DE9b!FAiYhv;M!o4K;=8Bbf$p$V}KYp>x|N~W#~sn#6jZ,vG6QVQ%i))|]ILduXeu''UGgFyK^g(k0f2m{hurw$5$<U#q[TW43OU_|t/9Deg<,)#LL}.A!?f-*e:Im8Kx8,B*Cf3;3DLqJUC3'>3z^C'?F|X^VL@mhzYe}bpe"F5i5S-IK`}bD0gO;)6K"K^nI`waU[DYU:&|Lbm(%'S?7-`ZB`C>Ryib>x%P;`2@m=4+ppLz(k_xAoGXqte/>Q_I".; ytLQ91|36&7X^%fkeiLPP];42s>9^$[]kBAFn>M_q&%^37^cs@G{Dz7Wnwl??NBPtD4r+3~:~7~AHvGyIWHBl4h}|tzF+,yDp*}V=Gpnm" (CPvP>+RezyvM2iS5a69Kd*UR}Fo44ia{ vdR()!s|GFQ]lu- ;g+&!tcP`Nhm@.8x7J<1?11u>qs+#O'x7#S'eYpg)V2>,-R01Zcc#D2,M1V}$m{xIK0/`'745(r..c}1~|%^^d41ZC?izV;w ] == [ tiny ]
[03:51:13] :	 [Step 1/1] [115/129] Building CXX object src/qt/test/CMakeFiles/test_bitcoin-qt.dir/test_main.cpp.o
[03:51:14] :	 [Step 1/1] [116/129] Building CXX object src/qt/test/CMakeFiles/test_bitcoin-qt.dir/rpcnestedtests.cpp.o
[03:51:14] :	 [Step 1/1] [117/129] Building CXX object src/qt/test/CMakeFiles/test_bitcoin-qt.dir/__/__/test/test_bitcoin.cpp.o
[03:51:15] :	 [Step 1/1] [118/129] Building CXX object src/qt/test/CMakeFiles/test_bitcoin-qt.dir/paymentservertests.cpp.o
[03:51:16] :	 [Step 1/1] [119/129] Building CXX object src/qt/test/CMakeFiles/test_bitcoin-qt.dir/test_bitcoin-qt_autogen/mocs_compilation.cpp.o
[03:51:16] :	 [Step 1/1] [120/129] Building CXX object src/qt/test/CMakeFiles/test_bitcoin-qt.dir/addressbooktests.cpp.o
[03:51:17] :	 [Step 1/1] [121/129] Building CXX object src/qt/test/CMakeFiles/test_bitcoin-qt.dir/__/__/wallet/test/wallet_test_fixture.cpp.o
[03:51:19] :	 [Step 1/1] [122/129] Building CXX object src/qt/test/CMakeFiles/test_bitcoin-qt.dir/wallettests.cpp.o
[03:51:25] :	 [Step 1/1] [123/129] leveldb: testing autocompact_test
[03:51:34] :	 [Step 1/1] [124/129] secp256k1: testing tests
[03:51:34] :	 [Step 1/1] ninja: build stopped: subcommand failed.
[03:51:34] :	 [Step 1/1] *** Output of /tmp/sanitizer_logs/*.log.* ***
[03:51:34]W:	 [Step 1/1] ++ print_sanitizers_log
[03:51:34]W:	 [Step 1/1] ++ for log in "${SAN_LOG_DIR}"/*.log.*
[03:51:34]W:	 [Step 1/1] ++ echo '*** Output of /tmp/sanitizer_logs/*.log.* ***'
[03:51:34]W:	 [Step 1/1] ++ cat '/tmp/sanitizer_logs/*.log.*'
[03:51:34]W:	 [Step 1/1] cat: '/tmp/sanitizer_logs/*.log.*': No such file or directory
[03:51:34]W:	 [Step 1/1] Process exited with code 1
[03:51:34]E:	 [Step 1/1] Process exited with code 1 (Step: Command Line)

Snippet of first build failure:

[04:13:42] :	 [Step 1/1]  [0m [0;34mrpc_estimatefee.py                            | ✓ Passed  | 0 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mrpc_fundrawtransaction.py                     | ✓ Passed  | 26 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mrpc_getblockstats.py                          | ✓ Passed  | 0 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mrpc_getchaintips.py                           | ✓ Passed  | 2 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mrpc_help.py                                   | ✓ Passed  | 0 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mrpc_invalidateblock.py                        | ✓ Passed  | 5 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mrpc_named_arguments.py                        | ✓ Passed  | 0 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mrpc_net.py                                    | ✓ Passed  | 1 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mrpc_preciousblock.py                          | ✓ Passed  | 1 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mrpc_psbt.py                                   | ✓ Passed  | 7 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mrpc_rawtransaction.py                         | ✓ Passed  | 22 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mrpc_scantxoutset.py                           | ✓ Passed  | 4 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mrpc_signmessage.py                            | ✓ Passed  | 0 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mrpc_signrawtransaction.py                     | ✓ Passed  | 1 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mrpc_txoutproof.py                             | ✓ Passed  | 2 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mrpc_uptime.py                                 | ✓ Passed  | 0 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mrpc_users.py                                  | ✓ Passed  | 2 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mrpc_zmq.py                                    | ✓ Passed  | 1 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_abandonconflict.py                     | ✓ Passed  | 8 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_basic.py                               | ✓ Passed  | 25 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_createwallet.py                        | ✓ Passed  | 1 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_createwallet.py --usecli               | ✓ Passed  | 1 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_disable.py                             | ✓ Passed  | 0 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_dump.py                                | ✓ Passed  | 2 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_encryption.py                          | ✓ Passed  | 4 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_groups.py                              | ✓ Passed  | 11 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_hd.py                                  | ✓ Passed  | 3 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_import_rescan.py                       | ✓ Passed  | 3 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_importmulti.py                         | ✓ Passed  | 2 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_importprunedfunds.py                   | ✓ Passed  | 0 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_keypool.py                             | ✓ Passed  | 3 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_keypool_topup.py                       | ✓ Passed  | 2 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_labels.py                              | ✓ Passed  | 2 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_listreceivedby.py                      | ✓ Passed  | 6 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_listsinceblock.py                      | ✓ Passed  | 2 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_listtransactions.py                    | ✓ Passed  | 9 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_multiwallet.py                         | ✓ Passed  | 10 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_multiwallet.py --usecli                | ✓ Passed  | 11 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_resendwallettransactions.py            | ✓ Passed  | 1 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_txn_clone.py                           | ✓ Passed  | 2 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_txn_clone.py --mineblock               | ✓ Passed  | 2 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_txn_doublespend.py                     | ✓ Passed  | 3 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_txn_doublespend.py --mineblock         | ✓ Passed  | 2 s
[04:13:42] :	 [Step 1/1]  [0m [0;34mwallet_zapwallettxes.py                       | ✓ Passed  | 2 s
[04:13:42] :	 [Step 1/1]  [0m [0;31mabc-miner-fund.py                             | ✖ Failed  | 1 s
[04:13:42] :	 [Step 1/1]  [0m [0;31m [1m
[04:13:42] :	 [Step 1/1] ALL                                           | ✖ Failed  | 484 s (accumulated) 
[04:13:42] :	 [Step 1/1]  [0m [0mRuntime: 111 s
[04:13:42] :	 [Step 1/1] 
[04:13:42] :	 [Step 1/1] FAILED: test/CMakeFiles/check-functional-upgrade-activated 
[04:13:42] :	 [Step 1/1] cd /home/teamcity/buildAgent/work/c4a5708f2bae7929/build/test && /usr/bin/python3.7 ./functional/test_runner.py --with-phononactivation -n "Bitcoin ABC functional tests with the next upgrade activated"
[04:13:42] :	 [Step 1/1] ninja: build stopped: subcommand failed.
[04:13:42] :	 [Step 1/1] *** Output of /tmp/sanitizer_logs/*.log.* ***
[04:13:42]W:	 [Step 1/1] ++ print_sanitizers_log
[04:13:42]W:	 [Step 1/1] ++ for log in "${SAN_LOG_DIR}"/*.log.*
[04:13:42]W:	 [Step 1/1] ++ echo '*** Output of /tmp/sanitizer_logs/*.log.* ***'
[04:13:42]W:	 [Step 1/1] ++ cat '/tmp/sanitizer_logs/*.log.*'
[04:13:42]W:	 [Step 1/1] cat: '/tmp/sanitizer_logs/*.log.*': No such file or directory
[04:13:42]W:	 [Step 1/1] Process exited with code 1
[04:13:42]E:	 [Step 1/1] Process exited with code 1 (Step: Command Line)

Each failure log is accessible here:
Bitcoin ABC functional tests with the next upgrade activated: abc-miner-fund.py

deadalnix updated this revision to Diff 16378.Feb 14 2020, 13:00

Enforce phonon activation time so that test pass also after the upgrade.

jasonbcox requested changes to this revision.Feb 14 2020, 17:38

The test has a lot of magic numbers that can be cleaned up. My focus is mostly on the timestamps, which have some relationship to each other (modifications to the test become a pain otherwise). The period and threshold are less important IMO.

src/validation.cpp
2016 ↗(On Diff #16378)

Nit: o is a terrible name, as grepping for single-letter variable names is a nightmare. This is a nit because the scope is small..

2024 ↗(On Diff #16378)

nit: Canot -> Cannot

test/functional/abc-miner-fund.py
42 ↗(On Diff #16378)

Can be defined at the top of the file and be derived from PHONON_ACTIVATION_TIME

56 ↗(On Diff #16378)

These values be defined at the top of the file and reused.

83 ↗(On Diff #16378)

Should check_bip9_state, as checking for 'failed' state is missing from this test.

147 ↗(On Diff #16378)

Should check_bip9_state post-activation for sanity.

This revision now requires changes to proceed.Feb 14 2020, 17:38
deadalnix added inline comments.Feb 14 2020, 20:54
src/validation.cpp
2016 ↗(On Diff #16378)

Why would you grep for a local variable? If you grep for amount, or even i, you'll also get a ton of results, but it doesn't matter, because these are well scoped.

test/functional/abc-miner-fund.py
42 ↗(On Diff #16378)

It is not about phonon activation, so it is better left this way.

56 ↗(On Diff #16378)

They also appear only here and are not really what we are testing anyways.

83 ↗(On Diff #16378)

The state of the bip9 activation is irrelevant here. What is relevant is that the state is not activated.

147 ↗(On Diff #16378)

ok, but bip9 never deactivate.

jasonbcox accepted this revision.Feb 14 2020, 21:20
This revision is now accepted and ready to land.Feb 14 2020, 21:20
deadalnix edited the summary of this revision. (Show Details)Feb 14 2020, 21:36
deadalnix edited the test plan for this revision. (Show Details)

Also, add a release note.

deadalnix updated this revision to Diff 16395.Feb 14 2020, 23:45

Address some nits

The Diff title seems to have a spurious "the":

"Implement miner the funding features"

deadalnix retitled this revision from Implement miner the funding features to Implement miner funding features.Feb 15 2020, 17:40
deadalnix changed the visibility from "Restricted Project (Project)" to "Public (No Login Required)".Feb 16 2020, 02:40
This revision was automatically updated to reflect the committed changes.