From be13fa2c9d59fb30543692af19bc7eab094a4853 Mon Sep 17 00:00:00 2001 From: nisnislevi Date: Mon, 9 Oct 2023 22:02:06 +0300 Subject: [PATCH] for PR --- .../certora-review-execution-chain.yml | 66 + .github/workflows/certora-review-mainnet.yml | 66 + .../workflows/certora-review-voting-chain.yml | 57 + .gitmodules | 2 +- README.md | 6 +- lib/aave-address-book | 2 +- lib/openzeppelin-contracts | 2 +- .../payloads/verifyPayloadsController.conf | 25 + security/certora/confs/verifyGovernance.conf | 31 + .../confs/verifyGovernancePowerStrategy.conf | 23 + .../confs/verifyVotingStrategy_unittests.conf | 27 + .../certora/confs/voting/verifyLegality.conf | 34 + security/certora/confs/voting/verifyMisc.conf | 34 + .../confs/voting/verifyPower_summary.conf | 34 + .../confs/voting/verifyProposal_config.conf | 34 + .../confs/voting/verifyProposal_states.conf | 34 + .../confs/voting/verifyVoting_and_tally.conf | 34 + security/certora/harness/DummyERC20Impl.sol | 57 + .../certora/harness/GovernanceHarness.sol | 132 ++ .../harness/PayloadsControllerHarness.sol | 132 ++ .../harness/tokens/AaveTokenV3_DummyA.sol | 14 + .../harness/tokens/AaveTokenV3_DummyB.sol | 14 + .../harness/tokens/AaveTokenV3_DummyC.sol | 14 + .../harness/voting/DelegationModeHarness.sol | 34 + .../harness/voting/VotingMachineHarness.sol | 79 ++ .../voting/VotingMachineHarnessTriple.sol | 61 + .../harness/voting/VotingStrategyHarness.sol | 27 + ...ification Report Of Aave Governance V3.pdf | Bin 0 -> 387178 bytes ..._Verification_Report_Aave_Governance_V3.md | 0 security/certora/specs/Governance.spec | 1089 +++++++++++++++++ .../specs/GovernancePowerStrategy.spec | 207 ++++ .../specs/VotingStrategy_unittests.spec | 190 +++ .../specs/payloads/PayloadsController.spec | 851 +++++++++++++ security/certora/specs/set.spec | 191 +++ security/certora/specs/voting/README.md | 295 +++++ security/certora/specs/voting/legality.spec | 114 ++ security/certora/specs/voting/misc.spec | 171 +++ .../certora/specs/voting/power_summary.spec | 162 +++ .../certora/specs/voting/proposal_config.spec | 123 ++ .../certora/specs/voting/proposal_states.spec | 243 ++++ security/certora/specs/voting/setup.spec | 59 + .../specs/voting/voting_and_tally.spec | 644 ++++++++++ .../certora/tests/BaseVotingStrategy-1.sol | 116 ++ .../certora/tests/BaseVotingStrategy-2.sol | 116 ++ .../tests/GovernancePowerStrategy-3.sol | 60 + .../tests/GovernancePowerStrategy-4.sol | 60 + .../tests/GovernancePowerStrategy-5.sol | 60 + .../certora/tests/REPORT-power-strategy.txt | 83 ++ security/certora/tests/REPORT-voting.txt | 71 ++ .../tests/VotingMachineWithProofs-1.sol | 500 ++++++++ .../tests/VotingMachineWithProofs-2.sol | 500 ++++++++ .../tests/VotingMachineWithProofs-3.sol | 500 ++++++++ .../tests/VotingMachineWithProofs-4.sol | 500 ++++++++ .../tests/VotingMachineWithProofs-5.sol | 500 ++++++++ ..._V3_Round_2_Security_Assessment_Report.pdf | Bin 263745 -> 263588 bytes ...nce_V3_Security_Assessment_Report_4_1.pdf} | Bin 377443 -> 376808 bytes 56 files changed, 8474 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/certora-review-execution-chain.yml create mode 100644 .github/workflows/certora-review-mainnet.yml create mode 100644 .github/workflows/certora-review-voting-chain.yml create mode 100644 security/certora/confs/payloads/verifyPayloadsController.conf create mode 100644 security/certora/confs/verifyGovernance.conf create mode 100644 security/certora/confs/verifyGovernancePowerStrategy.conf create mode 100644 security/certora/confs/verifyVotingStrategy_unittests.conf create mode 100644 security/certora/confs/voting/verifyLegality.conf create mode 100644 security/certora/confs/voting/verifyMisc.conf create mode 100644 security/certora/confs/voting/verifyPower_summary.conf create mode 100644 security/certora/confs/voting/verifyProposal_config.conf create mode 100644 security/certora/confs/voting/verifyProposal_states.conf create mode 100644 security/certora/confs/voting/verifyVoting_and_tally.conf create mode 100644 security/certora/harness/DummyERC20Impl.sol create mode 100644 security/certora/harness/GovernanceHarness.sol create mode 100644 security/certora/harness/PayloadsControllerHarness.sol create mode 100644 security/certora/harness/tokens/AaveTokenV3_DummyA.sol create mode 100644 security/certora/harness/tokens/AaveTokenV3_DummyB.sol create mode 100644 security/certora/harness/tokens/AaveTokenV3_DummyC.sol create mode 100644 security/certora/harness/voting/DelegationModeHarness.sol create mode 100644 security/certora/harness/voting/VotingMachineHarness.sol create mode 100644 security/certora/harness/voting/VotingMachineHarnessTriple.sol create mode 100644 security/certora/harness/voting/VotingStrategyHarness.sol create mode 100644 security/certora/reports/Formal Verification Report Of Aave Governance V3.pdf rename security/certora/{ => reports}/Formal_Verification_Report_Aave_Governance_V3.md (100%) create mode 100644 security/certora/specs/Governance.spec create mode 100644 security/certora/specs/GovernancePowerStrategy.spec create mode 100644 security/certora/specs/VotingStrategy_unittests.spec create mode 100644 security/certora/specs/payloads/PayloadsController.spec create mode 100644 security/certora/specs/set.spec create mode 100644 security/certora/specs/voting/README.md create mode 100644 security/certora/specs/voting/legality.spec create mode 100644 security/certora/specs/voting/misc.spec create mode 100644 security/certora/specs/voting/power_summary.spec create mode 100644 security/certora/specs/voting/proposal_config.spec create mode 100644 security/certora/specs/voting/proposal_states.spec create mode 100644 security/certora/specs/voting/setup.spec create mode 100644 security/certora/specs/voting/voting_and_tally.spec create mode 100644 security/certora/tests/BaseVotingStrategy-1.sol create mode 100644 security/certora/tests/BaseVotingStrategy-2.sol create mode 100644 security/certora/tests/GovernancePowerStrategy-3.sol create mode 100644 security/certora/tests/GovernancePowerStrategy-4.sol create mode 100644 security/certora/tests/GovernancePowerStrategy-5.sol create mode 100644 security/certora/tests/REPORT-power-strategy.txt create mode 100644 security/certora/tests/REPORT-voting.txt create mode 100644 security/certora/tests/VotingMachineWithProofs-1.sol create mode 100644 security/certora/tests/VotingMachineWithProofs-2.sol create mode 100644 security/certora/tests/VotingMachineWithProofs-3.sol create mode 100644 security/certora/tests/VotingMachineWithProofs-4.sol create mode 100644 security/certora/tests/VotingMachineWithProofs-5.sol rename security/sp/{Sigma_Prime_Aave_Governance_V3_Security_Assessment_Report_4_0.pdf => Sigma_Prime_Aave_Governance_V3_Security_Assessment_Report_4_1.pdf} (66%) diff --git a/.github/workflows/certora-review-execution-chain.yml b/.github/workflows/certora-review-execution-chain.yml new file mode 100644 index 0000000..4099c93 --- /dev/null +++ b/.github/workflows/certora-review-execution-chain.yml @@ -0,0 +1,66 @@ +name: certora-review-execution-chain + +on: + push: + branches: + - main + pull_request: + branches: + - main + + workflow_dispatch: + +jobs: + verify: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Install python + uses: actions/setup-python@v2 + with: { python-version: 3.9 } + + - name: Install java + uses: actions/setup-java@v1 + with: { java-version: "11", java-package: jre } + + - name: Install certora cli + run: pip3 install certora-cli + + - name: Install solc + run: | + wget https://github.com/ethereum/solidity/releases/download/v0.8.19/solc-static-linux + chmod +x solc-static-linux + sudo mv solc-static-linux /usr/local/bin/solc8.19 + + - name: Verify rule ${{ matrix.rule }} + run: | + certoraRun security/certora/confs/payloads/${{ matrix.rule }} + env: + CERTORAKEY: ${{ secrets.CERTORAKEY }} + + strategy: + fail-fast: false + max-parallel: 16 + matrix: + rule: + - verifyPayloadsController.conf --rule payload_maximal_access_level_gt_action_access_level no_late_cancel state_cant_decrease no_transition_beyond_state_gt_3 no_transition_beyond_state_variable_gt_3 no_queue_after_expiration decode2encode_sanity_check_message_leq_96_pass decode2encode_sanity_check_message_eq_96_satisfy empty_actions_if_out_of_bound_payload expirationTime_equal_to_createAt_plus_EXPIRATION_DELAY empty_actions_iff_uninitialized null_access_level_if_out_of_bound_payload null_creator_and_zero_expiration_time_if_out_of_bound_payload empty_actions_only_if_uninitialized_payload executor_access_level_within_range consecutiveIDs empty_actions_if_uninitialized_payload queued_before_expiration_delay payload_grace_period_eq_global_grace_period null_access_level_only_if_out_of_bound_payload null_state_variable_if_out_of_bound_payload created_in_the_past executedAt_is_zero_before_executed queued_after_created executed_after_queue queuedAt_is_zero_before_queued no_early_cancellation guardian_can_cancel executed_when_in_queued_state execute_before_delay__maximumAccessLevelRequired action_immutable_fixed_size_fields initialized_payload_fields_are_immutable payload_fields_immutable_after_createPayload + - verifyPayloadsController.conf --rule executor_exists + - verifyPayloadsController.conf --rule executor_exists_if_action_not_null + - verifyPayloadsController.conf --rule executor_exists_only_if_action_not_null + - verifyPayloadsController.conf --rule payload_delay_within_range + - verifyPayloadsController.conf --rule delay_of_executor_of_max_access_level_within_range + - verifyPayloadsController.conf --rule nonempty_actions + - verifyPayloadsController.conf --rule executor_exists_iff_action_not_null + - verifyPayloadsController.conf --rule null_access_level_iff_state_is_none + - verifyPayloadsController.conf --rule executor_of_maximumAccessLevelRequired_exists + - verifyPayloadsController.conf --rule executor_of_maximumAccessLevelRequired_exists_after_createPayload + - verifyPayloadsController.conf --rule action_access_level_isnt_null_after_createPayload + - verifyPayloadsController.conf --rule executor_exists_after_createPayload + - verifyPayloadsController.conf --rule action_callData_immutable + - verifyPayloadsController.conf --rule action_signature_immutable + - verifyPayloadsController.conf --rule action_immutable_check_only_fixed_size_fields + \ No newline at end of file diff --git a/.github/workflows/certora-review-mainnet.yml b/.github/workflows/certora-review-mainnet.yml new file mode 100644 index 0000000..405b0be --- /dev/null +++ b/.github/workflows/certora-review-mainnet.yml @@ -0,0 +1,66 @@ +# Github action for verifying the contracts under src/contracts/voting +name: certora-review-mainnet + +on: + push: + branches: + - main + pull_request: + branches: + - main + + workflow_dispatch: + +jobs: + verify: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Install python + uses: actions/setup-python@v2 + with: { python-version: 3.9 } + + - name: Install java + uses: actions/setup-java@v1 + with: { java-version: "11", java-package: jre } + + - name: Install certora cli + run: pip3 install certora-cli + + - name: Install solc + run: | + wget https://github.com/ethereum/solidity/releases/download/v0.8.19/solc-static-linux + chmod +x solc-static-linux + sudo mv solc-static-linux /usr/local/bin/solc8.19 + + - name: Verify rule ${{ matrix.rule }} + run: | + certoraRun security/certora/confs/${{ matrix.rule }} + env: + CERTORAKEY: ${{ secrets.CERTORAKEY }} + + strategy: + fail-fast: false + max-parallel: 16 + matrix: + rule: + - verifyVotingStrategy_unittests.conf + - verifyGovernancePowerStrategy.conf + - verifyGovernance.conf --rule cancellationFeeZeroForFutureProposals null_state_variable_iff_null_access_level zero_voting_portal_iff_uninitialized_proposal + - verifyGovernance.conf --rule no_self_representative no_representative_is_zero consecutiveIDs totalCancellationFeeEqualETHBalance zero_address_is_not_a_valid_voting_portal + - verifyGovernance.conf --rule no_representative_is_zero_2 no_representative_of_zero empty_payloads_if_uninitialized_proposal null_state_variable_only_if_uninitialized_proposal + - verifyGovernance.conf --rule post_state state_changing_function_self_check state_variable_changing_function_self_check initialize_sanity sanity userFeeDidntChangeImplyNativeBalanceDidntDecrease + - verifyGovernance.conf --rule check_new_representative_set_size_after_updateRepresentatives check_old_representative_set_size_after_updateRepresentatives set_size_leq_max_uint160 + - verifyGovernance.conf --rule at_least_single_payload_active at_least_single_payload_active_variable creator_is_not_zero creator_is_not_zero_2 empty_payloads_iff_uninitialized_proposal + - verifyGovernance.conf --rule null_state_iff_uninitialized_proposal null_state_variable_iff_uninitialized_proposal null_state_if_uninitialized_proposal null_state_variable_if_uninitialized_proposal + - verifyGovernance.conf --rule null_state_only_if_uninitialized_proposal pre_state terminal_state_cannot_change state_changing_function_cannot_be_called_while_in_terminal_state proposal_executes_after_cooldown_period + - verifyGovernance.conf --rule only_valid_voting_portal_can_queue_proposal immutable_after_activation immutable_payload_after_creation immutable_after_creation only_guardian_can_cancel guardian_can_cancel + - verifyGovernance.conf --rule cannot_queue_when_voting_portal_unapproved only_owner_can_set_voting_config_witness only_owner_can_set_voting_config single_state_transition_per_block_non_creator_witness + - verifyGovernance.conf --rule single_state_transition_per_block_non_creator_non_guardian state_cant_decrease no_state_transitions_beyond_3 immutable_voting_portal insufficient_proposition_power_time_elapsed_tight_witness + - verifyGovernance.conf --rule insufficient_proposition_power_allow_time_elapse insufficient_proposition_power proposal_after_voting_portal_invalidate + \ No newline at end of file diff --git a/.github/workflows/certora-review-voting-chain.yml b/.github/workflows/certora-review-voting-chain.yml new file mode 100644 index 0000000..c600064 --- /dev/null +++ b/.github/workflows/certora-review-voting-chain.yml @@ -0,0 +1,57 @@ +# Github action for verifying the contracts under src/contracts/voting +name: certora-review-voting-chain + +on: + push: + branches: + - main + pull_request: + branches: + - main + + workflow_dispatch: + +jobs: + verify: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Install python + uses: actions/setup-python@v2 + with: { python-version: 3.9 } + + - name: Install java + uses: actions/setup-java@v1 + with: { java-version: "11", java-package: jre } + + - name: Install certora cli + run: pip3 install certora-cli + + - name: Install solc + run: | + wget https://github.com/ethereum/solidity/releases/download/v0.8.19/solc-static-linux + chmod +x solc-static-linux + sudo mv solc-static-linux /usr/local/bin/solc8.19 + + - name: Verify rule ${{ matrix.rule }} + run: | + certoraRun security/certora/confs/voting/${{ matrix.rule }} + env: + CERTORAKEY: ${{ secrets.CERTORAKEY }} + + strategy: + fail-fast: false + max-parallel: 16 + matrix: + rule: + - verifyLegality.conf + - verifyMisc.conf + - verifyPower_summary.conf + - verifyProposal_config.conf + - verifyProposal_states.conf + - verifyVoting_and_tally.conf diff --git a/.gitmodules b/.gitmodules index 6780666..d4db887 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,7 +10,7 @@ [submodule "lib/openzeppelin-contracts"] path = lib/openzeppelin-contracts url = https://github.com/OpenZeppelin/openzeppelin-contracts - branch = release-v4.8 + branch = release-v4.9 [submodule "lib/aave-address-book"] path = lib/aave-address-book url = https://github.com/bgd-labs/aave-address-book diff --git a/README.md b/README.md index c5de1b7..4f5b429 100644 --- a/README.md +++ b/README.md @@ -42,11 +42,11 @@ All the information about setup of the project and deployments can be found [HER | Networks | PayloadsController | Executor Lvl1 | Executor Lvl2 | |-----------|-----------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------| -|
Ethereum

Ethereum

| [0x401B5D0294E23637c18fcc38b1Bca814CDa2637C](https://etherscan.io/address/0x401B5D0294E23637c18fcc38b1Bca814CDa2637C) | [0x5300A1a15135EA4dc7aD5a167152C01EFc9b192A](https://etherscan.io/address/0x5300A1a15135EA4dc7aD5a167152C01EFc9b192A) | [0x17Dd33Ed0e3dD2a80E37489B8A63063161BE6957](https://etherscan.io/address/0x17Dd33Ed0e3dD2a80E37489B8A63063161BE6957) | +|
Ethereum

Ethereum

| [0xdAbad81aF85554E9ae636395611C58F7eC1aAEc5](https://etherscan.io/address/0xdAbad81aF85554E9ae636395611C58F7eC1aAEc5) | [0x5300A1a15135EA4dc7aD5a167152C01EFc9b192A](https://etherscan.io/address/0x5300A1a15135EA4dc7aD5a167152C01EFc9b192A) | [0x17Dd33Ed0e3dD2a80E37489B8A63063161BE6957](https://etherscan.io/address/0x17Dd33Ed0e3dD2a80E37489B8A63063161BE6957) | |
Polygon

Polygon

| [0x401B5D0294E23637c18fcc38b1Bca814CDa2637C](https://polygonscan.com/address/0x401B5D0294E23637c18fcc38b1Bca814CDa2637C) | [0xDf7d0e6454DB638881302729F5ba99936EaAB233](https://polygonscan.com/address/0xDf7d0e6454DB638881302729F5ba99936EaAB233) | - | |
Avalanche

Avalanche

| [0x1140CB7CAfAcC745771C2Ea31e7B5C653c5d0B80](https://snowtrace.io/address/0x1140CB7CAfAcC745771C2Ea31e7B5C653c5d0B80) | [0x3C06dce358add17aAf230f2234bCCC4afd50d090](https://snowtrace.io/address/0x3C06dce358add17aAf230f2234bCCC4afd50d090) | - | -|
Arbitrum

Arbitrum

| [0x89644CA1bB8064760312AE4F03ea41b05dA3637C](https://arbiscan.io/address/0x89644CA1bB8064760312AE4F03ea41b05dA3637C) | [0x89644CA1bB8064760312AE4F03ea41b05dA3637C](https://arbiscan.io/address/0x89644CA1bB8064760312AE4F03ea41b05dA3637C) | - | -|
Optimism

Optimism

| [0x0E1a3Af1f9cC76A62eD31eDedca291E63632e7c4](https://optimistic.etherscan.io/address/0x0E1a3Af1f9cC76A62eD31eDedca291E63632e7c4) | [0x0E1a3Af1f9cC76A62eD31eDedca291E63632e7c4](https://optimistic.etherscan.io/address/0x0E1a3Af1f9cC76A62eD31eDedca291E63632e7c4) | - | +|
Arbitrum

Arbitrum

| [0x89644CA1bB8064760312AE4F03ea41b05dA3637C](https://arbiscan.io/address/0x89644CA1bB8064760312AE4F03ea41b05dA3637C) | [0xFF1137243698CaA18EE364Cc966CF0e02A4e6327](https://arbiscan.io/address/0xFF1137243698CaA18EE364Cc966CF0e02A4e6327) | - | +|
Optimism

Optimism

| [0x0E1a3Af1f9cC76A62eD31eDedca291E63632e7c4](https://optimistic.etherscan.io/address/0x0E1a3Af1f9cC76A62eD31eDedca291E63632e7c4) | [0x746c675dAB49Bcd5BB9Dc85161f2d7Eb435009bf](https://optimistic.etherscan.io/address/0x746c675dAB49Bcd5BB9Dc85161f2d7Eb435009bf) | - | |
Binance

Binance

|[0xE5EF2Dd06755A97e975f7E282f828224F2C3e627](https://bscscan.com/address/0xE5EF2Dd06755A97e975f7E282f828224F2C3e627) | [0x9390B1735def18560c509E2d0bc090E9d6BA257a](https://bscscan.com/address/0x9390B1735def18560c509E2d0bc090E9d6BA257a) | - | |
Base

Base

| [0x2DC219E716793fb4b21548C0f009Ba3Af753ab01](https://basescan.org/address/0x2DC219E716793fb4b21548C0f009Ba3Af753ab01) | [0x9390B1735def18560c509E2d0bc090E9d6BA257a](https://basescan.org/address/0x9390B1735def18560c509E2d0bc090E9d6BA257a) | - | |
Metis

Metis

| [0x2233F8A66A728FBa6E1dC95570B25360D07D5524](https://explorer.metis.io/address/0x2233F8A66A728FBa6E1dC95570B25360D07D5524) | [0x6fD45D32375d5aDB8D76275A3932c740F03a8718](https://explorer.metis.io/address/0x6fD45D32375d5aDB8D76275A3932c740F03a8718) | - | diff --git a/lib/aave-address-book b/lib/aave-address-book index 9f5c33d..f4bbc1d 160000 --- a/lib/aave-address-book +++ b/lib/aave-address-book @@ -1 +1 @@ -Subproject commit 9f5c33da4813dbd885b9f888c1cf6234340f71e7 +Subproject commit f4bbc1d3abd6e941820f4f3b2b522722e43ae218 diff --git a/lib/openzeppelin-contracts b/lib/openzeppelin-contracts index 0a25c19..98c7a4c 160000 --- a/lib/openzeppelin-contracts +++ b/lib/openzeppelin-contracts @@ -1 +1 @@ -Subproject commit 0a25c1940ca220686588c4af3ec526f725fe2582 +Subproject commit 98c7a4cf958f7014e3c5347aeb0678b585eb870d diff --git a/security/certora/confs/payloads/verifyPayloadsController.conf b/security/certora/confs/payloads/verifyPayloadsController.conf new file mode 100644 index 0000000..6da1a24 --- /dev/null +++ b/security/certora/confs/payloads/verifyPayloadsController.conf @@ -0,0 +1,25 @@ +{ + "files": [ + "security/certora/harness/PayloadsControllerHarness.sol", + "src/contracts/payloads/Executor.sol", + "src/contracts/payloads/PayloadsControllerUtils.sol", + "security/certora/harness/DummyERC20Impl.sol" + ], + "packages": [ + "aave-delivery-infrastructure=lib/aave-delivery-infrastructure/src", + "solidity-utils=lib/solidity-utils/src" + ], + "loop_iter": "3", + "msg": "All payloadControllers rules", + "optimistic_hashing": true, + "optimistic_loop": true, + "prover_args": [ + " -smt_LIASolvers [z3:def,z3:lia1,z3:lia2] -smt_NIASolvers [z3:def]" + ], + "smt_timeout": "6000", + "solc": "solc8.19", + "struct_link": [ + "PayloadsControllerHarness:executor=Executor" + ], + "verify": "PayloadsControllerHarness:security/certora/specs/payloads/PayloadsController.spec" +} \ No newline at end of file diff --git a/security/certora/confs/verifyGovernance.conf b/security/certora/confs/verifyGovernance.conf new file mode 100644 index 0000000..66e8a92 --- /dev/null +++ b/security/certora/confs/verifyGovernance.conf @@ -0,0 +1,31 @@ +{ + "files": [ + "security/certora/harness/GovernanceHarness.sol", + "src/contracts/VotingPortal.sol", + "src/contracts/voting/VotingStrategy.sol", + "lib/aave-token-v3/src/AaveTokenV3.sol", + "src/contracts/GovernancePowerStrategy.sol", + "src/contracts/payloads/PayloadsControllerUtils.sol" + ], + "link": [ + "GovernanceHarness:_powerStrategy=GovernancePowerStrategy" + ], + "packages": [ + "aave-address-book=lib/aave-address-book/src", + "aave-delivery-infrastructure=lib/aave-delivery-infrastructure/src", + "aave-token-v3=lib/aave-token-v3/src", + "openzeppelin-contracts=lib/openzeppelin-contracts", + "solidity-utils=lib/solidity-utils/src" + ], + "verify": "GovernanceHarness:security/certora/specs/Governance.spec", + "struct_link": [ + "GovernanceHarness:votingPortal=VotingPortal" + ], + "loop_iter": "3", + "optimistic_loop": true, + "prover_args": [ + " -copyLoopUnroll 8" + ], + "solc": "solc8.19", + "msg": "All Governance rules", +} \ No newline at end of file diff --git a/security/certora/confs/verifyGovernancePowerStrategy.conf b/security/certora/confs/verifyGovernancePowerStrategy.conf new file mode 100644 index 0000000..28e37d5 --- /dev/null +++ b/security/certora/confs/verifyGovernancePowerStrategy.conf @@ -0,0 +1,23 @@ +{ + "files": [ + "src/contracts/GovernancePowerStrategy.sol", + "security/certora/harness/tokens/AaveTokenV3_DummyA.sol", + "security/certora/harness/tokens/AaveTokenV3_DummyB.sol", + "security/certora/harness/tokens/AaveTokenV3_DummyC.sol" + ], + "link": [ + ], + "packages": [ + "@openzeppelin=lib/aave-delivery-infrastructure/lib/openzeppelin-contracts", + "aave-delivery-infrastructure=lib/aave-delivery-infrastructure/src", + "aave-token-v3=lib/aave-token-v3/src", + "forge-std=lib/forge-std/src", + "openzeppelin-contracts=lib/openzeppelin-contracts", + "solidity-utils=lib/solidity-utils/src" + ], + "verify": "GovernancePowerStrategy:security/certora/specs/GovernancePowerStrategy.spec", + "optimistic_loop": true, + "loop_iter": "3", // Needs 3 for the 3 tokens + "solc": "solc8.19", + "msg": "GovernancePowerStrategy tests" +} diff --git a/security/certora/confs/verifyVotingStrategy_unittests.conf b/security/certora/confs/verifyVotingStrategy_unittests.conf new file mode 100644 index 0000000..cdd50af --- /dev/null +++ b/security/certora/confs/verifyVotingStrategy_unittests.conf @@ -0,0 +1,27 @@ +{ + "files": [ + "src/contracts/voting/VotingStrategy.sol", + "src/contracts/voting/DataWarehouse.sol", + "security/certora/harness/voting/DelegationModeHarness.sol" + ], + "link": [ + "VotingStrategy:DATA_WAREHOUSE=DataWarehouse" + ], + "packages": [ + "@openzeppelin=lib/aave-delivery-infrastructure/lib/openzeppelin-contracts", + "aave-delivery-infrastructure=lib/aave-delivery-infrastructure/src", + "aave-token-v2=lib/aave-token-v3/lib/aave-token-v2/contracts", + "aave-token-v3=lib/aave-token-v3/src", + "forge-std=lib/forge-std/src", + "hyperlane-monorepo=lib/aave-delivery-infrastructure/lib/hyperlane-monorepo/solidity", + "openzeppelin-contracts=lib/aave-delivery-infrastructure/lib/openzeppelin-contracts", + "solidity-examples=lib/aave-delivery-infrastructure/lib/solidity-examples/contracts", + "solidity-utils=lib/solidity-utils/src" + ], + "verify": "VotingStrategy:security/certora/specs/VotingStrategy_unittests.spec", + "optimistic_loop": true, + "loop_iter": "2", // Needs 2 for isTokenSlotAccepted (A_AAVE uses 2 slots) + "solc": "solc8.19", + "msg": "VotingStrategy tests" +} + \ No newline at end of file diff --git a/security/certora/confs/voting/verifyLegality.conf b/security/certora/confs/voting/verifyLegality.conf new file mode 100644 index 0000000..ac5dbe6 --- /dev/null +++ b/security/certora/confs/voting/verifyLegality.conf @@ -0,0 +1,34 @@ +// conf file for VotingMachine - legality.spec +{ + "files": [ + "security/certora/harness/voting/VotingMachineHarness.sol", + "security/certora/harness/voting/VotingStrategyHarness.sol", + "src/contracts/voting/DataWarehouse.sol", + "src/contracts/voting/libs/StateProofVerifier.sol", + "src/contracts/libraries/SlotUtils.sol", + "lib/aave-delivery-infrastructure/src/contracts/CrossChainController.sol" + ], + "link": [ + "VotingMachineHarness:VOTING_STRATEGY=VotingStrategyHarness", + "VotingMachineHarness:CROSS_CHAIN_CONTROLLER=CrossChainController", + "VotingMachineHarness:DATA_WAREHOUSE=DataWarehouse", // NOTE: same as in VotingStrategy + "VotingStrategyHarness:DATA_WAREHOUSE=DataWarehouse" + ], + "packages": [ + "@openzeppelin=lib/aave-delivery-infrastructure/lib/openzeppelin-contracts", + "aave-delivery-infrastructure=lib/aave-delivery-infrastructure/src", + "aave-token-v2=lib/aave-token-v3/lib/aave-token-v2/contracts", + "aave-token-v3=lib/aave-token-v3/src", + "forge-std=lib/forge-std/src", + "hyperlane-monorepo=lib/aave-delivery-infrastructure/lib/hyperlane-monorepo/solidity", + "openzeppelin-contracts=lib/openzeppelin-contracts", + "solidity-examples=lib/aave-delivery-infrastructure/lib/solidity-examples/contracts", + "solidity-utils=lib/solidity-utils/src" + ], + "verify": "VotingMachineHarness:security/certora/specs/voting/legality.spec", + "optimistic_loop": true, + "loop_iter": "1", + "optimistic_hashing": true, + "solc": "solc8.19", + "msg": "VotingMachine - legality rules" +} diff --git a/security/certora/confs/voting/verifyMisc.conf b/security/certora/confs/voting/verifyMisc.conf new file mode 100644 index 0000000..f6e895d --- /dev/null +++ b/security/certora/confs/voting/verifyMisc.conf @@ -0,0 +1,34 @@ +// conf file for VotingMachine - misc.spec +{ + "files": [ + "security/certora/harness/voting/VotingMachineHarnessTriple.sol", + "security/certora/harness/voting/VotingStrategyHarness.sol", + "src/contracts/voting/DataWarehouse.sol", + "src/contracts/voting/libs/StateProofVerifier.sol", + "src/contracts/libraries/SlotUtils.sol", + "lib/aave-delivery-infrastructure/src/contracts/CrossChainController.sol" + ], + "link": [ + "VotingMachineHarnessTriple:VOTING_STRATEGY=VotingStrategyHarness", + "VotingMachineHarnessTriple:CROSS_CHAIN_CONTROLLER=CrossChainController", + "VotingMachineHarnessTriple:DATA_WAREHOUSE=DataWarehouse", // NOTE: same as in VotingStrategy + "VotingStrategyHarness:DATA_WAREHOUSE=DataWarehouse" + ], + "packages": [ + "@openzeppelin=lib/aave-delivery-infrastructure/lib/openzeppelin-contracts", + "aave-delivery-infrastructure=lib/aave-delivery-infrastructure/src", + "aave-token-v2=lib/aave-token-v3/lib/aave-token-v2/contracts", + "aave-token-v3=lib/aave-token-v3/src", + "forge-std=lib/forge-std/src", + "hyperlane-monorepo=lib/aave-delivery-infrastructure/lib/hyperlane-monorepo/solidity", + "openzeppelin-contracts=lib/openzeppelin-contracts", + "solidity-examples=lib/aave-delivery-infrastructure/lib/solidity-examples/contracts", + "solidity-utils=lib/solidity-utils/src" + ], + "verify": "VotingMachineHarnessTriple:security/certora/specs/voting/misc.spec", + "optimistic_loop": true, + "loop_iter": "3", // Needs 3 for `submitVoteTripleProof` + "optimistic_hashing": true, + "solc": "solc8.19", + "msg": "VotingMachine - miscellaneous rules" +} diff --git a/security/certora/confs/voting/verifyPower_summary.conf b/security/certora/confs/voting/verifyPower_summary.conf new file mode 100644 index 0000000..0c9f911 --- /dev/null +++ b/security/certora/confs/voting/verifyPower_summary.conf @@ -0,0 +1,34 @@ +// conf file for VotingMachine setup +{ + "files": [ + "security/certora/harness/voting/VotingMachineHarnessTriple.sol", + "security/certora/harness/voting/VotingStrategyHarness.sol", + "src/contracts/voting/DataWarehouse.sol", + "src/contracts/voting/libs/StateProofVerifier.sol", + "src/contracts/libraries/SlotUtils.sol", + "lib/aave-delivery-infrastructure/src/contracts/CrossChainController.sol" + ], + "link": [ + "VotingMachineHarnessTriple:VOTING_STRATEGY=VotingStrategyHarness", + "VotingMachineHarnessTriple:CROSS_CHAIN_CONTROLLER=CrossChainController", + "VotingMachineHarnessTriple:DATA_WAREHOUSE=DataWarehouse", // NOTE: same as in VotingStrategy + "VotingStrategyHarness:DATA_WAREHOUSE=DataWarehouse" + ], + "packages": [ + "@openzeppelin=lib/aave-delivery-infrastructure/lib/openzeppelin-contracts", + "aave-delivery-infrastructure=lib/aave-delivery-infrastructure/src", + "aave-token-v2=lib/aave-token-v3/lib/aave-token-v2/contracts", + "aave-token-v3=lib/aave-token-v3/src", + "forge-std=lib/forge-std/src", + "hyperlane-monorepo=lib/aave-delivery-infrastructure/lib/hyperlane-monorepo/solidity", + "openzeppelin-contracts=lib/openzeppelin-contracts", + "solidity-examples=lib/aave-delivery-infrastructure/lib/solidity-examples/contracts", + "solidity-utils=lib/solidity-utils/src" + ], + "verify": "VotingMachineHarnessTriple:security/certora/specs/voting/power_summary.spec", + "optimistic_loop": true, + "loop_iter": "3", // 3 is needed for `submitVoteTripleProof`; 2 for `isTokenSlotAccepted` (A_AAVE uses two slots) + "optimistic_hashing": true, + "solc": "solc8.19", + "msg": "VotingMachine setup - basic tests" +} diff --git a/security/certora/confs/voting/verifyProposal_config.conf b/security/certora/confs/voting/verifyProposal_config.conf new file mode 100644 index 0000000..286dc64 --- /dev/null +++ b/security/certora/confs/voting/verifyProposal_config.conf @@ -0,0 +1,34 @@ +// conf file for VotingMachine - proposal_config.spec +{ + "files": [ + "security/certora/harness/voting/VotingMachineHarness.sol", + "security/certora/harness/voting/VotingStrategyHarness.sol", + "src/contracts/voting/DataWarehouse.sol", + "src/contracts/voting/libs/StateProofVerifier.sol", + "src/contracts/libraries/SlotUtils.sol", + "lib/aave-delivery-infrastructure/src/contracts/CrossChainController.sol" + ], + "link": [ + "VotingMachineHarness:VOTING_STRATEGY=VotingStrategyHarness", + "VotingMachineHarness:CROSS_CHAIN_CONTROLLER=CrossChainController", + "VotingMachineHarness:DATA_WAREHOUSE=DataWarehouse", // NOTE: same as in VotingStrategy + "VotingStrategyHarness:DATA_WAREHOUSE=DataWarehouse" + ], + "packages": [ + "@openzeppelin=lib/aave-delivery-infrastructure/lib/openzeppelin-contracts", + "aave-delivery-infrastructure=lib/aave-delivery-infrastructure/src", + "aave-token-v2=lib/aave-token-v3/lib/aave-token-v2/contracts", + "aave-token-v3=lib/aave-token-v3/src", + "forge-std=lib/forge-std/src", + "hyperlane-monorepo=lib/aave-delivery-infrastructure/lib/hyperlane-monorepo/solidity", + "openzeppelin-contracts=lib/openzeppelin-contracts", + "solidity-examples=lib/aave-delivery-infrastructure/lib/solidity-examples/contracts", + "solidity-utils=lib/solidity-utils/src" + ], + "verify": "VotingMachineHarness:security/certora/specs/voting/proposal_config.spec", + "optimistic_loop": true, + "loop_iter": "1", + "optimistic_hashing": true, + "solc": "solc8.19", + "msg": "VotingMachine - proposal configuration" +} diff --git a/security/certora/confs/voting/verifyProposal_states.conf b/security/certora/confs/voting/verifyProposal_states.conf new file mode 100644 index 0000000..cfc4693 --- /dev/null +++ b/security/certora/confs/voting/verifyProposal_states.conf @@ -0,0 +1,34 @@ +// conf file for VotingMachine - proposal_states.spec +{ + "files": [ + "security/certora/harness/voting/VotingMachineHarness.sol", + "security/certora/harness/voting/VotingStrategyHarness.sol", + "src/contracts/voting/DataWarehouse.sol", + "src/contracts/voting/libs/StateProofVerifier.sol", + "src/contracts/libraries/SlotUtils.sol", + "lib/aave-delivery-infrastructure/src/contracts/CrossChainController.sol" + ], + "link": [ + "VotingMachineHarness:VOTING_STRATEGY=VotingStrategyHarness", + "VotingMachineHarness:CROSS_CHAIN_CONTROLLER=CrossChainController", + "VotingMachineHarness:DATA_WAREHOUSE=DataWarehouse", // NOTE: same as in VotingStrategy + "VotingStrategyHarness:DATA_WAREHOUSE=DataWarehouse" + ], + "packages": [ + "@openzeppelin=lib/aave-delivery-infrastructure/lib/openzeppelin-contracts", + "aave-delivery-infrastructure=lib/aave-delivery-infrastructure/src", + "aave-token-v2=lib/aave-token-v3/lib/aave-token-v2/contracts", + "aave-token-v3=lib/aave-token-v3/src", + "forge-std=lib/forge-std/src", + "hyperlane-monorepo=lib/aave-delivery-infrastructure/lib/hyperlane-monorepo/solidity", + "openzeppelin-contracts=lib/openzeppelin-contracts", + "solidity-examples=lib/aave-delivery-infrastructure/lib/solidity-examples/contracts", + "solidity-utils=lib/solidity-utils/src" + ], + "verify": "VotingMachineHarness:security/certora/specs/voting/proposal_states.spec", + "optimistic_loop": true, + "loop_iter": "1", + "optimistic_hashing": true, + "solc": "solc8.19", + "msg": "VotingMachine - proposal states" +} diff --git a/security/certora/confs/voting/verifyVoting_and_tally.conf b/security/certora/confs/voting/verifyVoting_and_tally.conf new file mode 100644 index 0000000..91a6814 --- /dev/null +++ b/security/certora/confs/voting/verifyVoting_and_tally.conf @@ -0,0 +1,34 @@ +// conf file for VotingMachine - voting_and_tally.spec +{ + "files": [ + "security/certora/harness/voting/VotingMachineHarness.sol", + "security/certora/harness/voting/VotingStrategyHarness.sol", + "src/contracts/voting/DataWarehouse.sol", + "src/contracts/voting/libs/StateProofVerifier.sol", + "src/contracts/libraries/SlotUtils.sol", + "lib/aave-delivery-infrastructure/src/contracts/CrossChainController.sol" + ], + "link": [ + "VotingMachineHarness:VOTING_STRATEGY=VotingStrategyHarness", + "VotingMachineHarness:CROSS_CHAIN_CONTROLLER=CrossChainController", + "VotingMachineHarness:DATA_WAREHOUSE=DataWarehouse", // NOTE: same as in VotingStrategy + "VotingStrategyHarness:DATA_WAREHOUSE=DataWarehouse" + ], + "packages": [ + "@openzeppelin=lib/aave-delivery-infrastructure/lib/openzeppelin-contracts", + "aave-delivery-infrastructure=lib/aave-delivery-infrastructure/src", + "aave-token-v2=lib/aave-token-v3/lib/aave-token-v2/contracts", + "aave-token-v3=lib/aave-token-v3/src", + "forge-std=lib/forge-std/src", + "hyperlane-monorepo=lib/aave-delivery-infrastructure/lib/hyperlane-monorepo/solidity", + "openzeppelin-contracts=lib/openzeppelin-contracts", + "solidity-examples=lib/aave-delivery-infrastructure/lib/solidity-examples/contracts", + "solidity-utils=lib/solidity-utils/src" + ], + "verify": "VotingMachineHarness:security/certora/specs/voting/voting_and_tally.spec", + "optimistic_loop": true, + "loop_iter": "1", + "optimistic_hashing": true, + "solc": "solc8.19", + "msg": "VotingMachine - voting and tally rules" +} diff --git a/security/certora/harness/DummyERC20Impl.sol b/security/certora/harness/DummyERC20Impl.sol new file mode 100644 index 0000000..0ff4d92 --- /dev/null +++ b/security/certora/harness/DummyERC20Impl.sol @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: agpl-3.0 +pragma solidity ^0.8; + +// with mint +contract DummyERC20Impl { + uint256 t; + mapping (address => uint256) b; + mapping (address => mapping (address => uint256)) a; + + string public name; + string public symbol; + uint public decimals; + + function myAddress() public returns (address) { + return address(this); + } + + function add(uint a, uint b) internal pure returns (uint256) { + uint c = a +b; + require (c >= a); + return c; + } + function sub(uint a, uint b) internal pure returns (uint256) { + require (a>=b); + return a-b; + } + + function totalSupply() external view returns (uint256) { + return t; + } + function balanceOf(address account) external view returns (uint256) { + return b[account]; + } + function transfer(address recipient, uint256 amount) external returns (bool) { + b[msg.sender] = sub(b[msg.sender], amount); + b[recipient] = add(b[recipient], amount); + return true; + } + function allowance(address owner, address spender) external view returns (uint256) { + return a[owner][spender]; + } + function approve(address spender, uint256 amount) external returns (bool) { + a[msg.sender][spender] = amount; + return true; + } + + function transferFrom( + address sender, + address recipient, + uint256 amount + ) external returns (bool) { + b[sender] = sub(b[sender], amount); + b[recipient] = add(b[recipient], amount); + a[sender][msg.sender] = sub(a[sender][msg.sender], amount); + return true; + } +} \ No newline at end of file diff --git a/security/certora/harness/GovernanceHarness.sol b/security/certora/harness/GovernanceHarness.sol new file mode 100644 index 0000000..742391c --- /dev/null +++ b/security/certora/harness/GovernanceHarness.sol @@ -0,0 +1,132 @@ + +pragma solidity ^0.8.8; + +import {Governance} from '../../../src/contracts/Governance.sol'; +import {PayloadsControllerUtils} from '../../../src/contracts/payloads/PayloadsControllerUtils.sol'; +import {IGovernanceCore, EnumerableSet} from '../../../src/interfaces/IGovernanceCore.sol'; + + +contract GovernanceHarness is Governance { + using EnumerableSet for EnumerableSet.AddressSet; + + + constructor( + address crossChainController, + uint256 coolDownPeriod, + address cancellationFeeCollector + ) + Governance(crossChainController, coolDownPeriod, cancellationFeeCollector){} + + function getPayloadLength(uint256 proposalId) external view returns (uint256) { + return _proposals[proposalId].payloads.length; + } + + function getProposalStateVariable(uint256 proposalId) external view returns (State) { + return _proposals[proposalId].state; + } + function getProposalVotingPortal(uint256 proposalId) external view returns (address) { + return _proposals[proposalId].votingPortal; + } + + function getProposalAccessLevel(uint256 proposalId) external view returns (PayloadsControllerUtils.AccessControl) { + return _proposals[proposalId].accessLevel; + } + + function getProposalCreator(uint256 proposalId) external view returns (address) { + return _proposals[proposalId].creator;} + + function getProposalVotingDuration(uint256 proposalId) external view returns (uint24) { + return _proposals[proposalId].votingDuration;} + + function getProposalCreationTime(uint256 proposalId) external view returns (uint40) { + return _proposals[proposalId].creationTime;} + + function getProposalIpfsHash(uint256 proposalId) external view returns (bytes32) { + return _proposals[proposalId].ipfsHash;} + + function getProposalVotingActivationTime(uint256 proposalId) external view returns (uint40) { + return _proposals[proposalId].votingActivationTime;} + + function getProposalSnapshotBlockHash(uint256 proposalId) external view returns (bytes32) { + return _proposals[proposalId].snapshotBlockHash;} + + function getProposalCancellationFee(uint256 proposalId) external view returns (uint256) { + return _proposals[proposalId].cancellationFee;} + + function getPayloadChain(uint256 proposalId, uint256 payloadID) external view returns (uint256) { + return _proposals[proposalId].payloads[payloadID].chain; + } + + function getPayloadAccessLevel(uint256 proposalId, uint256 payloadID) external view returns (PayloadsControllerUtils.AccessControl) { + return _proposals[proposalId].payloads[payloadID].accessLevel; + } + function getPayloadPayloadsController(uint256 proposalId, uint256 payloadID) external view returns (address) { + return _proposals[proposalId].payloads[payloadID].payloadsController; + } + + function getPayloadPayloadId(uint256 proposalId, uint256 payloadID) external view returns (uint40) { + return _proposals[proposalId].payloads[payloadID].payloadId; + } + + function getProposalCount() external view returns (uint256) { + return _proposalsCount; + } + + function isRepresentativeOfVoter( + address voter, + address representative, + uint256 chainId + ) external view returns (bool) { + return _votersRepresented[representative][chainId].contains(voter); + } + + function updateSingleRepresentativeForChain( + address representative, uint256 chainId0) external { + + RepresentativeInput memory representativeInput; + representativeInput.representative = representative; + representativeInput.chainId = chainId0; + + RepresentativeInput[] memory representatives = new RepresentativeInput[](1); + representatives[0] = representativeInput; + + + //todo: call as external + //updateRepresentativesForChain(representatives); + + uint256 i = 0; + uint256 chainId = representatives[i].chainId; + address newRepresentative = representatives[i].representative != + msg.sender + ? representatives[i].representative + : address(0); + address oldRepresentative = _representatives[msg.sender][chainId]; + + if (oldRepresentative != address(0)) { + _votersRepresented[oldRepresentative][chainId].remove(msg.sender); + } + + if (newRepresentative != address(0)) { + _votersRepresented[newRepresentative][chainId].add(msg.sender); + } + + _representatives[msg.sender][chainId] = newRepresentative; + + emit RepresentativeUpdated(msg.sender, newRepresentative, chainId); + + } + + + /** + * @notice Returns the size of the voters set of a given representative + */ + function getRepresentedVotersSize( + address representative, + uint256 chainId + ) external view returns (uint256) { + return _votersRepresented[representative][chainId].values().length; + } + + + +} diff --git a/security/certora/harness/PayloadsControllerHarness.sol b/security/certora/harness/PayloadsControllerHarness.sol new file mode 100644 index 0000000..441e617 --- /dev/null +++ b/security/certora/harness/PayloadsControllerHarness.sol @@ -0,0 +1,132 @@ + +pragma solidity ^0.8.8; + +import {PayloadsControllerUtils} from '../../../src/contracts/payloads/PayloadsControllerUtils.sol'; +import {IPayloadsControllerCore, PayloadsControllerUtils} from '../../../src/contracts/payloads/interfaces/IPayloadsControllerCore.sol'; + + +import {PayloadsController} from '../../../src/contracts/payloads/PayloadsController.sol'; + +contract PayloadsControllerHarness is PayloadsController { + +constructor( + address crossChainController, + address messageOriginator, + uint256 originChainId + ) PayloadsController (crossChainController,messageOriginator,originChainId) {} + + + + function getPayloadFieldsById(uint40 payloadId) external view + returns (address,PayloadsControllerUtils.AccessControl,PayloadState,uint40,uint40,uint40,uint40,uint40,uint40,uint40) + { + Payload memory payload = _payloads[payloadId]; + + return (payload.creator, payload.maximumAccessLevelRequired, payload.state, + payload.createdAt, payload.queuedAt, payload.executedAt, payload.cancelledAt, + payload.expirationTime, payload.delay, payload.gracePeriod); + } + + function getCreator(uint40 payloadId) external view returns (address){ + return _payloads[payloadId].creator; + } + + function getExpirationTime(uint40 payloadId) external view returns (uint40){ + return _payloads[payloadId].expirationTime; + } + + function getPayloadQueuedAtById(uint40 payloadId) external view returns (uint40){ + return _payloads[payloadId].queuedAt; + } + + function getPayloadExpirationTimeById(uint40 payloadId) external view returns (uint40){ + return _payloads[payloadId].expirationTime; + } + + function getPayloadGracePeriod(uint40 payloadId) external view returns (uint40){ + return _payloads[payloadId].gracePeriod; + } + + function getPayloadDelay(uint40 payloadId) external view returns (uint40){ + return _payloads[payloadId].delay; + } + + function getPayloadCreatedAt(uint40 payloadId) external view returns (uint40){ + return _payloads[payloadId].createdAt; + } + + function getPayloadQueuedAt(uint40 payloadId) external view returns (uint40){ + return _payloads[payloadId].queuedAt; + } + + function getPayloadExecutedAt(uint40 payloadId) external view returns (uint40){ + return _payloads[payloadId].executedAt; + } + +function getActionsLength(uint40 payloadId) external view returns (uint256 length) { + return _payloads[payloadId].actions.length; + } + +function getAction(uint40 payloadId, uint256 actionIndex) external view + returns (ExecutionAction memory action) { + return (_payloads[payloadId].actions[actionIndex]); + } + + +function getActionFixedSizeFields(uint40 payloadId, uint256 actionIndex) external view + returns (address, bool, PayloadsControllerUtils.AccessControl, uint256) { + return (_payloads[payloadId].actions[actionIndex].target, + _payloads[payloadId].actions[actionIndex].withDelegateCall, + _payloads[payloadId].actions[actionIndex].accessLevel, + _payloads[payloadId].actions[actionIndex].value); + } + +// function getActionAccessLevel(uint40 payloadId, uint256 actionIndex) external view +// returns (PayloadsControllerUtils.AccessControl) { +// return _payloads[payloadId].actions[actionIndex].accessLevel; +// } + +function getActionAccessLevel(uint40 payloadId, uint256 actionIndex) external view returns (PayloadsControllerUtils.AccessControl) { + return (_payloads[payloadId].actions[actionIndex].accessLevel); + } + +function getActionSignature(uint40 payloadId, uint256 actionIndex) external view returns (string memory) { + return (_payloads[payloadId].actions[actionIndex].signature); + } +function getActionCallData(uint40 payloadId, uint256 actionIndex) external view returns (bytes memory) { + return (_payloads[payloadId].actions[actionIndex].callData); + } + +function getMaximumAccessLevelRequired(uint40 payloadId) external view returns (PayloadsControllerUtils.AccessControl level) { + return _payloads[payloadId].maximumAccessLevelRequired; + } + + +function compare(string memory str1, string memory str2) external pure returns (bool) { + return keccak256(abi.encodePacked(str1)) == keccak256(abi.encodePacked(str2)); + } + +function compare(bytes memory b1, bytes memory b2) external pure returns (bool) { + return keccak256(abi.encodePacked(b1)) == keccak256(abi.encodePacked(b2)); + } + + function getPayloadStateVariable(uint40 payloadId) external view returns (PayloadState) { + return _payloads[payloadId].state; + } + + /** + * @notice method to encode a message, so it could be sent to the governance chain + * @param payloadId field 1 + * @param accessLevel field 2 + * @param proposalVoteActivationTimestamp field 3 + * @return message encoded message + */ +function encodeMessage(uint40 payloadId, PayloadsControllerUtils.AccessControl accessLevel, uint40 proposalVoteActivationTimestamp) + external pure returns (bytes memory) + { + bytes memory message = abi.encode(payloadId, accessLevel, proposalVoteActivationTimestamp); + return message; + } + +} + diff --git a/security/certora/harness/tokens/AaveTokenV3_DummyA.sol b/security/certora/harness/tokens/AaveTokenV3_DummyA.sol new file mode 100644 index 0000000..682aab6 --- /dev/null +++ b/security/certora/harness/tokens/AaveTokenV3_DummyA.sol @@ -0,0 +1,14 @@ +pragma solidity ^0.8.0; + +import {AaveTokenV3} from 'aave-token-v3/AaveTokenV3.sol'; + +contract AaveTokenV3_DummyA is AaveTokenV3 { + + function getDelegatedPowerByTypeHarness( + address user, + GovernancePowerType delegationType + ) public returns (uint256) { + DelegationState memory userState = _getDelegationState(user); + return _getDelegatedPowerByType(userState, delegationType); + } +} diff --git a/security/certora/harness/tokens/AaveTokenV3_DummyB.sol b/security/certora/harness/tokens/AaveTokenV3_DummyB.sol new file mode 100644 index 0000000..4c6a4f1 --- /dev/null +++ b/security/certora/harness/tokens/AaveTokenV3_DummyB.sol @@ -0,0 +1,14 @@ +pragma solidity ^0.8.0; + +import {AaveTokenV3} from 'aave-token-v3/AaveTokenV3.sol'; + +contract AaveTokenV3_DummyB is AaveTokenV3 { + + function getDelegatedPowerByTypeHarness( + address user, + GovernancePowerType delegationType + ) public returns (uint256) { + DelegationState memory userState = _getDelegationState(user); + return _getDelegatedPowerByType(userState, delegationType); + } +} diff --git a/security/certora/harness/tokens/AaveTokenV3_DummyC.sol b/security/certora/harness/tokens/AaveTokenV3_DummyC.sol new file mode 100644 index 0000000..b9f6188 --- /dev/null +++ b/security/certora/harness/tokens/AaveTokenV3_DummyC.sol @@ -0,0 +1,14 @@ +pragma solidity ^0.8.0; + +import {AaveTokenV3} from 'aave-token-v3/AaveTokenV3.sol'; + +contract AaveTokenV3_DummyC is AaveTokenV3 { + + function getDelegatedPowerByTypeHarness( + address user, + GovernancePowerType delegationType + ) public returns (uint256) { + DelegationState memory userState = _getDelegationState(user); + return _getDelegatedPowerByType(userState, delegationType); + } +} diff --git a/security/certora/harness/voting/DelegationModeHarness.sol b/security/certora/harness/voting/DelegationModeHarness.sol new file mode 100644 index 0000000..e041b8b --- /dev/null +++ b/security/certora/harness/voting/DelegationModeHarness.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {DelegationMode} from 'aave-token-v3/DelegationAwareBalance.sol'; + +/** + * @title Hack to use DelegationMode in spec + * `DelegationMode` is not part of any contract, and so cannot be used in spec, + * this hack solves the problem by providing enum `Mode` which is equal. + */ +contract DelegationModeHarness { + + enum Mode { + NO_DELEGATION, + VOTING_DELEGATED, + PROPOSITION_DELEGATED, + FULL_POWER_DELEGATED + } + + function is_equal_to_original() public view returns (bool) { + return ( + uint8(type(Mode).min) == uint8(type(DelegationMode).min) && + uint8(type(Mode).max) == uint8(type(DelegationMode).max) && + uint8(Mode.NO_DELEGATION) == uint8(DelegationMode.NO_DELEGATION) && + uint8(Mode.VOTING_DELEGATED) == uint8(DelegationMode.VOTING_DELEGATED) && + uint8(Mode.PROPOSITION_DELEGATED) == uint8(DelegationMode.PROPOSITION_DELEGATED) && + uint8(Mode.FULL_POWER_DELEGATED) == uint8(DelegationMode.FULL_POWER_DELEGATED) + ); + } + + function mode_to_int(Mode mode) public view returns (uint8) { + return uint8(mode); + } +} diff --git a/security/certora/harness/voting/VotingMachineHarness.sol b/security/certora/harness/voting/VotingMachineHarness.sol new file mode 100644 index 0000000..db95222 --- /dev/null +++ b/security/certora/harness/voting/VotingMachineHarness.sol @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {VotingMachine} from '../../../../src/contracts/voting/VotingMachine.sol'; +import {IDataWarehouse, IVotingStrategy} from '../../../../src/contracts/voting/interfaces/IVotingMachineWithProofs.sol'; + + +/** + * @title VotingMachineHarness + * Harnessing VotingMachine to handle arrays of VotingBalanceProof. + */ +contract VotingMachineHarness is VotingMachine { + + constructor( + address crossChainController, + uint256 gasLimit, + uint256 l1VotingPortalChainId, + IVotingStrategy votingStrategy, + address l1VotingPortal, + address governance + ) VotingMachine( + crossChainController, + gasLimit, + l1VotingPortalChainId, + votingStrategy, + l1VotingPortal, + governance + ) { + } + + /** + * @notice A variant of submitVote that accepts a single VotingBalanceProof. + */ + function submitVoteSingleProof( + uint256 proposalId, + bool support, + VotingBalanceProof calldata proof + ) external { + VotingBalanceProof[] memory proofs = new VotingBalanceProof[](1); + + // Copy proof + proofs[0].underlyingAsset = proof.underlyingAsset; + proofs[0].slot = proof.slot; + proofs[0].proof = proof.proof; + + // To convert `proofs` into `calldata` we make an external call using `this`. + // Unfortunately this makes the msg.sender into the contract, so we call submitVoteFromVoter. + this.submitVoteFromVoter(msg.sender, proposalId, support, proofs); + } + + // Hack - see submitVoteSingleProof + function submitVoteFromVoter( + address voter, + uint256 proposalId, + bool support, + VotingBalanceProof[] calldata votingBalanceProofs + ) external { + require(msg.sender == address(this)); // Safety measure + _submitVote(voter, proposalId, support, votingBalanceProofs); + } + + /** + * @notice For testing `_createBridgedProposalVote`, e.g. in `newProposalUnusedId`. + */ + function createProposalVoteHarness( + uint256 proposalId, + bytes32 blockHash, + uint24 votingDuration + ) external { + _createBridgedProposalVote(proposalId, blockHash, votingDuration); + } + + // Needed for proposalIdIsImmutable rule + function getIdOfProposal( + uint256 proposalId + ) external view returns (uint256) { + return _proposals[proposalId].id; + } +} diff --git a/security/certora/harness/voting/VotingMachineHarnessTriple.sol b/security/certora/harness/voting/VotingMachineHarnessTriple.sol new file mode 100644 index 0000000..e295777 --- /dev/null +++ b/security/certora/harness/voting/VotingMachineHarnessTriple.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {VotingMachineHarness} from './VotingMachineHarness.sol'; +import {IDataWarehouse, IVotingStrategy} from '../../../../src/contracts/voting/interfaces/IVotingMachineWithProofs.sol'; + + +/** + * @title VotingMachineHarnessTriple + * Adds the submitVoteTripleProof method, this is separated to avoid using + * loop_iter=3 throughout. + */ +contract VotingMachineHarnessTriple is VotingMachineHarness { + + constructor( + address crossChainController, + uint256 gasLimit, + uint256 l1VotingPortalChainId, + IVotingStrategy votingStrategy, + address l1VotingPortal, + address governance + ) VotingMachineHarness( + crossChainController, + gasLimit, + l1VotingPortalChainId, + votingStrategy, + l1VotingPortal, + governance + ) { + } + + /** + * @notice A variant of submitVote that accepts three proofs. + */ + function submitVoteTripleProof( + uint256 proposalId, + bool support, + VotingBalanceProof calldata proof1, + VotingBalanceProof calldata proof2, + VotingBalanceProof calldata proof3 + ) external { + VotingBalanceProof[] memory proofs = new VotingBalanceProof[](3); + + // Copy proofs + proofs[0].underlyingAsset = proof1.underlyingAsset; + proofs[0].slot = proof1.slot; + proofs[0].proof = proof1.proof; + + proofs[1].underlyingAsset = proof2.underlyingAsset; + proofs[1].slot = proof2.slot; + proofs[1].proof = proof2.proof; + + proofs[2].underlyingAsset = proof3.underlyingAsset; + proofs[2].slot = proof3.slot; + proofs[2].proof = proof3.proof; + + // To convert `proofs` into `calldata` we make an external call using `this`. + // Unfortunately this makes the msg.sender into the contract, so we call submitVoteFromVoter. + this.submitVoteFromVoter(msg.sender, proposalId, support, proofs); + } +} diff --git a/security/certora/harness/voting/VotingStrategyHarness.sol b/security/certora/harness/voting/VotingStrategyHarness.sol new file mode 100644 index 0000000..da4079b --- /dev/null +++ b/security/certora/harness/voting/VotingStrategyHarness.sol @@ -0,0 +1,27 @@ +pragma solidity ^0.8.0; + +import {VotingStrategy} from '../../../../src/contracts/voting/VotingStrategy.sol'; + + +/** + * @title VotingStrategyHarness + * Needed for `hasRequiredRoots`. + */ +contract VotingStrategyHarness is VotingStrategy { + constructor(address dataWarehouse) VotingStrategy (dataWarehouse) { + } + + // Converts `hasRequiredRoots` to a function that returns boolean + function is_hasRequiredRoots(bytes32 blockHash) external view returns (bool) { + bool is_ok; + try this.hasRequiredRoots(blockHash) { + is_ok = true; + } catch (bytes memory) {} + return is_ok; + } + + // Just the length of the array + function getVotingAssetListLength() external view returns (uint256) { + return this.getVotingAssetList().length; + } +} diff --git a/security/certora/reports/Formal Verification Report Of Aave Governance V3.pdf b/security/certora/reports/Formal Verification Report Of Aave Governance V3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2cc5da40a376e55067ef6cdd3120b8588e474c1e GIT binary patch literal 387178 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 z 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�DJ4I}R{kV+`^?~nf|JJRUjEoO~Wm{44_3VMc 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

+-dw(F*p*GW2JQ?#Q1kZam5V~XhkfZ}dwNaE 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 z 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%0A%U2z}LxQgw-9d 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 N-Fxrre(Awm-vRWhx03(> literal 0 HcmV?d00001 diff --git a/security/certora/Formal_Verification_Report_Aave_Governance_V3.md b/security/certora/reports/Formal_Verification_Report_Aave_Governance_V3.md similarity index 100% rename from security/certora/Formal_Verification_Report_Aave_Governance_V3.md rename to security/certora/reports/Formal_Verification_Report_Aave_Governance_V3.md diff --git a/security/certora/specs/Governance.spec b/security/certora/specs/Governance.spec new file mode 100644 index 0000000..5b6c1f2 --- /dev/null +++ b/security/certora/specs/Governance.spec @@ -0,0 +1,1089 @@ +import "set.spec"; + + +using GovernancePowerStrategy as _GovernancePowerStrategy; +using VotingPortal as _VotingPortal; + +methods { + + //call by modifier initializer, allow reachability of _initializeCore + function _.isContract(address) internal => NONDET; + +// function _.forwardVoteMessage(uint256,address,bool,IVotingMachineWithProofs.VotingAssetWithSlot[]) external => NONDET; +//todo: investigate why voteViaPortal() is unreachable without summary of forwardVoteMessage or _sendMessage + function _VotingPortal._sendMessage(address,IVotingPortal.MessageType,uint256,bytes memory) internal => NONDET; + // TODO: consider implementing a dummy CrossChainForwarder.sol + + + //caller: src/contracts/BaseGovernancePowerStrategy.sol + //implemented: lib/aave-token-v3/src/BaseDelegation.sol + //GovernancePowerStrategy.getFullPropositionPower() calls IGovernancePowerDelegationToken.getPowerCurrent() +// function _.getPowerCurrent(address user, IGovernancePowerDelegationToken.GovernancePowerType ) external => get_fixed_power(user) expect uint256 ALL; + //function _.getPowerCurrent(address , IGovernancePowerDelegationToken.GovernancePowerType ) external => NONDET; +// function _._getFullPowerByType(address user,IGovernancePowerDelegationToken.GovernancePowerType) internal => get_fixed_power(user) expect uint256 ALL; + + +//function _GovernancePowerStrategy._getFullPowerByType(address user,IGovernancePowerDelegationToken.GovernancePowerType) internal returns (uint256)=> get_fixed_power(user) ; + +//todo: allow user power to change over time. Should be fixed per, user, type, and block.timestamp +function _GovernancePowerStrategy._getFullPowerByType(address user,IGovernancePowerDelegationToken.GovernancePowerType type) + internal returns (uint256) => get_fixed_user_and_type_power(user, type); +//function _._getFullPowerByType(address user,IGovernancePowerDelegationToken.GovernancePowerType type) +// internal with (env e) => get_fixed_user_and_type_power(user, type); +//function _GovernancePowerStrategy._getFullPowerByType(address user,IGovernancePowerDelegationToken.GovernancePowerType type) +// internal returns (uint256)=> NONDET ; + + //called by executeProposal() + function _.forwardMessage(uint256,address,uint256,bytes) external => NONDET; + + //function _GovernancePowerStrategy.getFullPropositionPower(address) external returns (uint256) => CONSTANT; +// function _.forwardStartVotingMessage(uint256,bytes32,uint24 ) external => NONDET; + + + //todo: replace with a link +// function _.getVotingAssetList() external => DISPATCHER(true); + + // function _.isTokenSlotAccepted(address,uint128) external => DISPATCHER(true); + + + function createProposal(PayloadsControllerUtils.Payload[],address,bytes32) external returns (uint256) ; + + //Governance + function PRECISION_DIVIDER() external returns (uint256) envfree; + function ACHIEVABLE_VOTING_PARTICIPATION() external returns (uint256) envfree; + function COOLDOWN_PERIOD() external returns (uint256) envfree; + function getProposalsCount() external returns (uint256) envfree; + function getVotingPortalsCount() external returns (uint256) envfree; + function isVotingPortalApproved(address) external returns (bool) envfree; + function getVotingConfig(PayloadsControllerUtils.AccessControl) external returns (IGovernanceCore.VotingConfig) envfree; + function getRepresentativeByChain(address,uint256) external returns (address) envfree; + function getRepresentedVotersByChain(address,uint256) external returns (address[] memory) envfree; + function guardian() external returns (address) envfree; + function owner() external returns (address) envfree; + + + + //function removeVotingPortals(address[]) external envfree; + + //GovernanceHarness + function getPayloadLength(uint256 proposalId) external returns (uint256) envfree; + function getProposalStateVariable(uint256 proposalId) external returns (IGovernanceCore.State) envfree; + + function getProposalCreator(uint256) external returns (address) envfree; + function getProposalVotingPortal(uint256) external returns (address) envfree; + function getProposalAccessLevel(uint256) external returns (PayloadsControllerUtils.AccessControl) envfree; + + function getProposalVotingDuration(uint256) external returns (uint24) envfree; + function getProposalCreationTime(uint256) external returns (uint40) envfree; + function getProposalIpfsHash(uint256) external returns (bytes32) envfree; + function getProposalVotingActivationTime(uint256) external returns (uint40) envfree; + function getProposalSnapshotBlockHash(uint256) external returns (bytes32) envfree; + function getProposalCancellationFee(uint256) external returns (uint256) envfree; + function getProposalCount() external returns (uint256) envfree; + + + function getPayloadChain(uint256, uint256) external returns (uint256) envfree; + function getPayloadAccessLevel(uint256,uint256) external returns (PayloadsControllerUtils.AccessControl) envfree; + function getPayloadPayloadsController(uint256,uint256) external returns (address) envfree; + function getPayloadPayloadId(uint256,uint256) external returns (uint40) envfree; + function isRepresentativeOfVoter(address,address,uint256) external returns (bool) envfree; + + + // GovernancePowerStrategy + //todo: investigate why it passes envfreeFuncsStaticCheck + //function _GovernancePowerStrategy.getFullPropositionPower(address) external returns (uint256) envfree; + +} + +ghost mathint totalCancellationFee{ + init_state axiom totalCancellationFee == 0; +} +ghost bool isCancellationChanged; + +hook Sstore _proposals[KEY uint256 proposalId].cancellationFee uint256 newFee + (uint256 oldFee) STORAGE +{ + if (newFee != oldFee){ + isCancellationChanged = true; + } + totalCancellationFee = totalCancellationFee + newFee - oldFee; +} + + +// invariants of AddressSet +use invariant set_size_leq_max_uint160; + + +// State changing methods +definition state_advancing_function(method f) returns bool = + f.selector == sig:createProposal(PayloadsControllerUtils.Payload[],address,bytes32).selector || + f.selector == sig:activateVoting(uint256).selector || + f.selector == sig:queueProposal(uint256,uint128,uint128).selector || + f.selector == sig:executeProposal(uint256).selector; + +definition state_changing_function(method f) returns bool = + state_advancing_function(f) || f.selector == sig:cancelProposal(uint256).selector; + +definition initializeSig(method f) returns bool = + f.selector == sig:initialize(address,address,address, IGovernanceCore.SetVotingConfigInput[],address[],uint256,uint256).selector; + +definition terminalState(uint256 proposalId) returns bool = + getProposalStateVariable(proposalId) == IGovernanceCore.State.Executed || + getProposalStateVariable(proposalId) == IGovernanceCore.State.Failed || + getProposalStateVariable(proposalId) == IGovernanceCore.State.Cancelled || + getProposalStateVariable(proposalId) == IGovernanceCore.State.Expired; + + +function getMinPropositionPower(IGovernanceCore.VotingConfig votingConfig) returns uint56{ + return votingConfig.minPropositionPower; +} + +// ghost mapping(address => uint256) user_power; +// ghost mapping(IGovernancePowerDelegationToken.GovernancePowerType => uint256) type_power; +ghost mapping(address => mapping(IGovernancePowerDelegationToken.GovernancePowerType => uint256)) user_type_power; + + +function get_fixed_user_and_type_power(address user, IGovernancePowerDelegationToken.GovernancePowerType type) returns uint256{ + return user_type_power[user][type]; +} + + +// +// from properties.md +// + +// @title Property #1: Proposal IDs are consecutive and incremental. +// Proposal ID increments by 1 iff createProposal was called +rule consecutiveIDs(method f) filtered +{ f -> f.selector != sig:createProposal(PayloadsControllerUtils.Payload[],address,bytes32).selector } +{ + + env e1; env e2; env e3; + calldataarg args1; calldataarg args2; calldataarg args3; + + mathint id_first = createProposal(e1, args1); + f(e2, args2); + mathint id_second = createProposal(e3, args3); + assert id_second == id_first + 1; +} + + +// @title Property #2: Every proposal should contain at least one payload. +// For initialized property, the proposal list is not empty +invariant at_least_single_payload_active (env e, uint256 proposalId) + getProposalState(e, proposalId) != IGovernanceCore.State.Null + => getPayloadLength(proposalId) > 0 + { + preserved{ + requireInvariant empty_payloads_if_uninitialized_proposal(proposalId); + } + } +// Same property just referring directly to the storage +invariant at_least_single_payload_active_variable (uint256 proposalId) + getProposalStateVariable(proposalId) != IGovernanceCore.State.Null => getPayloadLength(proposalId) > 0 + { + preserved{ + requireInvariant empty_payloads_if_uninitialized_proposal(proposalId); + } + } + +// Address zero cannot be a creator of a proposal +invariant creator_is_not_zero(uint256 proposalId) + getProposalStateVariable(proposalId) != IGovernanceCore.State.Null => getProposalCreator(proposalId) != 0 + { + preserved with (env e) + {require e.msg.sender != 0;} + } + +invariant creator_is_not_zero_2(uint256 proposalId) + proposalId < getProposalsCount() => getProposalCreator(proposalId) != 0 + { + preserved with (env e) + {require e.msg.sender != 0;} + } + +// Uninitialized proposals has no payloads +invariant empty_payloads_iff_uninitialized_proposal(uint256 proposalId) + proposalId >= getProposalsCount() <=> getPayloadLength(proposalId) == 0; + +invariant empty_payloads_if_uninitialized_proposal(uint256 proposalId) + proposalId >= getProposalsCount() => getPayloadLength(proposalId) == 0; + +// A proposal is uninitialized iff its state is Null +invariant null_state_iff_uninitialized_proposal(env e, uint256 proposalId) + proposalId >= getProposalsCount() <=> getProposalState(e, proposalId) == IGovernanceCore.State.Null; + + +invariant null_state_variable_iff_uninitialized_proposal(uint256 proposalId) + proposalId >= getProposalsCount() <=> getProposalStateVariable(proposalId) == IGovernanceCore.State.Null; + +invariant null_state_if_uninitialized_proposal(env e, uint256 proposalId) + proposalId >= getProposalsCount() => getProposalState(e, proposalId) == IGovernanceCore.State.Null; + +invariant null_state_variable_if_uninitialized_proposal(uint256 proposalId) + proposalId >= getProposalsCount() => getProposalStateVariable(proposalId) == IGovernanceCore.State.Null; + +invariant null_state_only_if_uninitialized_proposal(env e, uint256 proposalId) + getProposalState(e, proposalId) == IGovernanceCore.State.Null => proposalId >= getProposalsCount(); + +invariant null_state_variable_only_if_uninitialized_proposal(uint256 proposalId) + getProposalStateVariable(proposalId) == IGovernanceCore.State.Null => proposalId >= getProposalsCount(); + + + +// @title Property #3: If a voting portal gets invalidated during the proposal life cycle, +// the proposal should not transition to any state apart from Cancelled, Expired, and Failed. + +// If a proposal lost its voting power its state can transition to Executed, Cancelled, Expired, and Failed only. +// Note: if voting power decreases after queuing the proposal can still be executed. +// +// Issue reported on June 27, 2023 - violation of property #5: No further state transitions are possible if proposal.state > 3. +//todo: verify fix +// second fail, reported on June 29 + +rule proposal_after_voting_portal_invalidate{ + + env e1; env e2; env e3; + calldataarg args; + method f; + uint256 proposalId; + + require e1.block.timestamp <= e3.block.timestamp; + + IGovernanceCore.State state1 = getProposalState(e1,proposalId); + f(e2, args); + require !isVotingPortalApproved(getProposalVotingPortal(proposalId)); + IGovernanceCore.State state2 = getProposalState(e3, proposalId); + + assert state1 != state2 => + state2 == IGovernanceCore.State.Executed || + state2 == IGovernanceCore.State.Cancelled || + state2 == IGovernanceCore.State.Expired || state2 == IGovernanceCore.State.Failed; + +} + + + +// @title Property #4: If the proposer's proposition power goes below the minimum required threshold, the proposal +// should not go to any state apart from Failed or Canceled. + +// In case of insufficient proposition power state can change to +rule insufficient_proposition_power(method f) filtered { f -> !f.isView}{ + env e1; env e2; + calldataarg args; + uint256 proposalId; + + IGovernanceCore.State state1 = getProposalState(e1, proposalId); + f(e1, args); + IGovernanceCore.State state2 = getProposalState(e1, proposalId); + + mathint creator_power = _GovernancePowerStrategy.getFullPropositionPower(e2,getProposalCreator(proposalId)); + mathint voting_config_min_power = getMinPropositionPower(getVotingConfig(getProposalAccessLevel(proposalId))) * PRECISION_DIVIDER(); //uint56 + + require state1 != state2; + require creator_power <= voting_config_min_power; + assert state2 == IGovernanceCore.State.Cancelled || state2 == IGovernanceCore.State.Failed; + +} + +//pass +rule insufficient_proposition_power_allow_time_elapse(method f) filtered { f -> !f.isView} +{ + env e1; env e2; env e3; env e4; + calldataarg args; + uint256 proposalId; + + require e1.block.timestamp <= e2.block.timestamp && e2.block.timestamp <= e3.block.timestamp; + + IGovernanceCore.State state1 = getProposalState(e1, proposalId); + f(e2, args); + IGovernanceCore.State state2 = getProposalState(e3, proposalId); + mathint creator_power = _GovernancePowerStrategy.getFullPropositionPower(e4,getProposalCreator(proposalId)); + mathint voting_config_min_power = getMinPropositionPower(getVotingConfig(getProposalAccessLevel(proposalId))) * PRECISION_DIVIDER(); //uint56 + + assert (state1 != state2 && (creator_power <= voting_config_min_power)) => + state2 == IGovernanceCore.State.Cancelled || state2 == IGovernanceCore.State.Failed || state2 == IGovernanceCore.State.Expired; + +} + +rule insufficient_proposition_power_time_elapsed_tight_witness(method f) filtered { f -> state_advancing_function(f)}{ + env e1; env e2; env e3; env e4; + calldataarg args; + uint256 proposalId; + + require e1.block.timestamp <= e2.block.timestamp && e2.block.timestamp <= e3.block.timestamp; + + IGovernanceCore.State state1 = getProposalState(e1, proposalId); + f(e2, args); + IGovernanceCore.State state2 = getProposalState(e3, proposalId); + mathint creator_power = _GovernancePowerStrategy.getFullPropositionPower(e4,getProposalCreator(proposalId)); + mathint voting_config_min_power = getMinPropositionPower(getVotingConfig(getProposalAccessLevel(proposalId))) * PRECISION_DIVIDER(); //uint56 + + require state1 != state2; + require creator_power <= (voting_config_min_power+1); + satisfy ! (state2 == IGovernanceCore.State.Cancelled || state2 == IGovernanceCore.State.Failed); +} + + +//helper a proposal state is Null iff its required access level is null +invariant null_state_variable_iff_null_access_level(uint256 proposalId) + getProposalStateVariable(proposalId) == IGovernanceCore.State.Null <=> + getProposalAccessLevel(proposalId) == PayloadsControllerUtils.AccessControl.Level_null; + + + +// Once assign the voting portal is immutable +rule immutable_voting_portal(){ + + env e; + calldataarg args; + method f; + uint256 proposalId; + + requireInvariant zero_voting_portal_iff_uninitialized_proposal(proposalId); + + address votingPortal_before = getProposalVotingPortal(proposalId); + f(e, args); + address votingPortal_after = getProposalVotingPortal(proposalId); + + assert votingPortal_before != 0 => votingPortal_before == votingPortal_after; +} + +// helper: A proposal is uninitialized iff its voting portal is address zero. +invariant zero_voting_portal_iff_uninitialized_proposal(uint256 proposalId) + proposalId >= getProposalsCount() <=> getProposalVotingPortal(proposalId) == 0 + { + preserved { + requireInvariant zero_address_is_not_a_valid_voting_portal(); + } + + } + +//helper: Zero address is never an approved voting portal +invariant zero_address_is_not_a_valid_voting_portal() + !isVotingPortalApproved(0); + + + +// @title Property #5: No further state transitions are possible if proposal.state > 3. +// All state that are greater than 3 are terminal +rule no_state_transitions_beyond_3{ + env e1; env e2; env e3; + calldataarg args; + method f; + uint256 proposalId; + + require e1.block.timestamp <= e2.block.timestamp && e2.block.timestamp <= e3.block.timestamp; + requireInvariant null_state_iff_uninitialized_proposal(e1, proposalId); + + + IGovernanceCore.State state1 = getProposalState(e1, proposalId); + f(e2, args); + IGovernanceCore.State state2 = getProposalState(e3, proposalId); + + assert + assert_uint256(state1) > 3=> state1 == state2; +} + + +// @title Property #6 proposal.state can't decrease. +// Forward progress of the proposal state-machine: the state cannot decrease. +rule state_cant_decrease{ + env e1; env e2; env e3; + calldataarg args; + method f; + uint256 proposalId; + + require e1.block.timestamp <= e2.block.timestamp && e2.block.timestamp <= e3.block.timestamp; + requireInvariant null_state_iff_uninitialized_proposal(e1, proposalId); + + IGovernanceCore.State state1 = getProposalState(e1, proposalId); + f(e2, args); + IGovernanceCore.State state2 = getProposalState(e3, proposalId); + + assert assert_uint256(state1) <= assert_uint256(state2); +} + + +// @title Property #7 +// It should be impossible to do more than 1 state transition per proposal per block, except: +// Cancellation because of the proposition power change. +// Cancellation after proposal creation by creator. +// Proposal execution after proposal queuing if COOLDOWN_PERIOD is 0. + +// No 2 state transitions happens in a single block timestamp, except cancellation by the owner or by a guardian. +rule single_state_transition_per_block_non_creator_non_guardian(method f, method g, method h) +filtered { f -> state_changing_function(f), + g -> !g.isView && !initializeSig(g), + h -> state_changing_function(h)} +{ + env e1; + env e2; + env e3; + env e4; + env e5; + env e6; + calldataarg args1; + calldataarg args2; + calldataarg args3; + uint256 proposalId; + + require e1.block.timestamp <= e2.block.timestamp; + require e2.block.timestamp == e3.block.timestamp; + require e3.block.timestamp == e4.block.timestamp; + require e4.block.timestamp == e5.block.timestamp; + require e5.block.timestamp == e6.block.timestamp; + require e6.block.timestamp < 2^40; + + requireInvariant null_state_iff_uninitialized_proposal(e2, proposalId); + IGovernanceCore.State state1 = getProposalState(e1, proposalId); + f(e2, args1); + g(e3, args2); + IGovernanceCore.State state2 = getProposalState(e4, proposalId); + h(e5, args3); + IGovernanceCore.State state3 = getProposalState(e6, proposalId); + + assert getProposalCreator(proposalId) != e5.msg.sender && // creator can cancel + guardian() != e5.msg.sender && + owner() != e3.msg.sender && //owner can call setVotingConfigs, removeVotingPortals. TODO: add the assumption to the final report + COOLDOWN_PERIOD() != 0 && + state1 != state2 => state2 == state3; +} + + +//todo: add witnesses of double transition +//todo: investigate: should there be more witnesses in addition to queueProposal-executeProposal +rule single_state_transition_per_block_non_creator_witness +{ + env e1; + env e2; + env e3; + env e4; + env e5; + calldataarg args1; + calldataarg args2; + uint256 proposalId; + + require e1.block.timestamp <= e2.block.timestamp; + require e2.block.timestamp == e3.block.timestamp; + require e3.block.timestamp == e4.block.timestamp; + require e4.block.timestamp == e5.block.timestamp; + require e5.block.timestamp < 2^40; + requireInvariant null_state_iff_uninitialized_proposal(e2, proposalId); + IGovernanceCore.State state1 = getProposalState(e1, proposalId); + queueProposal(e2, args1); + IGovernanceCore.State state2 = getProposalState(e3, proposalId); + executeProposal(e4, args2); + IGovernanceCore.State state3 = getProposalState(e5, proposalId); + + require getProposalCreator(proposalId) != e4.msg.sender; // creator can cancel + require currentContract != e2.msg.sender; + require currentContract != e4.msg.sender; + require guardian() != e4.msg.sender; + + require state1 != state2; + satisfy !(state2 == state3); +} + + + +/// Property #8: Only the owner can set the voting power strategy and voting config. +// fails on initialize + +// A unauthorized user (not an owner) cannot change voting parameters +rule only_owner_can_set_voting_config(method f) filtered { + f -> !f.isView && + !initializeSig(f) } +{ + env e; + calldataarg args; + PayloadsControllerUtils.AccessControl accessLevel; + + IGovernanceCore.VotingConfig voting_config_before = getVotingConfig(accessLevel); + f(e, args); + IGovernanceCore.VotingConfig voting_config_after = getVotingConfig(accessLevel); + + assert e.msg.sender != owner() => voting_config_before.coolDownBeforeVotingStart == voting_config_after.coolDownBeforeVotingStart; + assert e.msg.sender != owner() => voting_config_before.votingDuration == voting_config_after.votingDuration; + assert e.msg.sender != owner() => voting_config_before.yesThreshold == voting_config_after.yesThreshold; + assert e.msg.sender != owner() => voting_config_before.yesNoDifferential == voting_config_after.yesNoDifferential; + assert e.msg.sender != owner() => voting_config_before.minPropositionPower == voting_config_after.minPropositionPower; + +} +//todo add witness - owner changes voting config + +rule only_owner_can_set_voting_config_witness(method f) filtered { f -> !f.isView} +{ + env e; + calldataarg args; + PayloadsControllerUtils.AccessControl accessLevel; + + IGovernanceCore.VotingConfig voting_config_before = getVotingConfig(accessLevel); + f(e, args); + IGovernanceCore.VotingConfig voting_config_after = getVotingConfig(accessLevel); + + satisfy voting_config_before.coolDownBeforeVotingStart == voting_config_after.coolDownBeforeVotingStart; + satisfy voting_config_before.votingDuration == voting_config_after.votingDuration; + satisfy voting_config_before.yesThreshold == voting_config_after.yesThreshold; + satisfy voting_config_before.yesNoDifferential == voting_config_after.yesNoDifferential; + satisfy voting_config_before.minPropositionPower == voting_config_after.minPropositionPower; + +} + +//Property #9: When invalidating voting config, proposal can not be queued + +// One can not queue a proposal if its voting portal is unapproved +rule cannot_queue_when_voting_portal_unapproved{ + + env e1; env e2; env e3; + calldataarg args; + method f; + uint256 proposalId; + uint128 forVotes; + uint128 againstVotes; + + bool is_voting_portal_approved = isVotingPortalApproved(getProposalVotingPortal(proposalId)); + queueProposal(e1, proposalId, forVotes, againstVotes); + assert is_voting_portal_approved; +} + + + + +//Property #10: Guardian can cancel proposals with proposal.state < 4 + +// A guardian can cancel a proposla whose state < 4 but it cannot cancel if state is >= 5 +rule guardian_can_cancel() +{ + env e1; + env e2; + env e3; + uint256 proposalId; + + require e1.block.timestamp <= e2.block.timestamp; + + IGovernanceCore.State state1 = getProposalState(e1, proposalId); + cancelProposal(e2, proposalId); + IGovernanceCore.State state2 = getProposalState(e3, proposalId); + + assert state2 == IGovernanceCore.State.Cancelled; + assert assert_uint256(state1) < 4; +} + +// Only a guardian, an owner can cancel any proposal, a creator can cancel his own proposal +rule only_guardian_can_cancel(method f)filtered +{ f -> !f.isView && + !initializeSig(f) + } +{ + env e1; + env e2; + env e3; + + calldataarg args1; + calldataarg args2; + +// require e1.block.timestamp <= e2.block.timestamp; + + uint256 proposalId; + + + require createProposal(e1, args1) == proposalId; + //mathint creator_power_before = _GovernancePowerStrategy.getFullPropositionPower(e2,getProposalCreator(proposalId)); + + f(e2, args2); +// IGovernanceCore.State state1 = getProposalState(e1, proposalId); + +// mathint creator_power_after = _GovernancePowerStrategy.getFullPropositionPower(e2,getProposalCreator(proposalId)); + cancelProposal(e3, proposalId); + + assert guardian() == e2.msg.sender || + owner() == e2.msg.sender || //todo: review + guardian() == e3.msg.sender || + getProposalCreator(proposalId) == e3.msg.sender + // || creator_power_after < creator_power_before + ; +} + + +//helper parametric function +function call_state_changing_function(env e, uint256 proposalId) { +uint128 forVotes; + calldataarg args; + uint128 againstVotes; + uint256 sel; + if (sel == 1) {require createProposal(e, args) == proposalId;} + else if (sel ==2) {activateVoting(e, proposalId);} + else if (sel ==3) {queueProposal(e, proposalId, forVotes, againstVotes);} + else if (sel ==4) {executeProposal(e, proposalId);} + else if (sel ==5) {cancelProposal(e, proposalId);} + else {require false;} + } + + +//Property #11: The following proposal parameters can only be set once, at proposal creation: +// creator, accessLevel, votingPortal, votingDuration, creationTime, ipfsHash, payloads. + +// Once a proposal is initialized its creator, accessLevel, votingPortal, votingDuration, creationTime, ipfsHash, payloads length cannot change. +rule immutable_after_creation(method f){ + + env e1; + env e2; + calldataarg args; + uint256 proposalId; + + + requireInvariant null_state_iff_uninitialized_proposal(e2, proposalId); + + IGovernanceCore.State state_before = getProposalState(e1, proposalId); + + address creator_before = getProposalCreator(proposalId); + address voting_portal_before = getProposalVotingPortal(proposalId); + PayloadsControllerUtils.AccessControl access_level_before = getProposalAccessLevel(proposalId); + uint24 voting_duration_before = getProposalVotingDuration(proposalId); + uint40 creation_time_before = getProposalCreationTime(proposalId); + bytes32 ipfs_hash_before = getProposalIpfsHash(proposalId); + uint256 payloads_length_before = getPayloadLength(proposalId); + + f(e2, args); + address creator_after = getProposalCreator(proposalId); + address voting_portal_after = getProposalVotingPortal(proposalId); + PayloadsControllerUtils.AccessControl access_level_after = getProposalAccessLevel(proposalId); + uint24 voting_duration_after = getProposalVotingDuration(proposalId); + uint40 creation_time_after = getProposalCreationTime(proposalId); + bytes32 ipfs_hash_after = getProposalIpfsHash(proposalId); + uint256 payloads_length_after = getPayloadLength(proposalId); + + + assert state_before != IGovernanceCore.State.Null => creator_before == creator_after; + assert state_before != IGovernanceCore.State.Null => access_level_before == access_level_after; + assert state_before != IGovernanceCore.State.Null => voting_portal_before == voting_portal_after; + assert state_before != IGovernanceCore.State.Null => voting_duration_before == voting_duration_before; + assert state_before != IGovernanceCore.State.Null => creation_time_before == creation_time_before; + assert state_before != IGovernanceCore.State.Null => ipfs_hash_before == ipfs_hash_after; + assert state_before != IGovernanceCore.State.Null => payloads_length_before == payloads_length_after; +} + + + +// Proposal payloads cannot change. +rule immutable_payload_after_creation(method f){ + + env e1; + env e2; + calldataarg args; + uint256 proposalId; + uint256 payloadId; + + + requireInvariant null_state_iff_uninitialized_proposal(e2, proposalId); + requireInvariant empty_payloads_iff_uninitialized_proposal(proposalId); + + IGovernanceCore.State state_before = getProposalState(e1, proposalId); + + uint256 payload_chain_before = getPayloadChain(proposalId, payloadId); + PayloadsControllerUtils.AccessControl payload_access_level_before = getPayloadAccessLevel(proposalId, payloadId); + address payloads_controller_before = getPayloadPayloadsController(proposalId, payloadId); + uint40 payloads_id_before = getPayloadPayloadId(proposalId, payloadId); + + + f(e2, args); + uint256 payload_chain_after = getPayloadChain(proposalId, payloadId); + PayloadsControllerUtils.AccessControl payload_access_level_after = getPayloadAccessLevel(proposalId, payloadId); + address payloads_controller_after = getPayloadPayloadsController(proposalId, payloadId); + uint40 payloads_id_after = getPayloadPayloadId(proposalId, payloadId); + + assert payload_chain_before == payload_chain_after; + assert payload_access_level_before == payload_access_level_after; + assert payloads_controller_before == payloads_controller_after; + assert payloads_id_before == payloads_id_after; + +} + +// Property #12: The following proposal parameters can only be set once, during voting activation: +// votingActivationTime, snapshotBlockHash, snapshotBlockNumber. + +// Proposal's votingActivationTime and snapshotBlockHash are immutable + +rule immutable_after_activation(method f) +filtered {f -> !f.isView} +{ + env e1; + env e2; + calldataarg args; + uint256 proposalId; + + activateVoting(e1, proposalId); + + uint40 voting_activation_time_before = getProposalVotingActivationTime(proposalId); + bytes32 snapshot_blockhash_before = getProposalSnapshotBlockHash(proposalId); + f(e2, args); + uint40 voting_activation_time_after = getProposalVotingActivationTime(proposalId); + bytes32 snapshot_blockhash_after = getProposalSnapshotBlockHash(proposalId); + + assert voting_activation_time_before == voting_activation_time_after; + assert snapshot_blockhash_before == snapshot_blockhash_after; +} + + + +//Property #14: Only a valid voting portal can queue a proposal and only if this is in Active state. + +// Only by an approved voting protal can call queue(), only if state is Active +rule only_valid_voting_portal_can_queue_proposal(method f){ + + env e1; + env e2; + env e3; + calldataarg args; + uint256 proposalId; + require e1.block.timestamp <= e3.block.timestamp; + + IGovernanceCore.State state_before = getProposalState(e1, proposalId); + f(e2, args); + IGovernanceCore.State state_after = getProposalState(e3, proposalId); + + assert state_before != state_after && state_after == IGovernanceCore.State.Queued => isVotingPortalApproved(e2.msg.sender); + assert state_before != state_after && state_after == IGovernanceCore.State.Queued => state_before == IGovernanceCore.State.Active; +} +//Property #15: A proposal can be executed only in Queued state, after passing the cooldown period. +//todo: consider checking that _forwardPayloadForExecution() or ICrossChainForwarder.forwardMessage() is called rather than executeProposal() + +// A proposal can be executed only after the cooldown period has elapsed since it was queued +rule proposal_executes_after_cooldown_period(){ + + env e1; + env e2; + env e3; + uint256 proposalId; + uint128 forVotes; + uint128 againstVotes; + require e2.block.timestamp <= e3.block.timestamp; + require e1.block.timestamp < 2^40; + require e3.block.timestamp < 2^40; + + queueProposal(e1, proposalId, forVotes, againstVotes); + IGovernanceCore.State state_before = getProposalState(e2, proposalId); + executeProposal(e3, proposalId); + + assert state_before == IGovernanceCore.State.Queued; + assert e3.block.timestamp - e1.block.timestamp >= to_mathint(COOLDOWN_PERIOD()); +} + + +//Property #16: The Governance Core system shouldn’t know anything about the voting procedure. +// It only expects a whitelisted entity to submit voting results about a specific proposal id. +//Property #17: The Governance Core system shouldn’t know anything about final execution. +// From its perspective, execution is sent to a Portal. +//Property #18: VOTING_TOKENS_CAP in GovernanceCore should be big enough to account for tokens that need to pass multiple slots, +// and big enough for at least mig to long term + + +//property #20 (old version): When if in a terminal state, no state changing function can be called. + +// Terminal states >= 4 are terminal, a proposal in a terminal state cannot change its state +rule state_changing_function_cannot_be_called_while_in_terminal_state() +{ + env e1; + env e2; + env e3; + uint256 proposalId; + require e1.block.timestamp <= e2.block.timestamp; + + requireInvariant null_state_iff_uninitialized_proposal(e2, proposalId); + IGovernanceCore.State state1 = getProposalState(e1, proposalId); + call_state_changing_function(e2, proposalId); + + assert assert_uint256(state1) < 4; +} + + +// Terminal states >= 4 are terminal, a proposal in a terminal state cannot change its state +rule terminal_state_cannot_change(method f) +{ + env e1; + env e2; + env e3; + calldataarg args; + uint256 proposalId; + + require e1.block.timestamp <= e2.block.timestamp; + require e2.block.timestamp <= e3.block.timestamp; + + requireInvariant null_state_iff_uninitialized_proposal(e2, proposalId); + IGovernanceCore.State state1 = getProposalState(e1, proposalId); + f(e2, args); + IGovernanceCore.State state2 = getProposalState(e3, proposalId); + + assert assert_uint256(state1) >= 4 => state1 == state2; +} + + +// Only the relevant state-changing function actually change the state +// Check by the states before a transtion occurs +rule pre_state(method f) +{ + env e1; + env e2; + env e3; + calldataarg args1; + uint256 proposalId; + + require e1.block.timestamp <= e3.block.timestamp; + requireInvariant null_state_iff_uninitialized_proposal(e1, proposalId); + IGovernanceCore.State state1 = getProposalState(e1, proposalId); + f(e2, args1); + IGovernanceCore.State state2 = getProposalState(e3, proposalId); + + assert state1 != state2 && state1 == IGovernanceCore.State.Null && state2 != IGovernanceCore.State.Expired + => f.selector == sig:createProposal(PayloadsControllerUtils.Payload[],address,bytes32).selector; + assert state1 != state2 && state1 == IGovernanceCore.State.Created && state2 != IGovernanceCore.State.Expired + => f.selector == sig:activateVoting(uint256).selector || f.selector == sig:cancelProposal(uint256).selector; + assert state1 != state2 && state1 == IGovernanceCore.State.Active && state2 != IGovernanceCore.State.Expired + => f.selector == sig:queueProposal(uint256,uint128,uint128).selector || f.selector == sig:cancelProposal(uint256).selector; + assert state1 != state2 && state1 == IGovernanceCore.State.Queued && state2 != IGovernanceCore.State.Expired + => (f.selector == sig:executeProposal(uint256).selector || f.selector == sig:cancelProposal(uint256).selector); + //todo: relevant assertion for Failed, Expired? + +} + + +// Only the relevant state-changing function actually change the state +// Check by the states after a transtion occurs +rule post_state(method f) +{ + env e1; + env e2; + env e3; + calldataarg args1; + uint256 proposalId; + + require e1.block.timestamp <= e3.block.timestamp; + + IGovernanceCore.State state1 = getProposalState(e1, proposalId); + f(e2, args1); + IGovernanceCore.State state2 = getProposalState(e3, proposalId); + + assert state1 != state2 && state2 == IGovernanceCore.State.Created => + f.selector == sig:createProposal(PayloadsControllerUtils.Payload[],address,bytes32).selector; + assert state1 != state2 && state2 == IGovernanceCore.State.Active => f.selector == sig:activateVoting(uint256).selector; + assert state1 != state2 && state2 == IGovernanceCore.State.Queued => f.selector == sig:queueProposal(uint256,uint128,uint128).selector; + assert state1 != state2 && state2 == IGovernanceCore.State.Executed => f.selector == sig:executeProposal(uint256).selector; + assert state1 != state2 && state2 == IGovernanceCore.State.Cancelled => f.selector == sig:cancelProposal(uint256).selector; + //todo: relevant assertion for Failed, Expired? + +} + +//helper: only method of state_changing_function can change a proposal state +rule state_changing_function_self_check(method f) +filtered { f -> !state_changing_function(f)} +{ + env e1; + env e2; + env e3; + calldataarg args1; + uint256 proposalId; + + require e1.block.timestamp <= e3.block.timestamp; + IGovernanceCore.State state1 = getProposalState(e1, proposalId); + f(e2, args1); + IGovernanceCore.State state2 = getProposalState(e3, proposalId); + + assert state2 != IGovernanceCore.State.Expired => state1 == state2; + assert e1.block.timestamp == e3.block.timestamp => state1 == state2; +} + +rule state_variable_changing_function_self_check(method f) +filtered { f -> !state_changing_function(f)} +{ + env e1; + env e2; + env e3; + calldataarg args1; + uint256 proposalId; + + IGovernanceCore.State state1 = getProposalStateVariable(e1, proposalId); + f(e2, args1); + IGovernanceCore.State state2 = getProposalStateVariable(e3, proposalId); + + assert state1 == state2; +} + + + +// self check - reachability +rule initialize_sanity{ + env e; + calldataarg arg; + initialize(e, arg); + satisfy true; +} + +rule sanity { + env e; + calldataarg arg; + method f; + + require COOLDOWN_PERIOD() == 0; + f(e, arg); + satisfy true; +} + +// Property: For any proposal id that wasn't yet created, the cancellation fee must be 0 +invariant cancellationFeeZeroForFutureProposals(uint256 proposalId) + proposalId >= getProposalCount() => getProposalCancellationFee(proposalId) == 0; + +// Property: In any case that proposal.CancellationFee does change, eth balance can cover the total cancellation fee of users +invariant totalCancellationFeeEqualETHBalance() + to_mathint(nativeBalances[currentContract]) >= totalCancellationFee + { + preserved with (env e2) + { + requireInvariant cancellationFeeZeroForFutureProposals(require_uint256(getProposalCount())); + require e2.msg.sender != currentContract; + } + } + +// Property: In any case that proposal.CancellationFee doesn't change, eth balance cannot decrease +rule userFeeDidntChangeImplyNativeBalanceDidntDecrease(){ + require(!isCancellationChanged); + uint256 _ethBal = nativeBalances[currentContract]; + method f; env e; calldataarg args; + f(e, args); + uint256 ethBal_ = nativeBalances[currentContract]; + assert(!isCancellationChanged => _ethBal <= ethBal_); +} + +// Representative +// Additional properties for voting by representative + +// A voter cannot represent himself +invariant no_self_representative(address voter, uint256 chainId) + voter == 0 <=> getRepresentativeByChain(voter, chainId) == voter + { + preserved with (env e){ + require e.msg.sender != 0; + } + } + +// Address zero can be a representative +// No voter is contained in the voters' set of address zero +invariant no_representative_is_zero(address voter, uint256 chainId) + !isRepresentativeOfVoter(voter, 0, chainId); + +// The size of the voter's set of address zero is zero +invariant no_representative_is_zero_2(uint256 chainId) + getRepresentedVotersSize(0, chainId) == 0; + +// Address zero has no representatives +invariant no_representative_of_zero(uint256 chainId) + getRepresentativeByChain(0, chainId) == 0 + { + preserved with (env e){ + require e.msg.sender != 0; + } + } + +// The size of the new representative set is correct after updateRepresentatives() +rule check_new_representative_set_size_after_updateRepresentatives{ + + env e; + address new_representative; + uint256 chainId; + + requireInvariant no_self_representative(e.msg.sender, chainId); + requireInvariant in_representatives_iff_in_votersRepresented(e.msg.sender, new_representative, chainId); + + + address[] new_voters_before = getRepresentedVotersByChain(new_representative, chainId); + mathint new_voters_size_before = new_voters_before.length; + address representative_before = getRepresentativeByChain(e.msg.sender, chainId); + + updateSingleRepresentativeForChain(e, new_representative, chainId); + address[] new_voters_after = getRepresentedVotersByChain(new_representative, chainId); + mathint new_voters_size_after = new_voters_after.length; + address representative_after = getRepresentativeByChain(e.msg.sender, chainId); + + + assert new_representative != 0 && new_representative !=e.msg.sender && new_representative != representative_before => + new_voters_size_after == new_voters_size_before + 1; + + assert new_representative != 0 && new_representative !=e.msg.sender && new_representative == representative_before => + new_voters_size_after == new_voters_size_before; + + assert (new_representative == e.msg.sender ) => + new_voters_size_after == new_voters_size_before; + +} + +// The size of the old representative set is correct after updateRepresentatives() +rule check_old_representative_set_size_after_updateRepresentatives{ + + env e; + address new_representative; + uint256 chainId; + + address representative_before = getRepresentativeByChain(e.msg.sender, chainId); + + requireInvariant in_representatives_iff_in_votersRepresented(e.msg.sender, representative_before, chainId); + requireInvariant no_representative_is_zero_2(chainId); + + address[] old_voters_before = getRepresentedVotersByChain(representative_before, chainId); + mathint old_voters_size_before = old_voters_before.length; + + updateSingleRepresentativeForChain(e, new_representative, chainId); + address[] old_voters_after = getRepresentedVotersByChain(representative_before, chainId); + mathint old_voters_size_after = old_voters_after.length; + address representative_after = getRepresentativeByChain(e.msg.sender, chainId); + + + assert new_representative != 0 && new_representative !=e.msg.sender + && new_representative != representative_before && old_voters_size_before > 0 => + old_voters_size_after + 1 == old_voters_size_before; + + assert new_representative != 0 && new_representative !=e.msg.sender && new_representative == representative_before => + old_voters_size_after == old_voters_size_before; + + assert (new_representative == e.msg.sender || new_representative == 0) && old_voters_size_before > 0 => + old_voters_size_after + 1 == old_voters_size_before; + + + +} + + +// +// Failing rules - begin +// + +//TODO: rerun once CERT-3618 is resolved +//Ignore fail in CI +use invariant addressSetInvariant; +//Ignore fail in CI +use invariant setInvariant; + +// +// Failing rules - end +// + + +invariant no_representative_of_zero_in_set(address representative, uint256 chainId) + !isRepresentativeOfVoter(0, representative, chainId) + { + preserved with (env e){ + require e.msg.sender != 0; + requireInvariant addressSetInvariant(representative, chainId); + } + } + + +invariant in_representatives_iff_in_votersRepresented(address voter, address representative, uint256 chainId) + (representative != 0) => + (isRepresentativeOfVoter(voter, representative, chainId) <=> + getRepresentativeByChain(voter, chainId) == representative) //parentheses are required here! + { + preserved with (env e){ + requireInvariant addressSetInvariant(representative, chainId); + } + } + diff --git a/security/certora/specs/GovernancePowerStrategy.spec b/security/certora/specs/GovernancePowerStrategy.spec new file mode 100644 index 0000000..7252843 --- /dev/null +++ b/security/certora/specs/GovernancePowerStrategy.spec @@ -0,0 +1,207 @@ +// Verification of `GovernancePowerStrategy` contract ========================== +using AaveTokenV3_DummyA as _DummyTokenA; +using AaveTokenV3_DummyB as _DummyTokenB; +using AaveTokenV3_DummyC as _DummyTokenC; + + +methods +{ + // IBaseVotingStrategy ===================================================== + function AAVE() external returns (address) envfree; + function A_AAVE() external returns (address) envfree; + function STK_AAVE() external returns (address) envfree; + function BASE_BALANCE_SLOT() external returns (uint128) envfree; + function A_AAVE_BASE_BALANCE_SLOT() external returns (uint128) envfree; + function A_AAVE_DELEGATED_STATE_SLOT() external returns (uint128) envfree; + + function isTokenSlotAccepted(address, uint128) external returns (bool) envfree; + function getVotingAssetList() external returns (address[]) envfree; + function getVotingAssetConfig(address) external returns ( + IBaseVotingStrategy.VotingAssetConfig + ) envfree; + function getFullVotingPower(address) external returns (uint256) envfree; + function getFullPropositionPower(address) external returns (uint256) envfree; + + // AaveTokenV3 ============================================================= + function AaveTokenV3_DummyA.getPowerCurrent( + address, + IGovernancePowerDelegationToken.GovernancePowerType + ) external returns (uint256) envfree; + function AaveTokenV3_DummyA.getDelegateeByType( + address, + IGovernancePowerDelegationToken.GovernancePowerType + ) external returns (address) envfree; + + function AaveTokenV3_DummyB.getPowerCurrent( + address, + IGovernancePowerDelegationToken.GovernancePowerType + ) external returns (uint256) envfree; + + function AaveTokenV3_DummyC.getPowerCurrent( + address, + IGovernancePowerDelegationToken.GovernancePowerType + ) external returns (uint256) envfree; + + function _.getPowerCurrent( + address, + IGovernancePowerDelegationToken.GovernancePowerType + ) external => DISPATCHER(true); +} + + +// Utils ======================================================================= + +/// @title Each dummy token is a unique and accepted token +function eachDummyIsUniqueToken() { + // Tokens are unique + require ( + _DummyTokenA != _DummyTokenB && + _DummyTokenA != _DummyTokenC && + _DummyTokenB != _DummyTokenC + ); + + // Tokens are accepted + uint128 slotA; + uint128 slotB; + uint128 slotC; + require ( + isTokenSlotAccepted(_DummyTokenA, slotA) && + isTokenSlotAccepted(_DummyTokenB, slotB) && + isTokenSlotAccepted(_DummyTokenC, slotC) + ); +} + + +/// @title Return the value of the correct power type +function _getPower( + address voter, + IGovernancePowerDelegationToken.GovernancePowerType govType +) returns uint256 { + return ( + govType == IGovernancePowerDelegationToken.GovernancePowerType.VOTING ? + getFullVotingPower(voter) : + getFullPropositionPower(voter) + ); +} + + +// Rules ======================================================================= + +/// @title Invalid token or slot is refused - a unittest +rule invalidTokenRefused(address token, uint128 slot) { + require ( + (token != AAVE() || slot != BASE_BALANCE_SLOT()) && + (token != STK_AAVE() || slot != BASE_BALANCE_SLOT()) && + ( + token != A_AAVE() || + (slot != A_AAVE_BASE_BALANCE_SLOT() && slot != A_AAVE_DELEGATED_STATE_SLOT()) + ) + ); + assert !isTokenSlotAccepted(token, slot); +} + + +/// @title No power in each token implies no power at all +rule powerlessCompliance( + address voter, + IGovernancePowerDelegationToken.GovernancePowerType govType +) { + eachDummyIsUniqueToken(); + require ( + _DummyTokenA.getPowerCurrent(voter, govType) == 0 && + _DummyTokenB.getPowerCurrent(voter, govType) == 0 && + _DummyTokenC.getPowerCurrent(voter, govType) == 0 + ); + + assert _getPower(voter, govType) == 0; +} + + +/** @title Transferring does not raise the power of the sender nor lowers the power of + * the receiver, except in specific cases + */ +rule transferPowerCompliance( + address voter, + address another, + uint256 amount, + IGovernancePowerDelegationToken.GovernancePowerType govType +) { + require ( + voter != _DummyTokenA && voter != another && another != _DummyTokenA + ); + eachDummyIsUniqueToken(); + + // `voter`'s power can increase if `another` delegated its power to `voter` + address delegatee = _DummyTokenA.getDelegateeByType(another, govType); + + uint256 prePowerVoter = _getPower(voter, govType); + uint256 prePowerAnother = _getPower(another, govType); + + env e; + require e.msg.sender == voter; + _DummyTokenA.transfer(e, another, amount); + + uint256 postPowerVoter = _getPower(voter, govType); + uint256 postPowerAnother = _getPower(another, govType); + + assert (amount == 0) => ( + postPowerVoter == prePowerVoter && postPowerAnother == prePowerAnother + ); + assert (amount > 0) => ( + (postPowerVoter > prePowerVoter) => ( + delegatee == voter && + postPowerAnother <= prePowerAnother + ) && + (delegatee == 0) => (postPowerAnother > prePowerAnother) + ); +} + + +/** @title Delegating does not increase the power of the delegator, nor reduce the + * power of the new delegatee. + * + * @notice This rule cannot include a strict inequality. The reason is that + * the delegated power in `AaveTokenV3` is saved as rounded down balance, + * see `BaseDelegation._governancePowerTransferByType` (dividing by `POWER_SCALE_FACTOR` + * when setting the delegated power field and multiplying by it when extracting). + * This causes violations when trying to assert propositions such as: + * (postPowerNewDelegatee > prePowerNewDelegatee) <=> + * (postPowerCurDelegatee < prePowerCurDelegatee) + */ +rule delegatePowerCompliance( + address voter, + address newDelegatee, + IGovernancePowerDelegationToken.GovernancePowerType govType +) { + require ( + voter != 0 && + voter != _DummyTokenA && + voter != newDelegatee && + newDelegatee != 0 && + newDelegatee != _DummyTokenA + ); + eachDummyIsUniqueToken(); + + uint256 prePowerVoter = _getPower(voter, govType); + uint256 prePowerNewDelegatee = _getPower(newDelegatee, govType); + + // The current delegatee is zero if there is none + address getDelegRes = _DummyTokenA.getDelegateeByType(voter, govType); + address curDelegatee = getDelegRes == 0 ? voter : getDelegRes; + uint256 prePowerCurDelegatee = _getPower(curDelegatee, govType); + require newDelegatee != curDelegatee; + + env e; + require e.msg.sender == voter; + _DummyTokenA.delegateByType(e, newDelegatee, govType); + + uint256 postPowerVoter = _getPower(voter, govType); + uint256 postPowerNewDelegatee = _getPower(newDelegatee, govType); + uint256 postPowerCurDelegatee = _getPower(curDelegatee, govType); + + assert ( + postPowerVoter <= prePowerVoter && + postPowerNewDelegatee >= prePowerNewDelegatee && + postPowerCurDelegatee <= prePowerCurDelegatee + ); +} diff --git a/security/certora/specs/VotingStrategy_unittests.spec b/security/certora/specs/VotingStrategy_unittests.spec new file mode 100644 index 0000000..06c6589 --- /dev/null +++ b/security/certora/specs/VotingStrategy_unittests.spec @@ -0,0 +1,190 @@ +/* Setup for `VotingStrategy` contract ========================================= + * Since we can't really verify `VotingStrategy.getWeightedPower` (which is the main + * method), we opted for some "unit tests". + * + * TODO: + * - Still missing unit tests for delegated power! + * - General rules, e.g. voting power is monotonic increasing with balance ... + */ +using DelegationModeHarness as _Delegation; + + +methods +{ + // VotingStrategy ========================================================== + function AAVE() external returns (address) envfree; + function A_AAVE() external returns (address) envfree; + function STK_AAVE() external returns (address) envfree; + function STK_AAVE_SLASHING_EXCHANGE_RATE_PRECISION() external returns (uint256) envfree; + function POWER_SCALE_FACTOR() external returns (uint256) envfree; + function BASE_BALANCE_SLOT() external returns (uint128) envfree; + function A_AAVE_BASE_BALANCE_SLOT() external returns (uint128) envfree; + function A_AAVE_DELEGATED_STATE_SLOT() external returns (uint128) envfree; + + function isTokenSlotAccepted(address, uint128) external returns (bool) envfree; + + // DataWarehouse =========================================================== + function DataWarehouse.getRegisteredSlot( + bytes32 blockHash, + address account, + bytes32 slot + ) external returns (uint256) => _getRegisteredSlot(blockHash, account, slot); + + // DelegationModeHarness =================================================== + function DelegationModeHarness.is_equal_to_original() external returns (bool) envfree; + function DelegationModeHarness.mode_to_int( + DelegationModeHarness.Mode + ) external returns (uint8) envfree; +} + + +// Summarize `getRegisteredSlot` =============================================== +ghost mapping(address => uint256) _exchangeRateSlotValue; + +/** + * @title Summarize `getRegisteredSlot` + * The summary is intended to be used for calculating `exchangeRateSlotValue`, as + * constant per asset (=account). + */ +function _getRegisteredSlot( + bytes32 blockHash, + address account, + bytes32 slot +) returns uint256 { + return _exchangeRateSlotValue[account]; +} + + +// Utilities =================================================================== +function constructPower( + address asset, + uint120 balance, + uint72 delegated, + DelegationModeHarness.Mode delegation, + uint128 slot +) returns uint256 { + // Only `A_AAVE` uses `uint120` as balance, the others use `uint104` + require asset != A_AAVE() => balance <= max_uint104; + + // The delegation mode is the highest 8 bits of `power` + uint8 delegationMode = _Delegation.mode_to_int(delegation); + mathint power = balance + (2^(256 - 8)) * delegationMode; + return isTokenSlotAccepted(asset, slot) ? assert_uint256(power) : 0; +} + + +// Test `DelegationMode` hack ================================================== + +/** @title Verify that `DelegationModeHarness.Mode` equals `DelegationMode` + * + * @notice The reason for using `DelegationModeHarness.Mode` in the first place is + * that `DelegationMode` is an enum that is not part of any contract. So it cannot be + * used inside the spec. Therefore I created `DelegationModeHarness` that has + * an enum `DelegationModeHarness.Mode` that is supposed to be equal to the original + * `DelegationMode`. This spec uses `DelegationModeHarness.Mode`, and this rule + * verifies that it is equal to `DelegationMode`. + */ +rule delegationModeHackTest() { + assert _Delegation.is_equal_to_original(), "DelegationMode changed"; +} + + +// Unit-tests for `getVotingPower` ============================================= + +/// @title Zero power implies zero voting power +rule zeroPowerIsZeroVotingPower( + address asset, + uint128 baseStorageSlot, + bytes32 blockHash +) { + env e; + uint256 votingPower = getVotingPower(e, asset, baseStorageSlot, 0, blockHash); + assert votingPower == 0, "Non-zero voting power despite power being zero"; +} + + +/// @title Undelegated balance is roughly voting power (for `AAVE` and `A_AAVE`) +rule UnDelegatedBalanceIsPower_AAVE_A_AAVE( + address asset, + bytes32 blockHash, + uint120 balance, + DelegationModeHarness.Mode delegation +) { + require asset == AAVE() || asset == A_AAVE(); + require ( + delegation != DelegationModeHarness.Mode.VOTING_DELEGATED && + delegation != DelegationModeHarness.Mode.FULL_POWER_DELEGATED + ); // Voter's balance is not delegated for voting + + uint128 storageSlot = ( + (asset == AAVE()) ? BASE_BALANCE_SLOT() : A_AAVE_BASE_BALANCE_SLOT() + ); + uint256 raw_power = constructPower(asset, balance, 0, delegation, storageSlot); + + env e; + uint256 votingPower = getVotingPower(e, asset, storageSlot, raw_power, blockHash); + + uint256 calc_power = require_uint256(balance); + assert votingPower == calc_power, "Undelegated balance != power in AAVE/A_AAVE"; +} + + +/// @title Formula for voting power given only undelegated balance in `STK_AAVE` +rule UnDelegatedBalancePower_STK_AAVE( + bytes32 blockHash, + uint104 balance, + DelegationModeHarness.Mode delegation +) { + address asset = STK_AAVE(); + require ( + delegation != DelegationModeHarness.Mode.VOTING_DELEGATED && + delegation != DelegationModeHarness.Mode.FULL_POWER_DELEGATED + ); // Voter's balance is not delegated for voting + uint256 raw_power = constructPower( + asset, balance, 0, delegation, BASE_BALANCE_SLOT() + ); + // The code uses only the `uint216` part of the slot, the require below + // allows us to use the same value. + uint256 exchangeRate = require_uint216(_exchangeRateSlotValue[asset]); + + env e; + uint256 votingPower = getVotingPower( + e, asset, BASE_BALANCE_SLOT(), raw_power, blockHash + ); + + mathint calculated = ( + (balance * STK_AAVE_SLASHING_EXCHANGE_RATE_PRECISION()) / exchangeRate + ); + uint256 calc_power = assert_uint256(calculated); + assert votingPower == calc_power, "Undelegated balance != power in STK_AAVE"; +} + + +/// @title Wrong slot yields zero power +rule wrongSlotYieldsZeroPower( + address asset, + uint128 baseStorageSlot, + uint256 power, + bytes32 blockHash +) { + require !isTokenSlotAccepted(asset, baseStorageSlot); + + env e; + uint256 votingPower = getVotingPower(e, asset, baseStorageSlot, power, blockHash); + assert votingPower == 0, "Non-zero voting power despite wrong baseStorageSlot"; +} + + +/// @title Wrong asset yields zero power +rule wrongAssetYieldsZeroPower( + address asset, + uint128 baseStorageSlot, + uint256 power, + bytes32 blockHash +) { + require asset != AAVE() && asset != A_AAVE() && asset != STK_AAVE(); + + env e; + uint256 votingPower = getVotingPower(e, asset, baseStorageSlot, power, blockHash); + assert votingPower == 0, "Non-zero voting power despite wrong asset"; +} diff --git a/security/certora/specs/payloads/PayloadsController.spec b/security/certora/specs/payloads/PayloadsController.spec new file mode 100644 index 0000000..e81118d --- /dev/null +++ b/security/certora/specs/payloads/PayloadsController.spec @@ -0,0 +1,851 @@ + + +methods { + + //Summarization + function Executor.executeTransaction(address,uint256,string,bytes,bool) external returns (bytes) => NONDET; + // todo: summarize low-level ETH transfer in emergencyEtherTransfer() + function _.transfer(address,uint256) external => DISPATCHER(true); + + //Envfree methods + function getActionsLength(uint40) external returns (uint256) envfree; + function getPayloadsCount() external returns (uint40) envfree; + function getMaximumAccessLevelRequired(uint40) external returns (PayloadsControllerUtils.AccessControl) envfree; + function getActionFixedSizeFields(uint40,uint256) external returns (address,bool,PayloadsControllerUtils.AccessControl,uint256) envfree; + function getAction(uint40,uint256) external returns (IPayloadsControllerCore.ExecutionAction) envfree; + function getActionAccessLevel(uint40, uint256) external returns (PayloadsControllerUtils.AccessControl) envfree; + function getActionSignature(uint40,uint256) external returns (string) envfree; + function getActionCallData(uint40,uint256) external returns (bytes) envfree; + function compare(string,string) external returns (bool) envfree; + function compare(bytes,bytes) external returns (bool) envfree; + function getExecutorSettingsByAccessControl(PayloadsControllerUtils.AccessControl) external returns (IPayloadsControllerCore.ExecutorConfig) envfree; + function getPayloadById(uint40) external returns (IPayloadsControllerCore.Payload); + function getPayloadFieldsById(uint40 payloadId) external + returns (address,PayloadsControllerUtils.AccessControl,IPayloadsControllerCore.PayloadState,uint40,uint40,uint40,uint40,uint40,uint40,uint40) envfree; + function getPayloadQueuedAtById(uint40 payloadId) external returns (uint40) envfree; + function getPayloadExpirationTimeById(uint40 payloadId) external returns (uint40) envfree; + function getPayloadGracePeriod(uint40 payloadId) external returns (uint40) envfree; + function getPayloadDelay(uint40 payloadId) external returns (uint40) envfree; + function getPayloadCreatedAt(uint40 payloadId) external returns (uint40) envfree; + function getPayloadQueuedAt(uint40 payloadId) external returns (uint40) envfree; + function getPayloadExecutedAt(uint40 payloadId) external returns (uint40) envfree; + + + function getPayloadStateVariable(uint40) external returns (IPayloadsControllerCore.PayloadState) envfree; + function getCreator(uint40) external returns (address) envfree; + function getExpirationTime(uint40) external returns (uint40) envfree; + function MIN_EXECUTION_DELAY() external returns (uint40) envfree; + function decodeMessage(bytes) external returns (uint40, PayloadsControllerUtils.AccessControl, uint40) envfree; + function encodeMessage(uint40,PayloadsControllerUtils.AccessControl,uint40) external returns (bytes) envfree; + + function GRACE_PERIOD() external returns (uint40) envfree; + function MIN_EXECUTION_DELAY() external returns (uint40) envfree; + function MAX_EXECUTION_DELAY() external returns (uint40) envfree; + function EXPIRATION_DELAY() external returns (uint40) envfree; +} + +// +// CVL Functions extracting struct fields +// +function get_action_executor(uint40 payloadID, uint256 actionID) returns address{ + IPayloadsControllerCore.ExecutorConfig executorCfg = getExecutorSettingsByAccessControl(getActionAccessLevel(payloadID, actionID)); + return executorCfg.executor; +} +function get_executor_of_maximumAccessLevelRequired(uint40 id) returns address{ + IPayloadsControllerCore.ExecutorConfig executorCfg = getExecutorSettingsByAccessControl(getMaximumAccessLevelRequired(id)); + return executorCfg.executor; +} + +function get_delay_of_maximumAccessLevelRequired(uint40 id) returns uint40{ + PayloadsControllerUtils.AccessControl maximumAccessLevelRequired = getMaximumAccessLevelRequired(id); + IPayloadsControllerCore.ExecutorConfig executorCfg = getExecutorSettingsByAccessControl(maximumAccessLevelRequired); + return executorCfg.delay; +} + +function get_executor(PayloadsControllerUtils.AccessControl access_level) returns address{ + IPayloadsControllerCore.ExecutorConfig executorCfg = getExecutorSettingsByAccessControl(access_level); + return executorCfg.executor; +} +function get_delay(PayloadsControllerUtils.AccessControl access_level) returns uint40{ + IPayloadsControllerCore.ExecutorConfig executorCfg = getExecutorSettingsByAccessControl(access_level); + return executorCfg.delay; +} + +// +// Helpers +// + +// +// Payloads +// +// General: a payload is uninitialized and has no actions unless it was added to _payloads mapping + +/// @title A payload has no actions if it's beyond _payloadsCount +invariant empty_actions_if_out_of_bound_payload(uint40 id) + id >= getPayloadsCount() => getActionsLength(id) == 0; + + +/// @title Payload state is None if the payload is beyond _payloadsCount +invariant null_state_variable_if_out_of_bound_payload(uint40 id) + id >= getPayloadsCount() => getPayloadStateVariable(id) == IPayloadsControllerCore.PayloadState.None; + +/// @title Payload maximal access level is null (not valid) if the payload is beyond _payloadsCount +invariant null_access_level_if_out_of_bound_payload(uint40 id) + id >= getPayloadsCount() => getMaximumAccessLevelRequired(id) == PayloadsControllerUtils.AccessControl.Level_null; + +/// @title Payload creator is address(0) and it expiration time is zero if the payload is beyond _payloadsCount +invariant null_creator_and_zero_expiration_time_if_out_of_bound_payload(uint40 id) + id >= getPayloadsCount() => + getCreator(id) == 0 && getExpirationTime(id) == 0 + && getPayloadGracePeriod(id) == 0 && getPayloadDelay(id) == 0; + +/// @title Payload's maximal access level is null if and only if state is none +invariant null_access_level_iff_state_is_none(uint40 id) + getMaximumAccessLevelRequired(id) == PayloadsControllerUtils.AccessControl.Level_null <=> + getPayloadStateVariable(id) == IPayloadsControllerCore.PayloadState.None; + + + +// +// Actions +// + +/// @title accessLevel of a valid action is not null +/// @dev a helper invariant +invariant nonempty_actions(uint40 payloadID, uint256 actionID) + getActionsLength(payloadID) != 0 && actionID < getActionsLength(payloadID) + => getActionAccessLevel(payloadID, actionID) != PayloadsControllerUtils.AccessControl.Level_null; + + +/// @title executor of a valid action is not address(0) +/// @dev a helper invariant +//Todo: improve runtime, replace logical condition +invariant executor_exists(uint40 payloadID, uint256 actionID) + getActionsLength(payloadID) != 0 && actionID < getActionsLength(payloadID) + => get_action_executor(payloadID, actionID) != 0; + +/// @title Action's accessLevel is not null iff it's executor is not address(0) +invariant executor_exists_iff_action_not_null(uint40 payloadID, uint256 actionID) + getActionAccessLevel(payloadID, actionID) == PayloadsControllerUtils.AccessControl.Level_null + <=> get_action_executor(payloadID, actionID) == 0; + + +/// @title A payload maximal access level is greater than or equal to the access level of its action +invariant payload_maximal_access_level_gt_action_access_level(uint40 payloadID, uint256 actionID) + getActionAccessLevel(payloadID, actionID) == PayloadsControllerUtils.AccessControl.Level_2 => + getMaximumAccessLevelRequired(payloadID) == PayloadsControllerUtils.AccessControl.Level_2 + { + preserved{ + requireInvariant empty_actions_if_out_of_bound_payload(payloadID); + } + } + + +/// @title Action's accessLevel is not null if it's executor is not address(0) +//runtime error: CERT-2868 +invariant executor_exists_if_action_not_null(uint40 payloadID, uint256 actionID) + getActionAccessLevel(payloadID, actionID) != PayloadsControllerUtils.AccessControl.Level_null + => get_action_executor(payloadID, actionID) != 0; + + +/// @title Action's accessLevel is not null only if it's executor is not address(0) +//not required +invariant executor_exists_only_if_action_not_null(uint40 payloadID, uint256 actionID) + getActionAccessLevel(payloadID, actionID) == PayloadsControllerUtils.AccessControl.Level_null + => get_action_executor(payloadID, actionID) == 0; + + +// +// Additional properties +// + + +//todo: check 2.1.2. If timelock > gracePeriod then no proposal could be executed + +// Reported a violation; Solidity had been fixed. +/// @title A valid payload must have valid maximal access level +invariant null_access_level_only_if_out_of_bound_payload(uint40 id) + id < getPayloadsCount() => getMaximumAccessLevelRequired(id) != PayloadsControllerUtils.AccessControl.Level_null; + + + + +// +// From properties.md +// + +/// @title Property #1: Payloads IDs are consecutive +rule consecutiveIDs(method f) filtered { f-> !f.isView }{ + + env e1; env e2; env e3; + calldataarg args1; calldataarg args2; calldataarg args3; + + mathint id_first = createPayload(e1, args1); + f(e2, args2); + mathint id_second = createPayload(e3, args3); + assert ((f.selector != sig:createPayload(IPayloadsControllerCore.ExecutionAction[]).selector) => (id_second == id_first + 1)); + assert ((f.selector == sig:createPayload(IPayloadsControllerCore.ExecutionAction[]).selector) => (id_second == id_first + 2)); + +} + +/// @title Property #2: A payload must have at least one action +/// @notice An initialized payload has at least one action +/// @notice A payload is empty if its max access level is Null or the state is None or expiration time is zero. +invariant empty_actions_only_if_uninitialized_payload (uint40 id) + (getMaximumAccessLevelRequired(id) != PayloadsControllerUtils.AccessControl.Level_null + || getPayloadStateVariable(id) != IPayloadsControllerCore.PayloadState.None + || getPayloadExpirationTimeById(id) != 0 ) + => getActionsLength(id) > 0 + { + preserved{ + requireInvariant empty_actions_if_out_of_bound_payload(id); + } + } + +/// @title A payload with no actions is uninitialized +invariant empty_actions_if_uninitialized_payload(uint40 id) + ((getActionsLength(id) > 0) => (getMaximumAccessLevelRequired(id) != PayloadsControllerUtils.AccessControl.Level_null) ); + +/// @title A payload has actions if and only if it's initialized +invariant empty_actions_iff_uninitialized(uint40 id) + ((getMaximumAccessLevelRequired(id) == PayloadsControllerUtils.AccessControl.Level_null) <=> (getActionsLength(id) == 0)) + { + preserved{ + requireInvariant null_access_level_if_out_of_bound_payload(id); + } + } + + + +/// @title Property #3.1 : The following Payload params can only be set once during payload creation: ipfsHash +/// @notice verify that additional params are immutable: accessLevel, maximumAccessLevelRequired, creator, createdAt, expirationTime +rule payload_fields_immutable_after_createPayload(method f, uint40 id)filtered { f-> !f.isView }{ + env e1; env e2; + calldataarg args1; calldataarg args2; + + createPayload(e1, args1); + uint40 payload_count = getPayloadsCount(); + + address creator_before; + PayloadsControllerUtils.AccessControl maximumAccessLevelRequired_before; + IPayloadsControllerCore.PayloadState state_before; + uint40 createdAt_before; + uint40 queuedAt_before; + uint40 executedAt_before; + uint40 cancelledAt_before; + uint40 expirationTime_before; + uint40 delay_before; + uint40 gracePeriod_before; + + creator_before, maximumAccessLevelRequired_before, state_before, createdAt_before, + queuedAt_before, executedAt_before, cancelledAt_before, expirationTime_before, + delay_before, gracePeriod_before = + getPayloadFieldsById(id); + + f(e2, args2); + + address creator_after; + PayloadsControllerUtils.AccessControl maximumAccessLevelRequired_after; + IPayloadsControllerCore.PayloadState state_after; + uint40 createdAt_after; + uint40 queuedAt_after; + uint40 executedAt_after; + uint40 cancelledAt_after; + uint40 expirationTime_after; + uint40 delay_after; + uint40 gracePeriod_after; + + creator_after, maximumAccessLevelRequired_after, state_after, createdAt_after, + queuedAt_after, executedAt_after, cancelledAt_after, expirationTime_after, + delay_after, gracePeriod_after = + getPayloadFieldsById(id); + +//todo: replace if with invariant + assert id < payload_count => creator_before == creator_after; + assert id < payload_count => maximumAccessLevelRequired_before == maximumAccessLevelRequired_after; + assert id < payload_count => createdAt_before == createdAt_after; + assert id < payload_count => expirationTime_before == expirationTime_after; + assert id < payload_count => delay_before == delay_after; + assert id < payload_count => gracePeriod_before == gracePeriod_after; + +} + + + +/// @title Payload fields can be initialized only once: ipfsHash, accessLevel, maximumAccessLevelRequired, creator, createdAt, expirationTime +rule initialized_payload_fields_are_immutable(method f, uint40 id)filtered { f-> !f.isView }{ + env e; + calldataarg args; + + requireInvariant null_access_level_if_out_of_bound_payload(id); + requireInvariant null_creator_and_zero_expiration_time_if_out_of_bound_payload(id); + + address creator_before; + PayloadsControllerUtils.AccessControl maximumAccessLevelRequired_before; + IPayloadsControllerCore.PayloadState state_before; + uint40 createdAt_before; + uint40 queuedAt_before; + uint40 executedAt_before; + uint40 cancelledAt_before; + uint40 expirationTime_before; + uint40 delay_before; + uint40 gracePeriod_before; + + creator_before, maximumAccessLevelRequired_before, state_before, createdAt_before, + queuedAt_before, executedAt_before, cancelledAt_before, expirationTime_before, delay_before, gracePeriod_before = + getPayloadFieldsById(id); + f(e, args); + + address creator_after; + PayloadsControllerUtils.AccessControl maximumAccessLevelRequired_after; + IPayloadsControllerCore.PayloadState state_after; + uint40 createdAt_after; + uint40 queuedAt_after; + uint40 executedAt_after; + uint40 cancelledAt_after; + uint40 expirationTime_after; + uint40 delay_after; + uint40 gracePeriod_after; + + creator_after, maximumAccessLevelRequired_after, state_after, createdAt_after, + queuedAt_after, executedAt_after, cancelledAt_after, expirationTime_after, delay_after, gracePeriod_after = + getPayloadFieldsById(id); + + assert maximumAccessLevelRequired_before != PayloadsControllerUtils.AccessControl.Level_null => creator_before == creator_after; + assert maximumAccessLevelRequired_before != PayloadsControllerUtils.AccessControl.Level_null => + maximumAccessLevelRequired_before == maximumAccessLevelRequired_after; + assert maximumAccessLevelRequired_before != PayloadsControllerUtils.AccessControl.Level_null => createdAt_before == createdAt_after; + assert maximumAccessLevelRequired_before != PayloadsControllerUtils.AccessControl.Level_null => expirationTime_before == expirationTime_after; + assert maximumAccessLevelRequired_before != PayloadsControllerUtils.AccessControl.Level_null => delay_before == delay_after; + assert maximumAccessLevelRequired_before != PayloadsControllerUtils.AccessControl.Level_null => gracePeriod_before == gracePeriod_after; + + assert creator_before != 0 => creator_before == creator_after; + assert expirationTime_before != 0 => expirationTime_before == expirationTime_after; + + assert gracePeriod_before != 0 => delay_before == delay_after; + assert gracePeriod_before != 0 => gracePeriod_before == gracePeriod_after; + +} + + + +/// @title Property #3.2 : The following Payload params can only be set once during payload creation: +/// actions fields: target, withDelegateCall, accessLevel, value, signature, callDAta +//todo: this rule should replace the following 3 rules once CERT-2451 (timeout) is resolved +// rule action_immutable(method f)filtered { f-> !f.isView }{ + +// env e; +// calldataarg args; +// uint40 payloadID; +// uint256 action_index; + +// require getActionsLength(payloadID) < 2^100; + + +// IPayloadsControllerCore.ExecutionAction action_before = getAction(payloadID, action_index); +// f(e, args); +// IPayloadsControllerCore.ExecutionAction action_after = getAction(payloadID, action_index); + +// assert action_before.target == action_after.target; +// assert action_before.withDelegateCall == action_after.withDelegateCall; +// assert action_before.accessLevel == action_after.accessLevel; +// assert action_before.value == action_after.value; +// assert compare(action_before.signature, action_after.signature); +// assert compare(action_before.callData, action_after.callData); +// } + +rule action_immutable_check_only_fixed_size_fields(method f)filtered { f-> !f.isView }{ + + env e; + calldataarg args; + uint40 payloadID; + uint256 action_index; + + require getActionsLength(payloadID) < 2^100; + + + IPayloadsControllerCore.ExecutionAction action_before = getAction(payloadID, action_index); + f(e, args); + IPayloadsControllerCore.ExecutionAction action_after = getAction(payloadID, action_index); + + assert action_before.target == action_after.target; + assert action_before.withDelegateCall == action_after.withDelegateCall; + assert action_before.accessLevel == action_after.accessLevel; + assert action_before.value == action_after.value; +} + +/// @title Property #3.2.2 : The following Payload params can only be set once during payload creation: +/// actions fields: target, withDelegateCall, accessLevel, value +/// @dev check fixed-size fields only +//todo: remove rule once CERT-2451 (timeout) is resolved +rule action_immutable_fixed_size_fields(method f){ + + env e; + calldataarg args; + uint40 payloadID; + uint256 action_index; + + require getActionsLength(payloadID) < 2^100; + + address target_before; + bool withDelegateCall_before; + PayloadsControllerUtils.AccessControl accessLevel_before; + uint256 value_before; + target_before, withDelegateCall_before, accessLevel_before, value_before = getActionFixedSizeFields(payloadID, action_index); + + f(e, args); + address target_after; + bool withDelegateCall_after; + PayloadsControllerUtils.AccessControl accessLevel_after; + uint256 value_after; + target_after, withDelegateCall_after, accessLevel_after, value_after = getActionFixedSizeFields(payloadID, action_index); + + assert target_before == target_after; + assert withDelegateCall_before == withDelegateCall_after; + assert accessLevel_before == accessLevel_after; + assert value_before == value_after; +} + + +/// @title Property #3.2.3 : The following Payload params can only be set once during payload creation: +/// actions fields: signature +/// @dev check signature only to reduce rune time +//todo: remove rule once CERT-2451 (timeout) is resolved +rule action_signature_immutable(method f)filtered { f-> !f.isView }{ + + env e; + calldataarg args; + uint40 payloadID; + uint256 action_index; + + require getActionsLength(payloadID) < 2^100;// todo: remove and add flag --optimistic_storage_array_length once CERT-2577 is resolved + + string signature_before = getActionSignature(payloadID, action_index); + f(e, args); + string signature_after = getActionSignature(payloadID, action_index); + assert compare(signature_before, signature_after); +} + + +/// @title Property #3.2.3 : The following Payload params can only be set once during payload creation: +/// actions fields: callData +/// @dev check callData only to reduce rune time +//todo: remove rule once CERT-2451 (timeout) is resolved +rule action_callData_immutable(method f) filtered { f-> !f.isView } +{ + + env e; + calldataarg args; + uint40 payloadID; + uint256 action_index; + + require getActionsLength(payloadID) < 2^100;// todo: remove and add flag --optimistic_storage_array_length once CERT-2577 is resolved + + bytes callData_before = getActionCallData(payloadID, action_index); + f(e, args); + bytes callData_after = getActionCallData(payloadID, action_index); + assert compare(callData_before, callData_after); +} + + + +// @title Property #4: An Executor must exist of the max level required for the payload actions (action must be able to be executed) + +// Payload executor is not address zero +rule executor_exists_after_createPayload() +{ + env e; + calldataarg args; + uint256 actionID; + uint40 payloadID = createPayload(e,args); + + IPayloadsControllerCore.ExecutionAction action = getAction(payloadID, actionID); + IPayloadsControllerCore.ExecutorConfig executorCfg = getExecutorSettingsByAccessControl(action.accessLevel); + + requireInvariant executor_exists(payloadID, actionID); + assert executorCfg.executor != 0; +} + +// @title action access level is not null after creation +// @dev split rules to reduce run time + +// Payload action access level is not null +rule action_access_level_isnt_null_after_createPayload() +{ + env e; + calldataarg args; + + uint40 payloadID = createPayload(e,args); + uint256 actionID; + IPayloadsControllerCore.ExecutionAction action = getAction(payloadID, actionID); + + requireInvariant nonempty_actions(payloadID, actionID); + assert action.accessLevel != PayloadsControllerUtils.AccessControl.Level_null; +} + +// Payload maximal access level is not null +rule executor_of_maximumAccessLevelRequired_exists_after_createPayload() +{ + env e; + calldataarg args; + uint40 id = createPayload(e,args); + + assert get_executor_of_maximumAccessLevelRequired(id) != 0; + + PayloadsControllerUtils.AccessControl maximumAccessLevelRequired = getMaximumAccessLevelRequired(id); + assert maximumAccessLevelRequired != PayloadsControllerUtils.AccessControl.Level_null; + +} + +// Once set the executor of a payload maximal access level is not address zero +rule executor_of_maximumAccessLevelRequired_exists(method f) filtered { f-> !f.isView } +{ + env e; + calldataarg args; + uint40 id; + require get_executor_of_maximumAccessLevelRequired(id) != 0; + f(e,args); + assert get_executor_of_maximumAccessLevelRequired(id) != 0; +} + + +/// @title Property #5: A Payload can only be executed when in queued state and time lock has finished and before the grace period has passed. +/// @notice executePayload() should not check check gracePeriod of every actions. +/// @notice it checks only the executor of the maximal access level. +// +rule execute_before_delay__maximumAccessLevelRequired{ + env e; + uint40 id; + requireInvariant payload_grace_period_eq_global_grace_period(id); + requireInvariant null_access_level_iff_state_is_none(id); + + executePayload(e, id); + mathint timestamp = e.block.timestamp; + assert timestamp > getPayloadQueuedAtById(id) + getPayloadDelay(id); + assert timestamp < getPayloadQueuedAtById(id) + getPayloadDelay(id) + GRACE_PERIOD(); +} + + +/// @title Payload's maximal level delay is equal to the executor delay the payload's maximumAccessLevelRequired +//fail. reported on June 13, 2023 +//invariant payload_delay_eq_delay_of_executor_of_max_access_level(uint40 id) +// getPayloadDelay(id) == get_delay_of_maximumAccessLevelRequired(id); + + +// @title A Payload can only be executed when in queued state +rule executed_when_in_queued_state{ + env e; + uint40 payloadId; + + IPayloadsControllerCore.PayloadState state_before = getPayloadStateVariable(payloadId); + executePayload(e,payloadId); + assert state_before == IPayloadsControllerCore.PayloadState.Queued; +} + + + +// @title property #7: The Guardian can cancel a Payload if it has not been executed +// A payload cannot execute after a guardian cancelled it +rule guardian_can_cancel{ + + env e1; env e2; env e3; + calldataarg args; + method f; + uint40 payloadId; + cancelPayload(e1, payloadId); + f(e2, args); + executePayload(e3,payloadId); + assert false ; + + +} + +/// @title One can not cancel a payload before its creation +// It's impossible to cancel before creation +rule no_early_cancellation{ + env e1; env e2; + calldataarg args; + uint40 payloadId1; + + requireInvariant null_state_variable_if_out_of_bound_payload(payloadId1); + cancelPayload(e1, payloadId1); + uint40 payloadId2 = createPayload(e2,args); + assert payloadId1 != payloadId2; +} + +/// @title One can not cancel a payload after its execution +//It's impossible to cancel a payload after is was executed +rule no_late_cancel{ + + env e1; env e2; env e3; + calldataarg args; + method f; + uint40 payloadId; + requireInvariant null_state_variable_if_out_of_bound_payload(payloadId); + executePayload(e1,payloadId); + f(e2, args); + cancelPayload(e3, payloadId); + assert false ; +} + + +/// @title Property #8: Payload State can’t decrease +// Forward progress of payload state machine +rule state_cant_decrease +{ +env e; + calldataarg args; + method f; + uint40 payloadId; + + requireInvariant null_state_variable_if_out_of_bound_payload(payloadId); + + IPayloadsControllerCore.PayloadState state_before = getPayloadStateVariable(payloadId); + f(e,args); + IPayloadsControllerCore.PayloadState state_after = getPayloadStateVariable(payloadId); + assert state_before == IPayloadsControllerCore.PayloadState.Queued => state_after != IPayloadsControllerCore.PayloadState.Created; + assert state_before == IPayloadsControllerCore.PayloadState.Queued => state_after != IPayloadsControllerCore.PayloadState.None; + assert state_before == IPayloadsControllerCore.PayloadState.Created => state_after != IPayloadsControllerCore.PayloadState.None; + + +} + +/// @title Property #9: No further state transitions are possible if proposal.state > 3 +// State > 3 are terminal +rule no_transition_beyond_state_gt_3{ + + env e; + calldataarg args; + method f; + uint40 payloadId; + + requireInvariant null_state_variable_if_out_of_bound_payload(payloadId); + + IPayloadsControllerCore.PayloadState state_before = getPayloadState(e,payloadId); + require state_before == IPayloadsControllerCore.PayloadState.Executed + || state_before == IPayloadsControllerCore.PayloadState.Cancelled + || state_before == IPayloadsControllerCore.PayloadState.Expired ; + f(e,args); + IPayloadsControllerCore.PayloadState state_after = getPayloadState(e,payloadId); + assert state_before == state_after; +} + + +/// @title Property #9.1: No further state transitions are possible if proposal.state > 3 +/// @notice checking state storage variable +rule no_transition_beyond_state_variable_gt_3{ + + env e; + calldataarg args; + method f; + uint40 payloadId; + + requireInvariant null_state_variable_if_out_of_bound_payload(payloadId); + IPayloadsControllerCore.PayloadState state_before = getPayloadStateVariable(payloadId); + require state_before == IPayloadsControllerCore.PayloadState.Executed + || state_before == IPayloadsControllerCore.PayloadState.Cancelled ; + f(e,args); + IPayloadsControllerCore.PayloadState state_after = getPayloadStateVariable(payloadId); + assert state_before == state_after; +} + + +// +// Additional rules +// + + +// @title Payload's grace period is equal to the contract grace period +invariant payload_grace_period_eq_global_grace_period(uint40 id) + getMaximumAccessLevelRequired(id) != PayloadsControllerUtils.AccessControl.Level_null => getPayloadGracePeriod(id) == GRACE_PERIOD(); + + + + +// @title Payload's delay is in [MIN_EXECUTION_DELAY, MAX_EXECUTION_DELAY] +invariant payload_delay_within_range(uint40 id) + getMaximumAccessLevelRequired(id) != PayloadsControllerUtils.AccessControl.Level_null => + getPayloadDelay(id) >= MIN_EXECUTION_DELAY() && getPayloadDelay(id) <= MAX_EXECUTION_DELAY() + { + preserved { + + requireInvariant executor_access_level_within_range(PayloadsControllerUtils.AccessControl.Level_1); + requireInvariant executor_access_level_within_range(PayloadsControllerUtils.AccessControl.Level_2); + } + } + + +// @title Executor delay of payload's max access level is in [MIN_EXECUTION_DELAY, MAX_EXECUTION_DELAY] +invariant delay_of_executor_of_max_access_level_within_range(uint40 id) + getMaximumAccessLevelRequired(id) != PayloadsControllerUtils.AccessControl.Level_null => + get_delay_of_maximumAccessLevelRequired(id) >= MIN_EXECUTION_DELAY() && get_delay_of_maximumAccessLevelRequired(id) <= MAX_EXECUTION_DELAY() + { + preserved { + requireInvariant executor_access_level_within_range(PayloadsControllerUtils.AccessControl.Level_1); + requireInvariant executor_access_level_within_range(PayloadsControllerUtils.AccessControl.Level_2); + } + } + +// @title Executor delay is in [MIN_EXECUTION_DELAY, MAX_EXECUTION_DELAY] +invariant executor_access_level_within_range(PayloadsControllerUtils.AccessControl access_level) + get_executor(access_level) != 0 => + get_delay(access_level) >= MIN_EXECUTION_DELAY() && get_delay(access_level) <= MAX_EXECUTION_DELAY(); + + + + + + + +/// old version: A proposal can never be executed if lasting more than the expiration time defined per level of permissions. +/// @title Property #6: A Payload can never be executed if it has not been queued before the EXPIRATION_DELAY defined. +//TODO: add relay for field "delay" + + +invariant expirationTime_equal_to_createAt_plus_EXPIRATION_DELAY(uint40 id) + getPayloadStateVariable(id) != IPayloadsControllerCore.PayloadState.None => + getPayloadExpirationTimeById(id) <= require_uint40(EXPIRATION_DELAY() + getPayloadCreatedAt(id)); + + +//todo: check directly contract-level EXPIRATION_DELAY +/// @title Queue happens before creation time + EXPIRATION_DELAY +invariant queued_before_expiration_delay(uint40 id) + getPayloadQueuedAt(id) <= require_uint40(EXPIRATION_DELAY() + getPayloadCreatedAt(id)) + { + preserved with (env e){ + requireInvariant expirationTime_equal_to_createAt_plus_EXPIRATION_DELAY(id); + // requireInvariant created_in_the_past(e, id); + requireInvariant queuedAt_is_zero_before_queued(id); + // requireInvariant executedAt_is_zero_before_executed(id); + requireInvariant null_state_variable_if_out_of_bound_payload(id); + } + } + +//helper: creation time cannot be in the future +invariant created_in_the_past(env e1, uint40 id) + getPayloadCreatedAt(id) <= require_uint40(e1.block.timestamp) + { + preserved with (env e2){ + require e1.block.timestamp == e2.block.timestamp; + + } + } + +/// @title Queue happens after creation time +// queuing time cannot occur after creation time +invariant queued_after_created(uint40 id) + getPayloadQueuedAt(id) != 0 => getPayloadQueuedAt(id) >= getPayloadCreatedAt(id) + { + preserved with (env e){ + requireInvariant created_in_the_past(e, id); + requireInvariant queuedAt_is_zero_before_queued(id); + requireInvariant null_state_variable_if_out_of_bound_payload(id); + } + } + +/// @title Execution happens after queue +//execution time cannot be after queuing time +invariant executed_after_queue(uint40 id) + getPayloadExecutedAt(id) != 0 => getPayloadExecutedAt(id) >= getPayloadQueuedAt(id) + { + preserved{ + // requireInvariant queuedAt_is_zero_before_queued(id); + // requireInvariant null_state_variable_if_out_of_bound_payload(id); + requireInvariant executedAt_is_zero_before_executed(id); + } + } +//helper: queuing time is nonzero for initialized payloads +invariant queuedAt_is_zero_before_queued(uint40 id) + getPayloadStateVariable(id) == IPayloadsControllerCore.PayloadState.None || + getPayloadStateVariable(id) == IPayloadsControllerCore.PayloadState.Created => getPayloadQueuedAt(id) == 0 + +{ + preserved{ + requireInvariant null_state_variable_if_out_of_bound_payload(id); + } + } + +//helper: ExecutedAt == 0 before execution +invariant executedAt_is_zero_before_executed(uint40 id) + getPayloadStateVariable(id) == IPayloadsControllerCore.PayloadState.None || + getPayloadStateVariable(id) == IPayloadsControllerCore.PayloadState.Created || + getPayloadStateVariable(id) == IPayloadsControllerCore.PayloadState.Queued => getPayloadExecutedAt(id) == 0 + +{ + preserved{ + requireInvariant null_state_variable_if_out_of_bound_payload(id); + } + } + + +//helper: One cannot queue a payload if expiration time have elapsed +rule no_queue_after_expiration{ + env e; + uint40 payloadId; + + mathint expiration_time = getPayloadExpirationTimeById(payloadId); + mathint timestamp = e.block.timestamp; + address originSender; + uint256 originChainId; + PayloadsControllerUtils.AccessControl accessLevel; + uint40 proposalVoteActivationTimestamp; + + bytes message = encodeMessage(payloadId, accessLevel, proposalVoteActivationTimestamp); + receiveCrossChainMessage(e, originSender, originChainId, message); + + assert expiration_time > timestamp; +} + + + + + + +rule sanity{ + env e; + calldataarg arg; + method f; + f(e, arg); +// assert false; + satisfy true; +} + +// +// For Prover dev team +// + + + +//todo: remove this rule once CERT-2508 is closed +//pass +rule decode2encode_sanity_check_message_leq_96_pass{ + + uint40 payloadId; + PayloadsControllerUtils.AccessControl accessLevel; + uint40 proposalVoteActivationTimestamp; + bytes message_before; + require message_before.length <= 96; + payloadId, accessLevel, proposalVoteActivationTimestamp = decodeMessage(message_before); + + bytes message_after = encodeMessage(payloadId, accessLevel, proposalVoteActivationTimestamp); + + assert compare(message_before, message_after) == true; +} + +//todo: remove this rule once CERT-2508 is closed +//pass +rule decode2encode_sanity_check_message_eq_96_satisfy{ + + uint40 payloadId; + PayloadsControllerUtils.AccessControl accessLevel; + uint40 proposalVoteActivationTimestamp; + bytes message_before; + require message_before.length == 96; + payloadId, accessLevel, proposalVoteActivationTimestamp = decodeMessage(message_before); + + bytes message_after = encodeMessage(payloadId, accessLevel, proposalVoteActivationTimestamp); + + satisfy compare(message_before, message_after) == true; +} + + diff --git a/security/certora/specs/set.spec b/security/certora/specs/set.spec new file mode 100644 index 0000000..a72ce78 --- /dev/null +++ b/security/certora/specs/set.spec @@ -0,0 +1,191 @@ + +// +// Under approximation warning: checking a single chain ID at at time. +// +methods{ + // function getFacilitatorsListLen() external returns (uint256) envfree; + // function getSupportedChainsLength() external returns (uint256) envfree; + function getRepresentedVotersSize(address,uint256) external returns (uint256) envfree; + +} + +definition MAX_UINT256() returns uint256 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; +definition MAX_UINT256Bytes32() returns bytes32 = to_bytes32(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF); //todo: remove once CERT-1060 is resolved + +definition TWO_TO_160() returns uint256 = 0x10000000000000000000000000000000000000000; + + +/** +* Set map entries point to valid array entries +* @notice an essential condition of the set, should hold for evert Set implementation +* @return true if all map entries points to valid indexes of the array. +*/ +definition MAP_POINTS_INSIDE_ARRAY() returns bool = forall address rep. forall bytes32 a. mirrorMap[rep][a] <= mirrorArrayLen[rep]; +/** +* Set map is the inverse function of set array. +* @notice an essential condition of the set, should hold for evert Set implementation +* @notice this condition depends on the other set conditions, but the other conditions do not depend on this condition. +* If this condition is omitted the rest of the conditions still hold, but the other conditions are required to prove this condition. +* @return true if for every valid index of the array it holds that map(array(index)) == index + 1. +*/ +definition MAP_IS_INVERSE_OF_ARRAY() returns bool = forall address rep. forall uint256 i. (i < mirrorArrayLen[rep]) => to_mathint(mirrorMap[rep][mirrorArray[rep][i]]) == i + 1; + +/** +* Set array is the inverse function of set map +* @notice an essential condition of the set, should hold for evert Set implementation +* @return true if for every non-zero bytes32 value stored in in the set map it holds that array(map(value) - 1) == value +*/ +definition ARRAY_IS_INVERSE_OF_MAP() returns bool = forall address rep. forall bytes32 a. forall uint256 b. + ((to_mathint(b) == mirrorMap[rep][a]-1) => (mirrorMap[rep][a] != 0)) => (mirrorArray[rep][b] == a); + + + + +/** +* load array length +* @notice a dummy condition that forces load of array length, using it forces initialization of mirrorArrayLen +* @return always true +*/ +definition CVL_LOAD_ARRAY_LENGTH(address representative, uint256 chainId) returns bool + = (getRepresentedVotersSize(representative, chainId) == getRepresentedVotersSize(representative, chainId)); + +/** +* Set-general condition, encapsulating all conditions of Set +* @notice this condition recaps the general characteristics of Set. It should hold for all set implementations i.e. AddressSet, UintSet, Bytes32Set +* @return conjunction of the Set three essential properties. +*/ +definition SET_INVARIANT(address representative, uint256 chainId) returns bool = + MAP_POINTS_INSIDE_ARRAY() && MAP_IS_INVERSE_OF_ARRAY() && ARRAY_IS_INVERSE_OF_MAP() && CVL_LOAD_ARRAY_LENGTH(representative, chainId); + +/** + * Size of stored value does not exceed the size of an address type. + * @notice must be used for AddressSet, must not be used for Bytes32Set, UintSet + * @return true if all array entries are less than 160 bits. + **/ +definition VALUE_IN_BOUNDS_OF_TYPE_ADDRESS() returns bool = (forall address rep. forall uint256 i. (mirrorArray[rep][i]) & to_bytes32(max_uint160) == mirrorArray[rep][i]); + +/** + * A complete invariant condition for AddressSet + * @notice invariant addressSetInvariant proves that this condition holds + * @return conjunction of the Set-general and AddressSet-specific conditions + **/ +definition ADDRESS_SET_INVARIANT(address representative, uint256 chainId) returns bool = + SET_INVARIANT(representative, chainId) && VALUE_IN_BOUNDS_OF_TYPE_ADDRESS(); + +/** + * A complete invariant condition for UintSet, Bytes32Set + * @notice for UintSet and Bytes2St no type-specific condition is required because the type size is the same as the native type (bytes32) size + * @return the Set-general condition + **/ +definition UINT_SET_INVARIANT(address representative, uint256 chainId) returns bool = SET_INVARIANT(representative, chainId); + +/** + * Out of bound array entries are zero + * @notice A non-essential condition. This condition can be proven as an invariant, but it is not necessary for proving the Set correctness. + * @return true if all entries beyond array length are zero + **/ +definition ARRAY_OUT_OF_BOUND_ZERO() returns bool = forall address rep. forall uint256 i. (i >= mirrorArrayLen[rep]) => (mirrorArray[rep][i] == to_bytes32(0)); + +// For CVL use + +/** + * ghost mirror map, mimics Set map + **/ +ghost mapping(address => mapping(bytes32 => uint256)) mirrorMap{ + init_state axiom forall address rep. forall bytes32 a. mirrorMap[rep][a] == 0; + axiom forall address rep. forall bytes32 a. mirrorMap[rep][a] >= 0 && mirrorMap[rep][a] <= MAX_UINT256(); //todo: remove once https://certora.atlassian.net/browse/CERT-1060 is resolved + +} + +/** + * ghost mirror array, mimics Set array + **/ +ghost mapping(address => mapping(uint256 => bytes32)) mirrorArray{ + init_state axiom forall address rep. forall uint256 i. mirrorArray[rep][i] == to_bytes32(0); + axiom forall address rep. forall uint256 a. mirrorArray[rep][a] & MAX_UINT256Bytes32() == mirrorArray[rep][a]; +// axiom forall uint256 a. to_uint256(mirrorArray[a]) >= 0 && to_uint256(mirrorArray[a]) <= MAX_UINT256(); //todo: remove once CERT-1060 is resolved +//axiom forall uint256 a. to_mathint(mirrorArray[a]) >= 0 && to_mathint(mirrorArray[a]) <= MAX_UINT256(); //todo: use this axiom when cast bytes32 to mathint is supported +} + +/** + * ghost mirror array length, mimics Set array length + * @notice ghost includes an assumption about the array length. + * If the assumption were not written in the ghost function it should be written in every rule and invariant. + * The assumption holds: breaking the assumptions would violate the invariant condition 'map(array(index)) == index + 1'. Set map uses 0 as a sentinel value, so the array cannot contain MAX_INT different values. + * The assumption is necessary: if a value is added when length==MAX_INT then length overflows and becomes zero. + **/ +ghost mapping(address => uint256) mirrorArrayLen{ + init_state axiom forall address rep. mirrorArrayLen[rep] == 0; + axiom forall address rep. to_mathint(mirrorArrayLen[rep]) < TWO_TO_160() - 1; //todo: remove once CERT-1060 is resolved +} + + +/** + * hook for Set array stores + * @dev user of this spec must replace _list with the instance name of the Set. + **/ +hook Sstore _votersRepresented [KEY address rep] [KEY uint256 chain] .(offset 0)[INDEX uint256 index] bytes32 newValue (bytes32 oldValue) STORAGE { + mirrorArray[rep][index] = newValue; +} + +/** + * hook for Set array loads + * @dev user of this spec must replace _list with the instance name of the Set. + **/ +hook Sload bytes32 value _votersRepresented [KEY address rep] [KEY uint256 chain] .(offset 0)[INDEX uint256 index] STORAGE { + require(mirrorArray[rep][index] == value); +} +/** + * hook for Set map stores + * @dev user of this spec must replace _list with the instance name of the Set. + **/ +hook Sstore _votersRepresented [KEY address rep] [KEY uint256 chain] .(offset 32)[KEY bytes32 key] uint256 newIndex (uint256 oldIndex) STORAGE { + mirrorMap[rep][key] = newIndex; +} + +/** + * hook for Set map loads + * @dev user of this spec must replace _list with the instance name of the Set. + **/ +hook Sload uint256 index _votersRepresented [KEY address rep] [KEY uint256 chain] .(offset 32)[KEY bytes32 key] STORAGE { + require(mirrorMap[rep][key] == index); +} + +/** + * hook for Set array length stores + * @dev user of this spec must replace _list with the instance name of the Set. + **/ +hook Sstore _votersRepresented [KEY address rep] [KEY uint256 chain] .(offset 0).(offset 0) uint256 newLen (uint256 oldLen) STORAGE { + mirrorArrayLen[rep] = newLen; +} + +/** + * hook for Set array length load + * @dev user of this spec must replace _votersRepresented with the instance name of the Set. + **/ +hook Sload uint256 len _votersRepresented [KEY address rep] [KEY uint256 chain] .(offset 0).(offset 0) STORAGE { + require mirrorArrayLen[rep] == len; +} + +/** + * main Set general invariant + **/ +invariant setInvariant(address representative, uint256 chainId) + SET_INVARIANT(representative, chainId); + + +/** + * main AddressSet invariant + * @dev user of the spec should add 'requireInvariant addressSetInvariant();' to every rule and invariant that refer to a contract that instantiates AddressSet + **/ +invariant addressSetInvariant(address representative, uint256 chainId) + ADDRESS_SET_INVARIANT(representative, chainId); + +/** +* @title Length of AddressSet is less than 2^160 +* @dev the assumption is safe because there are at most 2^160 unique addresses +* @dev the proof of the assumption is vacuous because length > loop_iter +*/ +invariant set_size_leq_max_uint160(address representative, uint256 chainId) + getRepresentedVotersSize(representative, chainId) < max_uint160; + diff --git a/security/certora/specs/voting/README.md b/security/certora/specs/voting/README.md new file mode 100644 index 0000000..5dfcecd --- /dev/null +++ b/security/certora/specs/voting/README.md @@ -0,0 +1,295 @@ +# Voting Machine spec + +## Open issues and questions + +### Voting issues +* How to verify `_registerBridgedVote`? Harness it and test together with `settleVoteFromPortal`? + +### Proposal configuration issues +* It is possible to call `_createBridgedProposalVote` without reverting, but fail + to start the proposal's vote. Can this lead to undesirable situations? +* It follows that there can be proposal configs while the relevant proposal vote + state is `NotCreated`. E.g. if the needed roots are missing from the `DataWarehouse`, + see `startedProposalHasConfig` invariant. +* Should we verify `getProposalsVoteConfigurationIds`? If so, how? + + +## Basic setup +There are two setups used for rules here: +1. Basic setup in [`setup.sepc` file](./setup.spec) +2. Complicated setup summarizing `getVotingPower` in + [`power_summary.spec`](./power_summary.spec) presented below + +Here we deal with the basic setup in the [`setup.spec` file](./setup.spec). + +### Harness + +* **VotingMachineHarness** + Adds two useful methods: + * `submitVoteSingleProof` - vote without needing an array of proofs + * `createProposalVoteHarness` - A way to call `_createBridgedProposalVote` from spec + +* **VotingStrategyHarness** + Adds: + * `is_hasRequiredRoots` - returns true if `hasRequiredRoots` did not revert + * `getVotingAssetListLength` + +### Summarized + +* **IVotingStrategy.getVotingPower** => NONDET +* **DataWarehouse.getStorage** => NONDET +* **CrossChainController.forwardMessage** => NONDET +* **SlotUtils.getAccountSlotHash** => NONDET + + +## Voting Power Summary setup +This complicated setup is done in the [`power_summary.spec` file](./power_summary.spec). +It is used only in [`misc.spec` rules](./misc.spec). + + +### Harness + +* **VotingMachineHarnessTriple** + In addition to the methods in **VotingMachineHarness** adds: + * `submitVoteTripleProof` - for voting using three proofs without needing an array + +* **VotingStrategyHarness** - same as above + +* **DelegationModeHarness** + Since `DelegationMode` is not part of any contract, it cannot be used in spec. + This harness solves the problem by providing an equivalent enum `Mode`. + +### Summarized + +* **IVotingStrategy.getVotingPower(...)** + Returns the voting power. Summarized as constant per power (balance), asset + and storage-slot. Note a wildcard contract is used in this summary. + +* **DataWarehouse.getStorage(...) -> SlotValue** + Summarized, only requiring `slotval.value > 0` where `slotval` is the return value. + +* **CrossChainController.forwardMessage** => NONDET + +* **SlotUtils.getAccountSlotHash** => NONDET + + +## Voting and tally +Rules from [`voting_and_tally.spec` file](./voting_and_tally.spec). + +### Definitions + +* **Votes tally** + The *votes tally* for a proposal is the pair (2-tuple) of votes in favor and votes + against, i.e. `(forVotes, againstVotes)`. +* **Stored voting power** + The *stored voting power* of a voter `v` for a proposal `i` is the field + `getUserProposalVote(v, i).votingPower`. +* **A vote was cast** + We say that *a vote was cast* for a proposal `i` if the exists a voter `v` + whose stored voting power for `i` changed from zero to positive. + +### Rules summary +This spec proves that in a single method call: +1. The voting tally for proposal $i$ changed if and only if a single voter cast a vote + for proposal $i$ +2. At most one voter can cast a vote on one proposal +3. When a vote is cast on a proposal, the proposal's votes tally changes accordingly +4. The voting tally can be changed only using one of the voting methods + (rule `onlyVoteCanChangeResult`). +5. The voting tally in favor and against can only increase, and their sum equals + the sum of stored voting powers for that proposal + +### Ghosts + +* `is_someoneVoting(uint256) -> bool` + Indicating a vote was cast for the given proposal. +* `number_stores() -> mathint` + The number of times values have been stored in voting map. +* `storedVotingPower(uint256, address) -> uint248` + Ghost function following stored votes mapping. + +### Casting Votes Rules + +* **votingPowerGhostIsVotingPower(uint256 proposalId, address voter)** + Invariant showing the ghost `storedVotingPower` is indeed the stored vote power, + i.e. equals `getUserProposalVote`. From this it follows that if a vote is cast on + proposal `i` then `is_someoneVoting(i)` is true. + +* **sumOfVotes(uint256 proposalId)** + Invariant showing that for each proposal $i$ the sum of votes in favor and against + equals the sum of stored voting powers, i.e. + $\mathtt{prop.forVotes} + \mathtt{prop.againstVotes} = \sum_{\mathtt{address}\ a} \mathtt{storedVotingPower}(i, a)$ + where `prop = getProposalById(i)`. + +* **voteTallyChangedOnlyByVoting(method f, uint256 proposalId)** + If a proposal's votes tally changed then a vote was cast on the proposal. + +* **voteUpdatesTally(method f, uint256 proposalId, address voter)** + If a vote was cast for a proposal, then the proposal's votes tally changed. + Moreover, the change in tally corresponds to the vote that was cast. + See also [votedPowerIsImmutable rule](#votedPowerIsImmutable). + +* **onlyVoteCanChangeResult(method f, uint256 proposalId)** + Vote tally can be changed only by one of the voting methods. + +* **votingTallyCanOnlyIncrease(method f, uint256 proposalId)** + Voting tally can only increase (either votes in favor or votes against increased). + +### Other proposals and voters + +* **strangerVoteUnchanged(method f, uint256 proposalId, address stranger)** + A stranger's stored vote is unchanged when another votes. + +* **otherProposalUnchanged(method f, uint256 proposalId, uint256 otherProposal, address otherVote)** + Only a single proposal's tally and votes may change by a single method call. + +* **otherVoterUntouched(method f, uint256 proposalId, address voter, address strange)** + Only a single voter's stored voting power may change (on a given proposal). + + +## Voting legality +Rules from [`legality.spec` file](./legality.spec). + +### Rules summary + +The section, together with [Voting and tally](#voting_and_tally) and [Proposal states](#proposal_states), +shows that: + +A vote can be rejected only for one of the following reasons (otherwise must be accepted): +* Voting twice on behalf of particular user (rule `votedPowerIsImmutable` together + with results from `voting_and_tally.spec`) +* Voting before vote start (rule `onlyValidProposalCanChangeTally` and `states.spec`) +* Voting after vote end (rule [onlyValidProposalCanChangeTally](#onlyValidProposalCanChangeTally) + and [Proposal states](#proposal_states)) +* Voting with 0 voting power (rule [legalVote](#legalVote)) + +### Rules + +* **votedPowerIsImmutable(method f, address voter, uint256 proposalId)** + + Stored voting power is immutable (once positive). + Proves that stored voting power can change only when the original value is zero, + and that once it is positive it is immutable. This rule, together with the + previous section proves that a voter cannot vote twice. + +* **onlyValidProposalCanChangeTally(method f, uint256 proposalId)** + + Vote tally can change only for active, properly configured, proposals. + +* **legalVote(method f, uint256 proposalId, address voter)** + + Vote tally may change only if voter had zero stored voting power before and positive after. + + +## Proposal configuration +Rules from [`proposal_config.spec` file](./proposal_config.spec). + +### Rules summary + +* A vote can be created for a proposal only if the proposal has a configuration with a non-zero + block hash +* If a vote is created for a proposal, then the required roots exist +* The proposal's configuration is immutable +* A new must have unused ID. + +### Rules + +* **startedProposalHasConfig(uint256 proposalId)** + When starting a proposal vote it already has a configuration (with non-zero block hash). + An invariant. + **Note** that the opposite need not be true. For example, a in `_createBridgedProposalVote` + (which creates the configuration) the call to `createVote(proposalId)` may revert, + and since it is inside a `try` clause the original call will not revert. + +* **createdProposalHasRoots(uint256 proposalId)** + Once a proposal vote is started the required roots (in the `DataWarehouse`) exist. An invariant. + +* **proposalHasNonzeroDuration** + An existing proposal's voting duration is non zero. + +* **newProposalUnusedId(uint256 proposalId, bytes32 blockHash, uint24 votingDuration)** + A new proposal must have an unused ID. + +* **configIsImmutable(method f, uint256 proposalId)** + A proposal's configuration is immutable once set. + + +## Proposal states + +Rules from [`proposal_states.spec` file](./proposal_states.spec). + +### Rules summary + +* Start time of a proposal's vote is before its end time +* A proposal vote's ID is immutable +* The proposal states are as described in the state-machine below + + +```mermaid +flowchart TD; + NC(NotCreated); + AC(Active); + FN(Finished); + SN(SentToGovernance) + + NC -- "createVote(),\n createProposalVoteHarness()" --> AC; + FN -- "closeAndSendVote()" --> SN; + AC -- T > endTime --> FN + AC -- T > endTime --> SN +``` + +### Rules + +* **startsBeforeEnds(uint256 proposalId)** + A proposal's vote start time is before (or equal to) its end time. An invariant. + +* **startsStrictlyBeforeEnds(uint256 proposalId)** + A started proposal's end time is the start time plus voting duration. An invariant. + This fails on `createProposalVoteHarness` since we allow `l1ProposalBlockHash` to be zero. + For example, we can have a created proposal vote with `l1ProposalBlockHash == 0` but + `endTime > 0`, now calling `_createBridgedProposalVote` can modify the `votingDuration`, + making the invariant false. + +* **proposalLegalStates(uint256 proposalId)** + A proposal must be in one of the following states: + + 1. $\mathtt{NotCreated} \Longleftrightarrow \mathtt{endTime} = 0$ + 2. $\mathtt{Active} \Longleftrightarrow (t \leq \mathtt{endTime}) \land (\mathtt{endTime} \neq 0)$ + 3. $\mathtt{Finished} \Longleftrightarrow (t \geq \mathtt{endTime} > 0) \land \neg \mathtt{sentToGovernance}$ + 4. $\mathtt{SentToGovernance} \Longleftrightarrow (t \geq \mathtt{endTime} > 0) \land \mathtt{sentToGovernance}$ + +* **proposalMethodStateTransitionCompliance(method f, uint256 proposalId)** + A proposal's valid state transitions by method call. + +* **proposalTimeStateTransitionCompliance(uint256 proposalId)** + A proposal's valid state transitions by time. + +* **proposalImmutability(method f, uint256 proposalId)** + Proposal immutability. Verifies that certain fields of the proposal are immutable, + once the proposal is created of course). + +* **proposalIdIsImmutable(uint256 proposalId)** + A created proposal vote's ID is never changed. An invariant. + + +## Miscellaneous +Rules from [`misc.spec` file](./misc.spec). Mostly rules dealing with specific methods. + +**Note.** Uses the [`power_summary.spec` setup](./power_summary.spec). + +### Rules + +* **sendOnlyFinishedVote(uint256 proposalId)** + Only proposals in the state `Finished` can be sent to governance + +* **submitSingleProofVerification(...)** + Verifies compliance of + `submitVoteSingleProof(uint256 proposalId, bool support, VotingBalanceProof proof)`, this is + a harness method that sends a single proof. + +* **submitTripleProofVerification(...)** + Verifies compliance of `submitVoteTripleProof`. + +* **rejectEquivalentProofs(...)** + Reject equivalent proofs. If several equivalent proofs are given (same asset and slot) they should + be rejected. diff --git a/security/certora/specs/voting/legality.spec b/security/certora/specs/voting/legality.spec new file mode 100644 index 0000000..0fbcd6d --- /dev/null +++ b/security/certora/specs/voting/legality.spec @@ -0,0 +1,114 @@ +/// ============================================================================ +/// Voting legality +/// ============================================================================ + +/* Summary + * ------- + * The spec, together with `voting_and_tally.spec` and `states.spec`, shows that: + * A vote can be rejected only for one of the following reasons (otherwise must be + * accepted): + * - Voting twice on behalf of particular user (rule `votedPowerIsImmutable` together + * with results from `voting_and_tally.spec`) + * - Voting before vote start (rule `onlyValidProposalCanChangeTally` and `states.spec`) + * - Voting after vote end (rule `onlyValidProposalCanChangeTally` and `states.spec`) + * - Voting with 0 voting power (rule `legalVote`) + */ + +import "setup.spec"; + + +/// @title Is the proposal's block hash non-zero +function is_proposalHashNonZero(uint256 proposalId) returns bool { + IVotingMachineWithProofs.ProposalVoteConfiguration conf = ( + getProposalVoteConfiguration(proposalId) + ); + return conf.l1ProposalBlockHash != to_bytes32(0); +} + + +/** @title Is the proposal Active + * @return False if the proposal's state is `NotCreated`, true otherwise. + * @notice By rule `proposalLegalStates` the state `NotCreated` is equivalent to + * `endTime` being zero. + */ +function is_proposalCreated(uint256 proposalId) returns bool { + IVotingMachineWithProofs.ProposalWithoutVotes proposal = getProposalById(proposalId); + return proposal.endTime != 0; +} + + +invariant createdVoteHasNonZeroHash(uint256 proposalId) + is_proposalCreated(proposalId) => is_proposalHashNonZero(proposalId); + + +/** @title Stored voting power is immutable (once positive) + * Proves that stored voting power can change only when the original value is zero, + * and that once it is positive it is immutable. This rule, together with the + * previous section proves that a voter cannot vote twice. + */ +rule votedPowerIsImmutable(method f, address voter, uint256 proposalId) { + IVotingMachineWithProofs.Vote pre = getUserProposalVote(voter, proposalId); + + env e; + calldataarg args; + f(e, args); + + IVotingMachineWithProofs.Vote post = getUserProposalVote(voter, proposalId); + + assert pre.votingPower > 0 => post.votingPower == pre.votingPower; + assert post.votingPower != pre.votingPower => pre.votingPower == 0; +} + + +/// @title Vote tally can change only for active and properly configured proposals +rule onlyValidProposalCanChangeTally(method f, uint256 proposalId) { + requireInvariant createdVoteHasNonZeroHash(proposalId); + + IVotingMachineWithProofs.ProposalWithoutVotes pre = getProposalById(proposalId); + IVotingMachineWithProofs.ProposalVoteConfiguration conf = ( + getProposalVoteConfiguration(proposalId) + ); + + env e; + IVotingMachineWithProofs.ProposalState state = getProposalState(e, proposalId); + + calldataarg args; + f(e, args); + + IVotingMachineWithProofs.ProposalWithoutVotes post = getProposalById(proposalId); + + bool is_tallyChanged = ( + (pre.forVotes != post.forVotes) || (pre.againstVotes != post.againstVotes) + ); + assert is_tallyChanged => ( + (state == IVotingMachineWithProofs.ProposalState.Active) && + (conf.l1ProposalBlockHash != to_bytes32(0)) + ); +} + + +/** @title Vote tally may change only if voter had zero stored voting power before + * and positive after. + */ +rule legalVote(method f, uint256 proposalId, address voter) filtered { + f -> !f.isView +} { + IVotingMachineWithProofs.ProposalWithoutVotes pre = getProposalById(proposalId); + IVotingMachineWithProofs.Vote preVote = getUserProposalVote(voter, proposalId); + + env e; + calldataarg args; + f(e, args); + + IVotingMachineWithProofs.ProposalWithoutVotes post = getProposalById(proposalId); + IVotingMachineWithProofs.Vote postVote = getUserProposalVote(voter, proposalId); + + bool is_tallyChanged = ( + (pre.forVotes != post.forVotes) || (pre.againstVotes != post.againstVotes) + ); + bool is_voterChanged = (preVote.votingPower != postVote.votingPower); + assert ( + (is_tallyChanged && is_voterChanged) => + (preVote.votingPower == 0 && postVote.votingPower > 0) + ); +} diff --git a/security/certora/specs/voting/misc.spec b/security/certora/specs/voting/misc.spec new file mode 100644 index 0000000..b5fe9c9 --- /dev/null +++ b/security/certora/specs/voting/misc.spec @@ -0,0 +1,171 @@ +/// ============================================================================ +/// Miscellaneous Rules +/// ============================================================================ + +import "power_summary.spec"; + + +// Sending results ============================================================= + +/// @title Can only send results for finished votes +rule sendOnlyFinishedVote(uint256 proposalId) { + env e; + IVotingMachineWithProofs.ProposalState state = getProposalState(e, proposalId); + + closeAndSendVote(e, proposalId); + + assert state == IVotingMachineWithProofs.ProposalState.Finished; +} + + +// Particular voting methods =================================================== + +/// @title Utility function for getting raw voting power from proof +function _getRawSlotPower( + IVotingMachineWithProofs.VotingBalanceProof proof +) returns uint256 { + bytes32 blockHash; // Value is unimportant due to summarization of _getStorage + bytes32 slotHash; // Value is unimportant due to summarization of _getStorage + StateProofVerifier.SlotValue slotValue = _getStorage( + proof.underlyingAsset, blockHash, slotHash, proof.proof + ); + return slotValue.value; +} + + +/// @title Utility function for getting voting power from proof +function _getVotingPowerFromProof( + IVotingMachineWithProofs.VotingBalanceProof proof +) returns uint256 { + uint256 raw_power = _getRawSlotPower(proof); + return mockVotingPower(proof.underlyingAsset, proof.slot, raw_power); +} + + +/** @title Single proof verification + * Verifies the following properties for voting using `submitVoteSingleProof`: + * - A vote is rejected if either: + * a. User's registered voted power for the proposal is not zero (voting twice) + * b. User's voting power is zero + * c. Proposal's state is not `Active` + * - After voting, user's registered support and voted power are the same as the vote + * - The total votes tally is updated correctly + */ +rule submitSingleProofVerification( + uint256 proposalId, + bool support, + IVotingMachineWithProofs.VotingBalanceProof proof +) { + env e; + IVotingMachineWithProofs.ProposalWithoutVotes pre = getProposalById(proposalId); + + // If `votePre.votingPower` is not zero, it means user already voted + IVotingMachineWithProofs.Vote votePre = getUserProposalVote(e.msg.sender, proposalId); + + // If `votePower` is zero, the user's vote will be rejected + uint256 voterPower = _getVotingPowerFromProof(proof); + + // If the proposal state is not active, the user's vote will be rejected + IVotingMachineWithProofs.ProposalState state = getProposalState(e, proposalId); + + submitVoteSingleProof(e, proposalId, support, proof); + + assert ( + (votePre.votingPower == 0) && + (voterPower > 0) && + (state == IVotingMachineWithProofs.ProposalState.Active) + ); + + IVotingMachineWithProofs.Vote postVote = getUserProposalVote(e.msg.sender, proposalId); + assert postVote.support == support; + + // Since `voterPower` and `postVote.votingPower` have different types, we cast both + // to `mathint`. + mathint mathVoterPower = to_mathint(voterPower); + mathint mathPostPower = to_mathint(postVote.votingPower); + assert mathPostPower == mathVoterPower; + + IVotingMachineWithProofs.ProposalWithoutVotes post = getProposalById(proposalId); + + // Votes can only increase + assert post.forVotes >= pre.forVotes; + assert post.againstVotes >= pre.againstVotes; + + uint128 forChange = assert_uint128(post.forVotes - pre.forVotes); + uint128 againstChange = assert_uint128(post.againstVotes - pre.againstVotes); + uint128 castVoterPower = assert_uint128(postVote.votingPower); + assert support => (forChange == castVoterPower) && (againstChange == 0); + assert !support => (forChange == 0) && (againstChange == castVoterPower); +} + + +/// @title Triple proof verification +rule submitTripleProofVerification( + uint256 proposalId, + bool support, + IVotingMachineWithProofs.VotingBalanceProof proof1, + IVotingMachineWithProofs.VotingBalanceProof proof2, + IVotingMachineWithProofs.VotingBalanceProof proof3 +) { + require proof1.underlyingAsset == _VotingStrategy.AAVE(); + require proof1.slot == 0; + require proof1.proof.length < max_uint32; // Avoid calldata pointer overflow + require proof2.underlyingAsset == _VotingStrategy.STK_AAVE(); + require proof2.slot == 0; + require proof2.proof.length < max_uint32; // Avoid calldata pointer overflow + require proof3.underlyingAsset == _VotingStrategy.A_AAVE(); + require proof3.slot == 52; + require proof3.proof.length < max_uint32; // Avoid calldata pointer overflow + + env e; + + uint256 power1 = _getVotingPowerFromProof(proof1); + uint256 power2 = _getVotingPowerFromProof(proof2); + uint256 power3 = _getVotingPowerFromProof(proof3); + mathint power = power1 + power2 + power3; + + submitVoteTripleProof(e, proposalId, support, proof1, proof2, proof3); + + IVotingMachineWithProofs.Vote postVote = getUserProposalVote(e.msg.sender, proposalId); + assert ( + to_mathint(postVote.votingPower) == power && + postVote.support == support + ); +} + + +/// @title Are two proofs equivalent +function isEquivalent( + IVotingMachineWithProofs.VotingBalanceProof proof1, + IVotingMachineWithProofs.VotingBalanceProof proof2 +) returns bool { + return ( + proof1.underlyingAsset == proof2.underlyingAsset && + proof1.slot == proof2.slot + ); +} + +/// @title Reject equivalent proofs +rule rejectEquivalentProofs( + uint256 proposalId, + bool support, + IVotingMachineWithProofs.VotingBalanceProof proof1, + IVotingMachineWithProofs.VotingBalanceProof proof2, + IVotingMachineWithProofs.VotingBalanceProof proof3 +) { + // Prevent calldata pointer overflow + require ( + proof1.proof.length < max_uint32 && + proof2.proof.length < max_uint32 && + proof3.proof.length < max_uint32 + ); + require ( + isEquivalent(proof1, proof2) || + isEquivalent(proof1, proof3) || + isEquivalent(proof2, proof3) + ); + + env e; + submitVoteTripleProof@withrevert(e, proposalId, support, proof1, proof2, proof3); + assert lastReverted; +} diff --git a/security/certora/specs/voting/power_summary.spec b/security/certora/specs/voting/power_summary.spec new file mode 100644 index 0000000..6b1cd79 --- /dev/null +++ b/security/certora/specs/voting/power_summary.spec @@ -0,0 +1,162 @@ +/// ============================================================================ +/// `VotingMachine` contract - setup with `getVotingPower` summary +/// ============================================================================ +using VotingStrategyHarness as _VotingStrategy; + + +methods +{ + // `VotingMachine` ========================================================= + function getUserProposalVote( + address, uint256 + ) external returns (IVotingMachineWithProofs.Vote) envfree; + + function getProposalById( + uint256 + ) external returns (IVotingMachineWithProofs.ProposalWithoutVotes) envfree; + + function getProposalVoteConfiguration( + uint256 + ) external returns (IVotingMachineWithProofs.ProposalVoteConfiguration) envfree; + + // `VotingStrategy` ======================================================== + function VotingStrategyHarness.AAVE() external returns (address) envfree; + function VotingStrategyHarness.A_AAVE() external returns (address) envfree; + function VotingStrategyHarness.STK_AAVE() external returns (address) envfree; + function VotingStrategyHarness.getVotingAssetListLength( + ) external returns (uint256) envfree; + function VotingStrategyHarness.isTokenSlotAccepted( + address, uint128 + ) external returns (bool) envfree; + function VotingStrategyHarness.is_hasRequiredRoots( + bytes32 + ) external returns (bool) envfree; + + // `getVotingPower` is summarized since it uses bitwise operations and retrieves + // data from slots. We use a wildcard since it is called as: + // `IVotingStrategy(address(VOTING_STRATEGY)).getVotingPower` + function _.getVotingPower( + address asset, + uint128 baseStorageSlot, + uint256 power, + bytes32 blockHash + ) external => + _getVotingPower(asset, baseStorageSlot, power, blockHash) expect (uint256); + + // `DataWarehouse` ========================================================= + // Summarized since it retrieves data from slots + function DataWarehouse.getStorage( + address account, + bytes32 blockHash, + bytes32 slot, + bytes storageProof + ) external returns (StateProofVerifier.SlotValue) => + _getStorage(account, blockHash, slot, storageProof); + + // `CrossChainController` ================================================== + // NOTE: Not clear why this call is not resolved, we summarize it as `NONDET` + function CrossChainController.forwardMessage( + uint256, address, uint256, bytes + ) external returns (bytes32,bytes32) => NONDET; + + // `SlotUtils` ============================================================= + // Summarized for speed-up + function SlotUtils.getAccountSlotHash( + address, uint256 + ) internal returns (bytes32) => NONDET; +} + + +/// `getStorage` summary ======================================================= +/** @title Storage mapping + * @param underlyingAsset + * @param storageProof + * @return raw voting power for the given asset + */ +ghost mapping(address => mapping(bytes => uint256)) _slotValues; + + +/// @title Summary of `DataWarehouse.getStorage` - slot always exists +function _getStorage( + address account, // proof.underlyingAsset + bytes32 blockHash, + bytes32 slot, + bytes storageProof +) returns StateProofVerifier.SlotValue { + StateProofVerifier.SlotValue slotval; + require slotval.exists; + require slotval.value == _slotValues[account][storageProof]; + return slotval; +} + + +/// Voting power summary ======================================================= + +/* The method `getVotingPower` is summarized in `_getVotingPower` below. + * To keep fixed values per voter and asset, we use the ghost mapping `_votingAssetPower`. + */ + + +/** @title Voting power mapping + * Note: use `mockVotingPower` to get a voter's voting power, do not use the mapping + * directly. + * @param power: power of voter + * @param asset: address of asset + * @param baseStorageSlot + * @return voter's voting power for the given asset + */ +ghost mapping(uint256 => mapping(address => mapping(uint128 => uint256))) _votingAssetPower; + + +/** @title Mock voting power + * @param asset: address of asset + * @param baseStorageSlot: slot to use for the asset + * @param power: power (balance) of voter + * @return `_votingAssetPower[power][asset][baseStorageSlot]` if asset is one of + * `AAVE`, `STK_AAVE` or `A_AAVE`, and has the appropriate slot, and power is non-zero, + * zero otherwise + */ +function mockVotingPower( + address asset, + uint128 baseStorageSlot, + uint256 power +) returns uint256 { + // Return 0 if asset is not one of `AAVE`, `A_AAVE` or `STK_AAVE` + if ( + asset != _VotingStrategy.AAVE() && + asset != _VotingStrategy.STK_AAVE() && + asset != _VotingStrategy.A_AAVE()) { + return 0; + } + if (power == 0) { + return 0; + } + return ( + _VotingStrategy.isTokenSlotAccepted(asset, baseStorageSlot) ? + _votingAssetPower[power][asset][baseStorageSlot] : 0 + ); +} + + +/// @title Summary of `VotingStrategy.getVotingPower` +function _getVotingPower( + address asset, + uint128 baseStorageSlot, + uint256 power, + bytes32 blockHash +) returns uint256 { + uint256 votingPower = mockVotingPower(asset, baseStorageSlot, power); + return votingPower; +} + + +// Code mock verification rules ================================================ + +/** @title There are exactly three acceptable tokens + * @notice This invariant fails sanity due to due being tautological, i.e.: + * "trivial invariant check FAILED: post-state assertion is trivially true". + * It is kept since many configs and rules are based on this property, and + * therefore should be retained in CI. + */ +invariant onlyThreeTokens() + _VotingStrategy.getVotingAssetListLength() == 3; diff --git a/security/certora/specs/voting/proposal_config.spec b/security/certora/specs/voting/proposal_config.spec new file mode 100644 index 0000000..7dd1b56 --- /dev/null +++ b/security/certora/specs/voting/proposal_config.spec @@ -0,0 +1,123 @@ +/// ============================================================================ +/// Proposal configuration +/// ============================================================================ + +import "setup.spec"; + + +// Utilities =================================================================== + +/// @title Proposal's voting duration +function getProposalVotingDuration(uint256 proposalId) returns uint24 { + IVotingMachineWithProofs.ProposalVoteConfiguration conf = ( + getProposalVoteConfiguration(proposalId) + ); + return conf.votingDuration; +} + + +/// @title Has the proposal's config been created +function is_proposalConfigCreated(uint256 proposalId) returns bool { + IVotingMachineWithProofs.ProposalVoteConfiguration conf = ( + getProposalVoteConfiguration(proposalId) + ); + return conf.l1ProposalBlockHash != to_bytes32(0); +} + + +/** @title Is the proposal created + * @return False if the proposal's state is `NotCreated`, true otherwise. + * @notice By rule `proposalLegalStates` the state `NotCreated` is equivalent to + * `endTime` being zero. + */ +function is_proposalStarted(uint256 proposalId) returns bool { + IVotingMachineWithProofs.ProposalWithoutVotes proposal = getProposalById(proposalId); + return proposal.endTime != 0; +} + + +/** @title Does the proposal have the required roots + * Essentially this verifies that `VotingStrategy.hasRequiredRoots` does not revert. + * @return true if the roots exist + */ +function is_proposalHasRoots(uint256 proposalId) returns bool { + IVotingMachineWithProofs.ProposalVoteConfiguration conf = ( + getProposalVoteConfiguration(proposalId) + ); + return _VotingStrategy.is_hasRequiredRoots(conf.l1ProposalBlockHash); +} + + +// Rules ======================================================================= + +/** @title When starting a proposal vote it already has a config + * @notice The opposite need not be true - in `_createBridgedProposalVote` the call to + * `startProposalVote(proposalId)` may fail. Since this is inside a try-catch (see + * `VotingMachineWithProofs.sol:412`) it will not revert the original call. + */ +invariant startedProposalHasConfig(uint256 proposalId) + is_proposalStarted(proposalId) => is_proposalConfigCreated(proposalId); + + +/// @title Once a proposal vote is started the required roots exist +invariant createdProposalHasRoots(uint256 proposalId) + is_proposalStarted(proposalId) => is_proposalHasRoots(proposalId) + { + preserved { + // Without this one can create a proposal with `l1ProposalBlockHash` zero + requireInvariant startedProposalHasConfig(proposalId); + } + } + + +/// @title Existing proposal config has non-zero duration +invariant proposalHasNonzeroDuration(uint256 proposalId) + is_proposalConfigCreated(proposalId) <=> (getProposalVotingDuration(proposalId) != 0); + + +/// @title New proposal must have unused ID +rule newProposalUnusedId(uint256 proposalId, bytes32 blockHash, uint24 votingDuration) { + + requireInvariant startedProposalHasConfig(proposalId); + + env e; + IVotingMachineWithProofs.ProposalVoteConfiguration preConf = ( + getProposalVoteConfiguration(proposalId) + ); + IVotingMachineWithProofs.ProposalState preState = getProposalState(e, proposalId); + + createProposalVoteHarness(e, proposalId, blockHash, votingDuration); + + IVotingMachineWithProofs.ProposalState postState = getProposalState(e, proposalId); + + // `preConf.l1ProposalBlockHash == to_bytes32(0)` implies the proposal is not created + assert ( + (preConf.l1ProposalBlockHash == to_bytes32(0)) && + ( + (postState != IVotingMachineWithProofs.ProposalState.NotCreated) => + (preState == IVotingMachineWithProofs.ProposalState.NotCreated) + ) + ); +} + + +/// @title A proposal's configuration is immutable once set +rule configIsImmutable(method f, uint256 proposalId) { + IVotingMachineWithProofs.ProposalVoteConfiguration preConf = ( + getProposalVoteConfiguration(proposalId) + ); + + env e; + calldataarg args; + f(e, args); + + IVotingMachineWithProofs.ProposalVoteConfiguration postConf = ( + getProposalVoteConfiguration(proposalId) + ); + + assert ( + (preConf.l1ProposalBlockHash != to_bytes32(0)) => + (preConf.l1ProposalBlockHash == postConf.l1ProposalBlockHash) && + (preConf.votingDuration == postConf.votingDuration) + ); +} diff --git a/security/certora/specs/voting/proposal_states.spec b/security/certora/specs/voting/proposal_states.spec new file mode 100644 index 0000000..ef10795 --- /dev/null +++ b/security/certora/specs/voting/proposal_states.spec @@ -0,0 +1,243 @@ +/// ============================================================================ +/// Proposal states +/// ============================================================================ + +import "setup.spec"; +import "proposal_config.spec"; + +use invariant startedProposalHasConfig; +use invariant proposalHasNonzeroDuration; + + +// Utilities =================================================================== + +function proposalStartTime(uint256 proposalId) returns uint40 { + IVotingMachineWithProofs.ProposalWithoutVotes proposal = getProposalById(proposalId); + return proposal.startTime; +} + + +function proposalEndTime(uint256 proposalId) returns uint40 { + IVotingMachineWithProofs.ProposalWithoutVotes proposal = getProposalById(proposalId); + return proposal.endTime; +} + + +function proposalVotingDuration(uint256 proposalId) returns uint24 { + IVotingMachineWithProofs.ProposalVoteConfiguration conf = ( + getProposalVoteConfiguration(proposalId) + ); + return conf.votingDuration; +} + + +/// @notice: ASSUMES `state.NotCreated <=> endTime != 0` +function isProposalStarted(uint256 proposalId) returns bool { + IVotingMachineWithProofs.ProposalWithoutVotes proposal = getProposalById(proposalId); + return proposal.endTime != 0; +} + +// Rules ======================================================================= + +/// @title A proposal's vote start time is before its end time +invariant startsBeforeEnds(uint256 proposalId) + ( + (proposalStartTime(proposalId) <= proposalEndTime(proposalId)) && + (isProposalStarted(proposalId) => ( + proposalStartTime(proposalId) < proposalEndTime(proposalId) + )) + ) + { + preserved { + // Without this one can create a proposal with `l1ProposalBlockHash` zero + requireInvariant startedProposalHasConfig(proposalId); + + // Without this one can start a vote with zero duration + requireInvariant proposalHasNonzeroDuration(proposalId); + } + } + + +/// @title A started proposal's end time is the start time plus voting duration +invariant startsStrictlyBeforeEnds(uint256 proposalId) + isProposalStarted(proposalId) => ( + to_mathint(proposalEndTime(proposalId)) == + proposalStartTime(proposalId) + proposalVotingDuration(proposalId) + ) + { + preserved { + // Without this one can create a proposal with `l1ProposalBlockHash` zero + requireInvariant startedProposalHasConfig(proposalId); + } + } + + +/// @title A proposal's valid states +rule proposalLegalStates(uint256 proposalId) { + env e; + + IVotingMachineWithProofs.ProposalWithoutVotes proposal = getProposalById(proposalId); + IVotingMachineWithProofs.ProposalState state = getProposalState(e, proposalId); + + // The code casts `block.timestamp` to `uint40`, so we do the same + uint40 t = require_uint40(e.block.timestamp); + + // `NotCreated` state is the same as `endTime == 0` + assert ( + (state == IVotingMachineWithProofs.ProposalState.NotCreated) <=> + (proposal.endTime == 0) + ); + + assert ( + (state == IVotingMachineWithProofs.ProposalState.Active) <=> + ((proposal.endTime != 0) && (t <= proposal.endTime)) + ); + + // After `endTime` the state cannot be `Active` + assert (t > proposal.endTime) => (state != IVotingMachineWithProofs.ProposalState.Active); + + assert ( + (state == IVotingMachineWithProofs.ProposalState.Finished) <=> + ((proposal.endTime != 0) && (t > proposal.endTime) && !proposal.sentToGovernance) + ); + + assert ( + (state == IVotingMachineWithProofs.ProposalState.SentToGovernance) <=> + ((proposal.endTime != 0) && (t > proposal.endTime) && proposal.sentToGovernance) + ); + + // Must be in one of four states + assert ( + state == IVotingMachineWithProofs.ProposalState.NotCreated || + state == IVotingMachineWithProofs.ProposalState.Active || + state == IVotingMachineWithProofs.ProposalState.Finished || + state == IVotingMachineWithProofs.ProposalState.SentToGovernance + ); +} + + +/// @title A proposal's valid state transitions by method call +rule proposalMethodStateTransitionCompliance(method f, uint256 proposalId) { + env e; + + IVotingMachineWithProofs.ProposalState before = getProposalState(e, proposalId); + + calldataarg args; + f(e, args); + + IVotingMachineWithProofs.ProposalState after = getProposalState(e, proposalId); + + // `NotCreated` state can be changed only by `startProposalVote` + assert ( + (before == IVotingMachineWithProofs.ProposalState.NotCreated) => + ( + after == before || + ( + after == IVotingMachineWithProofs.ProposalState.Active && + ( + f.selector == sig:startProposalVote(uint256).selector || + f.selector == ( + sig:createProposalVoteHarness(uint256, bytes32, uint24).selector + ) + ) + ) + ) + ); + + // `Active` state can be changed only in time, not method call + assert ( + before == IVotingMachineWithProofs.ProposalState.Active => after == before + ); + + // `Finished` state can be changed only using `closeAndSendVote` + assert ( + (before == IVotingMachineWithProofs.ProposalState.Finished) => + ( + after == before || + ( + after == IVotingMachineWithProofs.ProposalState.SentToGovernance && + f.selector == sig:closeAndSendVote(uint256).selector + ) + ) + ); + + // `SentToGovernance` state is final + assert ( + before == IVotingMachineWithProofs.ProposalState.SentToGovernance => after == before + ); +} + + +/// @title A proposal's valid state transitions by time +rule proposalTimeStateTransitionCompliance(uint256 proposalId) { + env e0; + IVotingMachineWithProofs.ProposalState before = getProposalState(e0, proposalId); + + env e1; + + // Ensure `e1` occurs after `e0` + // Note the code casts `block.timestamp` to `uint40`, so we do the same + uint40 t0 = require_uint40(e0.block.timestamp); + uint40 t1 = require_uint40(e1.block.timestamp); + require t1 >= t0; + IVotingMachineWithProofs.ProposalState after = getProposalState(e1, proposalId); + + // `NotCreated` state can be changed only by `startProposalVote` + assert ( + before == IVotingMachineWithProofs.ProposalState.NotCreated => after == before + ); + + // `Active` state can be changed in time + assert ( + before == IVotingMachineWithProofs.ProposalState.Active => + ( + after == before || + ( + t1 > t0 && + ( + after == IVotingMachineWithProofs.ProposalState.Finished || + after == IVotingMachineWithProofs.ProposalState.SentToGovernance + ) + ) + ) + ); + + // `Finished` and `SentToGovernance` states cannot be changed by time alone + assert ( + ( + before == IVotingMachineWithProofs.ProposalState.Finished || + before == IVotingMachineWithProofs.ProposalState.SentToGovernance + ) => after == before + ); +} + + +/** @title Proposal immutability + * Verifies that certain fields of the proposal are immutable (once the proposal is + * created of course). + */ +rule proposalImmutability(method f, uint256 proposalId) { + IVotingMachineWithProofs.ProposalWithoutVotes pre = getProposalById(proposalId); + + env e; + IVotingMachineWithProofs.ProposalState initialState = getProposalState(e, proposalId); + calldataarg args; + f(e, args); + + IVotingMachineWithProofs.ProposalWithoutVotes post = getProposalById(proposalId); + + assert ( + (initialState != IVotingMachineWithProofs.ProposalState.NotCreated) => + ( + pre.id == post.id && + pre.startTime == post.startTime && + pre.endTime == post.endTime && + pre.creationBlockNumber == post.creationBlockNumber + ) + ); +} + + +/// @title A created proposal vote's ID is never changed +invariant proposalIdIsImmutable(uint256 proposalId) + isProposalStarted(proposalId) => (getIdOfProposal(proposalId) == proposalId); diff --git a/security/certora/specs/voting/setup.spec b/security/certora/specs/voting/setup.spec new file mode 100644 index 0000000..03603f5 --- /dev/null +++ b/security/certora/specs/voting/setup.spec @@ -0,0 +1,59 @@ +/// ============================================================================ +/// `VotingMachine` contract - basic setup +/// ============================================================================ +using VotingStrategyHarness as _VotingStrategy; + + +methods +{ + // `VotingMachine` ========================================================= + function getUserProposalVote( + address, uint256 + ) external returns (IVotingMachineWithProofs.Vote) envfree; + + function getProposalById( + uint256 + ) external returns (IVotingMachineWithProofs.ProposalWithoutVotes) envfree; + + function getProposalVoteConfiguration( + uint256 + ) external returns (IVotingMachineWithProofs.ProposalVoteConfiguration) envfree; + + function getIdOfProposal(uint256) external returns (uint256) envfree; + + // `VotingStrategy` ======================================================== + function VotingStrategyHarness.is_hasRequiredRoots( + bytes32 + ) external returns (bool) envfree; + + // `getVotingPower` is summarized since it uses bitwise operations and retrieves + // data from slots. We use a wildcard since it is called as: + // `IVotingStrategy(address(VOTING_STRATEGY)).getVotingPower` + function _.getVotingPower( + address asset, + uint128 baseStorageSlot, + uint256 power, + bytes32 blockHash + ) external => NONDET; + + // `DataWarehouse` ========================================================= + // Summarized since it retrieves data from slots + function DataWarehouse.getStorage( + address account, + bytes32 blockHash, + bytes32 slot, + bytes storageProof + ) external returns (StateProofVerifier.SlotValue) => NONDET; + + // `CrossChainController` ================================================== + // NOTE: Not clear why this call is not resolved, we summarize it as `NONDET` + function CrossChainController.forwardMessage( + uint256, address, uint256, bytes + ) external returns (bytes32,bytes32) => NONDET; + + // `SlotUtils` ============================================================= + // Summarized for speed-up + function SlotUtils.getAccountSlotHash( + address, uint256 + ) internal returns (bytes32) => NONDET; +} diff --git a/security/certora/specs/voting/voting_and_tally.spec b/security/certora/specs/voting/voting_and_tally.spec new file mode 100644 index 0000000..a50d93e --- /dev/null +++ b/security/certora/specs/voting/voting_and_tally.spec @@ -0,0 +1,644 @@ +/// ============================================================================ +/// Vote Tally and Casting Votes +/// ============================================================================ + +/* Definitions + * ----------- + * - Votes tally: The votes tally for a proposal is the pair (2-tuple) of votes in favor + * and votes against, i.e. `(forVotes, againstVotes)`. + * - Stored voting power: The stored voting power of a voter `v` for a proposal `i` is + * the field `getUserProposalVote(v, i).votingPower`. + * - A vote was cast: We say that "a vote was cast" for a proposal `i` if there exists a + * voter `v` whose stored voting power for `i` changed from zero to positive. + * + * Summary + * ------- + * This spec proves that in a single method call: + * 1. The voting tally for proposal i changed if and only if a single voter cast a vote + * for proposal i + * 2. At most one voter can cast a vote on one proposal + * 3. When a vote is cast on a proposal, the proposal's votes tally changes accordingly + * 4. The voting tally can be changed only using one of the voting methods + * (rule `onlyVoteCanChangeResult`) + * 5. The voting tally in favor and against can only increase, and their sum equals + * the sum of stored voting powers for that proposal + */ + +import "setup.spec"; + + +// Ghosts and hooks ============================================================ + +/** @title Function indicating a vote was cast for the given proposal + * A ghost function showing that `_proposals[proposalId].votes[voter].votingPower` + * changed from zero to positive (see hook below). + * @param proposalId + * @return Whether a vote was cast for a given proposal + */ +ghost is_someoneVoting(uint256) returns bool; + + +/// @title The number of times values have been stored in voting map +ghost number_stores() returns mathint; + + +/** @title Ghost function following votes mapping + * @param proposalID + * @param voter + * @return The registered voting power for the voter, namely the value of + * ` _proposals[proposalId].votes[voter].votingPower`, see invariant + * `votingPowerGhostIsVotingPower` below + */ +ghost storedVotingPower(uint256, address) returns uint248 { + init_state axiom forall uint256 proposalId. forall address voter. + storedVotingPower(proposalId, voter) == 0; +} + + +/// @title Sum of all (increasing) votes +ghost mapping(uint256 => mathint) votesSum { + init_state axiom forall uint256 proposalId. votesSum[proposalId] == 0; +} + + +/** @title Hook updating the ghost functions + * In particular, this hook implies that whenever `storedVotingPower(i, v)` changed from + * zero to positive number then `is_someoneVoting(i)` must be true. + */ +hook Sstore + _proposals[KEY uint256 proposalId].votes[KEY address voter].votingPower + uint248 newPower (uint248 oldPower) STORAGE + { + // Update `is_someoneVoting` - only the new + havoc is_someoneVoting assuming ( + (oldPower == 0 && newPower > 0) => is_someoneVoting@new(proposalId) + ); + + // Update `number_stores` + havoc number_stores assuming number_stores@new() == number_stores@old() + 1; + + // Update `storedVotingPower` - only the new power + havoc storedVotingPower assuming ( + storedVotingPower@new(proposalId, voter) == newPower && + ( + forall uint256 pId. forall address v. + (pId != proposalId || v != voter) => + storedVotingPower@new(pId, v) == storedVotingPower@old(pId, v) + ) + ); + + // Update `votesSum` + votesSum[proposalId] = ( + newPower > oldPower ? + votesSum[proposalId] + newPower - oldPower : + votesSum[proposalId] + ); + } + + +// Ghost voting power equivalence ============================================== + +/// @title Utility function for `getUserProposalVote` invariant below +function getRegisteredVotingPower(uint256 proposalId, address voter) returns uint248 { + IVotingMachineWithProofs.Vote vote = getUserProposalVote(voter, proposalId); + return vote.votingPower; +} + + +/** @title Stored voting power equals `getUserProposalVote` + * This invariant proves that `storedVotingPower == getRegisteredVotingPower`. + * It follows that if a vote is cast on proposal `i` then `is_someoneVoting(i)` is true. + */ +invariant votingPowerGhostIsVotingPower(uint256 proposalId, address voter) + getRegisteredVotingPower(proposalId, voter) == storedVotingPower(proposalId, voter); + + +// Votes tally ================================================================= + +/// @title A utility function for `sumOfVotes` invariant +function getVotesSum(uint256 proposalId) returns mathint { + IVotingMachineWithProofs.ProposalWithoutVotes prop = getProposalById(proposalId); + return prop.forVotes + prop.againstVotes; +} + + +/// @title The sum of votes in favor and against equals the sum of stored voting powers +invariant sumOfVotes(uint256 proposalId) + votesSum[proposalId] == getVotesSum(proposalId); + + +// Casting votes =============================================================== + +/** @title If a proposal's votes tally changed then a vote was cast on the proposal + * To be precise, if the proposal's votes tally changed then there exists a voter `v` + * whose stored voting power on the proposal changed from zero to positive. + */ +rule voteTallyChangedOnlyByVoting(method f, uint256 proposalId) { + assert sig:getProposalById(uint256).isView; + + IVotingMachineWithProofs.ProposalWithoutVotes pre = getProposalById(proposalId); + mathint numStoresPre = number_stores(); + + env e; + calldataarg args; + f(e, args); + + IVotingMachineWithProofs.ProposalWithoutVotes post = getProposalById(proposalId); + + mathint numStoresPost = number_stores(); + bool is_tallyChanged = ( + (pre.forVotes != post.forVotes) || (pre.againstVotes != post.againstVotes) + ); + assert is_tallyChanged => ( + is_someoneVoting(proposalId) && (numStoresPost == numStoresPre + 1) + ); +} + + +/** @title Casting a vote changes the proposal's votes tally + * If a vote was cast for a proposal, then the proposal's votes tally changed. + * Moreover, the change in tally corresponds to the vote that was cast. + */ +rule voteUpdatesTally(method f, uint256 proposalId, address voter) { + env e; + IVotingMachineWithProofs.ProposalWithoutVotes pre = getProposalById(proposalId); + IVotingMachineWithProofs.Vote preVote = getUserProposalVote(voter, proposalId); + IVotingMachineWithProofs.ProposalState state = getProposalState(e, proposalId); + + calldataarg args; + f(e, args); + + IVotingMachineWithProofs.ProposalWithoutVotes post = getProposalById(proposalId); + IVotingMachineWithProofs.Vote postVote = getUserProposalVote(voter, proposalId); + + bool is_voteCast = (preVote.votingPower != postVote.votingPower); + + assert is_voteCast => ( + // hasn't voted before (also implies `postVote.votingPower > 0`) + preVote.votingPower == 0 && + // Can't vote in a state other than `Active` + state == IVotingMachineWithProofs.ProposalState.Active + ); + + mathint forChange = post.forVotes - pre.forVotes; + mathint againstChange = post.againstVotes - pre.againstVotes; + mathint votedPower = to_mathint(postVote.votingPower); + assert (is_voteCast && postVote.support) => ( + (forChange == votedPower) && (againstChange == 0) + ); + assert (is_voteCast && !postVote.support) => ( + (forChange == 0) && (againstChange == votedPower) + ); +} + + +/** @title Returns true if `f` is a voting method where sender is the voter + * Used in `dispatchVote` and `onlyVoteCanChangeResult` below. + */ +function isSenderVoterFunction(method f) returns bool { + return ( + f.selector == sig:submitVote( + uint256, bool, IVotingMachineWithProofs.VotingBalanceProof[] + ).selector || f.selector == sig:submitVoteSingleProof( + uint256, bool, IVotingMachineWithProofs.VotingBalanceProof + ).selector + ); +} + + +/** @title Utility function for dispatching voting methods - ensures correct voter + * Used in `onlyVoteCanChangeResult` and `strangerVoteUnchanged` below. + */ +function dispatchVote(method f, env e, address voter) { + // Commonly used args + uint256 aProposalId; + bool support; + IVotingMachineWithProofs.VotingBalanceProof[] votingBalanceProofs; + + if (f.selector == sig:submitVoteAsRepresentative( + uint256,bool,address,bytes,IVotingMachineWithProofs.VotingBalanceProof[] + ).selector + ) { + bytes proofOfRepresentation; + submitVoteAsRepresentative( + e, aProposalId, support, voter, proofOfRepresentation, votingBalanceProofs + ); + } else if (f.selector == sig:submitVoteAsRepresentativeBySignature( + uint256,address,address,bool,bytes, + IVotingMachineWithProofs.VotingBalanceProof[], + IVotingMachineWithProofs.SignatureParams + ).selector + ) { + address representative; + bytes proofOfRepresentation; + IVotingMachineWithProofs.SignatureParams signatureParams; + submitVoteAsRepresentativeBySignature( + e, aProposalId, voter, representative, support, proofOfRepresentation, + votingBalanceProofs, + signatureParams + ); + } else if (f.selector == sig:submitVoteBySignature( + uint256, address, bool, IVotingMachineWithProofs.VotingBalanceProof[], + uint8, bytes32, bytes32 + ).selector + ) { + uint8 v; + bytes32 r; + bytes32 s; + submitVoteBySignature(e, aProposalId, voter, support, votingBalanceProofs, v, r, s); + } else if (f.selector == sig:submitVoteFromVoter( + address, uint256, bool, IVotingMachineWithProofs.VotingBalanceProof[] + ).selector + ) { + submitVoteFromVoter(e, voter, aProposalId, support, votingBalanceProofs); + } else { + if isSenderVoterFunction(f) { + // The sender is the voter + require voter == e.msg.sender; + } + calldataarg args; + f(e, args); + } +} + + +/// @title Vote tally can be changed only by one of the voting methods +rule onlyVoteCanChangeResult(method f, uint256 proposalId, address voter) { + env e; + IVotingMachineWithProofs.ProposalWithoutVotes pre = getProposalById(proposalId); + IVotingMachineWithProofs.Vote preVote = getUserProposalVote(voter, proposalId); + + dispatchVote(f, e, voter); + + IVotingMachineWithProofs.ProposalWithoutVotes post = getProposalById(proposalId); + IVotingMachineWithProofs.Vote postVote = getUserProposalVote(voter, proposalId); + + bool is_tallyChanged = ( + (pre.forVotes != post.forVotes) || (pre.againstVotes != post.againstVotes) + ); + // Is the `voter` the one who cast the vote + bool is_voterCastVote = preVote.votingPower != postVote.votingPower; + + assert ( + is_tallyChanged => is_voterCastVote && ( + isSenderVoterFunction(f) || + f.selector == sig:submitVoteAsRepresentative( + uint256,bool,address,bytes,IVotingMachineWithProofs.VotingBalanceProof[] + ).selector || + f.selector == sig:submitVoteAsRepresentativeBySignature( + uint256,address,address,bool,bytes, + IVotingMachineWithProofs.VotingBalanceProof[], + IVotingMachineWithProofs.SignatureParams + ).selector || + f.selector == sig:submitVoteBySignature( + uint256, address, bool, IVotingMachineWithProofs.VotingBalanceProof[], + uint8, bytes32, bytes32 + ).selector || + f.selector == sig:submitVoteFromVoter( + address, uint256, bool, IVotingMachineWithProofs.VotingBalanceProof[] + ).selector + ) + ); +} + + +/// @title Voting tally can only increase +rule votingTallyCanOnlyIncrease(method f, uint256 proposalId) { + IVotingMachineWithProofs.ProposalWithoutVotes pre = getProposalById(proposalId); + + env e; + calldataarg args; + f(e, args); + + IVotingMachineWithProofs.ProposalWithoutVotes post = getProposalById(proposalId); + + bool is_tallyChanged = ( + (pre.forVotes != post.forVotes) || (pre.againstVotes != post.againstVotes) + ); + assert is_tallyChanged => ( + (post.forVotes > pre.forVotes) || (post.againstVotes > pre.againstVotes) + ); + assert (post.forVotes >= pre.forVotes) && (post.againstVotes >= pre.againstVotes); +} + + +// Other proposals and voters ================================================== + +/// @title A stranger's stored vote is unchanged when another votes +rule strangerVoteUnchanged(method f, uint256 proposalId, address stranger, address voter) +{ + require voter != stranger; + IVotingMachineWithProofs.Vote strangePre = getUserProposalVote(stranger, proposalId); + + env e; + dispatchVote(f, e, voter); + + IVotingMachineWithProofs.Vote strangePost = getUserProposalVote(stranger, proposalId); + + assert strangePre.support == strangePost.support; + assert strangePre.votingPower == strangePost.votingPower; +} + + +/// @title Only a single proposal's tally and votes may change by a single method call +rule otherProposalUnchanged( + method f, uint256 proposalId, uint256 otherProposal, address otherVoter +) { + require proposalId != otherProposal; + + env e; + IVotingMachineWithProofs.ProposalWithoutVotes preOriginal = getProposalById(proposalId); + IVotingMachineWithProofs.ProposalWithoutVotes preOther = getProposalById(otherProposal); + IVotingMachineWithProofs.Vote preOVote = getUserProposalVote(otherVoter, otherProposal); + + calldataarg args; + f(e, args); + + IVotingMachineWithProofs.ProposalWithoutVotes postOriginal = getProposalById(proposalId); + IVotingMachineWithProofs.ProposalWithoutVotes postOther = getProposalById(otherProposal); + IVotingMachineWithProofs.Vote postOVote = getUserProposalVote(otherVoter, otherProposal); + + bool is_tallyChanged = ( + (preOriginal.forVotes != postOriginal.forVotes) || + (preOriginal.againstVotes != postOriginal.againstVotes) + ); + bool is_otherTallyChanged = ( + (preOther.forVotes != postOther.forVotes) || + (preOther.againstVotes != postOther.againstVotes) + ); + bool is_otherVoteChanged = (preOVote.votingPower != postOVote.votingPower); + assert is_tallyChanged => (!is_otherTallyChanged && !is_otherVoteChanged); +} + + +/// @title Only a single voter's stored voting power may change (on a given proposal) +rule otherVoterUntouched( + method f, uint256 proposalId, address voter, address stranger +) { + require voter != stranger; + + env e; + IVotingMachineWithProofs.Vote preVoter = getUserProposalVote(voter, proposalId); + IVotingMachineWithProofs.Vote preStranger = getUserProposalVote(stranger, proposalId); + + calldataarg args; + f(e, args); + + IVotingMachineWithProofs.Vote postVoter = getUserProposalVote(voter, proposalId); + IVotingMachineWithProofs.Vote postStranger = getUserProposalVote(stranger, proposalId); + + bool is_voterChanged = (preVoter.votingPower != postVoter.votingPower); + bool is_strangerChanged = (preStranger.votingPower != postStranger.votingPower); + assert is_voterChanged => !is_strangerChanged; +} + +// rule sanity{ +// env e; +// calldataarg arg; +// method f; +// f(e, arg); +// satisfy true; +// } + +// // Representative +// rule cannot_vote_twice_with_submitVote(method f) filtered { f -> !f.isView}{ + +// env e1; +// env e2; +// uint256 proposalId1; +// uint256 proposalId2; +// bool support1; +// bool support2; +// IVotingMachineWithProofs.VotingBalanceProof[] votingBalanceProofs1; +// IVotingMachineWithProofs.VotingBalanceProof[] votingBalanceProofs2; +// env e_f; +// calldataarg args; + +// submitVote(e1, proposalId1,support1,votingBalanceProofs1); +// f(e_f, args); +// submitVote(e2, proposalId2,support2,votingBalanceProofs2); +// assert proposalId1 == proposalId2 => e1.msg.sender != e2.msg.sender; + +// } + + +// rule cannot_vote_twice_with_submitVote_witness{ + +// env e1; +// env e2; +// uint256 proposalId1; +// uint256 proposalId2; +// bool support1; +// bool support2; +// IVotingMachineWithProofs.VotingBalanceProof[] votingBalanceProofs1; +// IVotingMachineWithProofs.VotingBalanceProof[] votingBalanceProofs2; + +// submitVote(e1, proposalId1,support1,votingBalanceProofs1); +// submitVote(e2, proposalId2,support2,votingBalanceProofs2); +// require proposalId1 == proposalId2; +// satisfy e1.msg.sender != e2.msg.sender; +// } + + +//check submitVoteAsRepresentative and submitVote + +rule cannot_vote_twice_with_submitVote_and_submitVoteAsRepresentative(method f) filtered { f -> !f.isView}{ + + env e1; + env e2; + uint256 proposalId1; + uint256 proposalId2; + bool support1; + bool support2; + IVotingMachineWithProofs.VotingBalanceProof[] votingBalanceProofs1; + IVotingMachineWithProofs.VotingBalanceProof[] votingBalanceProofs2; + address voter; + bytes proofOfRepresentation; + + env e_f; + calldataarg args; + + submitVote(e1, proposalId1,support1,votingBalanceProofs1); + f(e_f, args); + submitVoteAsRepresentative(e2, proposalId2, support2, voter, proofOfRepresentation, votingBalanceProofs2); + + assert proposalId1 == proposalId2 => e1.msg.sender != voter; + +} + +// rule cannot_vote_twice_with_submitVote_and_submitVoteAsRepresentative_witness(method f) filtered { f -> !f.isView}{ + +// env e1; +// env e2; +// uint256 proposalId1; +// uint256 proposalId2; +// bool support1; +// bool support2; +// IVotingMachineWithProofs.VotingBalanceProof[] votingBalanceProofs1; +// IVotingMachineWithProofs.VotingBalanceProof[] votingBalanceProofs2; +// address voter; +// bytes proofOfRepresentation; + +// env e_f; +// calldataarg args; + +// submitVote(e1, proposalId1,support1,votingBalanceProofs1); +// f(e_f, args); +// submitVoteAsRepresentative(e2, proposalId2, support2, voter, proofOfRepresentation, votingBalanceProofs2); + +// require proposalId1 == proposalId2; +// satisfy e1.msg.sender != voter; + +// } + + +rule cannot_vote_twice_with_submitVoteAsRepresentative_and_submitVote(method f) filtered { f -> !f.isView}{ + + env e1; + env e2; + uint256 proposalId1; + uint256 proposalId2; + bool support1; + bool support2; + IVotingMachineWithProofs.VotingBalanceProof[] votingBalanceProofs1; + IVotingMachineWithProofs.VotingBalanceProof[] votingBalanceProofs2; + address voter; + bytes proofOfRepresentation; + + env e_f; + calldataarg args; + + submitVoteAsRepresentative(e2, proposalId2, support2, voter, proofOfRepresentation, votingBalanceProofs2); + f(e_f, args); + submitVote(e1, proposalId1,support1,votingBalanceProofs1); + + assert proposalId1 == proposalId2 => e1.msg.sender != voter; + +} + +// rule cannot_vote_twice_with_submitVoteAsRepresentative_and_submitVote_witness(method f) filtered { f -> !f.isView}{ + +// env e1; +// env e2; +// uint256 proposalId1; +// uint256 proposalId2; +// bool support1; +// bool support2; +// IVotingMachineWithProofs.VotingBalanceProof[] votingBalanceProofs1; +// IVotingMachineWithProofs.VotingBalanceProof[] votingBalanceProofs2; +// address voter; +// bytes proofOfRepresentation; + +// env e_f; +// calldataarg args; + +// submitVoteAsRepresentative(e2, proposalId2, support2, voter, proofOfRepresentation, votingBalanceProofs2); +// f(e_f, args); +// submitVote(e1, proposalId1,support1,votingBalanceProofs1); + +// require proposalId1 == proposalId2; +// satisfy e1.msg.sender != voter; + +// } + +//check submitVoteAsRepresentative and submitVoteSingleProof + + +// rule cannot_vote_twice_with_submitVoteSingleProof_and_submitVoteAsRepresentative(method f) filtered { f -> !f.isView}{ + +// env e1; +// env e2; +// uint256 proposalId1; +// uint256 proposalId2; +// bool support1; +// bool support2; +// IVotingMachineWithProofs.VotingBalanceProof votingBalanceProofs1; +// IVotingMachineWithProofs.VotingBalanceProof[] votingBalanceProofs2; +// address voter; +// bytes proofOfRepresentation; + +// env e_f; +// calldataarg args; + +// submitVoteSingleProof(e1, proposalId1,support1,votingBalanceProofs1); +// f(e_f, args); +// submitVoteAsRepresentative(e2, proposalId2, support2, voter, proofOfRepresentation, votingBalanceProofs2); + +// assert proposalId1 == proposalId2 => e1.msg.sender != voter; + +// } + +// rule cannot_vote_twice_with_submitVoteSingleProof_and_submitVoteAsRepresentative_witness(method f) filtered { f -> !f.isView}{ + +// env e1; +// env e2; +// uint256 proposalId1; +// uint256 proposalId2; +// bool support1; +// bool support2; +// IVotingMachineWithProofs.VotingBalanceProof votingBalanceProofs1; +// IVotingMachineWithProofs.VotingBalanceProof[] votingBalanceProofs2; +// address voter; +// bytes proofOfRepresentation; + +// env e_f; +// calldataarg args; + +// submitVoteSingleProof(e1, proposalId1,support1,votingBalanceProofs1); +// f(e_f, args); +// submitVoteAsRepresentative(e2, proposalId2, support2, voter, proofOfRepresentation, votingBalanceProofs2); + +// require proposalId1 == proposalId2; +// satisfy e1.msg.sender != voter; + +// } + + +rule cannot_vote_twice_with_submitVoteSingleProofAsRepresentative_and_submitVote(method f) filtered { f -> !f.isView}{ + + env e1; + env e2; + uint256 proposalId1; + uint256 proposalId2; + bool support1; + bool support2; + IVotingMachineWithProofs.VotingBalanceProof votingBalanceProofs1; + IVotingMachineWithProofs.VotingBalanceProof[] votingBalanceProofs2; + address voter; + bytes proofOfRepresentation; + + env e_f; + calldataarg args; + + submitVoteAsRepresentative(e2, proposalId2, support2, voter, proofOfRepresentation, votingBalanceProofs2); + f(e_f, args); + submitVoteSingleProof(e1, proposalId1,support1,votingBalanceProofs1); + + assert proposalId1 == proposalId2 => e1.msg.sender != voter; + +} + +// rule cannot_vote_twice_with_submitVoteAsRepresentative_and_submitVoteSingleProof_witness(method f) filtered { f -> !f.isView}{ + +// env e1; +// env e2; +// uint256 proposalId1; +// uint256 proposalId2; +// bool support1; +// bool support2; +// IVotingMachineWithProofs.VotingBalanceProof votingBalanceProofs1; +// IVotingMachineWithProofs.VotingBalanceProof[] votingBalanceProofs2; +// address voter; +// bytes proofOfRepresentation; + +// env e_f; +// calldataarg args; + +// submitVoteAsRepresentative(e2, proposalId2, support2, voter, proofOfRepresentation, votingBalanceProofs2); +// f(e_f, args); +// submitVoteSingleProof(e1, proposalId1,support1,votingBalanceProofs1); + +// require proposalId1 == proposalId2; +// satisfy e1.msg.sender != voter; + +// } diff --git a/security/certora/tests/BaseVotingStrategy-1.sol b/security/certora/tests/BaseVotingStrategy-1.sol new file mode 100644 index 0000000..e131ac9 --- /dev/null +++ b/security/certora/tests/BaseVotingStrategy-1.sol @@ -0,0 +1,116 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IBaseVotingStrategy} from '../interfaces/IBaseVotingStrategy.sol'; +import {Errors} from './libraries/Errors.sol'; + +//import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; + +/** + * @title BaseVotingStrategy + * @author BGD Labs + * @notice This contract contains the base logic of a voting strategy, being on governance chain or voting machine chain. + */ +abstract contract BaseVotingStrategy is IBaseVotingStrategy { + function AAVE() public pure virtual returns (address) { + return 0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9; + } + + function STK_AAVE() public pure virtual returns (address) { + return 0x4da27a545c0c5B758a6BA100e3a049001de870f5; + } + + function A_AAVE() public pure virtual returns (address) { + return 0xA700b4eB416Be35b2911fd5Dee80678ff64fF6C9; + } + + uint128 public constant BASE_BALANCE_SLOT = 0; + uint128 public constant A_AAVE_BASE_BALANCE_SLOT = 52; + uint128 public constant A_AAVE_DELEGATED_STATE_SLOT = 64; + + /// @dev on the constructor we get all the voting assets and emit the different asset configurations + constructor() { + address[] memory votingAssetList = getVotingAssetList(); + + // Check that voting strategy at least has one asset + require(votingAssetList.length != 0, Errors.NO_VOTING_ASSETS); + + for (uint256 i = 0; i < votingAssetList.length; i++) { + for (uint256 j = i + 1; j < votingAssetList.length; j++) { + require( + votingAssetList[i] != votingAssetList[j], + Errors.REPEATED_STRATEGY_ASSET + ); + } + VotingAssetConfig memory votingAssetConfig = getVotingAssetConfig( + votingAssetList[i] + ); + + require( + votingAssetConfig.storageSlots.length > 0, + Errors.EMPTY_ASSET_STORAGE_SLOTS + ); + + for (uint256 k = 0; k < votingAssetConfig.storageSlots.length; k++) { + for ( + uint256 l = k + 1; + l < votingAssetConfig.storageSlots.length; + l++ + ) { + require( + votingAssetConfig.storageSlots[k] != + votingAssetConfig.storageSlots[l], + Errors.REPEATED_STRATEGY_ASSET_SLOT + ); + } + } + + emit VotingAssetAdd(votingAssetList[i], votingAssetConfig.storageSlots); + } + } + + /// @inheritdoc IBaseVotingStrategy + function getVotingAssetList() public pure returns (address[] memory) { + address[] memory votingAssets = new address[](3); + + votingAssets[0] = A_AAVE(); //AAVE(); + votingAssets[1] = STK_AAVE(); + votingAssets[2] = A_AAVE(); + + return votingAssets; + } + + /// @inheritdoc IBaseVotingStrategy + function getVotingAssetConfig( + address asset + ) public pure returns (VotingAssetConfig memory) { + VotingAssetConfig memory votingAssetConfig; + + if (asset == AAVE() || asset == STK_AAVE()) { + votingAssetConfig.storageSlots = new uint128[](1); + votingAssetConfig.storageSlots[0] = BASE_BALANCE_SLOT; + } else if (asset == A_AAVE()) { + votingAssetConfig.storageSlots = new uint128[](2); + votingAssetConfig.storageSlots[0] = A_AAVE_BASE_BALANCE_SLOT; + votingAssetConfig.storageSlots[1] = A_AAVE_DELEGATED_STATE_SLOT; + } else { + return votingAssetConfig; + } + + return votingAssetConfig; + } + + /// @inheritdoc IBaseVotingStrategy + function isTokenSlotAccepted( + address token, + uint128 slot + ) external pure returns (bool) { + VotingAssetConfig memory votingAssetConfig = getVotingAssetConfig(token); + for (uint256 i = 0; i < votingAssetConfig.storageSlots.length; i++) { + if (slot == votingAssetConfig.storageSlots[i]) { + return true; + } + } + return false; + } +} diff --git a/security/certora/tests/BaseVotingStrategy-2.sol b/security/certora/tests/BaseVotingStrategy-2.sol new file mode 100644 index 0000000..804498c --- /dev/null +++ b/security/certora/tests/BaseVotingStrategy-2.sol @@ -0,0 +1,116 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IBaseVotingStrategy} from '../interfaces/IBaseVotingStrategy.sol'; +import {Errors} from './libraries/Errors.sol'; + +//import {AaveV3EthereumAssets} from 'aave-address-book/AaveV3Ethereum.sol'; + +/** + * @title BaseVotingStrategy + * @author BGD Labs + * @notice This contract contains the base logic of a voting strategy, being on governance chain or voting machine chain. + */ +abstract contract BaseVotingStrategy is IBaseVotingStrategy { + function AAVE() public pure virtual returns (address) { + return 0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9; + } + + function STK_AAVE() public pure virtual returns (address) { + return 0x4da27a545c0c5B758a6BA100e3a049001de870f5; + } + + function A_AAVE() public pure virtual returns (address) { + return 0xA700b4eB416Be35b2911fd5Dee80678ff64fF6C9; + } + + uint128 public constant BASE_BALANCE_SLOT = 0; + uint128 public constant A_AAVE_BASE_BALANCE_SLOT = 52; + uint128 public constant A_AAVE_DELEGATED_STATE_SLOT = 64; + + /// @dev on the constructor we get all the voting assets and emit the different asset configurations + constructor() { + address[] memory votingAssetList = getVotingAssetList(); + + // Check that voting strategy at least has one asset + require(votingAssetList.length != 0, Errors.NO_VOTING_ASSETS); + + for (uint256 i = 0; i < votingAssetList.length; i++) { + for (uint256 j = i + 1; j < votingAssetList.length; j++) { + require( + votingAssetList[i] != votingAssetList[j], + Errors.REPEATED_STRATEGY_ASSET + ); + } + VotingAssetConfig memory votingAssetConfig = getVotingAssetConfig( + votingAssetList[i] + ); + + require( + votingAssetConfig.storageSlots.length > 0, + Errors.EMPTY_ASSET_STORAGE_SLOTS + ); + + for (uint256 k = 0; k < votingAssetConfig.storageSlots.length; k++) { + for ( + uint256 l = k + 1; + l < votingAssetConfig.storageSlots.length; + l++ + ) { + require( + votingAssetConfig.storageSlots[k] != + votingAssetConfig.storageSlots[l], + Errors.REPEATED_STRATEGY_ASSET_SLOT + ); + } + } + + emit VotingAssetAdd(votingAssetList[i], votingAssetConfig.storageSlots); + } + } + + /// @inheritdoc IBaseVotingStrategy + function getVotingAssetList() public pure returns (address[] memory) { + address[] memory votingAssets = new address[](3); + + votingAssets[0] = AAVE(); + votingAssets[1] = STK_AAVE(); + votingAssets[2] = A_AAVE(); + + return votingAssets; + } + + /// @inheritdoc IBaseVotingStrategy + function getVotingAssetConfig( + address asset + ) public pure returns (VotingAssetConfig memory) { + VotingAssetConfig memory votingAssetConfig; + + if (asset == AAVE() || asset == STK_AAVE()) { + votingAssetConfig.storageSlots = new uint128[](1); + votingAssetConfig.storageSlots[0] = BASE_BALANCE_SLOT; + } else if (asset == A_AAVE()) { + votingAssetConfig.storageSlots = new uint128[](2); + votingAssetConfig.storageSlots[0] = A_AAVE_BASE_BALANCE_SLOT; + votingAssetConfig.storageSlots[1] = A_AAVE_DELEGATED_STATE_SLOT; + } else { + return votingAssetConfig; + } + + return votingAssetConfig; + } + + /// @inheritdoc IBaseVotingStrategy + function isTokenSlotAccepted( + address token, + uint128 slot + ) external pure returns (bool) { + VotingAssetConfig memory votingAssetConfig = getVotingAssetConfig(token); + for (uint256 i = 0; i < votingAssetConfig.storageSlots.length-1; i++) { + if (slot == votingAssetConfig.storageSlots[i]) { + return true; + } + } + return false; + } +} diff --git a/security/certora/tests/GovernancePowerStrategy-3.sol b/security/certora/tests/GovernancePowerStrategy-3.sol new file mode 100644 index 0000000..7502db8 --- /dev/null +++ b/security/certora/tests/GovernancePowerStrategy-3.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IGovernancePowerDelegationToken} from 'aave-token-v3/interfaces/IGovernancePowerDelegationToken.sol'; +import {IBaseVotingStrategy} from '../interfaces/IBaseVotingStrategy.sol'; +import {IGovernancePowerStrategy} from '../interfaces/IGovernancePowerStrategy.sol'; +import {BaseVotingStrategy} from './BaseVotingStrategy.sol'; + +/** + * @title GovernancePowerStrategy + * @author BGD Labs + * @notice This contracts overrides the base voting strategy to return the power of specific assets used on the strategy. + * @dev These tokens will be used to get the proposition power to check if proposal can be created, and are the ones + needed on the voting machine chain voting strategy. + */ +contract GovernancePowerStrategy is + BaseVotingStrategy, + IGovernancePowerStrategy +{ + /// @inheritdoc IGovernancePowerStrategy + function getFullVotingPower(address user) external view returns (uint256) { + return + _getFullPowerByType( + user, + IGovernancePowerDelegationToken.GovernancePowerType.PROPOSITION + ); + } + + /// @inheritdoc IGovernancePowerStrategy + function getFullPropositionPower( + address user + ) external view returns (uint256) { + return + _getFullPowerByType( + user, + IGovernancePowerDelegationToken.GovernancePowerType.PROPOSITION + ); + } + + /** + * @notice method to get the full user's power by type + * @param user address of the user to get the full power + * @param powerType type of the power to get (voting, proposal) + * @return full power of an user depending on the type (voting, proposal) + */ + function _getFullPowerByType( + address user, + IGovernancePowerDelegationToken.GovernancePowerType powerType + ) internal view returns (uint256) { + uint256 fullGovernancePower; + + address[] memory votingAssetList = getVotingAssetList(); + for (uint256 i = 0; i < votingAssetList.length; i++) { + fullGovernancePower += IGovernancePowerDelegationToken(votingAssetList[i]) + .getPowerCurrent(user, powerType); + } + + return fullGovernancePower; + } +} diff --git a/security/certora/tests/GovernancePowerStrategy-4.sol b/security/certora/tests/GovernancePowerStrategy-4.sol new file mode 100644 index 0000000..4e43d70 --- /dev/null +++ b/security/certora/tests/GovernancePowerStrategy-4.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IGovernancePowerDelegationToken} from 'aave-token-v3/interfaces/IGovernancePowerDelegationToken.sol'; +import {IBaseVotingStrategy} from '../interfaces/IBaseVotingStrategy.sol'; +import {IGovernancePowerStrategy} from '../interfaces/IGovernancePowerStrategy.sol'; +import {BaseVotingStrategy} from './BaseVotingStrategy.sol'; + +/** + * @title GovernancePowerStrategy + * @author BGD Labs + * @notice This contracts overrides the base voting strategy to return the power of specific assets used on the strategy. + * @dev These tokens will be used to get the proposition power to check if proposal can be created, and are the ones + needed on the voting machine chain voting strategy. + */ +contract GovernancePowerStrategy is + BaseVotingStrategy, + IGovernancePowerStrategy +{ + /// @inheritdoc IGovernancePowerStrategy + function getFullVotingPower(address user) external view returns (uint256) { + return + _getFullPowerByType( + user, + IGovernancePowerDelegationToken.GovernancePowerType.VOTING + ); + } + + /// @inheritdoc IGovernancePowerStrategy + function getFullPropositionPower( + address user + ) external view returns (uint256) { + return + _getFullPowerByType( + user, + IGovernancePowerDelegationToken.GovernancePowerType.PROPOSITION + ); + } + + /** + * @notice method to get the full user's power by type + * @param user address of the user to get the full power + * @param powerType type of the power to get (voting, proposal) + * @return full power of an user depending on the type (voting, proposal) + */ + function _getFullPowerByType( + address user, + IGovernancePowerDelegationToken.GovernancePowerType powerType + ) internal view returns (uint256) { + uint256 fullGovernancePower; + + address[] memory votingAssetList = getVotingAssetList(); + for (uint256 i = 0; i < votingAssetList.length-1; i++) { + fullGovernancePower += IGovernancePowerDelegationToken(votingAssetList[i]) + .getPowerCurrent(user, powerType); + } + + return fullGovernancePower; + } +} diff --git a/security/certora/tests/GovernancePowerStrategy-5.sol b/security/certora/tests/GovernancePowerStrategy-5.sol new file mode 100644 index 0000000..42fc0da --- /dev/null +++ b/security/certora/tests/GovernancePowerStrategy-5.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IGovernancePowerDelegationToken} from 'aave-token-v3/interfaces/IGovernancePowerDelegationToken.sol'; +import {IBaseVotingStrategy} from '../interfaces/IBaseVotingStrategy.sol'; +import {IGovernancePowerStrategy} from '../interfaces/IGovernancePowerStrategy.sol'; +import {BaseVotingStrategy} from './BaseVotingStrategy.sol'; + +/** + * @title GovernancePowerStrategy + * @author BGD Labs + * @notice This contracts overrides the base voting strategy to return the power of specific assets used on the strategy. + * @dev These tokens will be used to get the proposition power to check if proposal can be created, and are the ones + needed on the voting machine chain voting strategy. + */ +contract GovernancePowerStrategy is + BaseVotingStrategy, + IGovernancePowerStrategy +{ + /// @inheritdoc IGovernancePowerStrategy + function getFullVotingPower(address user) external view returns (uint256) { + return + _getFullPowerByType( + user, + IGovernancePowerDelegationToken.GovernancePowerType.VOTING + ); + } + + /// @inheritdoc IGovernancePowerStrategy + function getFullPropositionPower( + address user + ) external view returns (uint256) { + return + _getFullPowerByType( + user, + IGovernancePowerDelegationToken.GovernancePowerType.PROPOSITION + ); + } + + /** + * @notice method to get the full user's power by type + * @param user address of the user to get the full power + * @param powerType type of the power to get (voting, proposal) + * @return full power of an user depending on the type (voting, proposal) + */ + function _getFullPowerByType( + address user, + IGovernancePowerDelegationToken.GovernancePowerType powerType + ) internal view returns (uint256) { + uint256 fullGovernancePower; + + address[] memory votingAssetList = getVotingAssetList(); + for (uint256 i = 0; i < votingAssetList.length; i++) { + fullGovernancePower += IGovernancePowerDelegationToken(votingAssetList[0]) + .getPowerCurrent(user, powerType); + } + + return fullGovernancePower; + } +} diff --git a/security/certora/tests/REPORT-power-strategy.txt b/security/certora/tests/REPORT-power-strategy.txt new file mode 100644 index 0000000..1846402 --- /dev/null +++ b/security/certora/tests/REPORT-power-strategy.txt @@ -0,0 +1,83 @@ +GovernancePowerStrategy.spec +============================ + +Questions: +--------- +1. In eachDummyIsUniqueToken(), why do we need all permutations ? +2. In the getVotingAssetConfig(address asset) if the caller supply a non existing asset, + he get some junk in the return value. Should it revert in that case ? + + +Mutations: +--------- +1. UNDETECTED +Changed file: BaseVotingStrategy.sol ==> BaseVotingStrategy-1.sol +The change: BaseVotingStrategy.sol:76: + orig: + "votingAssets[0] = AAVE();" + mutant: + "votingAssets[0] = A_AAVE(); //AAVE();" + +Suggestion for rules that can catch it: +- invariant that all entries of the array returned by getVotingAssetList() are different +- For every voting token T, and every user U that does not delegate, if the balance of U in T is increased then the power of U increased. + + +2. UNDETECTED +Changed file: BaseVotingStrategy.sol ==> BaseVotingStrategy-2.sol +The change: BaseVotingStrategy.sol:109: + orig: + "for (uint256 i = 0; i < votingAssetConfig.storageSlots.length; i++) {" + mutant: + "for (uint256 i = 0; i < votingAssetConfig.storageSlots.length-1; i++) {" + +Suggestion for rule that can catch it: +- We have the rule: invalidTokenRefused(...). We can add its analogue validTokenAccepted(...). + + +3. DETECTED +Changed file: GovernancePowerStrategy.sol ==> GovernancePowerStrategy-3.sol +The change: GovernancePowerStrategy.sol::25: + orig: + "IGovernancePowerDelegationToken.GovernancePowerType.VOTING" + mutant: + "IGovernancePowerDelegationToken.GovernancePowerType.PROPOSITION" + +Found by: powerlessCompliance + + +4. UNDETECTED +Changed file: GovernancePowerStrategy.sol ==> GovernancePowerStrategy-4.sol +The change: GovernancePowerStrategy.sol::53: + orig: + "for (uint256 i = 0; i < votingAssetList.length; i++) {" + mutant: + "for (uint256 i = 0; i < votingAssetList.length-1; i++) {" + +Suggestion for rule that can catch it: +- Like the recommendation in #1: + For every voting token T, and every user U that does not delegate, if the balance of U in T is increased then the power of U increased. + + +5. UNDETECTED +Changed file: GovernancePowerStrategy.sol ==> GovernancePowerStrategy-5.sol +The change: GovernancePowerStrategy.sol::53: + orig: + fullGovernancePower += IGovernancePowerDelegationToken(votingAssetList[i]) + mutant: + fullGovernancePower += IGovernancePowerDelegationToken(votingAssetList[0]) + +Suggestion for rule that can catch it: +- Same as in #4. + + +6. DETECTED by invalidTokenRefused +Changed file: BaseVotingStrategy.sol ==> BaseVotingStrategy-6.sol +The Change: BaseVotingStrategy.sol::94: + orig: + votingAssetConfig.storageSlots[0] = A_AAVE_BASE_BALANCE_SLOT; + mutant: + votingAssetConfig.storageSlots[0] = BASE_BALANCE_SLOT; + + + diff --git a/security/certora/tests/REPORT-voting.txt b/security/certora/tests/REPORT-voting.txt new file mode 100644 index 0000000..bdab6da --- /dev/null +++ b/security/certora/tests/REPORT-voting.txt @@ -0,0 +1,71 @@ +voting_and_tally.spec +===================== + +Questions/Comments: +------------------ +1. In most of the confs we have loop_iter==1. Is it correct ? +2. When running the tests: + - power_summary.conf has several failures (including sanity fails) + - misc.conf has several failures and timeouts + - proposal_states.conf has one sanity failure. +3. I checked the mutants against: + - legality.conf + - proposal_config.conf + - proposal_states.conf + - voting_and_tally.conf + + +Mutations: +--------- +1. UNDETECTED +Changed file: VotingMachineWithProofs.sol ==> VotingMachineWithProofs-1.sol +The change: VotingMachineWithProofs.sol:88: + orig: + return _bridgedVotes[voter][proposalId]; + mutant: + return _bridgedVotes[voter][proposalId+1]; + +Suggestion for rules that can catch it: + + +2. DETECTED (by sanity rule) +Changed file: VotingMachineWithProofs.sol ==> VotingMachineWithProofs-2.sol +The change: VotingMachineWithProofs.sol:197: + orig: + assetFound = true; + mutant: + assetFound = false; + +Suggestion for rules that can catch it: + +3. DETECTED +Changed file: VotingMachineWithProofs.sol ==> VotingMachineWithProofs-3.sol +The change: VotingMachineWithProofs.sol::222 + orig: + return _proposals[proposalId].votes[user]; + mutant: + return _proposals[proposalId+1].votes[user]; + +Suggestion for rules that can catch it: + + +4. DETECTED +Changed file: VotingMachineWithProofs.sol ==> VotingMachineWithProofs-4.sol +The change: VotingMachineWithProofs.sol::250 + orig: + Proposal storage proposal = _proposals[proposalId]; + mutant: + Proposal storage proposal = _proposals[0]; + +Suggestion for rules that can catch it: + +5. UNDETECTED +Changed file: VotingMachineWithProofs.sol ==> VotingMachineWithProofs-5.sol +The change: VotingMachineWithProofs.sol::288 + orig: + proposalListLength - skip - i - 1 + mutant: + proposalListLength - skip - i + +Suggestion for rules that can catch it: + diff --git a/security/certora/tests/VotingMachineWithProofs-1.sol b/security/certora/tests/VotingMachineWithProofs-1.sol new file mode 100644 index 0000000..5733aa4 --- /dev/null +++ b/security/certora/tests/VotingMachineWithProofs-1.sol @@ -0,0 +1,500 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {Ownable} from 'solidity-utils/contracts/oz-common/Ownable.sol'; +import {SafeCast} from 'solidity-utils/contracts/oz-common/SafeCast.sol'; +import {StateProofVerifier} from './libs/StateProofVerifier.sol'; +import {IVotingMachineWithProofs, IDataWarehouse, IVotingStrategy} from './interfaces/IVotingMachineWithProofs.sol'; +import {IBaseVotingStrategy} from '../../interfaces/IBaseVotingStrategy.sol'; +import {Errors} from '../libraries/Errors.sol'; +import {SlotUtils} from '../libraries/SlotUtils.sol'; +import {EIP712} from 'openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol'; +import {ECDSA} from 'openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol'; + +/** + * @title VotingMachineWithProofs + * @author BGD Labs + * @notice this contract contains the logic to vote on a bridged proposal. It uses registered proofs to calculate the + voting power of the users. Once the voting is finished it will send the results back to the governance chain. + * @dev Abstract contract that is implemented on VotingMachine contract + */ +abstract contract VotingMachineWithProofs is + IVotingMachineWithProofs, + EIP712, + Ownable +{ + using SafeCast for uint256; + + string public constant VOTING_ASSET_WITH_SLOT_RAW = + 'VotingAssetWithSlot(address underlyingAsset,uint128 slot)'; + + /// @inheritdoc IVotingMachineWithProofs + bytes32 public constant VOTE_SUBMITTED_TYPEHASH = + keccak256( + abi.encodePacked( + 'SubmitVote(uint256 proposalId,address voter,bool support,VotingAssetWithSlot[] votingAssetsWithSlot)', + VOTING_ASSET_WITH_SLOT_RAW + ) + ); + + /// @inheritdoc IVotingMachineWithProofs + bytes32 public constant VOTING_ASSET_WITH_SLOT_TYPEHASH = + keccak256(abi.encodePacked(VOTING_ASSET_WITH_SLOT_RAW)); + + /// @inheritdoc IVotingMachineWithProofs + string public constant NAME = 'Aave Voting Machine'; + + /// @inheritdoc IVotingMachineWithProofs + IVotingStrategy public immutable VOTING_STRATEGY; + + /// @inheritdoc IVotingMachineWithProofs + IDataWarehouse public immutable DATA_WAREHOUSE; + + // (proposalId => proposal information) stores the information of the proposals + mapping(uint256 => Proposal) internal _proposals; + + // (proposalId => proposal vote configuration) stores the configuration for voting on each proposal + mapping(uint256 => ProposalVoteConfiguration) + internal _proposalsVoteConfiguration; + + // saves the ids of the proposals that have been bridged for a vote. + uint256[] internal _proposalsVoteConfigurationIds; + + // (voter => proposalId => voteInfo) stores the information for the bridged votes + mapping(address => mapping(uint256 => BridgedVote)) internal _bridgedVotes; + + /** + * @param votingStrategy address of the new VotingStrategy contract + */ + constructor(IVotingStrategy votingStrategy) Ownable() EIP712(NAME, 'V1') { + require( + address(votingStrategy) != address(0), + Errors.INVALID_VOTING_STRATEGY + ); + VOTING_STRATEGY = votingStrategy; + DATA_WAREHOUSE = votingStrategy.DATA_WAREHOUSE(); + } + + /// @inheritdoc IVotingMachineWithProofs + function DOMAIN_SEPARATOR() public view returns (bytes32) { + return _domainSeparatorV4(); + } + + /// @inheritdoc IVotingMachineWithProofs + function getBridgedVoteInfo( + uint256 proposalId, + address voter + ) external view returns (BridgedVote memory) { + return _bridgedVotes[voter][proposalId+1]; + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalVoteConfiguration( + uint256 proposalId + ) external view returns (ProposalVoteConfiguration memory) { + return _proposalsVoteConfiguration[proposalId]; + } + + /// @inheritdoc IVotingMachineWithProofs + function startProposalVote(uint256 proposalId) external returns (uint256) { + ProposalVoteConfiguration memory voteConfig = _proposalsVoteConfiguration[ + proposalId + ]; + require( + voteConfig.l1ProposalBlockHash != bytes32(0), + Errors.MISSING_PROPOSAL_BLOCK_HASH + ); + Proposal storage newProposal = _proposals[proposalId]; + + require( + _getProposalState(newProposal) == ProposalState.NotCreated, + Errors.PROPOSAL_VOTE_ALREADY_CREATED + ); + + VOTING_STRATEGY.hasRequiredRoots(voteConfig.l1ProposalBlockHash); + + uint40 startTime = _getCurrentTimeRef(); + uint40 endTime = startTime + voteConfig.votingDuration; + + newProposal.id = proposalId; + newProposal.creationBlockNumber = block.number; + newProposal.startTime = startTime; + newProposal.endTime = endTime; + + emit ProposalVoteStarted( + proposalId, + voteConfig.l1ProposalBlockHash, + startTime, + endTime + ); + + return proposalId; + } + + /// @inheritdoc IVotingMachineWithProofs + function submitVoteBySignature( + uint256 proposalId, + address voter, + bool support, + VotingBalanceProof[] calldata votingBalanceProofs, + uint8 v, + bytes32 r, + bytes32 s + ) external { + bytes32[] memory underlyingAssetsWithSlotHashes = new bytes32[]( + votingBalanceProofs.length + ); + for (uint256 i = 0; i < votingBalanceProofs.length; i++) { + underlyingAssetsWithSlotHashes[i] = keccak256( + abi.encode( + VOTING_ASSET_WITH_SLOT_TYPEHASH, + votingBalanceProofs[i].underlyingAsset, + votingBalanceProofs[i].slot + ) + ); + } + + bytes32 digest = _hashTypedDataV4( + keccak256( + abi.encode( + VOTE_SUBMITTED_TYPEHASH, + proposalId, + voter, + support, + keccak256(abi.encodePacked(underlyingAssetsWithSlotHashes)) + ) + ) + ); + address signer = ECDSA.recover(digest, v, r, s); + + require(signer == voter && signer != address(0), Errors.INVALID_SIGNATURE); + _submitVote(signer, proposalId, support, votingBalanceProofs); + } + + /// @inheritdoc IVotingMachineWithProofs + function settleVoteFromPortal( + uint256 proposalId, + address voter, + VotingBalanceProof[] calldata votingBalanceProofs + ) external { + BridgedVote memory bridgedVote = _bridgedVotes[voter][proposalId]; + + require( + bridgedVote.votingAssetsWithSlot.length == votingBalanceProofs.length, + Errors.INVALID_NUMBER_OF_PROOFS_FOR_VOTING_TOKENS + ); + + // check that the proofs are of the voter assets + for (uint256 i = 0; i < bridgedVote.votingAssetsWithSlot.length; i++) { + bool assetFound; + for (uint256 j = 0; j < votingBalanceProofs.length; j++) { + if ( + votingBalanceProofs[j].underlyingAsset == + bridgedVote.votingAssetsWithSlot[i].underlyingAsset && + votingBalanceProofs[j].slot == + bridgedVote.votingAssetsWithSlot[i].slot + ) { + assetFound = true; + break; + } + } + + require(assetFound, Errors.PROOFS_NOT_FOR_VOTING_TOKENS); + } + + _submitVote(voter, proposalId, bridgedVote.support, votingBalanceProofs); + } + + /// @inheritdoc IVotingMachineWithProofs + function submitVote( + uint256 proposalId, + bool support, + VotingBalanceProof[] calldata votingBalanceProofs + ) external { + _submitVote(msg.sender, proposalId, support, votingBalanceProofs); + } + + /// @inheritdoc IVotingMachineWithProofs + function getUserProposalVote( + address user, + uint256 proposalId + ) external view returns (Vote memory) { + return _proposals[proposalId].votes[user]; + } + + /// @inheritdoc IVotingMachineWithProofs + function closeAndSendVote(uint256 proposalId) external { + Proposal storage proposal = _proposals[proposalId]; + require( + _getProposalState(proposal) == ProposalState.Finished, + Errors.PROPOSAL_VOTE_NOT_FINISHED + ); + + proposal.votingClosedAndSentBlockNumber = block.number; + proposal.votingClosedAndSentTimestamp = _getCurrentTimeRef(); + + uint256 forVotes = proposal.forVotes; + uint256 againstVotes = proposal.againstVotes; + + proposal.sentToGovernance = true; + + _sendVoteResults(proposalId, forVotes, againstVotes); + + emit ProposalResultsSent(proposalId, forVotes, againstVotes); + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalById( + uint256 proposalId + ) external view returns (ProposalWithoutVotes memory) { + Proposal storage proposal = _proposals[proposalId]; + ProposalWithoutVotes memory proposalWithoutVotes = ProposalWithoutVotes({ + id: proposalId, + startTime: proposal.startTime, + endTime: proposal.endTime, + creationBlockNumber: proposal.creationBlockNumber, + forVotes: proposal.forVotes, + againstVotes: proposal.againstVotes, + votingClosedAndSentBlockNumber: proposal.votingClosedAndSentBlockNumber, + votingClosedAndSentTimestamp: proposal.votingClosedAndSentTimestamp, + sentToGovernance: proposal.sentToGovernance + }); + + return proposalWithoutVotes; + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalState( + uint256 proposalId + ) external view returns (ProposalState) { + return _getProposalState(_proposals[proposalId]); + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalsVoteConfigurationIds( + uint256 skip, + uint256 size + ) external view returns (uint256[] memory) { + uint256 proposalListLength = _proposalsVoteConfigurationIds.length; + if (proposalListLength == 0 || proposalListLength <= skip) { + return new uint256[](0); + } else if (proposalListLength < size + skip) { + size = proposalListLength - skip; + } + + uint256[] memory ids = new uint256[](size); + for (uint256 i = 0; i < size; i++) { + ids[i] = _proposalsVoteConfigurationIds[ + proposalListLength - skip - i - 1 + ]; + } + return ids; + } + + /** + * @notice method to cast a vote on a proposal specified by its id + * @param voter address with the voting power + * @param proposalId id of the proposal on which the vote will be cast + * @param support boolean indicating if the vote is in favor or against the proposal + * @param votingBalanceProofs list of objects containing the information necessary to vote using the tokens + allowed on the voting strategy. + * @dev A vote does not need to use all the tokens allowed, can be a subset + */ + function _submitVote( + address voter, + uint256 proposalId, + bool support, + VotingBalanceProof[] calldata votingBalanceProofs + ) internal { + Proposal storage proposal = _proposals[proposalId]; + require( + _getProposalState(proposal) == ProposalState.Active, + Errors.PROPOSAL_VOTE_NOT_IN_ACTIVE_STATE + ); + + Vote storage vote = proposal.votes[voter]; + require(vote.votingPower == 0, Errors.PROPOSAL_VOTE_ALREADY_EXISTS); + + ProposalVoteConfiguration memory voteConfig = _proposalsVoteConfiguration[ + proposalId + ]; + + uint256 votingPower; + StateProofVerifier.SlotValue memory balanceVotingPower; + for (uint256 i = 0; i < votingBalanceProofs.length; i++) { + for (uint256 j = i + 1; j < votingBalanceProofs.length; j++) { + require( + votingBalanceProofs[i].slot != votingBalanceProofs[j].slot || + votingBalanceProofs[i].underlyingAsset != + votingBalanceProofs[j].underlyingAsset, + Errors.VOTE_ONCE_FOR_ASSET + ); + } + + balanceVotingPower = DATA_WAREHOUSE.getStorage( + votingBalanceProofs[i].underlyingAsset, + voteConfig.l1ProposalBlockHash, + SlotUtils.getAccountSlotHash(voter, votingBalanceProofs[i].slot), + votingBalanceProofs[i].proof + ); + + require(balanceVotingPower.exists, Errors.USER_BALANCE_DOES_NOT_EXISTS); + + if (balanceVotingPower.value != 0) { + votingPower += IVotingStrategy(address(VOTING_STRATEGY)).getVotingPower( + votingBalanceProofs[i].underlyingAsset, + votingBalanceProofs[i].slot, + balanceVotingPower.value, + voteConfig.l1ProposalBlockHash + ); + } + } + require(votingPower != 0, Errors.USER_VOTING_BALANCE_IS_ZERO); + + if (support) { + proposal.forVotes += votingPower.toUint128(); + } else { + proposal.againstVotes += votingPower.toUint128(); + } + + vote.support = support; + vote.votingPower = votingPower.toUint248(); + + emit VoteEmitted(proposalId, voter, support, votingPower); + } + + /** + * @notice method to send the voting results on a proposal back to L1 + * @param proposalId id of the proposal to send the voting result to L1 + * @dev This method should be implemented to trigger the bridging flow + */ + function _sendVoteResults( + uint256 proposalId, + uint256 forVotes, + uint256 againstVotes + ) internal virtual; + + /** + * @notice method to get the state of a proposal specified by its id + * @param proposal the proposal to retrieve the state of + * @return the state of the proposal + */ + function _getProposalState( + Proposal storage proposal + ) internal view returns (ProposalState) { + if (proposal.endTime == 0) { + return ProposalState.NotCreated; + } else if (_getCurrentTimeRef() <= proposal.endTime) { + return ProposalState.Active; + } else if (proposal.sentToGovernance) { + return ProposalState.SentToGovernance; + } else { + return ProposalState.Finished; + } + } + + /** + * @notice method to get the timestamp of a block casted to uint40 + * @return uint40 block timestamp + */ + function _getCurrentTimeRef() internal view returns (uint40) { + return uint40(block.timestamp); + } + + /** + * @notice method that registers a proposal configuration and creates the voting if it can. If not it will register the + the configuration for later creation. + * @param proposalId id of the proposal bridged to start the vote on + * @param blockHash hash of the block on L1 when the proposal was activated for voting + * @param votingDuration duration in seconds of the vote + */ + function _createBridgedProposalVote( + uint256 proposalId, + bytes32 blockHash, + uint24 votingDuration + ) internal { + require( + blockHash != bytes32(0), + Errors.INVALID_VOTE_CONFIGURATION_BLOCKHASH + ); + require( + votingDuration > 0, + Errors.INVALID_VOTE_CONFIGURATION_VOTING_DURATION + ); + require( + _proposalsVoteConfiguration[proposalId].l1ProposalBlockHash == bytes32(0), + Errors.PROPOSAL_VOTE_CONFIGURATION_ALREADY_BRIDGED + ); + + _proposalsVoteConfiguration[proposalId] = IVotingMachineWithProofs + .ProposalVoteConfiguration({ + votingDuration: votingDuration, + l1ProposalBlockHash: blockHash + }); + _proposalsVoteConfigurationIds.push(proposalId); + + bool created; + try this.startProposalVote(proposalId) { + created = true; + } catch (bytes memory) {} + + emit ProposalVoteConfigurationBridged( + proposalId, + blockHash, + votingDuration, + created + ); + } + + /** + * @notice method that registers a vote on a proposal from a specific voter, contained in a bridged message + from governance chain + * @param proposalId id of the proposal bridged to start the vote on + * @param voter address that wants to emit the vote + * @param support indicates if vote is in favor or against the proposal + * @param votingAssetsWithSlot list of token addresses with base slots that the voter will use for voting + */ + function _registerBridgedVote( + uint256 proposalId, + address voter, + bool support, + VotingAssetWithSlot[] memory votingAssetsWithSlot + ) internal { + // It also only allows to register the vote when proposal is active. + // To retry to register a vote (after it fails) the message will need to be retried from the cross chain controller + require( + _getProposalState(_proposals[proposalId]) == ProposalState.Active, + Errors.PROPOSAL_VOTE_CAN_NOT_BE_REGISTERED + ); + require(voter != address(0), Errors.INVALID_VOTER); + require(votingAssetsWithSlot.length > 0, Errors.NO_BRIDGED_VOTING_ASSETS); + require( + _bridgedVotes[voter][proposalId].votingAssetsWithSlot.length == 0, + Errors.VOTE_ALREADY_BRIDGED + ); + _bridgedVotes[voter][proposalId].support = support; + for (uint256 i = 0; i < votingAssetsWithSlot.length; i++) { + require( + IBaseVotingStrategy(address(VOTING_STRATEGY)).isTokenSlotAccepted( + votingAssetsWithSlot[i].underlyingAsset, + votingAssetsWithSlot[i].slot + ), + Errors.INVALID_BRIDGED_VOTING_TOKEN + ); + for (uint256 j = i + 1; j < votingAssetsWithSlot.length; j++) { + require( + votingAssetsWithSlot[j].underlyingAsset != + votingAssetsWithSlot[i].underlyingAsset || + votingAssetsWithSlot[j].slot != votingAssetsWithSlot[i].slot, + Errors.BRIDGED_REPEATED_ASSETS + ); + } + + _bridgedVotes[voter][proposalId].votingAssetsWithSlot.push( + votingAssetsWithSlot[i] + ); + } + + emit VoteBridged(proposalId, voter, support, votingAssetsWithSlot); + } +} diff --git a/security/certora/tests/VotingMachineWithProofs-2.sol b/security/certora/tests/VotingMachineWithProofs-2.sol new file mode 100644 index 0000000..e69c395 --- /dev/null +++ b/security/certora/tests/VotingMachineWithProofs-2.sol @@ -0,0 +1,500 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {Ownable} from 'solidity-utils/contracts/oz-common/Ownable.sol'; +import {SafeCast} from 'solidity-utils/contracts/oz-common/SafeCast.sol'; +import {StateProofVerifier} from './libs/StateProofVerifier.sol'; +import {IVotingMachineWithProofs, IDataWarehouse, IVotingStrategy} from './interfaces/IVotingMachineWithProofs.sol'; +import {IBaseVotingStrategy} from '../../interfaces/IBaseVotingStrategy.sol'; +import {Errors} from '../libraries/Errors.sol'; +import {SlotUtils} from '../libraries/SlotUtils.sol'; +import {EIP712} from 'openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol'; +import {ECDSA} from 'openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol'; + +/** + * @title VotingMachineWithProofs + * @author BGD Labs + * @notice this contract contains the logic to vote on a bridged proposal. It uses registered proofs to calculate the + voting power of the users. Once the voting is finished it will send the results back to the governance chain. + * @dev Abstract contract that is implemented on VotingMachine contract + */ +abstract contract VotingMachineWithProofs is + IVotingMachineWithProofs, + EIP712, + Ownable +{ + using SafeCast for uint256; + + string public constant VOTING_ASSET_WITH_SLOT_RAW = + 'VotingAssetWithSlot(address underlyingAsset,uint128 slot)'; + + /// @inheritdoc IVotingMachineWithProofs + bytes32 public constant VOTE_SUBMITTED_TYPEHASH = + keccak256( + abi.encodePacked( + 'SubmitVote(uint256 proposalId,address voter,bool support,VotingAssetWithSlot[] votingAssetsWithSlot)', + VOTING_ASSET_WITH_SLOT_RAW + ) + ); + + /// @inheritdoc IVotingMachineWithProofs + bytes32 public constant VOTING_ASSET_WITH_SLOT_TYPEHASH = + keccak256(abi.encodePacked(VOTING_ASSET_WITH_SLOT_RAW)); + + /// @inheritdoc IVotingMachineWithProofs + string public constant NAME = 'Aave Voting Machine'; + + /// @inheritdoc IVotingMachineWithProofs + IVotingStrategy public immutable VOTING_STRATEGY; + + /// @inheritdoc IVotingMachineWithProofs + IDataWarehouse public immutable DATA_WAREHOUSE; + + // (proposalId => proposal information) stores the information of the proposals + mapping(uint256 => Proposal) internal _proposals; + + // (proposalId => proposal vote configuration) stores the configuration for voting on each proposal + mapping(uint256 => ProposalVoteConfiguration) + internal _proposalsVoteConfiguration; + + // saves the ids of the proposals that have been bridged for a vote. + uint256[] internal _proposalsVoteConfigurationIds; + + // (voter => proposalId => voteInfo) stores the information for the bridged votes + mapping(address => mapping(uint256 => BridgedVote)) internal _bridgedVotes; + + /** + * @param votingStrategy address of the new VotingStrategy contract + */ + constructor(IVotingStrategy votingStrategy) Ownable() EIP712(NAME, 'V1') { + require( + address(votingStrategy) != address(0), + Errors.INVALID_VOTING_STRATEGY + ); + VOTING_STRATEGY = votingStrategy; + DATA_WAREHOUSE = votingStrategy.DATA_WAREHOUSE(); + } + + /// @inheritdoc IVotingMachineWithProofs + function DOMAIN_SEPARATOR() public view returns (bytes32) { + return _domainSeparatorV4(); + } + + /// @inheritdoc IVotingMachineWithProofs + function getBridgedVoteInfo( + uint256 proposalId, + address voter + ) external view returns (BridgedVote memory) { + return _bridgedVotes[voter][proposalId]; + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalVoteConfiguration( + uint256 proposalId + ) external view returns (ProposalVoteConfiguration memory) { + return _proposalsVoteConfiguration[proposalId]; + } + + /// @inheritdoc IVotingMachineWithProofs + function startProposalVote(uint256 proposalId) external returns (uint256) { + ProposalVoteConfiguration memory voteConfig = _proposalsVoteConfiguration[ + proposalId + ]; + require( + voteConfig.l1ProposalBlockHash != bytes32(0), + Errors.MISSING_PROPOSAL_BLOCK_HASH + ); + Proposal storage newProposal = _proposals[proposalId]; + + require( + _getProposalState(newProposal) == ProposalState.NotCreated, + Errors.PROPOSAL_VOTE_ALREADY_CREATED + ); + + VOTING_STRATEGY.hasRequiredRoots(voteConfig.l1ProposalBlockHash); + + uint40 startTime = _getCurrentTimeRef(); + uint40 endTime = startTime + voteConfig.votingDuration; + + newProposal.id = proposalId; + newProposal.creationBlockNumber = block.number; + newProposal.startTime = startTime; + newProposal.endTime = endTime; + + emit ProposalVoteStarted( + proposalId, + voteConfig.l1ProposalBlockHash, + startTime, + endTime + ); + + return proposalId; + } + + /// @inheritdoc IVotingMachineWithProofs + function submitVoteBySignature( + uint256 proposalId, + address voter, + bool support, + VotingBalanceProof[] calldata votingBalanceProofs, + uint8 v, + bytes32 r, + bytes32 s + ) external { + bytes32[] memory underlyingAssetsWithSlotHashes = new bytes32[]( + votingBalanceProofs.length + ); + for (uint256 i = 0; i < votingBalanceProofs.length; i++) { + underlyingAssetsWithSlotHashes[i] = keccak256( + abi.encode( + VOTING_ASSET_WITH_SLOT_TYPEHASH, + votingBalanceProofs[i].underlyingAsset, + votingBalanceProofs[i].slot + ) + ); + } + + bytes32 digest = _hashTypedDataV4( + keccak256( + abi.encode( + VOTE_SUBMITTED_TYPEHASH, + proposalId, + voter, + support, + keccak256(abi.encodePacked(underlyingAssetsWithSlotHashes)) + ) + ) + ); + address signer = ECDSA.recover(digest, v, r, s); + + require(signer == voter && signer != address(0), Errors.INVALID_SIGNATURE); + _submitVote(signer, proposalId, support, votingBalanceProofs); + } + + /// @inheritdoc IVotingMachineWithProofs + function settleVoteFromPortal( + uint256 proposalId, + address voter, + VotingBalanceProof[] calldata votingBalanceProofs + ) external { + BridgedVote memory bridgedVote = _bridgedVotes[voter][proposalId]; + + require( + bridgedVote.votingAssetsWithSlot.length == votingBalanceProofs.length, + Errors.INVALID_NUMBER_OF_PROOFS_FOR_VOTING_TOKENS + ); + + // check that the proofs are of the voter assets + for (uint256 i = 0; i < bridgedVote.votingAssetsWithSlot.length; i++) { + bool assetFound; + for (uint256 j = 0; j < votingBalanceProofs.length; j++) { + if ( + votingBalanceProofs[j].underlyingAsset == + bridgedVote.votingAssetsWithSlot[i].underlyingAsset && + votingBalanceProofs[j].slot == + bridgedVote.votingAssetsWithSlot[i].slot + ) { + assetFound = false; + break; + } + } + + require(assetFound, Errors.PROOFS_NOT_FOR_VOTING_TOKENS); + } + + _submitVote(voter, proposalId, bridgedVote.support, votingBalanceProofs); + } + + /// @inheritdoc IVotingMachineWithProofs + function submitVote( + uint256 proposalId, + bool support, + VotingBalanceProof[] calldata votingBalanceProofs + ) external { + _submitVote(msg.sender, proposalId, support, votingBalanceProofs); + } + + /// @inheritdoc IVotingMachineWithProofs + function getUserProposalVote( + address user, + uint256 proposalId + ) external view returns (Vote memory) { + return _proposals[proposalId].votes[user]; + } + + /// @inheritdoc IVotingMachineWithProofs + function closeAndSendVote(uint256 proposalId) external { + Proposal storage proposal = _proposals[proposalId]; + require( + _getProposalState(proposal) == ProposalState.Finished, + Errors.PROPOSAL_VOTE_NOT_FINISHED + ); + + proposal.votingClosedAndSentBlockNumber = block.number; + proposal.votingClosedAndSentTimestamp = _getCurrentTimeRef(); + + uint256 forVotes = proposal.forVotes; + uint256 againstVotes = proposal.againstVotes; + + proposal.sentToGovernance = true; + + _sendVoteResults(proposalId, forVotes, againstVotes); + + emit ProposalResultsSent(proposalId, forVotes, againstVotes); + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalById( + uint256 proposalId + ) external view returns (ProposalWithoutVotes memory) { + Proposal storage proposal = _proposals[proposalId]; + ProposalWithoutVotes memory proposalWithoutVotes = ProposalWithoutVotes({ + id: proposalId, + startTime: proposal.startTime, + endTime: proposal.endTime, + creationBlockNumber: proposal.creationBlockNumber, + forVotes: proposal.forVotes, + againstVotes: proposal.againstVotes, + votingClosedAndSentBlockNumber: proposal.votingClosedAndSentBlockNumber, + votingClosedAndSentTimestamp: proposal.votingClosedAndSentTimestamp, + sentToGovernance: proposal.sentToGovernance + }); + + return proposalWithoutVotes; + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalState( + uint256 proposalId + ) external view returns (ProposalState) { + return _getProposalState(_proposals[proposalId]); + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalsVoteConfigurationIds( + uint256 skip, + uint256 size + ) external view returns (uint256[] memory) { + uint256 proposalListLength = _proposalsVoteConfigurationIds.length; + if (proposalListLength == 0 || proposalListLength <= skip) { + return new uint256[](0); + } else if (proposalListLength < size + skip) { + size = proposalListLength - skip; + } + + uint256[] memory ids = new uint256[](size); + for (uint256 i = 0; i < size; i++) { + ids[i] = _proposalsVoteConfigurationIds[ + proposalListLength - skip - i - 1 + ]; + } + return ids; + } + + /** + * @notice method to cast a vote on a proposal specified by its id + * @param voter address with the voting power + * @param proposalId id of the proposal on which the vote will be cast + * @param support boolean indicating if the vote is in favor or against the proposal + * @param votingBalanceProofs list of objects containing the information necessary to vote using the tokens + allowed on the voting strategy. + * @dev A vote does not need to use all the tokens allowed, can be a subset + */ + function _submitVote( + address voter, + uint256 proposalId, + bool support, + VotingBalanceProof[] calldata votingBalanceProofs + ) internal { + Proposal storage proposal = _proposals[proposalId]; + require( + _getProposalState(proposal) == ProposalState.Active, + Errors.PROPOSAL_VOTE_NOT_IN_ACTIVE_STATE + ); + + Vote storage vote = proposal.votes[voter]; + require(vote.votingPower == 0, Errors.PROPOSAL_VOTE_ALREADY_EXISTS); + + ProposalVoteConfiguration memory voteConfig = _proposalsVoteConfiguration[ + proposalId + ]; + + uint256 votingPower; + StateProofVerifier.SlotValue memory balanceVotingPower; + for (uint256 i = 0; i < votingBalanceProofs.length; i++) { + for (uint256 j = i + 1; j < votingBalanceProofs.length; j++) { + require( + votingBalanceProofs[i].slot != votingBalanceProofs[j].slot || + votingBalanceProofs[i].underlyingAsset != + votingBalanceProofs[j].underlyingAsset, + Errors.VOTE_ONCE_FOR_ASSET + ); + } + + balanceVotingPower = DATA_WAREHOUSE.getStorage( + votingBalanceProofs[i].underlyingAsset, + voteConfig.l1ProposalBlockHash, + SlotUtils.getAccountSlotHash(voter, votingBalanceProofs[i].slot), + votingBalanceProofs[i].proof + ); + + require(balanceVotingPower.exists, Errors.USER_BALANCE_DOES_NOT_EXISTS); + + if (balanceVotingPower.value != 0) { + votingPower += IVotingStrategy(address(VOTING_STRATEGY)).getVotingPower( + votingBalanceProofs[i].underlyingAsset, + votingBalanceProofs[i].slot, + balanceVotingPower.value, + voteConfig.l1ProposalBlockHash + ); + } + } + require(votingPower != 0, Errors.USER_VOTING_BALANCE_IS_ZERO); + + if (support) { + proposal.forVotes += votingPower.toUint128(); + } else { + proposal.againstVotes += votingPower.toUint128(); + } + + vote.support = support; + vote.votingPower = votingPower.toUint248(); + + emit VoteEmitted(proposalId, voter, support, votingPower); + } + + /** + * @notice method to send the voting results on a proposal back to L1 + * @param proposalId id of the proposal to send the voting result to L1 + * @dev This method should be implemented to trigger the bridging flow + */ + function _sendVoteResults( + uint256 proposalId, + uint256 forVotes, + uint256 againstVotes + ) internal virtual; + + /** + * @notice method to get the state of a proposal specified by its id + * @param proposal the proposal to retrieve the state of + * @return the state of the proposal + */ + function _getProposalState( + Proposal storage proposal + ) internal view returns (ProposalState) { + if (proposal.endTime == 0) { + return ProposalState.NotCreated; + } else if (_getCurrentTimeRef() <= proposal.endTime) { + return ProposalState.Active; + } else if (proposal.sentToGovernance) { + return ProposalState.SentToGovernance; + } else { + return ProposalState.Finished; + } + } + + /** + * @notice method to get the timestamp of a block casted to uint40 + * @return uint40 block timestamp + */ + function _getCurrentTimeRef() internal view returns (uint40) { + return uint40(block.timestamp); + } + + /** + * @notice method that registers a proposal configuration and creates the voting if it can. If not it will register the + the configuration for later creation. + * @param proposalId id of the proposal bridged to start the vote on + * @param blockHash hash of the block on L1 when the proposal was activated for voting + * @param votingDuration duration in seconds of the vote + */ + function _createBridgedProposalVote( + uint256 proposalId, + bytes32 blockHash, + uint24 votingDuration + ) internal { + require( + blockHash != bytes32(0), + Errors.INVALID_VOTE_CONFIGURATION_BLOCKHASH + ); + require( + votingDuration > 0, + Errors.INVALID_VOTE_CONFIGURATION_VOTING_DURATION + ); + require( + _proposalsVoteConfiguration[proposalId].l1ProposalBlockHash == bytes32(0), + Errors.PROPOSAL_VOTE_CONFIGURATION_ALREADY_BRIDGED + ); + + _proposalsVoteConfiguration[proposalId] = IVotingMachineWithProofs + .ProposalVoteConfiguration({ + votingDuration: votingDuration, + l1ProposalBlockHash: blockHash + }); + _proposalsVoteConfigurationIds.push(proposalId); + + bool created; + try this.startProposalVote(proposalId) { + created = true; + } catch (bytes memory) {} + + emit ProposalVoteConfigurationBridged( + proposalId, + blockHash, + votingDuration, + created + ); + } + + /** + * @notice method that registers a vote on a proposal from a specific voter, contained in a bridged message + from governance chain + * @param proposalId id of the proposal bridged to start the vote on + * @param voter address that wants to emit the vote + * @param support indicates if vote is in favor or against the proposal + * @param votingAssetsWithSlot list of token addresses with base slots that the voter will use for voting + */ + function _registerBridgedVote( + uint256 proposalId, + address voter, + bool support, + VotingAssetWithSlot[] memory votingAssetsWithSlot + ) internal { + // It also only allows to register the vote when proposal is active. + // To retry to register a vote (after it fails) the message will need to be retried from the cross chain controller + require( + _getProposalState(_proposals[proposalId]) == ProposalState.Active, + Errors.PROPOSAL_VOTE_CAN_NOT_BE_REGISTERED + ); + require(voter != address(0), Errors.INVALID_VOTER); + require(votingAssetsWithSlot.length > 0, Errors.NO_BRIDGED_VOTING_ASSETS); + require( + _bridgedVotes[voter][proposalId].votingAssetsWithSlot.length == 0, + Errors.VOTE_ALREADY_BRIDGED + ); + _bridgedVotes[voter][proposalId].support = support; + for (uint256 i = 0; i < votingAssetsWithSlot.length; i++) { + require( + IBaseVotingStrategy(address(VOTING_STRATEGY)).isTokenSlotAccepted( + votingAssetsWithSlot[i].underlyingAsset, + votingAssetsWithSlot[i].slot + ), + Errors.INVALID_BRIDGED_VOTING_TOKEN + ); + for (uint256 j = i + 1; j < votingAssetsWithSlot.length; j++) { + require( + votingAssetsWithSlot[j].underlyingAsset != + votingAssetsWithSlot[i].underlyingAsset || + votingAssetsWithSlot[j].slot != votingAssetsWithSlot[i].slot, + Errors.BRIDGED_REPEATED_ASSETS + ); + } + + _bridgedVotes[voter][proposalId].votingAssetsWithSlot.push( + votingAssetsWithSlot[i] + ); + } + + emit VoteBridged(proposalId, voter, support, votingAssetsWithSlot); + } +} diff --git a/security/certora/tests/VotingMachineWithProofs-3.sol b/security/certora/tests/VotingMachineWithProofs-3.sol new file mode 100644 index 0000000..de7025d --- /dev/null +++ b/security/certora/tests/VotingMachineWithProofs-3.sol @@ -0,0 +1,500 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {Ownable} from 'solidity-utils/contracts/oz-common/Ownable.sol'; +import {SafeCast} from 'solidity-utils/contracts/oz-common/SafeCast.sol'; +import {StateProofVerifier} from './libs/StateProofVerifier.sol'; +import {IVotingMachineWithProofs, IDataWarehouse, IVotingStrategy} from './interfaces/IVotingMachineWithProofs.sol'; +import {IBaseVotingStrategy} from '../../interfaces/IBaseVotingStrategy.sol'; +import {Errors} from '../libraries/Errors.sol'; +import {SlotUtils} from '../libraries/SlotUtils.sol'; +import {EIP712} from 'openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol'; +import {ECDSA} from 'openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol'; + +/** + * @title VotingMachineWithProofs + * @author BGD Labs + * @notice this contract contains the logic to vote on a bridged proposal. It uses registered proofs to calculate the + voting power of the users. Once the voting is finished it will send the results back to the governance chain. + * @dev Abstract contract that is implemented on VotingMachine contract + */ +abstract contract VotingMachineWithProofs is + IVotingMachineWithProofs, + EIP712, + Ownable +{ + using SafeCast for uint256; + + string public constant VOTING_ASSET_WITH_SLOT_RAW = + 'VotingAssetWithSlot(address underlyingAsset,uint128 slot)'; + + /// @inheritdoc IVotingMachineWithProofs + bytes32 public constant VOTE_SUBMITTED_TYPEHASH = + keccak256( + abi.encodePacked( + 'SubmitVote(uint256 proposalId,address voter,bool support,VotingAssetWithSlot[] votingAssetsWithSlot)', + VOTING_ASSET_WITH_SLOT_RAW + ) + ); + + /// @inheritdoc IVotingMachineWithProofs + bytes32 public constant VOTING_ASSET_WITH_SLOT_TYPEHASH = + keccak256(abi.encodePacked(VOTING_ASSET_WITH_SLOT_RAW)); + + /// @inheritdoc IVotingMachineWithProofs + string public constant NAME = 'Aave Voting Machine'; + + /// @inheritdoc IVotingMachineWithProofs + IVotingStrategy public immutable VOTING_STRATEGY; + + /// @inheritdoc IVotingMachineWithProofs + IDataWarehouse public immutable DATA_WAREHOUSE; + + // (proposalId => proposal information) stores the information of the proposals + mapping(uint256 => Proposal) internal _proposals; + + // (proposalId => proposal vote configuration) stores the configuration for voting on each proposal + mapping(uint256 => ProposalVoteConfiguration) + internal _proposalsVoteConfiguration; + + // saves the ids of the proposals that have been bridged for a vote. + uint256[] internal _proposalsVoteConfigurationIds; + + // (voter => proposalId => voteInfo) stores the information for the bridged votes + mapping(address => mapping(uint256 => BridgedVote)) internal _bridgedVotes; + + /** + * @param votingStrategy address of the new VotingStrategy contract + */ + constructor(IVotingStrategy votingStrategy) Ownable() EIP712(NAME, 'V1') { + require( + address(votingStrategy) != address(0), + Errors.INVALID_VOTING_STRATEGY + ); + VOTING_STRATEGY = votingStrategy; + DATA_WAREHOUSE = votingStrategy.DATA_WAREHOUSE(); + } + + /// @inheritdoc IVotingMachineWithProofs + function DOMAIN_SEPARATOR() public view returns (bytes32) { + return _domainSeparatorV4(); + } + + /// @inheritdoc IVotingMachineWithProofs + function getBridgedVoteInfo( + uint256 proposalId, + address voter + ) external view returns (BridgedVote memory) { + return _bridgedVotes[voter][proposalId]; + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalVoteConfiguration( + uint256 proposalId + ) external view returns (ProposalVoteConfiguration memory) { + return _proposalsVoteConfiguration[proposalId]; + } + + /// @inheritdoc IVotingMachineWithProofs + function startProposalVote(uint256 proposalId) external returns (uint256) { + ProposalVoteConfiguration memory voteConfig = _proposalsVoteConfiguration[ + proposalId + ]; + require( + voteConfig.l1ProposalBlockHash != bytes32(0), + Errors.MISSING_PROPOSAL_BLOCK_HASH + ); + Proposal storage newProposal = _proposals[proposalId]; + + require( + _getProposalState(newProposal) == ProposalState.NotCreated, + Errors.PROPOSAL_VOTE_ALREADY_CREATED + ); + + VOTING_STRATEGY.hasRequiredRoots(voteConfig.l1ProposalBlockHash); + + uint40 startTime = _getCurrentTimeRef(); + uint40 endTime = startTime + voteConfig.votingDuration; + + newProposal.id = proposalId; + newProposal.creationBlockNumber = block.number; + newProposal.startTime = startTime; + newProposal.endTime = endTime; + + emit ProposalVoteStarted( + proposalId, + voteConfig.l1ProposalBlockHash, + startTime, + endTime + ); + + return proposalId; + } + + /// @inheritdoc IVotingMachineWithProofs + function submitVoteBySignature( + uint256 proposalId, + address voter, + bool support, + VotingBalanceProof[] calldata votingBalanceProofs, + uint8 v, + bytes32 r, + bytes32 s + ) external { + bytes32[] memory underlyingAssetsWithSlotHashes = new bytes32[]( + votingBalanceProofs.length + ); + for (uint256 i = 0; i < votingBalanceProofs.length; i++) { + underlyingAssetsWithSlotHashes[i] = keccak256( + abi.encode( + VOTING_ASSET_WITH_SLOT_TYPEHASH, + votingBalanceProofs[i].underlyingAsset, + votingBalanceProofs[i].slot + ) + ); + } + + bytes32 digest = _hashTypedDataV4( + keccak256( + abi.encode( + VOTE_SUBMITTED_TYPEHASH, + proposalId, + voter, + support, + keccak256(abi.encodePacked(underlyingAssetsWithSlotHashes)) + ) + ) + ); + address signer = ECDSA.recover(digest, v, r, s); + + require(signer == voter && signer != address(0), Errors.INVALID_SIGNATURE); + _submitVote(signer, proposalId, support, votingBalanceProofs); + } + + /// @inheritdoc IVotingMachineWithProofs + function settleVoteFromPortal( + uint256 proposalId, + address voter, + VotingBalanceProof[] calldata votingBalanceProofs + ) external { + BridgedVote memory bridgedVote = _bridgedVotes[voter][proposalId]; + + require( + bridgedVote.votingAssetsWithSlot.length == votingBalanceProofs.length, + Errors.INVALID_NUMBER_OF_PROOFS_FOR_VOTING_TOKENS + ); + + // check that the proofs are of the voter assets + for (uint256 i = 0; i < bridgedVote.votingAssetsWithSlot.length; i++) { + bool assetFound; + for (uint256 j = 0; j < votingBalanceProofs.length; j++) { + if ( + votingBalanceProofs[j].underlyingAsset == + bridgedVote.votingAssetsWithSlot[i].underlyingAsset && + votingBalanceProofs[j].slot == + bridgedVote.votingAssetsWithSlot[i].slot + ) { + assetFound = true; + break; + } + } + + require(assetFound, Errors.PROOFS_NOT_FOR_VOTING_TOKENS); + } + + _submitVote(voter, proposalId, bridgedVote.support, votingBalanceProofs); + } + + /// @inheritdoc IVotingMachineWithProofs + function submitVote( + uint256 proposalId, + bool support, + VotingBalanceProof[] calldata votingBalanceProofs + ) external { + _submitVote(msg.sender, proposalId, support, votingBalanceProofs); + } + + /// @inheritdoc IVotingMachineWithProofs + function getUserProposalVote( + address user, + uint256 proposalId + ) external view returns (Vote memory) { + return _proposals[proposalId+1].votes[user]; + } + + /// @inheritdoc IVotingMachineWithProofs + function closeAndSendVote(uint256 proposalId) external { + Proposal storage proposal = _proposals[proposalId]; + require( + _getProposalState(proposal) == ProposalState.Finished, + Errors.PROPOSAL_VOTE_NOT_FINISHED + ); + + proposal.votingClosedAndSentBlockNumber = block.number; + proposal.votingClosedAndSentTimestamp = _getCurrentTimeRef(); + + uint256 forVotes = proposal.forVotes; + uint256 againstVotes = proposal.againstVotes; + + proposal.sentToGovernance = true; + + _sendVoteResults(proposalId, forVotes, againstVotes); + + emit ProposalResultsSent(proposalId, forVotes, againstVotes); + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalById( + uint256 proposalId + ) external view returns (ProposalWithoutVotes memory) { + Proposal storage proposal = _proposals[proposalId]; + ProposalWithoutVotes memory proposalWithoutVotes = ProposalWithoutVotes({ + id: proposalId, + startTime: proposal.startTime, + endTime: proposal.endTime, + creationBlockNumber: proposal.creationBlockNumber, + forVotes: proposal.forVotes, + againstVotes: proposal.againstVotes, + votingClosedAndSentBlockNumber: proposal.votingClosedAndSentBlockNumber, + votingClosedAndSentTimestamp: proposal.votingClosedAndSentTimestamp, + sentToGovernance: proposal.sentToGovernance + }); + + return proposalWithoutVotes; + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalState( + uint256 proposalId + ) external view returns (ProposalState) { + return _getProposalState(_proposals[proposalId]); + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalsVoteConfigurationIds( + uint256 skip, + uint256 size + ) external view returns (uint256[] memory) { + uint256 proposalListLength = _proposalsVoteConfigurationIds.length; + if (proposalListLength == 0 || proposalListLength <= skip) { + return new uint256[](0); + } else if (proposalListLength < size + skip) { + size = proposalListLength - skip; + } + + uint256[] memory ids = new uint256[](size); + for (uint256 i = 0; i < size; i++) { + ids[i] = _proposalsVoteConfigurationIds[ + proposalListLength - skip - i - 1 + ]; + } + return ids; + } + + /** + * @notice method to cast a vote on a proposal specified by its id + * @param voter address with the voting power + * @param proposalId id of the proposal on which the vote will be cast + * @param support boolean indicating if the vote is in favor or against the proposal + * @param votingBalanceProofs list of objects containing the information necessary to vote using the tokens + allowed on the voting strategy. + * @dev A vote does not need to use all the tokens allowed, can be a subset + */ + function _submitVote( + address voter, + uint256 proposalId, + bool support, + VotingBalanceProof[] calldata votingBalanceProofs + ) internal { + Proposal storage proposal = _proposals[proposalId]; + require( + _getProposalState(proposal) == ProposalState.Active, + Errors.PROPOSAL_VOTE_NOT_IN_ACTIVE_STATE + ); + + Vote storage vote = proposal.votes[voter]; + require(vote.votingPower == 0, Errors.PROPOSAL_VOTE_ALREADY_EXISTS); + + ProposalVoteConfiguration memory voteConfig = _proposalsVoteConfiguration[ + proposalId + ]; + + uint256 votingPower; + StateProofVerifier.SlotValue memory balanceVotingPower; + for (uint256 i = 0; i < votingBalanceProofs.length; i++) { + for (uint256 j = i + 1; j < votingBalanceProofs.length; j++) { + require( + votingBalanceProofs[i].slot != votingBalanceProofs[j].slot || + votingBalanceProofs[i].underlyingAsset != + votingBalanceProofs[j].underlyingAsset, + Errors.VOTE_ONCE_FOR_ASSET + ); + } + + balanceVotingPower = DATA_WAREHOUSE.getStorage( + votingBalanceProofs[i].underlyingAsset, + voteConfig.l1ProposalBlockHash, + SlotUtils.getAccountSlotHash(voter, votingBalanceProofs[i].slot), + votingBalanceProofs[i].proof + ); + + require(balanceVotingPower.exists, Errors.USER_BALANCE_DOES_NOT_EXISTS); + + if (balanceVotingPower.value != 0) { + votingPower += IVotingStrategy(address(VOTING_STRATEGY)).getVotingPower( + votingBalanceProofs[i].underlyingAsset, + votingBalanceProofs[i].slot, + balanceVotingPower.value, + voteConfig.l1ProposalBlockHash + ); + } + } + require(votingPower != 0, Errors.USER_VOTING_BALANCE_IS_ZERO); + + if (support) { + proposal.forVotes += votingPower.toUint128(); + } else { + proposal.againstVotes += votingPower.toUint128(); + } + + vote.support = support; + vote.votingPower = votingPower.toUint248(); + + emit VoteEmitted(proposalId, voter, support, votingPower); + } + + /** + * @notice method to send the voting results on a proposal back to L1 + * @param proposalId id of the proposal to send the voting result to L1 + * @dev This method should be implemented to trigger the bridging flow + */ + function _sendVoteResults( + uint256 proposalId, + uint256 forVotes, + uint256 againstVotes + ) internal virtual; + + /** + * @notice method to get the state of a proposal specified by its id + * @param proposal the proposal to retrieve the state of + * @return the state of the proposal + */ + function _getProposalState( + Proposal storage proposal + ) internal view returns (ProposalState) { + if (proposal.endTime == 0) { + return ProposalState.NotCreated; + } else if (_getCurrentTimeRef() <= proposal.endTime) { + return ProposalState.Active; + } else if (proposal.sentToGovernance) { + return ProposalState.SentToGovernance; + } else { + return ProposalState.Finished; + } + } + + /** + * @notice method to get the timestamp of a block casted to uint40 + * @return uint40 block timestamp + */ + function _getCurrentTimeRef() internal view returns (uint40) { + return uint40(block.timestamp); + } + + /** + * @notice method that registers a proposal configuration and creates the voting if it can. If not it will register the + the configuration for later creation. + * @param proposalId id of the proposal bridged to start the vote on + * @param blockHash hash of the block on L1 when the proposal was activated for voting + * @param votingDuration duration in seconds of the vote + */ + function _createBridgedProposalVote( + uint256 proposalId, + bytes32 blockHash, + uint24 votingDuration + ) internal { + require( + blockHash != bytes32(0), + Errors.INVALID_VOTE_CONFIGURATION_BLOCKHASH + ); + require( + votingDuration > 0, + Errors.INVALID_VOTE_CONFIGURATION_VOTING_DURATION + ); + require( + _proposalsVoteConfiguration[proposalId].l1ProposalBlockHash == bytes32(0), + Errors.PROPOSAL_VOTE_CONFIGURATION_ALREADY_BRIDGED + ); + + _proposalsVoteConfiguration[proposalId] = IVotingMachineWithProofs + .ProposalVoteConfiguration({ + votingDuration: votingDuration, + l1ProposalBlockHash: blockHash + }); + _proposalsVoteConfigurationIds.push(proposalId); + + bool created; + try this.startProposalVote(proposalId) { + created = true; + } catch (bytes memory) {} + + emit ProposalVoteConfigurationBridged( + proposalId, + blockHash, + votingDuration, + created + ); + } + + /** + * @notice method that registers a vote on a proposal from a specific voter, contained in a bridged message + from governance chain + * @param proposalId id of the proposal bridged to start the vote on + * @param voter address that wants to emit the vote + * @param support indicates if vote is in favor or against the proposal + * @param votingAssetsWithSlot list of token addresses with base slots that the voter will use for voting + */ + function _registerBridgedVote( + uint256 proposalId, + address voter, + bool support, + VotingAssetWithSlot[] memory votingAssetsWithSlot + ) internal { + // It also only allows to register the vote when proposal is active. + // To retry to register a vote (after it fails) the message will need to be retried from the cross chain controller + require( + _getProposalState(_proposals[proposalId]) == ProposalState.Active, + Errors.PROPOSAL_VOTE_CAN_NOT_BE_REGISTERED + ); + require(voter != address(0), Errors.INVALID_VOTER); + require(votingAssetsWithSlot.length > 0, Errors.NO_BRIDGED_VOTING_ASSETS); + require( + _bridgedVotes[voter][proposalId].votingAssetsWithSlot.length == 0, + Errors.VOTE_ALREADY_BRIDGED + ); + _bridgedVotes[voter][proposalId].support = support; + for (uint256 i = 0; i < votingAssetsWithSlot.length; i++) { + require( + IBaseVotingStrategy(address(VOTING_STRATEGY)).isTokenSlotAccepted( + votingAssetsWithSlot[i].underlyingAsset, + votingAssetsWithSlot[i].slot + ), + Errors.INVALID_BRIDGED_VOTING_TOKEN + ); + for (uint256 j = i + 1; j < votingAssetsWithSlot.length; j++) { + require( + votingAssetsWithSlot[j].underlyingAsset != + votingAssetsWithSlot[i].underlyingAsset || + votingAssetsWithSlot[j].slot != votingAssetsWithSlot[i].slot, + Errors.BRIDGED_REPEATED_ASSETS + ); + } + + _bridgedVotes[voter][proposalId].votingAssetsWithSlot.push( + votingAssetsWithSlot[i] + ); + } + + emit VoteBridged(proposalId, voter, support, votingAssetsWithSlot); + } +} diff --git a/security/certora/tests/VotingMachineWithProofs-4.sol b/security/certora/tests/VotingMachineWithProofs-4.sol new file mode 100644 index 0000000..355fa56 --- /dev/null +++ b/security/certora/tests/VotingMachineWithProofs-4.sol @@ -0,0 +1,500 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {Ownable} from 'solidity-utils/contracts/oz-common/Ownable.sol'; +import {SafeCast} from 'solidity-utils/contracts/oz-common/SafeCast.sol'; +import {StateProofVerifier} from './libs/StateProofVerifier.sol'; +import {IVotingMachineWithProofs, IDataWarehouse, IVotingStrategy} from './interfaces/IVotingMachineWithProofs.sol'; +import {IBaseVotingStrategy} from '../../interfaces/IBaseVotingStrategy.sol'; +import {Errors} from '../libraries/Errors.sol'; +import {SlotUtils} from '../libraries/SlotUtils.sol'; +import {EIP712} from 'openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol'; +import {ECDSA} from 'openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol'; + +/** + * @title VotingMachineWithProofs + * @author BGD Labs + * @notice this contract contains the logic to vote on a bridged proposal. It uses registered proofs to calculate the + voting power of the users. Once the voting is finished it will send the results back to the governance chain. + * @dev Abstract contract that is implemented on VotingMachine contract + */ +abstract contract VotingMachineWithProofs is + IVotingMachineWithProofs, + EIP712, + Ownable +{ + using SafeCast for uint256; + + string public constant VOTING_ASSET_WITH_SLOT_RAW = + 'VotingAssetWithSlot(address underlyingAsset,uint128 slot)'; + + /// @inheritdoc IVotingMachineWithProofs + bytes32 public constant VOTE_SUBMITTED_TYPEHASH = + keccak256( + abi.encodePacked( + 'SubmitVote(uint256 proposalId,address voter,bool support,VotingAssetWithSlot[] votingAssetsWithSlot)', + VOTING_ASSET_WITH_SLOT_RAW + ) + ); + + /// @inheritdoc IVotingMachineWithProofs + bytes32 public constant VOTING_ASSET_WITH_SLOT_TYPEHASH = + keccak256(abi.encodePacked(VOTING_ASSET_WITH_SLOT_RAW)); + + /// @inheritdoc IVotingMachineWithProofs + string public constant NAME = 'Aave Voting Machine'; + + /// @inheritdoc IVotingMachineWithProofs + IVotingStrategy public immutable VOTING_STRATEGY; + + /// @inheritdoc IVotingMachineWithProofs + IDataWarehouse public immutable DATA_WAREHOUSE; + + // (proposalId => proposal information) stores the information of the proposals + mapping(uint256 => Proposal) internal _proposals; + + // (proposalId => proposal vote configuration) stores the configuration for voting on each proposal + mapping(uint256 => ProposalVoteConfiguration) + internal _proposalsVoteConfiguration; + + // saves the ids of the proposals that have been bridged for a vote. + uint256[] internal _proposalsVoteConfigurationIds; + + // (voter => proposalId => voteInfo) stores the information for the bridged votes + mapping(address => mapping(uint256 => BridgedVote)) internal _bridgedVotes; + + /** + * @param votingStrategy address of the new VotingStrategy contract + */ + constructor(IVotingStrategy votingStrategy) Ownable() EIP712(NAME, 'V1') { + require( + address(votingStrategy) != address(0), + Errors.INVALID_VOTING_STRATEGY + ); + VOTING_STRATEGY = votingStrategy; + DATA_WAREHOUSE = votingStrategy.DATA_WAREHOUSE(); + } + + /// @inheritdoc IVotingMachineWithProofs + function DOMAIN_SEPARATOR() public view returns (bytes32) { + return _domainSeparatorV4(); + } + + /// @inheritdoc IVotingMachineWithProofs + function getBridgedVoteInfo( + uint256 proposalId, + address voter + ) external view returns (BridgedVote memory) { + return _bridgedVotes[voter][proposalId]; + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalVoteConfiguration( + uint256 proposalId + ) external view returns (ProposalVoteConfiguration memory) { + return _proposalsVoteConfiguration[proposalId]; + } + + /// @inheritdoc IVotingMachineWithProofs + function startProposalVote(uint256 proposalId) external returns (uint256) { + ProposalVoteConfiguration memory voteConfig = _proposalsVoteConfiguration[ + proposalId + ]; + require( + voteConfig.l1ProposalBlockHash != bytes32(0), + Errors.MISSING_PROPOSAL_BLOCK_HASH + ); + Proposal storage newProposal = _proposals[proposalId]; + + require( + _getProposalState(newProposal) == ProposalState.NotCreated, + Errors.PROPOSAL_VOTE_ALREADY_CREATED + ); + + VOTING_STRATEGY.hasRequiredRoots(voteConfig.l1ProposalBlockHash); + + uint40 startTime = _getCurrentTimeRef(); + uint40 endTime = startTime + voteConfig.votingDuration; + + newProposal.id = proposalId; + newProposal.creationBlockNumber = block.number; + newProposal.startTime = startTime; + newProposal.endTime = endTime; + + emit ProposalVoteStarted( + proposalId, + voteConfig.l1ProposalBlockHash, + startTime, + endTime + ); + + return proposalId; + } + + /// @inheritdoc IVotingMachineWithProofs + function submitVoteBySignature( + uint256 proposalId, + address voter, + bool support, + VotingBalanceProof[] calldata votingBalanceProofs, + uint8 v, + bytes32 r, + bytes32 s + ) external { + bytes32[] memory underlyingAssetsWithSlotHashes = new bytes32[]( + votingBalanceProofs.length + ); + for (uint256 i = 0; i < votingBalanceProofs.length; i++) { + underlyingAssetsWithSlotHashes[i] = keccak256( + abi.encode( + VOTING_ASSET_WITH_SLOT_TYPEHASH, + votingBalanceProofs[i].underlyingAsset, + votingBalanceProofs[i].slot + ) + ); + } + + bytes32 digest = _hashTypedDataV4( + keccak256( + abi.encode( + VOTE_SUBMITTED_TYPEHASH, + proposalId, + voter, + support, + keccak256(abi.encodePacked(underlyingAssetsWithSlotHashes)) + ) + ) + ); + address signer = ECDSA.recover(digest, v, r, s); + + require(signer == voter && signer != address(0), Errors.INVALID_SIGNATURE); + _submitVote(signer, proposalId, support, votingBalanceProofs); + } + + /// @inheritdoc IVotingMachineWithProofs + function settleVoteFromPortal( + uint256 proposalId, + address voter, + VotingBalanceProof[] calldata votingBalanceProofs + ) external { + BridgedVote memory bridgedVote = _bridgedVotes[voter][proposalId]; + + require( + bridgedVote.votingAssetsWithSlot.length == votingBalanceProofs.length, + Errors.INVALID_NUMBER_OF_PROOFS_FOR_VOTING_TOKENS + ); + + // check that the proofs are of the voter assets + for (uint256 i = 0; i < bridgedVote.votingAssetsWithSlot.length; i++) { + bool assetFound; + for (uint256 j = 0; j < votingBalanceProofs.length; j++) { + if ( + votingBalanceProofs[j].underlyingAsset == + bridgedVote.votingAssetsWithSlot[i].underlyingAsset && + votingBalanceProofs[j].slot == + bridgedVote.votingAssetsWithSlot[i].slot + ) { + assetFound = true; + break; + } + } + + require(assetFound, Errors.PROOFS_NOT_FOR_VOTING_TOKENS); + } + + _submitVote(voter, proposalId, bridgedVote.support, votingBalanceProofs); + } + + /// @inheritdoc IVotingMachineWithProofs + function submitVote( + uint256 proposalId, + bool support, + VotingBalanceProof[] calldata votingBalanceProofs + ) external { + _submitVote(msg.sender, proposalId, support, votingBalanceProofs); + } + + /// @inheritdoc IVotingMachineWithProofs + function getUserProposalVote( + address user, + uint256 proposalId + ) external view returns (Vote memory) { + return _proposals[proposalId].votes[user]; + } + + /// @inheritdoc IVotingMachineWithProofs + function closeAndSendVote(uint256 proposalId) external { + Proposal storage proposal = _proposals[proposalId]; + require( + _getProposalState(proposal) == ProposalState.Finished, + Errors.PROPOSAL_VOTE_NOT_FINISHED + ); + + proposal.votingClosedAndSentBlockNumber = block.number; + proposal.votingClosedAndSentTimestamp = _getCurrentTimeRef(); + + uint256 forVotes = proposal.forVotes; + uint256 againstVotes = proposal.againstVotes; + + proposal.sentToGovernance = true; + + _sendVoteResults(proposalId, forVotes, againstVotes); + + emit ProposalResultsSent(proposalId, forVotes, againstVotes); + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalById( + uint256 proposalId + ) external view returns (ProposalWithoutVotes memory) { + Proposal storage proposal = _proposals[0]; + ProposalWithoutVotes memory proposalWithoutVotes = ProposalWithoutVotes({ + id: proposalId, + startTime: proposal.startTime, + endTime: proposal.endTime, + creationBlockNumber: proposal.creationBlockNumber, + forVotes: proposal.forVotes, + againstVotes: proposal.againstVotes, + votingClosedAndSentBlockNumber: proposal.votingClosedAndSentBlockNumber, + votingClosedAndSentTimestamp: proposal.votingClosedAndSentTimestamp, + sentToGovernance: proposal.sentToGovernance + }); + + return proposalWithoutVotes; + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalState( + uint256 proposalId + ) external view returns (ProposalState) { + return _getProposalState(_proposals[proposalId]); + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalsVoteConfigurationIds( + uint256 skip, + uint256 size + ) external view returns (uint256[] memory) { + uint256 proposalListLength = _proposalsVoteConfigurationIds.length; + if (proposalListLength == 0 || proposalListLength <= skip) { + return new uint256[](0); + } else if (proposalListLength < size + skip) { + size = proposalListLength - skip; + } + + uint256[] memory ids = new uint256[](size); + for (uint256 i = 0; i < size; i++) { + ids[i] = _proposalsVoteConfigurationIds[ + proposalListLength - skip - i - 1 + ]; + } + return ids; + } + + /** + * @notice method to cast a vote on a proposal specified by its id + * @param voter address with the voting power + * @param proposalId id of the proposal on which the vote will be cast + * @param support boolean indicating if the vote is in favor or against the proposal + * @param votingBalanceProofs list of objects containing the information necessary to vote using the tokens + allowed on the voting strategy. + * @dev A vote does not need to use all the tokens allowed, can be a subset + */ + function _submitVote( + address voter, + uint256 proposalId, + bool support, + VotingBalanceProof[] calldata votingBalanceProofs + ) internal { + Proposal storage proposal = _proposals[proposalId]; + require( + _getProposalState(proposal) == ProposalState.Active, + Errors.PROPOSAL_VOTE_NOT_IN_ACTIVE_STATE + ); + + Vote storage vote = proposal.votes[voter]; + require(vote.votingPower == 0, Errors.PROPOSAL_VOTE_ALREADY_EXISTS); + + ProposalVoteConfiguration memory voteConfig = _proposalsVoteConfiguration[ + proposalId + ]; + + uint256 votingPower; + StateProofVerifier.SlotValue memory balanceVotingPower; + for (uint256 i = 0; i < votingBalanceProofs.length; i++) { + for (uint256 j = i + 1; j < votingBalanceProofs.length; j++) { + require( + votingBalanceProofs[i].slot != votingBalanceProofs[j].slot || + votingBalanceProofs[i].underlyingAsset != + votingBalanceProofs[j].underlyingAsset, + Errors.VOTE_ONCE_FOR_ASSET + ); + } + + balanceVotingPower = DATA_WAREHOUSE.getStorage( + votingBalanceProofs[i].underlyingAsset, + voteConfig.l1ProposalBlockHash, + SlotUtils.getAccountSlotHash(voter, votingBalanceProofs[i].slot), + votingBalanceProofs[i].proof + ); + + require(balanceVotingPower.exists, Errors.USER_BALANCE_DOES_NOT_EXISTS); + + if (balanceVotingPower.value != 0) { + votingPower += IVotingStrategy(address(VOTING_STRATEGY)).getVotingPower( + votingBalanceProofs[i].underlyingAsset, + votingBalanceProofs[i].slot, + balanceVotingPower.value, + voteConfig.l1ProposalBlockHash + ); + } + } + require(votingPower != 0, Errors.USER_VOTING_BALANCE_IS_ZERO); + + if (support) { + proposal.forVotes += votingPower.toUint128(); + } else { + proposal.againstVotes += votingPower.toUint128(); + } + + vote.support = support; + vote.votingPower = votingPower.toUint248(); + + emit VoteEmitted(proposalId, voter, support, votingPower); + } + + /** + * @notice method to send the voting results on a proposal back to L1 + * @param proposalId id of the proposal to send the voting result to L1 + * @dev This method should be implemented to trigger the bridging flow + */ + function _sendVoteResults( + uint256 proposalId, + uint256 forVotes, + uint256 againstVotes + ) internal virtual; + + /** + * @notice method to get the state of a proposal specified by its id + * @param proposal the proposal to retrieve the state of + * @return the state of the proposal + */ + function _getProposalState( + Proposal storage proposal + ) internal view returns (ProposalState) { + if (proposal.endTime == 0) { + return ProposalState.NotCreated; + } else if (_getCurrentTimeRef() <= proposal.endTime) { + return ProposalState.Active; + } else if (proposal.sentToGovernance) { + return ProposalState.SentToGovernance; + } else { + return ProposalState.Finished; + } + } + + /** + * @notice method to get the timestamp of a block casted to uint40 + * @return uint40 block timestamp + */ + function _getCurrentTimeRef() internal view returns (uint40) { + return uint40(block.timestamp); + } + + /** + * @notice method that registers a proposal configuration and creates the voting if it can. If not it will register the + the configuration for later creation. + * @param proposalId id of the proposal bridged to start the vote on + * @param blockHash hash of the block on L1 when the proposal was activated for voting + * @param votingDuration duration in seconds of the vote + */ + function _createBridgedProposalVote( + uint256 proposalId, + bytes32 blockHash, + uint24 votingDuration + ) internal { + require( + blockHash != bytes32(0), + Errors.INVALID_VOTE_CONFIGURATION_BLOCKHASH + ); + require( + votingDuration > 0, + Errors.INVALID_VOTE_CONFIGURATION_VOTING_DURATION + ); + require( + _proposalsVoteConfiguration[proposalId].l1ProposalBlockHash == bytes32(0), + Errors.PROPOSAL_VOTE_CONFIGURATION_ALREADY_BRIDGED + ); + + _proposalsVoteConfiguration[proposalId] = IVotingMachineWithProofs + .ProposalVoteConfiguration({ + votingDuration: votingDuration, + l1ProposalBlockHash: blockHash + }); + _proposalsVoteConfigurationIds.push(proposalId); + + bool created; + try this.startProposalVote(proposalId) { + created = true; + } catch (bytes memory) {} + + emit ProposalVoteConfigurationBridged( + proposalId, + blockHash, + votingDuration, + created + ); + } + + /** + * @notice method that registers a vote on a proposal from a specific voter, contained in a bridged message + from governance chain + * @param proposalId id of the proposal bridged to start the vote on + * @param voter address that wants to emit the vote + * @param support indicates if vote is in favor or against the proposal + * @param votingAssetsWithSlot list of token addresses with base slots that the voter will use for voting + */ + function _registerBridgedVote( + uint256 proposalId, + address voter, + bool support, + VotingAssetWithSlot[] memory votingAssetsWithSlot + ) internal { + // It also only allows to register the vote when proposal is active. + // To retry to register a vote (after it fails) the message will need to be retried from the cross chain controller + require( + _getProposalState(_proposals[proposalId]) == ProposalState.Active, + Errors.PROPOSAL_VOTE_CAN_NOT_BE_REGISTERED + ); + require(voter != address(0), Errors.INVALID_VOTER); + require(votingAssetsWithSlot.length > 0, Errors.NO_BRIDGED_VOTING_ASSETS); + require( + _bridgedVotes[voter][proposalId].votingAssetsWithSlot.length == 0, + Errors.VOTE_ALREADY_BRIDGED + ); + _bridgedVotes[voter][proposalId].support = support; + for (uint256 i = 0; i < votingAssetsWithSlot.length; i++) { + require( + IBaseVotingStrategy(address(VOTING_STRATEGY)).isTokenSlotAccepted( + votingAssetsWithSlot[i].underlyingAsset, + votingAssetsWithSlot[i].slot + ), + Errors.INVALID_BRIDGED_VOTING_TOKEN + ); + for (uint256 j = i + 1; j < votingAssetsWithSlot.length; j++) { + require( + votingAssetsWithSlot[j].underlyingAsset != + votingAssetsWithSlot[i].underlyingAsset || + votingAssetsWithSlot[j].slot != votingAssetsWithSlot[i].slot, + Errors.BRIDGED_REPEATED_ASSETS + ); + } + + _bridgedVotes[voter][proposalId].votingAssetsWithSlot.push( + votingAssetsWithSlot[i] + ); + } + + emit VoteBridged(proposalId, voter, support, votingAssetsWithSlot); + } +} diff --git a/security/certora/tests/VotingMachineWithProofs-5.sol b/security/certora/tests/VotingMachineWithProofs-5.sol new file mode 100644 index 0000000..1ca90ca --- /dev/null +++ b/security/certora/tests/VotingMachineWithProofs-5.sol @@ -0,0 +1,500 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {Ownable} from 'solidity-utils/contracts/oz-common/Ownable.sol'; +import {SafeCast} from 'solidity-utils/contracts/oz-common/SafeCast.sol'; +import {StateProofVerifier} from './libs/StateProofVerifier.sol'; +import {IVotingMachineWithProofs, IDataWarehouse, IVotingStrategy} from './interfaces/IVotingMachineWithProofs.sol'; +import {IBaseVotingStrategy} from '../../interfaces/IBaseVotingStrategy.sol'; +import {Errors} from '../libraries/Errors.sol'; +import {SlotUtils} from '../libraries/SlotUtils.sol'; +import {EIP712} from 'openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol'; +import {ECDSA} from 'openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol'; + +/** + * @title VotingMachineWithProofs + * @author BGD Labs + * @notice this contract contains the logic to vote on a bridged proposal. It uses registered proofs to calculate the + voting power of the users. Once the voting is finished it will send the results back to the governance chain. + * @dev Abstract contract that is implemented on VotingMachine contract + */ +abstract contract VotingMachineWithProofs is + IVotingMachineWithProofs, + EIP712, + Ownable +{ + using SafeCast for uint256; + + string public constant VOTING_ASSET_WITH_SLOT_RAW = + 'VotingAssetWithSlot(address underlyingAsset,uint128 slot)'; + + /// @inheritdoc IVotingMachineWithProofs + bytes32 public constant VOTE_SUBMITTED_TYPEHASH = + keccak256( + abi.encodePacked( + 'SubmitVote(uint256 proposalId,address voter,bool support,VotingAssetWithSlot[] votingAssetsWithSlot)', + VOTING_ASSET_WITH_SLOT_RAW + ) + ); + + /// @inheritdoc IVotingMachineWithProofs + bytes32 public constant VOTING_ASSET_WITH_SLOT_TYPEHASH = + keccak256(abi.encodePacked(VOTING_ASSET_WITH_SLOT_RAW)); + + /// @inheritdoc IVotingMachineWithProofs + string public constant NAME = 'Aave Voting Machine'; + + /// @inheritdoc IVotingMachineWithProofs + IVotingStrategy public immutable VOTING_STRATEGY; + + /// @inheritdoc IVotingMachineWithProofs + IDataWarehouse public immutable DATA_WAREHOUSE; + + // (proposalId => proposal information) stores the information of the proposals + mapping(uint256 => Proposal) internal _proposals; + + // (proposalId => proposal vote configuration) stores the configuration for voting on each proposal + mapping(uint256 => ProposalVoteConfiguration) + internal _proposalsVoteConfiguration; + + // saves the ids of the proposals that have been bridged for a vote. + uint256[] internal _proposalsVoteConfigurationIds; + + // (voter => proposalId => voteInfo) stores the information for the bridged votes + mapping(address => mapping(uint256 => BridgedVote)) internal _bridgedVotes; + + /** + * @param votingStrategy address of the new VotingStrategy contract + */ + constructor(IVotingStrategy votingStrategy) Ownable() EIP712(NAME, 'V1') { + require( + address(votingStrategy) != address(0), + Errors.INVALID_VOTING_STRATEGY + ); + VOTING_STRATEGY = votingStrategy; + DATA_WAREHOUSE = votingStrategy.DATA_WAREHOUSE(); + } + + /// @inheritdoc IVotingMachineWithProofs + function DOMAIN_SEPARATOR() public view returns (bytes32) { + return _domainSeparatorV4(); + } + + /// @inheritdoc IVotingMachineWithProofs + function getBridgedVoteInfo( + uint256 proposalId, + address voter + ) external view returns (BridgedVote memory) { + return _bridgedVotes[voter][proposalId]; + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalVoteConfiguration( + uint256 proposalId + ) external view returns (ProposalVoteConfiguration memory) { + return _proposalsVoteConfiguration[proposalId]; + } + + /// @inheritdoc IVotingMachineWithProofs + function startProposalVote(uint256 proposalId) external returns (uint256) { + ProposalVoteConfiguration memory voteConfig = _proposalsVoteConfiguration[ + proposalId + ]; + require( + voteConfig.l1ProposalBlockHash != bytes32(0), + Errors.MISSING_PROPOSAL_BLOCK_HASH + ); + Proposal storage newProposal = _proposals[proposalId]; + + require( + _getProposalState(newProposal) == ProposalState.NotCreated, + Errors.PROPOSAL_VOTE_ALREADY_CREATED + ); + + VOTING_STRATEGY.hasRequiredRoots(voteConfig.l1ProposalBlockHash); + + uint40 startTime = _getCurrentTimeRef(); + uint40 endTime = startTime + voteConfig.votingDuration; + + newProposal.id = proposalId; + newProposal.creationBlockNumber = block.number; + newProposal.startTime = startTime; + newProposal.endTime = endTime; + + emit ProposalVoteStarted( + proposalId, + voteConfig.l1ProposalBlockHash, + startTime, + endTime + ); + + return proposalId; + } + + /// @inheritdoc IVotingMachineWithProofs + function submitVoteBySignature( + uint256 proposalId, + address voter, + bool support, + VotingBalanceProof[] calldata votingBalanceProofs, + uint8 v, + bytes32 r, + bytes32 s + ) external { + bytes32[] memory underlyingAssetsWithSlotHashes = new bytes32[]( + votingBalanceProofs.length + ); + for (uint256 i = 0; i < votingBalanceProofs.length; i++) { + underlyingAssetsWithSlotHashes[i] = keccak256( + abi.encode( + VOTING_ASSET_WITH_SLOT_TYPEHASH, + votingBalanceProofs[i].underlyingAsset, + votingBalanceProofs[i].slot + ) + ); + } + + bytes32 digest = _hashTypedDataV4( + keccak256( + abi.encode( + VOTE_SUBMITTED_TYPEHASH, + proposalId, + voter, + support, + keccak256(abi.encodePacked(underlyingAssetsWithSlotHashes)) + ) + ) + ); + address signer = ECDSA.recover(digest, v, r, s); + + require(signer == voter && signer != address(0), Errors.INVALID_SIGNATURE); + _submitVote(signer, proposalId, support, votingBalanceProofs); + } + + /// @inheritdoc IVotingMachineWithProofs + function settleVoteFromPortal( + uint256 proposalId, + address voter, + VotingBalanceProof[] calldata votingBalanceProofs + ) external { + BridgedVote memory bridgedVote = _bridgedVotes[voter][proposalId]; + + require( + bridgedVote.votingAssetsWithSlot.length == votingBalanceProofs.length, + Errors.INVALID_NUMBER_OF_PROOFS_FOR_VOTING_TOKENS + ); + + // check that the proofs are of the voter assets + for (uint256 i = 0; i < bridgedVote.votingAssetsWithSlot.length; i++) { + bool assetFound; + for (uint256 j = 0; j < votingBalanceProofs.length; j++) { + if ( + votingBalanceProofs[j].underlyingAsset == + bridgedVote.votingAssetsWithSlot[i].underlyingAsset && + votingBalanceProofs[j].slot == + bridgedVote.votingAssetsWithSlot[i].slot + ) { + assetFound = true; + break; + } + } + + require(assetFound, Errors.PROOFS_NOT_FOR_VOTING_TOKENS); + } + + _submitVote(voter, proposalId, bridgedVote.support, votingBalanceProofs); + } + + /// @inheritdoc IVotingMachineWithProofs + function submitVote( + uint256 proposalId, + bool support, + VotingBalanceProof[] calldata votingBalanceProofs + ) external { + _submitVote(msg.sender, proposalId, support, votingBalanceProofs); + } + + /// @inheritdoc IVotingMachineWithProofs + function getUserProposalVote( + address user, + uint256 proposalId + ) external view returns (Vote memory) { + return _proposals[proposalId].votes[user]; + } + + /// @inheritdoc IVotingMachineWithProofs + function closeAndSendVote(uint256 proposalId) external { + Proposal storage proposal = _proposals[proposalId]; + require( + _getProposalState(proposal) == ProposalState.Finished, + Errors.PROPOSAL_VOTE_NOT_FINISHED + ); + + proposal.votingClosedAndSentBlockNumber = block.number; + proposal.votingClosedAndSentTimestamp = _getCurrentTimeRef(); + + uint256 forVotes = proposal.forVotes; + uint256 againstVotes = proposal.againstVotes; + + proposal.sentToGovernance = true; + + _sendVoteResults(proposalId, forVotes, againstVotes); + + emit ProposalResultsSent(proposalId, forVotes, againstVotes); + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalById( + uint256 proposalId + ) external view returns (ProposalWithoutVotes memory) { + Proposal storage proposal = _proposals[proposalId]; + ProposalWithoutVotes memory proposalWithoutVotes = ProposalWithoutVotes({ + id: proposalId, + startTime: proposal.startTime, + endTime: proposal.endTime, + creationBlockNumber: proposal.creationBlockNumber, + forVotes: proposal.forVotes, + againstVotes: proposal.againstVotes, + votingClosedAndSentBlockNumber: proposal.votingClosedAndSentBlockNumber, + votingClosedAndSentTimestamp: proposal.votingClosedAndSentTimestamp, + sentToGovernance: proposal.sentToGovernance + }); + + return proposalWithoutVotes; + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalState( + uint256 proposalId + ) external view returns (ProposalState) { + return _getProposalState(_proposals[proposalId]); + } + + /// @inheritdoc IVotingMachineWithProofs + function getProposalsVoteConfigurationIds( + uint256 skip, + uint256 size + ) external view returns (uint256[] memory) { + uint256 proposalListLength = _proposalsVoteConfigurationIds.length; + if (proposalListLength == 0 || proposalListLength <= skip) { + return new uint256[](0); + } else if (proposalListLength < size + skip) { + size = proposalListLength - skip; + } + + uint256[] memory ids = new uint256[](size); + for (uint256 i = 0; i < size; i++) { + ids[i] = _proposalsVoteConfigurationIds[ + proposalListLength - skip - i + ]; + } + return ids; + } + + /** + * @notice method to cast a vote on a proposal specified by its id + * @param voter address with the voting power + * @param proposalId id of the proposal on which the vote will be cast + * @param support boolean indicating if the vote is in favor or against the proposal + * @param votingBalanceProofs list of objects containing the information necessary to vote using the tokens + allowed on the voting strategy. + * @dev A vote does not need to use all the tokens allowed, can be a subset + */ + function _submitVote( + address voter, + uint256 proposalId, + bool support, + VotingBalanceProof[] calldata votingBalanceProofs + ) internal { + Proposal storage proposal = _proposals[proposalId]; + require( + _getProposalState(proposal) == ProposalState.Active, + Errors.PROPOSAL_VOTE_NOT_IN_ACTIVE_STATE + ); + + Vote storage vote = proposal.votes[voter]; + require(vote.votingPower == 0, Errors.PROPOSAL_VOTE_ALREADY_EXISTS); + + ProposalVoteConfiguration memory voteConfig = _proposalsVoteConfiguration[ + proposalId + ]; + + uint256 votingPower; + StateProofVerifier.SlotValue memory balanceVotingPower; + for (uint256 i = 0; i < votingBalanceProofs.length; i++) { + for (uint256 j = i + 1; j < votingBalanceProofs.length; j++) { + require( + votingBalanceProofs[i].slot != votingBalanceProofs[j].slot || + votingBalanceProofs[i].underlyingAsset != + votingBalanceProofs[j].underlyingAsset, + Errors.VOTE_ONCE_FOR_ASSET + ); + } + + balanceVotingPower = DATA_WAREHOUSE.getStorage( + votingBalanceProofs[i].underlyingAsset, + voteConfig.l1ProposalBlockHash, + SlotUtils.getAccountSlotHash(voter, votingBalanceProofs[i].slot), + votingBalanceProofs[i].proof + ); + + require(balanceVotingPower.exists, Errors.USER_BALANCE_DOES_NOT_EXISTS); + + if (balanceVotingPower.value != 0) { + votingPower += IVotingStrategy(address(VOTING_STRATEGY)).getVotingPower( + votingBalanceProofs[i].underlyingAsset, + votingBalanceProofs[i].slot, + balanceVotingPower.value, + voteConfig.l1ProposalBlockHash + ); + } + } + require(votingPower != 0, Errors.USER_VOTING_BALANCE_IS_ZERO); + + if (support) { + proposal.forVotes += votingPower.toUint128(); + } else { + proposal.againstVotes += votingPower.toUint128(); + } + + vote.support = support; + vote.votingPower = votingPower.toUint248(); + + emit VoteEmitted(proposalId, voter, support, votingPower); + } + + /** + * @notice method to send the voting results on a proposal back to L1 + * @param proposalId id of the proposal to send the voting result to L1 + * @dev This method should be implemented to trigger the bridging flow + */ + function _sendVoteResults( + uint256 proposalId, + uint256 forVotes, + uint256 againstVotes + ) internal virtual; + + /** + * @notice method to get the state of a proposal specified by its id + * @param proposal the proposal to retrieve the state of + * @return the state of the proposal + */ + function _getProposalState( + Proposal storage proposal + ) internal view returns (ProposalState) { + if (proposal.endTime == 0) { + return ProposalState.NotCreated; + } else if (_getCurrentTimeRef() <= proposal.endTime) { + return ProposalState.Active; + } else if (proposal.sentToGovernance) { + return ProposalState.SentToGovernance; + } else { + return ProposalState.Finished; + } + } + + /** + * @notice method to get the timestamp of a block casted to uint40 + * @return uint40 block timestamp + */ + function _getCurrentTimeRef() internal view returns (uint40) { + return uint40(block.timestamp); + } + + /** + * @notice method that registers a proposal configuration and creates the voting if it can. If not it will register the + the configuration for later creation. + * @param proposalId id of the proposal bridged to start the vote on + * @param blockHash hash of the block on L1 when the proposal was activated for voting + * @param votingDuration duration in seconds of the vote + */ + function _createBridgedProposalVote( + uint256 proposalId, + bytes32 blockHash, + uint24 votingDuration + ) internal { + require( + blockHash != bytes32(0), + Errors.INVALID_VOTE_CONFIGURATION_BLOCKHASH + ); + require( + votingDuration > 0, + Errors.INVALID_VOTE_CONFIGURATION_VOTING_DURATION + ); + require( + _proposalsVoteConfiguration[proposalId].l1ProposalBlockHash == bytes32(0), + Errors.PROPOSAL_VOTE_CONFIGURATION_ALREADY_BRIDGED + ); + + _proposalsVoteConfiguration[proposalId] = IVotingMachineWithProofs + .ProposalVoteConfiguration({ + votingDuration: votingDuration, + l1ProposalBlockHash: blockHash + }); + _proposalsVoteConfigurationIds.push(proposalId); + + bool created; + try this.startProposalVote(proposalId) { + created = true; + } catch (bytes memory) {} + + emit ProposalVoteConfigurationBridged( + proposalId, + blockHash, + votingDuration, + created + ); + } + + /** + * @notice method that registers a vote on a proposal from a specific voter, contained in a bridged message + from governance chain + * @param proposalId id of the proposal bridged to start the vote on + * @param voter address that wants to emit the vote + * @param support indicates if vote is in favor or against the proposal + * @param votingAssetsWithSlot list of token addresses with base slots that the voter will use for voting + */ + function _registerBridgedVote( + uint256 proposalId, + address voter, + bool support, + VotingAssetWithSlot[] memory votingAssetsWithSlot + ) internal { + // It also only allows to register the vote when proposal is active. + // To retry to register a vote (after it fails) the message will need to be retried from the cross chain controller + require( + _getProposalState(_proposals[proposalId]) == ProposalState.Active, + Errors.PROPOSAL_VOTE_CAN_NOT_BE_REGISTERED + ); + require(voter != address(0), Errors.INVALID_VOTER); + require(votingAssetsWithSlot.length > 0, Errors.NO_BRIDGED_VOTING_ASSETS); + require( + _bridgedVotes[voter][proposalId].votingAssetsWithSlot.length == 0, + Errors.VOTE_ALREADY_BRIDGED + ); + _bridgedVotes[voter][proposalId].support = support; + for (uint256 i = 0; i < votingAssetsWithSlot.length; i++) { + require( + IBaseVotingStrategy(address(VOTING_STRATEGY)).isTokenSlotAccepted( + votingAssetsWithSlot[i].underlyingAsset, + votingAssetsWithSlot[i].slot + ), + Errors.INVALID_BRIDGED_VOTING_TOKEN + ); + for (uint256 j = i + 1; j < votingAssetsWithSlot.length; j++) { + require( + votingAssetsWithSlot[j].underlyingAsset != + votingAssetsWithSlot[i].underlyingAsset || + votingAssetsWithSlot[j].slot != votingAssetsWithSlot[i].slot, + Errors.BRIDGED_REPEATED_ASSETS + ); + } + + _bridgedVotes[voter][proposalId].votingAssetsWithSlot.push( + votingAssetsWithSlot[i] + ); + } + + emit VoteBridged(proposalId, voter, support, votingAssetsWithSlot); + } +} diff --git a/security/sp/Sigma_Prime_Aave_Governance_V3_Round_2_Security_Assessment_Report.pdf b/security/sp/Sigma_Prime_Aave_Governance_V3_Round_2_Security_Assessment_Report.pdf index 86175684b222290c2653ca999f02dbd1ac96fc74..47ef38681aeac3c40baadf32e2e690a001ab62a7 100644 GIT binary patch delta 98253 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%0ApD}2s*r4Uia1`nzR(E^kUgJk~#qzR;w^=0c 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 diff --git a/security/sp/Sigma_Prime_Aave_Governance_V3_Security_Assessment_Report_4_0.pdf b/security/sp/Sigma_Prime_Aave_Governance_V3_Security_Assessment_Report_4_1.pdf similarity index 66% rename from security/sp/Sigma_Prime_Aave_Governance_V3_Security_Assessment_Report_4_0.pdf rename to security/sp/Sigma_Prime_Aave_Governance_V3_Security_Assessment_Report_4_1.pdf index ae3d8874f7f75088cb05f08b3a98c7e2bc83e50f..e1d43adb338dec152b7b529c1334b7c52d4ff565 100644 GIT binary patch delta 129253 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

~nxWQ|W@u`h6`gl^IKR<5M zO-V6|Q_GU1Z}I$Hqvq4sHL#q{u;GlJx{@G16=o?Iv~Ndc|K(F~zPLhsEHV>VjMFWt zzIXUA3|)9@-nGNcw-x&-+miUGHg=}t;;4mhS%zp~tFvVOO|2!>=6Vr-Axc+8%S=Tm zxZL9J?wf5_=DfI%&i8L>j|4w?`T(OzCwzNOcPcvia1Di0^v^<9#bN)YZ2vB5r`^F zeyWDo2ekZzLyvLRpY(H76PyhXiaHGpa{rv1DiSC>MpY%G%`B>l38E20VFDW zZXFhOE-4)r4pP6{oE+i%{73cgYodBA+BvNE%>{SQc5XDehX7#H_{_#=GW|L{kW zHm={@NLaYJ{y&w(!^V-6KSTrgX(~8vaHDj+Y29cu#HSzJpu>Qf<6}^_C}3}FsU-xX z!H0oRaenif`+S?8O&&lVqjJd!XNz+RdyqE6wVJ24BnLmwVD9a8fePvlqERv$i!NYd z#PqbYvR{2ole3YY^0x-c3DEC@sygfhel#4JQeu+X<(pT)#c(McO-W3+!t z`gn_O=|PVmn!?4N+D`$)sPm36T#bC-8y=U?lbL6iO}N;AFC5~>UuTXB&yNyfVArXl zh<7gido4Hdx&yZPeklf37MU??h`xPTd=sOXv>uZx#88TUDnu!eZB+`XsSQhGju$tW z68}wP3&AC#%s!23kP=3<6~4;t``-*J3KjfLO&fOp$jL=fQs40a@90vbMKe(<5F+_e zFWF>g*UZuoJQ!(r&&7TlL3QDiQR|bO5&y4Osj^q{BR=Wk)&g;{m*W?czmxTQ&!1$? z(bcS~8^3AEY>sGwaq{fSZ}HyUcN9AO$=Ph28BdUV%^#54HDg_AUUGTL8er`y{mIl@oH{B9Ts4uxt%{ncCr5$0F?Z*I0kRSzcIa56|~Nm*b2uujSO@0U%SNw#&(I1a+I%MIyAQ>q2(>f6lb>I>I{a1-pB*-l>)*d+QtxU)>%>2U-6V(jAG&87DGYIq^PJe@U zNvIqnf6>bRp=TE~5GJMx{oJjQ#vyEM#r>Ii+=+ieXMiC4dC9_Qt=Pyi@kagDWh;B4 zV||YCzVF*5_too4fIOQmHTTq*OURao(NmV=$Ih&X!Zhgnyr6r>?vdq(voEf{v%as< z&dzqE&27ZX%8qkq2Yez6N5U(jT@O*@f3w)G7A6k=d2%wfg=1%CPIKvkBn6mR4B(j5 zY`iT<*qK@2n6yarSV-7N{!>(Sa&jYK@`{n^P-QOnt zjW+5UCZ*!Uy%tWRXt5Gg83d4#W$%FY=yUuLgHDt3plFmGhENq^stsA04d$Dry<0`z`-b`qT(puT3`ZvF zC39{q!sZkswh#1Qh1;UlBK95udEy=oQ|!g)iRtyg(QIq+op7kykQyQ*H~ZscjeQX& zP>1dN%PCt*Vc107!f~F-U0HnFANM7mghKGc%vsvvvyF)dL8|SLJ38=dm=b;GAY^=t zult!>e)!yPP~!NbfDLd)W9)Al@4x$=9i&6j3k#~q-&;H2^}9DpS=!}?%wgbDX4&6& zY$wv(?}bk9PQr>Y*}A%iR>*Y}!t2#2k$Zc3ZocP);%m}Xn3eB;dpzUq$rdHcs_7XG z^Y*2#NfsqNszndSJhw%LV}9V@wmf#`lhyB2trL0S%*>~xJBIWHe%*1p+E(`x_ph6c)HZ$WIt(sLr@L41U*E(!o>*vwmq`~q4#iS6 zeOx+#*CD=Yn9-I!JK>@>o8bJ6N;^ThCP|X)r?1uZU*MArMh-?JW^izxJJcq(7s zejIvRn^mDzwb}74DQch4>J|HNG?Wr@G;>G|DX1Tz_z}nzP;3jU#`63;&K@ z)R9kunn6iufG2q6-Lp-00{ybj3IDgFHp%p0B%F~nMOm^# zHR|xDg<+HX>CN*I6vcSddug=6Q=HM3`+3s?X>S%4#5jP(UW~%k0BtP?2?{DxVBza!ugWh=Xd&EgD=5^)rG32NHDPr|eI{3Wf!!+K0NFsO+ P4lWir3JM7&Nx1(4P5cpf delta 129930 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�jfCjAj|4(VF<68=WK@2rU`5Ggo?|S zINmf)8GZ=&%WDg5lX8C2O*ryJMc9#f?o3&PUA?p$(R%oerK%waCjF~fd_44H25=CE z)T9tHEW3}Wc09`uirMm|$LOg)MzXO?W(<1KyG-@_<|5?k-}?iIln4Y6po^ z`MXogk4qD*Y?KvSAhU z1vka|xn99+_5;a(W>=31EaI|%yh2%_T@wrbGp_ie!_208bYHck9Ku>ww8?UJX*ndr z$`uSOPl|5>(f|Nxk0z%_JAV%`s6qU64OEY6A6^I4&T&-fL&*(Cj-p7$BI$vNr_^F1 zpfSbxvD0DXNBltc1+hd0wF^i4$H<=y9vmx%A)ozA+F905g2rRgH1`Vm3m$pAI@E|; zjG+dn@blp;Vw9)r;Uu+jpk=||lKmT9Bz0kpkn-m$8UTv$WEgJCld7sKVk2AvLL&;H z5`^nd@#-m1koD)@h3;9j(^pZGPIe8SS1)M&MwWJ{otA8e57F!Ctd%tNPKsMeMzYc6 z(f+rQGcWSd^grU#`Jq;V92xYuSID>Te$%s%j?Or>U z6~qK49{~GC%e{}maWK1i59dl0YY|9C20FmdZuFLcnc3i+!~@suP@Mc-l>!8x8RW3O zgR2GVjMRg_V;tC-ps(AXU?$}~1U4dYe+8NL;wf?R5(LeSlaD_Z5Mr*84}4UbfbP_l$wXm2g|T;REqRS9@aP{vy8$}X^fUQz z1vG9ISy0VoK+ymuyj>sl-?%K=zHW;rugiK26Q`(`jSj_fz^n)9IpiKmo4c(-nF5fV z)z$yONii)NfwCWi=D}hsdTsSXxsDjws|{F7hRsVGb4GAyDd!#X+_yEX<7~3o42Fl@ z2$vB?!XP%0X^i6?{Rv}vb<@6KG&$Q%1Q0Q*Ie-#&Xz$E5YiT)hN3wYLc{iv)Gc(S< zgA;jrkDGv9%2mPE0X7EM17_*VL8;;n=o7^x22kUYo6>#{3BbQui8{^QAPI*Yr)#-k ztqSt6`tOzr^hKZ1$Y2kRet4=Re$dPSZ-f?DD`DffT7ea0L60Gx_< zFw62$4n8e@2s??mN?XBIncpQN1>3P4?(ka>0*l~UxfdG!8#(^k*fsDQM-3Xca?#mg zPzqf=qjvS_0m{836IFh68q(x@m~;;mi|BL5(9~}=!Aq|&3AcZ@(YGWiyssJ;aUhyW zJoR0b&AiGT;@iteUSo9kW!VJL0G4(BAamYIF3ZXLo@Ldht&}+d=V2p?9v+;G7uJ3j z#T4sSpd@YVIr0l1Ld{FTO+>og*MR+s-}KrEXz$urh-k#??R!}eiveot0yG=i z8w?B@skO4}uZ+4Kpg*xUds^^S{nMBHPI6a&xL6#0@ua7{b|;OzLrOPo5UPP?bM1 znOqoZCnjIdJl=}V$d(CX;Oe>9f7udU8ED}M4PVy-_46B3 z^A)^|H<%_&*2zx1>7=%ninaVI8;RotTME+o{iHnDHSJv5fR4`Uj)G1y=@hcM%4L&wLVBVebC)|TodB8rgr{*v>kiS*fnr;|B0avXhOpJtnL$A{ z!6B3Dy!#lEe{=QJVgh^+WN_8WE~EZP&uXsyO8>w9;9hs?JAL|ZFXA;~O8QQBsb1~N zSP$8pk&zj_Lq?H=n%X~b_;*??Y^uRxmKK+xfZaL}L2yDOa+`9xq`6xY{zOiXt_e#0 ztQ2Iq`*W-eC4(y6mHfpUF1u6N$y)YuxZDF!xfwkKx~g)mkLVX`y<0gnqa?{AnMF&A z*wh&E;P#&V)baS9Fq*EK$JJrSrpp!H{bG@TI1oPuNF+hotOBLCw|iX{d~~^mQ)%8h zfZ)-|j{Wqxuit=4HHFv%KHzurqILocdO7H9uH)&3?9 zsAANK);{azrdb$=wc%eV6tpfKVx5mJK4hE6eb<@>!PLGbQ#{upQaj)$rP3!)I{vII zy@_U%ifSHQ4vv3HS1eb?+ZliZAyJbw0EHxOnyujuXWw7_j*tgOpp!WW*~bXuMHcr@ zI?Up0Rz@BHm)vXY92+9&)jVA!d;6FOW~euLI8_eI=S=CEpG9lnU_gF`mxm($_!}pe zP-7DenQUt3`JmRTsnLFO4u^w>^0r-fb+obIducM?tutCM6?l0q?xzsz$JW&vKpw)I ztT!P&dQq^NOcIGs7+aANmZg_zA79p>@NM0uQ2zfCsXc!TqD@ZaG`K`_)R=x^-Gpm%LxR_HS>Abgsd@ zl==ojm(N9*!^9xTUMQVlq<^uB;ROr`6{SJu5x2}c1GiJGy}I2DVZ)F}|2S(CRe(mV z3?lKtpS&^s&Zs(Df^0JQD5U%@^v~Xt%zK$4>b)_Y@OteP1Olk-+WZdzpgLt41%$@w zGzVht&4+jFT>AJgWTm|Sfz|&7ML@d08K;w&ZuPMZuh1?32%c!wv4p*NZ`{vgX+C6lNMD~3nE=$x&zxgLv;pIIDAL0kUtxL!JqfpgSrmJ%tQ5oD|Itx@ zlH=;B)V>}`My%CaKEj!Ju)>r(+arJ2`QkrWYf!6*B1e11bT%rQ6k$WC*PYSyA0i=pf!}`?DOxl* z>SccGde%OY9P8rWG?_Cl2%sky1sw1}3VmK_lXiJX1hUnNO|Z_Y#i^9Jd+hKW#Ivc`z5vyl2PZ8J7A!ELV3^0ZL7{ZFF>o#molP|tt-Z2Dm4QyRRK zOwS9TG^Ck>mMg*@Ku)4E{MI4ukfIGt7mkR&D5WYizlRI{b%NcJ4QJBEc<0Xp7d(-u%dme42({8Y*GN3KPPSC9qp`^ z+?i5a0D$@{!=it@@25>Tk!`gJ8}k#eCC1P8P+zuf3Z3#6c(&!Z`yc)QIU{1=_KZW>bCW>54IF9I>8azi3cAhvL{tc zNqyjP)6w*=XK8)u965-7rM2y?hb#s+v@E6R-tI+XylhO$501m zmmG?P)@-b&3l)Zs=sG0Fv5WvnCF&sfv*rfV)w@in8KN|l>vFgkX2vLv?6e&f3g5tF zcDu^ACLY@_0#-5+sjhz=q)d$Tw)u0Sg>fFoG7mN60Pg=6K4Va zq_h^Y0!V)`hw=3MuRM$(S~z2o@7iX-Z^u^aOw2J)k{AL~mGN)Ns0W~dXUx4*Wg|-6 z;1olFj|^f5nw58&;|C$bAJ|HY5@7@Y8MUG6q-eRM#V?CT6^_kFLX%@a5r+}Akq)NtcvjMGK>tcCne1 zBIY{P^gB;44$Ld89m2|zf_H1jV2R3eayXCO*XANMLCxQb{@tFJ*jnuMA;_v$Ef!3i zpZNtJV_v>bKdUbKDEPlb{n2sN<#fxHUyctZY zgDrnU#J0EoLPFan;ZB7ZeZMLa6^;EK>(lHP(*xQ9M+F3sMMQrlsJtP4=dsWYybtF1 zOr*ms665h!@?E3j><<)SO{@sfS}BgY|Bl)_Ah?&E{DzEvx$(3wYY~r8;*3D?NzSsPwMpQ(g!}khjAiLSkS=JF$ zmaXk`5C{itv{Y4)6j;n}t;RC=P;Ylf3I0eXLI z%7c;y6JZujO(Hikd!G`psFInj7MwpYeA*HKm9Qf;&uZUhaE6oEwVS4rIDy#(AwF}fYV3Lj<;RLQVL%;wMbVTw*y(9R zmbo#ip8e^mPACGru@QXB-I2J>_sD+(2*@e!fVQeVO*SuS8}~=w+BUD<@EBthqRjCh z&Aa*Q$HthS?5RW$q1DM?`1kKQ0^z1yr;<&D-V@Mj5%dl$mZB0F8QLCadXB6VsW7X< zfRsL?c#YA`y+%=b15a-bL(4)PF72!FA6qDMMp7I8lFh=f%J( z!s6{Sseu6u_>t%1Vy}`p2;`J~X49#> zzg51F+=!a7TI#39X@FjW!2!FYe<9MIJwh0(3IHg8VN}|kCM!n#F11*JP?E&rL|Lv2 zd?!Gedl-*|xcOrU0o0P=(f$|8SCZ?$%;X`XkN^~u4+@e0*BA6=-t^6zjUM*LoveUz2{+xYYy z`RsQF5_xw3B^-1Y%^1v3hj9d&US!&c%U_#;a2)S}I-pdq2}XYzaDme-)?IN4S*QAI zY+d`@XeY%cDikkiw(fQu^vT|wv8J`GS&+^j%71*-rdexe`+QXw4qqj8Lle*1PKAeXnPu2uvHv^z9N!+$(AWJ6QIDD zR)mA3Z24$v5vwW)wz(mhNHVk7xuCYOon<~*2`XGvjoFMdbhPmqzlz^4tae68lkA;0^a39k3Aj)tJZf z9yhkgn`c}SSedvPoHQ*1^>~5Yd$VV#3u$B_kW+WXGchH^ROoPYZz>`mcvfVIS28#c z()nIk>(e)Oofy)F2D8;TBkJJbS?MJ)Jf-;s3meS?`X_%{0H3!;U;jX8GkIE!^bK)Yq2O-h%Jz7+LI- z)H9*BImuCjw)en)hK|PAi51WRn9wF!%ly)zpGwFJBr4txZj}h`aFGWR|6OB%fcV!Q zlB%~8#~y#Kf7@6@XC!46Bd-h$X^TeHxt(eRm|VtEP8YTyOyn`&1(NA!fkPRDU;M

zheyJf z0Qw08_~=hx^z#rICx8qe1m@lB z3h{?*kKW+shqjx*MHKNMZQSgts+qtd{ecS8(U#1kP%TdQWw<;+n)Lht1Bo#&Qd*^_ z!TexFb4ead&4kB&US4`SS98^^o{2OTEqQ;$;{qO4tjR|!VQJ}M=tQ&IwO1}^qhY@ zF>&4WB?j{D09|}nGn__R)0K?W@H9RW#gPIp8`uZWFSE}$t{ zi8h8b6!r4X>Wr62P8Y~aHLL9Y)BD53^I9(oX2zUj)8M)PG$(xE$Xeyjb z2FS?HxUvPM17g56MWm!G9mRRRxSD^=fN*-864KT%dSfBD@v_1?+%n`Hh0J+t zD`WQ!^$c;?u4L2*Vap>>(Bc1T;gZu<7o!8BDR7CMZ+%otourAULAs79a5WA@sb|=b zsWGvT*`a2N?Ng z&O_AXB~u(_6J{U23OJKnc~45fgW+AhWdejz1Gf)q<)`c0RcvKXwQNu^!(O5L1h!b0 zoVW38mHC8dX+p`n65qteI8Bszb9b^BrZktL*qzH`Eq(-_P~QIIz!pe^)+^1p_Z^>r z;5t3U`H+Z{O1~(Hab1La&24|Cui6q=Znj^9#db0_?J;PEj0h2uCWi>o!_+FJwmZ_uX__=R!``*Xv8=lM_mm|*b$lheY?(bEd$LFs z_-2fC;R7Sp(t~L7{lr%^f}tL7yRhENR|KLibE3)>sq9Z-A7`b!fX#n<)f{^l`5}U> zZNHgZ*yY-MZ_;jWH9T!GeIOV;kgwA9^CMcZVdCwcT`)km;{GjCa}*@0F3gsi!go*V~H*UjgSSiWgx zmVyXoIkhEg7yYv+UGaYq!dmBhb$grOV1oHl+XfgsRx^7oxQaP(FNN|ITLt9%&qkY7 z8(iYj)AGVB>+Kbzm`}lVd)kVhe}FE4q!5pGH!w+5UimP$-*AE_E$8r7)q)M?jLIs1 zo{IhUN)|ibf_u?r$Y`Rjg8OChhA-BMK>DnVBd2j z@_@ZPg+KT>lvco1Vd;;22lO~x32loR89&UGz8c^;>L{n75sE<;n+uy_aJEnr0v4yypN-w1=`mAI`O$E93EC zvLEddxfDGt2t|Lsh9C#W0*p5s&OM~Gskh0&Ab0+ml1lf6w{leUPVx%C0{o#Cn07PZ zABUTx8&_n@WoUxwf^`CB2LioOI$?GHAuc!pUr;_EGSlofNwX)Jlf`I&6A8;@wES6^ zP2h+~P4F@X$Dob_usX+}1}6y4O|EU;fK=OkWU-R>r`CVx?smUK!S(rR;(Cg+;7;mh z!ezZ#cT-iVj1k$^*Rt(NTb%Wk7|4{a_@9%ESSJf+XIW1SSgNDcs%D67M4i3Eg}8d1 zs@2r3!J5&ha_jw)83CP`ncn>-dRaq~No*|)pL2V?+sl;(mYDR#A;zzdhiMN&W-s3W zl&HJp4fKBy1{{H=8MncZs&88{jzS9s+uwtTI}5`4$ehQdvb55OKK{)d#^NP=zzgJUu8h5)ih+Ma?ae|) zv-r#fLNA8I_YLz#@u#z9=5X``)1~6L-Bf^H3S#XS3C_vNwz(Gd9fYYzoiXk0JRtf_ z&kxm8uKl6t&*K&|&_$zJo}Yk#B>#Qvb3T74J!-xUR(?>{SK_p6pUynU$O!D3P9zmTY}dSu1}m!K_4QOCqo3%~^yPuB?r_b}uTYjW z(y^vtLd7|S1&T&WCe_Hns6U!g{Inze^{;3q>y?VG4^)8`@0V3Xic_twRXBc_#_n4asf}l`>1@sFR+}AVju41%&X^12-8?1DzG(t3q+t<&M}+<@TdF zD2WMqJ{|VyjCUklOkt{UjIEoWI_-bU$n8^1dcVoCh%XrXI{;kM`@9~Y(@^sVt ziGIEJO3uIWUPXR~Ags8i8@?fYUr}FcD>D{VcFBK?wLYF_di&SN%*1qh!GAb-&P_c= zxE!HSq8o|d_v@Ck0IX{F*xe2;RW;n?7ZPchWu4W@t$?$v;1Aa>z&9&ZPUe4T5~G-< z)@z~~F>D%a@F=g<{NaeU%Tt52a0}hpt<1EDQPC$7e;k3470oS|*?oYhKO+`+5FCPqO zb;AW19}1t^n_DP?mg~MB`6qv4Y_(vpj!NvT+8It)Ck0*%ODM3mp< zBz<61-hbZ%Qin17EBtUDWOVYD>96^@=v*dosf|)k53(HPQ%jB=v>$)|yk8GL?~L5w z?vbz!R;|*gfm(=VaG$Jxqjeq7cIZRZNg~t6`GsYNZgU&-zJKR4n^BAu6w_c+$fq0g z7oXI)Ve&wAnCOMrNmLO_lI6IZ40G%F8l_j4BIMHF39A|86N7GGYqG*bbws_@>0uAYFrW3yb;y%5lcF$rb zqq{=J6`@TEnUW}~Gz;ILXq3?TJVMndJw;^*BxBHDe7dp)EaZPM2IU6XJA)fb$CDiM zzl@i)oDQCdC?F=7)#~mi8qem7%Npuiy1UA{F&4ol&!lnAA0v5V?#){j>O;d;on+#a z03c(ZLds1Bu8g$VhZTyAgzly8xO@`o}6+XUF!$bo+dG%0kj`tK}3Y+?|lSfK9E)r5h5^4P&NMD3EiJ~$-)l&;&I{#ZE5 zOdo}C7qF}ZJJ#Of6(d=2+XC?%-mzt|414Sbz9rv3!ycu>i{;T{`@dDu^Q#Dh07|1+ z%JF#7kN{YwSDHQyo=uw%0d+i}wt>4Gw?rY?Z>C5{3ax+lv2n>XC0-EYIy#rRR_E*C0jITaM>6XvH$mhr+X$)K3ux*{U{gNM&PuaLezhj- zN&o{Ez%iQfb8u z&3cYSj(C5HGspoDIrJ|1bFS`bUgMJai`s51#veEVz&fV>S7-MPagcvyHJR-XNNM`! zA~Zyn-E`#h6@)T*HHQ?M(~mhcxr`4#5u^1mu?EA1HH!ueEprkezZMv$rJjo0Ac?CEX2B z3(#fZ`?N;ykBdMN}^FZV}b>ptXB0#dZc*FQRDj2cG&ZLJ4HeoB{;cH-DvoUvs{g}6Qcmeb~<)`kDQr?!u{4y>IV+Y@qo z6^o+nkUT_>+QR z^5g&Z!d#_9ROOUvKF_7Kd%65E&>$ddEG8>uP(@3`;Ft+cZD>(@iS(crTiCSy{Dps& zh)Qu5AKh>OnT!sPx#N%PcwxIA+ASoqs$L?99IdxWg|l?kvJ6j349cP@0NGa*hBS?I zv<}D3V3+5xket}c!|N0D=jm!};xdAjQrken%0I`I3&tJoP85|&O>wru#>-ukMGI}U zw|U&$?Zj&I$6t=zmz(xTL`C$tx@mtW+~mTrdloJMtME9TwGyMw1iLrg`DZ|AfLUuR zW$4xxGuunCAqgtij){u*Sx~S6(xIm`#l3K*miqrtJ!UF1ljZZPsMm*(n=H4p&u?Yv z4m$9$g1=*W3U2_XNWq#+M{?&lY!aKPowa`zgZ9SK*gt8lCfSvFE(sGOy`O*Ir8vG- zY3a|XF*gB`QU+MG$fK?GF@K%(q^{NXr{1A*{`%@YS4>6eA>vHkW9CK%fbw1V&k_d_ zp6{RRpo+93TVh)ER)oCBn$`XdVL3Zsg06KZM6{E8i&J)sWRb4&r91V#c5j)nP|w0; zZvenQG6yxSswDJ*gmn;**&TnCi!hPdCz?o~7PKk60cf#ICBXQ;nk^k3**K@tG$0&k zh14+|hgb$&>!6vx70K~wF;9&2f*;y_m~;u%%3+Ra;M;TeLVI=c7r-06m3nKP#e%R) zkLBjklJ%XUwjCQ)TK}W6{2*J;|2M6N$RI)dk^_Ifuo0tw^SUV8wjY10w(3540oFgC z(#F>?;>;9f>`~eH%g7CCtah)P3Ojq_f_k2-i~Sv0p{D0@?e9e6RMBi2Ob%o-hoM)) z6btu1z69tdM%JQZy@?hO3&bS{jI$53ZZfSKWm)^CLWoU#EN`tM-WxiTVjlldqWL>p zLI#Nt-YSUK3#h4_sS$r*htO+LYjC9p)U<2q5=1|Y?0}%v)8YwFxuu&8L z1NvL({Mw+I5vOk0Ov?~R&C_|1sJt% zTxg#?%q^l(`)w|!9;z}5t0B&rN;W*3 zS5Fa3Ih!`fXy^qWtlY{L_XH$zEi|F=Dzk`@_s}%a*GfuOwm6>i1`#>doU4eL(+lCF zBsp~^wx{pDe@lPeO%&Cr_OW`Lb!K2Q-yT)UN5UGj%Ls0_>oL|&oPaFe_DQLj>Eu!dN!&i@)O(By` zO)Md00Z=cGlRgf>m%Q*&zpWbh+P=oI-_FNp?dN%xhJtumwo(`*+g$twp$TM7%3LD* z2y&>-oe@O3F0f)#oz?MM*U;E5@d`!70JVn_I-|(Q>$sXg}jx#*eTaYm@rzv!TL~u;F^#T*tF@xS>z> zOK*$qDI}!zp{DdNn%D0vU?S1k8QjqV|GPK^AYXsg85QC}34vtf_?FXlA_62ObL!J! zmg>ow315o^+53F!6b|Y5?zy%%htE{2w34yr^G0`Rc;$I)v&^Lfv6~nyadCIwv4-F8Z$GT&Vtz>`j zR3N+$+B%`avdon+9;7c)m~=Nd&bM&bJbcXM@{BaHcTKW4hh z9!(xsw`MxnL>~0{A0YI3`7}YVj3s||H0#|y!r=%=iJQ65c)~ll&U`KCt$uXK>VF>k z2ux8}JZYirY@-kOA%Xctt!OM&9h6_qi%=~`{aAfBaQx!Gs=}6h9l|VtEz1WJ8m*3DJ4e5pyzb+%RP*_EH7g00DpK|6r-q zJ%rbT2)d*5G!J^;Q5C)!>PTtU;KWPoYDR_Fe*-b;tyUYbk~mgB3tYUj!eryWB6ECT8L@&T0!TM1{3Z0@ zQ3}alr-CbE!q|Zh1Zk+pdaMiTg$FAq91S(wctxA*=?`aHgYb+p;xG?%fCa17T#e@w zKGO`9`;5&+BBD)5`Y_9LDKe&CkXG2*Cz1$*mm;ZRhS^E69rkvmmSlhYc{xJTsqTAf z`yQLv4Z5pfaZ30_Q#CSaQ;zl#%$vcaG#1J(I|a0RhAoLhw;dsYg3yZGsh!W`D|SW| zyAAbGMiIv^fbVBZ-0U=o8VX9wcz?SiX1-IbmiN<@Jaw))z|<2WynTP@hCyYtL(%)$ z==C1Wl+wb?9zC*#^J2lI?9pX+S}@ zrx{s8s<|9usSl?BSnV6H?1k8Jd6g9aa@Ok3$rkk>I%IHWOqN_(L)-mret7%tsdELtwS(jHq3qUtFO1XmTcjpY^iAAr~$B%wKVR*|{?HEn+fBi|dm%tScpv(M_X z(#Y`@4W&>vCB28*xhzE*)|8W06V&-h7lR;fp}ZLKZo&wWqkwe+FL_LxOd1$^x>~s5 zbix}xnt zPFw0WUQthsA?tsdYWZMNZuW-Q=WXaK#C!gtujY41oEdK;cZ?5>*eE`eCGH(Tm<4I4 zA6J>}khoT|s1>)PYZNjOI;!Xdq;Pf}_qfUZiKi16Rfd}iKKrdtarY>gQXX=Q8Y);68A;OpIPi|Wh#vfZr`U= zXj%sS&~kt5o@2`yvkvmZ=>}1c^c-_UKe#S*I7t!cEAiH|)ez+AkoVqlY)5zD@p{G> zs`t*1>m>1M)%-RylYCQcpugG-(nytQE!e&CLkfVgAb(q_ktcidOx5!3M3nk)Wh#A= z-f-5u$?q<71$TgnBa_#W<3kLI!z{rR#&`ghk!XLdC!BuX=`z7GIg(Fj&x{b<)d9x zglQ+{q~p&NzOlues73Z0mfsV6y#>i0_Pzt1Npa{btO&DA2#yL(Bb7_`jC~O^5f}-2 znM;2ZKuXWV)&*!|fRn2U%j03pjWSt&>GkervgHQIU36ga@0=1@S0I0Emue}ZP$Gu* zw-e}I13B1uwh$9Z-V^x7IwA$v)sdFX8X|vgsS>(zm@yk@^c}%SVrVsYrwT7gSL}6} z%6*WQFPh)KFd4#)FfD>7Le!`EyN!IvJwzXg$4F(euP0aYDO|4(1_O?4&O9wC<6EMS z)AM^QmB${}ta1HgZK7($R5KqCH<#w&A5RlFCdL=hfM1^U^yY1!a={tS?sV|7`4E3j z2zM^e^3S@$hyZA0$CN7D#2x+G4n2^4PR`_o zsN9KX+5CpsXb?O#W?U8!E}#%EVZo31H*QY7rCnJx4Ktb!3g4mzc?g+uq8WdO_=CuR z$E5NdM7qLDaCJ^JV9=00L`5 z{6gqvCDW)!jC@-k;1GdB!}TOnS6Nw~KH+V|}ff-&ZaX?X(fIESgUnit{?tD;F-^?P^Y`)qA)PEZX6OQ zn^~(x^t2V+O#&G;O>}?r6Z`Wh0{myCH=ETw{K=`9`FUXK=+DbV?x0q=A4U2n<@(Z; zl!^rkAI+{T9^t&c6|4gTk+S&dQ|TcX+IQB53_P^Ugmz8L;dK_gKi{K(KL|Kx5vcU4 zp>QS=hkO+z!9Ve5u}we``e!ZcR4}v(>EZp9D-k}qp$)^G$5MYrjz*NT`Nq$N>dl45 z|8>L;?|t|?B)ue5zrpXGJ6{7@eRx+6oV)aW(HmZfD60cy4EXkIMSX)t7M;y}-z7L}NTbyIE~oERb%jO*lmX=}$sO~8Hpeqnse zdhZONFO7Un>iB=`ksU-LZDc5&s;A*_aC3;FGuSdyr^AY)*%j z%kPL|d=j*a6uC)N!FZwvsalh9{TR(T15_(Z z(C?@~LqabOfu|hgA0Li>Kv3%>8&ILK+SR5--G)3A?CQ|1d7Nxt&*#?ymRVaoSwD}_ zoNpHf{Bv?WHF^f7Msi z7Mk@~e*TY$KX{bSOft6D{Uziu(LojwoEoA*LV&LrUbAJ(oS13@+z%AJ!lt=@vH!J| zQleXDK}5iWMW6sZxEdwsw+*AN zaLUDsL86eCA%W8bXC6QYl@+kzzqqvXwff=&m(pt`ro8|WY&|4WyQ`* zVP=1YRqF6)!>U9dr;<;DolcTtley>7SZ3CH#g{)FgGw1_tuW!gfgXrpveBN4Uxt+d zB^fk%%C62Gz}LyWQyNZurLL=Shj(<}X-?2q4Ovq-+oi!AU5RbdLmxIkl?CL&k<(yY zjeRla`@0A)xl2W9RXJmS@r)PjFmZjJVfufghyuT5jnGxvlMUmWqBl-5tB7?*;o2&L z{oO~%%*@%T5y5`@+^RvAYn=EVj=6AEq!Qo}p8)bBvMw1${Af@cr_S+qQ5Y*x4;MF{ zr9Zj4BJH}oBsImQf146BGA?wUP7>8@<3Rb=Tq^pTfr&#Kpcc8hsubX=EXIoMkFS5% zk20N-);E3#9gY$JO<*0MMLhF9*dNMPq_>#{O%8h11<{Yq;ivcn9MpGvFBr zKGUE$4`AblnFV(UrqiNq0j_quPm`gkMx--t_(f7Kk_ zpy?a&<#w;w{f65w>XFgd%L~fHdMa*jn7QX2x^rGaU-Sp5`celg{Et{e2p)fv7qOo3 zIdMr=(xcB^7` z^eJh_R$cn`?V6V)nL=%L-==?b+bq6GHmM6Qy^RIFqZ9qVQG*O^v-RMNBjp~@t9QZ#3pMiDViF51>EZ!9b6Dp&q{S?UE7nD9qC2GdF*+a`)19y@ZbG zRk+ z1IR%vbd}hJJSa_ZJYNy1sJHZqz<#@2HV&7yf%fE)RPxv2TD8RVzr0)tZSbPpZ%WG@ zOGyDyN+Tom*9S{!qDy}fwYqxA>pTKuls6q?fXCz9yPvjv3O46}nN>t|Nb@i!x^R&X zS|6yV#U#tpY6=xGiY#z_vR|(R_PI{$$`7t>Q-``8bX}sFD`$)1WtL+!sxYeKwJ3U zN?}qo$54p6{th{G#OHb;hZf(A_RsIGKMhU&6g7sv;Q z(lG;Aes$7}3rhB+>pSh@lc*=i)itVEvuM>~{W>DF9v~;_d zP1kuT8N|!UZC;m@@AsRzqy0eer~;vyc&m*NsmAkRS})h}%R$1blQ1y_B*+)jiv0J!7K{+$<-6<<)8=;~`m? zntVBG+T?#~gLDl%M|L9@P!9i}|A}u>5vg~TT`mR!HgTt4yctoXb|s2+Ky1UlpPifN0`4-o8%=P1b_yu!Ll4f0L4Iu% z3Yvi4I*OcKh}SLGl5F;KI$PaiS(2?-u1v#iLUDfrpeIWnP~6S2IQfj`iIbyFg@C(( zTFTz$;wb!3AO9g?6!Nr{l%P+P5>MGJWa9ob=#VA*c10TT82$2twiyHqIQYhhKYX>! z4Z#%fAgesO8pc3ZPsRLB?1BP|gPLSZfVZK``34aE;F9bJg>xtvvpM`lbFnW%psQhi zmMVYc()4SAI&ZBEunbc8m?-c1qBR&a_7Cq$yz;z8;ua+t2CTJT!TCeSPIHd37zy*# zG~H4=+PB#~I;k|s5Vn7~RsrTl{NNjDr4F#WN5*I?Bn9Nxm7wW@Tr8s|38D4)+baW3 z3IQGmkm(h!G96K;OTmS{t+vEH30@pNz{`J`MA1_G@Ox)a%%(ErDMW$$J?56yo}IML zdM(uOhvF|A%<8b^?k`ZKkumXhDv=|Q#e5bYF~MR9eE>hxEASd*PEHp(zy&$F!@ppg zn=T*vC2={O{_M7p#3Ff|y2z;uLr%W2pq^i5yxrWvQBut?y4~ef*KHp&2Ii{%-+Ol;yo$M^^%5#H5(9qknssJ|&6hv<7sR!Md zCFKhRLITmee?dg5>}j1LQ_Y=j{f<-x_*7KS(}#_iQQ%(2Jz@+OWZiFu-YPiEPI(Dq51ZxEcrlo_=(_;FF;x5G6_6R8rtNsAyhQ8@g= z^E`f@&Ejrap}!0k!I8--XJ}yugx(`VV}v%*wOr@|8>;f2aGc| z_szX&!NezZ`LIrMLL!r@9{_)Jw*)K=!OWj=%x*0kMf`J4Xqsq`Yd>37#I$_+c(jxk_{X zDI`9}avJ(Fk*bSs_tdBru!w2P>4|)|S*A1ioEv_Cd&O!6V0!N?V-0^|KU~m%0PH_| zqH;c-YO3H>ICO8a-(hY4WpQKZcQ-)N#Eh`Shskbda+4e%PyN`fb3f{XB{-d34&KlK zK))NN0LNFk`xfsLy!@$5&L_=w9y~Suk#=b3Ed)LmOt-DQ6FiX(%#r}`k6>qo=wS6b zVyTYyulH+XabwNoF5`cA-~j^ez1C36lipx0=;_kwe8|0 z@+AIaR9b(JS%W34qNRjH6y@6ydw?OBHz1@lYky2V;lu~Zo`j0@@qA=oFD^BQuRvj!JuVj?N?2N zmB{#wCA{`S%propbVVx`XB0v*s|eM??dJCKErTVUAqRuN^hi(XOmZLR%ngE|y&+pr z>?7lZzWST&@)68{D zdHE@h4(xerMhM{sl=o?!sI#@J6`rCJW$Nso^k4xxHB;gFa=NlZ{&*)_GT8JaTd%^S z5Am0!A%LFxM{%ByNjBHOE%(T&*1)f74WV6m4GXjC@e+RlG3HBPHKJ}%0$$S6HFB_J z1v?c3^A=GAkfpoB7aMi13IP&fmP;M0mlP-=H)CcgPP zeym2h075+nPfxUK29$$nQXd_TPa=ei8gxm_vGzY{ANGOMN&E!d?;+OeHB(x|(2-EA zg>S(l1oVG{lavHXR5HoCvWPMfiC?TACV-Hn@MZvfu*hcW(#ULd@m*L@0;YREyrCwx z$xQfCqPf~?N6NBRWcF}jv)S*4bg&mSo<)FuUPZ4MefIFNz(qP?9ZjoIQ`wpYZjljH z(v7o2>w_A(+e-bA?I~eWK9go!#&{ZCv5fx4vHXAgFMhwG&)xOSl*{EU+S`M_sRbg2 zDItDS}NI6R>bc~Oli0vVY~(MS4EW(Plk80iR1_2mb=!uD4d9xZo5}bLvJ$u z{lO;Ys+CRoa-Y#-%bNW~?OWgOy&%PkwkyWA288G0KWBv0^%x}JR2H72FFLqqfd}_b z(`SF&-AOolB&U-cvDP4Qm!`>-hzzFsy>=|+??V_lGr#{h!s`!zuQ5yHYJtl6!d2I5 z|7YT3va-!qif3zPu4}2V7+xXsF?S*NHlPT6DX!^1P35(?_F+i3+33k#h~)T=9XC{N z{1<6{q@nt0W5UNSDozPmQeEP1+8Rbq$mM^d{1?eBc_{fF@AU)NY)r(siN)~v9PI98 zQ-FoYfsRm>1e!z%MslnQzrbp`Io%lIX3x<(*w zPLuOZ4K34cI*xn3!tHQTx4-QJeMW!j0rlvUfGM^NvuAh|>zwDnEDkTy9zPdP-hy)u z!Ii>9GuMSkK-mWK^AVtD+`Chl8j>ntyq_?d{#V(%-fhE^rA@R zX=Q&0hV}f~Ld4Pz$3uJK@*;@cV5s;z%o!KG1MwTY44sO51V(fWPu#X9+-6^Xr#3c@ zFQ1y%VT`g|SY%vshlB8cdDwqjD-3VA$+CCzV~;W(u^;Gbem1XUJA<_q6$l!npbVjRiU&Ppk6(r&xFS^n7s1I=aG>&91bq#lSe zNDrOvwPEIfzTZ<%F^hlkW%_`M3c_-a@iAij_~_zO215cp%uzGy{HZ+{i#RNZ$4X0V zWAOTS5Re++;u*~s{R2Rc{h8Z(%L3fzOsSZz6H&;UWjI z8_DyVH;U&p_A%u-BL}jI5x{0x;$)B-y{40ffCI3Eb4vr#sFQ!0)H9{icB<^cjWA@Z z@a=k#0F<)t7oPN#Aur6mJ5!Ic6g7*m=nla;^{Ed}d(*%c;p$#?G^)JKqQ1#B$E3CD z6Zq1injv36Xo<*#a*_K4iG-LhuzuG2LzzBmCd-B6*0($IW+4yuCVypTYzT+*l4udUct+eaRUYAmc^9=L@^OtgZNlDlN?#Yq}IB z?(=fJDjr!%$#(DN&V{BHO@cfe;x|-WDciIx-czv7WZQptS)R$2AUwwalc(m`)l@;r z*s<8F*-w(!1k~K>2#LC&X^61FMPAPNUm+8X#6}Nr8DyLAW2m5q7Y8^NfxvuuDv?(5 z^nG}#E^2il8u;!VICz3-4sXCrv^_4BeQ{%Udv~?~m}7TSj1>W``P#;7+F^X7)?m~d z1<^R{&UJrMu5>!E>LUMEN@5|wRE-w)P?6Y?y|wg1hh4+q@5QN8Ch@U7k&RN|8x@U3 zL~K4X&iQLG5mD^;Yj-+38R0-0DEMv5ImUB9p6H)YO}p_m--0z|Pq950ZXXhGs-Es^gDiijNpW9{^0J<5)!B=M+zY!$PN!DF~Y)j9V$3ZSczH+)*dzG{d|8A&pAG~n|s@!UVtQ?<_ zUY6>Dao7Pq3|-<#i{ z??QjwEk1*SIMYYM-In7HOj8f~*L_rG5zSfRwGx!OJ!E9>;iI_TD~#z?H{`vB%Z#tn zS>NrI$_eI*rh^k&P(xKth!BdIg2RpcJo}7#jLA3jxBA$Nsq6BPJ&Hy(+$iH|? ztR|61!wrqx=BP|1#ag|wjP`9^wYUI^#HzTi(wBdKf9c7h%J&(37Lm4fNg{J9cT)o- zvuI6yPI3iVV+T8a*XVaiUFk&=cf#d{ zERNKFPdv!3sWeJ_D!yv$Ifsy(fdOb9FcMAn;Eu6n5%5c&hW$SlhzA;#X~xuk=4_Fo(d2SODh@+8|XSY$}{xoeZxR)y|{qn|{`k(IbJ3z(~D z>)m-L{Z`Qb_Rl>ua4cB(uj=uC73yh}-x=bPJ`wX{9HQaThM{su4@6hAI?-MU7eh{e zLpOg(2XJsZ&rym&f59tiBgq$l?6LzW0X+xf#1Gf7nZQ^9;ctMqU2NZr{E9K4*TeTy z=N-A%XCkP;zLV5|TamdT{&E}!wLc4CTMda}Z6K~AXKz_@?|xEameO%X#|JxSXu}2S z>9K++Y~HYZzb`-xM;+^W95t3Rjy-mN%ygx~LdIp!7jnV7!g9P7*W7%`BUAhu9H(=} zT>%fHLmTJ688?fKA8oOhEH5HqBjRm&ovegNA1J)!oSZxEkS<*@;g)89D`99f2}J3s zah=qk#msk`TWOU+gbcx#uUYe{H>Odni0qFAX4Xuk^!{f#-Rn0M$8p*UD~s@dWM|R; z0xoE`^zVsu*Bv(-xLIts44iS~;4eHQ}kHAO8vW|3?9ELJHA zM{en8$9E%h(d$x_vy)7KrZi2#e&I`ys}dlA#lS}tlGIn2CJ-ich2V4A+>HP$*3G#f zKGtvy!Jt97+qF*2s}2m2BF|AAF7p(X<=~O5v*%#Ur~h62sTK1Pa!DoO)3OJc_^E15(`$EL99(xq*SG*l0rmh5-Ge-Rfx&- zc|wDZ--r@iXfG~*uKtKoWcTs*u1B71v(|Y5I@a+c1YLUNEFp`Jz=0rtAAPn5AaTYv z(;MXOE9!j0Zg{8}v3&d5_j*5tt2Hf>kA`*DvS~=Fjl(j^uRqOBxojhS`!LfRmegIn@u~#uS~t^ z>tl9n0Z&}!yhoN7j6S65%B*7r<>Mj_MZ37hN-%ufKs-rfg92i|IEzLk7WYb*?}FsyV$Nl)9hy*0W43ds z_U)QOAnIT*TQyX;S%7;*tE-N*vOzgEJGZ6qyfOXq^t(^b?H;5`p5z%_m9b2uFqtzrNeM&pl?+ng zaBkgy$rc3kQ=l+WGC_{7tL>_G(><5PQcf@-KM5;Lg`(jH$eU8&yu0-EWgskQotN-_ z+=1l1phV@LDi?5(6QU&x_bXX(T`{P6!@%x6)8 zsg7pMyy}zpojHu}Ecut^H*^xbC!ELbsmf>vsvA>E=&vf^c?7PR1ahK{1)LwPp8qDT5>Hjpg*gS^%V zLGrt<$?s`yto8~d@ckmkN}>wI!Wm`2QV8glAL7^Uc0~ifGzHgpsonRzG?EzJtQ`9Mg`>$MT;whV|<-|Z8j4O zNj*l|bvU|ts(iF*S2I9fdID@}$dNCN`#9FQJpiv;{|6HcCK*6a+bktw9 zl;D!0>*+mU%aj2^KkL{eu5&I~Z%ELAjOh(;R{66_dUP0ZLB(|nn=ku+1c(oZz}R8z z4_pB!;<@MQmqEp{Y{|7;9nmCNY=&LChB%mXGObFe%!E{>!OZ1+8iP2nFr`Aw9kc;2 z3K93}TXFeqqDy*HVWd8_3k>|r-&6kum=yKJz=XQ(b?h=~=mfzPYIW`+k3T{bdgh%q z<~qXoe%?+@rXmEhfn$7sJOvW$($QhoXLo7DQ;Ya=j)r_F+uNrln%RyB0Q#_GYI+)7 zT^b*)fFAxNYd#yNcPUcL0U(YK{F%#&w>yXX1CNFIE~mckWml0s_}AhcXz6sH7riz* z^hN)F$K%az9B2j{Zm-g8&KO7}@WE4hAs$?vBYU$FQ0S#djYaQ&o5Pb`l=2y-D`LzW z_H+YmYFZ|kzODb1g>Iifdez4<6+H`v2Wd-_gc_q^+Y6P&{3ZJu8`Wq=}KYb(-#qN+zm7Lq!2zX%=}i)Muuhk#!CyE!Ixl#efPXlN`az zk?iQwrK_Z{LjwU((c3@6FE*66IIW7FD_dxrd!`~JXNPuKHH!{v!{<^-dlU7&iEKwy7>@+w?SpAR8?SMJkwhzv`!{s1)zXH?E*C*TNwC?4r@&1 zXItcNB5+iC8rMXEm#>HkPo-GuEs$st>Gw@xwoSmtmmrB>HB;!!S%&7cFgax@Rkvt= z4U*T$A`;Z1lp7%GpS?Rg4{69S)qYM6u;stw*Zm+4?uP1(Ch|>e$^X^;dNYdSdhdR- zyWV|1aGF%8AX_ug=nD$gOH1V8Op7HYuthw_IH`~e8%M9eMcJCop(PE+fVthodZ@1_ z*L)Mwa?`NS{OTlRNX^X+iP0bz2tZYTLDyT@7j(>8CxrFEo`nWL8_7~-b%{07KcG8@ zLz{sPJ++%6$8I1_wYYY3gTCvr%CWoa2d8< zpy9^d5|(*LStAQk>%GCZZ!Vsi_5XL%gc+f!TT4!pWFu`;`w(+ zD+MP|Nw)oPh(d=N#FfumSqXKU(shmkML~C$D~Y6~J3QCPV=&vge)7{O_riirX|q8V za}-Hlee>Z&%P?OS(lI-T#Ku2^vH+a5bOFI2yvf*6YZH;Q<@V!p%J_hP@U#h7w{^dO z=DAS4dO0k-Ht_ox>4k2AyJ z)`jV9>RLFeRWoE3H#re%rnm47u}>ZcPCMkT3P9T$?a&1ez7#NDd;*eMz-LXv{*+Y^na4RY$e4Bv~IE6oU?jT6RviPkQ}HcVULMVJ)zJp>ZWEzNOJ ziBH}@nQ%i20d$6G|6Xe@kH^Uk2BdwpH@eV#gpnE5DMiur>XG@I7+UIA}! zi$iY|)gtQ(8NG&o=?+FM!$~pD=B>w8S89XAN=VQM_4ReV8NZJjfUliV1#U}b>A3{Y zJ+Q7eIhm8^`M>BR!PQb_S%AQ|%-2f3-aGlAIS*OsP^Ke(V~(7!f9dG#wU_ zGKfz{f6UtcZ3K633JE}La{Kq&_&JGqjpjLy@&n3(vx7N~(A~t1JZyw z#_{GMnc%m2fqG%I+#0Xtpm8Q*W<_S&SOYi13IOQ1QjmYt(u@K`d_L3x4>cu-2C4=C za#}Cx3tX=`&*>3JV=9OWo=E=4&>+!gCdVmH=gwDuzvHliE)P*dZ~{K;b6CdQhcEt9 z0(O9c#y!x`#81jyfdO4k)gWp6xr`G9&m7+)X@0sZle=6IwQI~z$vEMxd%D!@d~S=M zegS1pf=NCgN*U5NQ2(ebQ-Y{74t~7@_NqkG6UF7*3@L}a4)|<0M90~6gIO%K%QDbZ zT5GX?1GK}OmW@m^x+!!62!IyLHs)pF`t?Rtn{imer$)2jUef65*IxQ8@Ya$h%4UiDY zR}xXNG)H{{x*#xw$lm59&cEq$3f3NrS}$^8(uFR0UcIG=Qx}vBMPJkfmj(|>5vJpR zl}&tytA0xy1{lhVC$98{3y`CM#0e{4y(sn$&D?Yv)+((!+k zG%Ik6I5NIv)%2WI6A>Z%C0KpF_MRWH5eZLVv${cZQ*`_4*FSf&+}Ra+ZKAmDVe8zM z`{i7!20qp-fw}ZGP$Tj?o)t&g3OaLtbf?CGEP#g%6S-$G&ScOr9SA`vLor~bO^Fi( z*;>N;MPKC=RzxPmCl2vOX)*3Zo8aUzC8AHFX;kUc`eTg(6&v?459q<{qYen9HSX@k zf0IEYsG9WtRj>PrC%-IP$u?^Ok!PS!G+k{MDDJv(YeTJU4}Xh#Am*pBG{dof@vk7v zg8ApN=L8rwa!b6f{Fc|~j194nzWc=?c|?$IwjwK1n)4<45+aSGzvqB{jr+R^Cvjp+ zbM+dMct@FG^R!xOaZ!%u%25Fr_z!~yd$5-g)?GtqY|gaqh^J!ocZR0*C|o0{>HDGa z83AB7@L#TFLa<#BXMxG+6eVmL~1sfr&2Pl1%X7X5O zz!vTx7bJ&3r&KOfcykT|Rbm-kmw9P&XmfCqdiYrD_yaOl!Nm23dUu3>jxJ;B`-?b( z$uSc)H`XW?T7vSZ%bYDakg|;zN-PEs=sqKnf6>B@7aFDbP7U+I<^>N2NB4$znTkGK zBAnxV2>xJ*U2i~V%@uqmL+Ul!c9R^fpUlT%hM-FZ;83~4xEUSLQ$0=7(#DDd4YRA` z#~KCpr>+OlEEp|J?zg9ZRifb7lGAYRd~xt{IHmeOB5R*U(P0XHxsJ}XA5J!8&^0Rl zZ(yhxN`=qNQu2T#C3n0W&CDiXDgNnX1I@7spOm&UYzXpN+$^3_)$n6ge~ zx%-=KLGd9^mixd7%Pc&rXTRP>l4HJ4GWEHP@Czm~CqY;KZS-A+UPS;{`b}|R!_bCt zrHX&{#J3?e<1RbSs^}&b%<#TBxZ2fLu>#2nLrc?ypaEHc=c7KME90aAM#e+1#$vQXxF)Tdvy!=j`3__wsp5iumg*DDWVOd=Zd~&e-oIn z07Q-*ZQO-^NGWD9^AggM2O|aiLcXw!i`*aw$02p zb51F*+$8jWR=ryL@8i&x{2ihBD0J70dQuLewbFX$7-INZ zB#R)qd}1#S@(GMvOyKVO2_P*6-EC4G9+auElX5UiTEEratA*a5X!cstWJjl?qrB`q z3)M4q(0`>hpUM&2_K{a^KP;xAH94DGl!VPSx4i{_#~xQNfVveRJQ!Bfi5$VxufO+L ztQqDwxIZ6y6k|_GGMLhPGz$&dkOLmUOLDGiH?sUrO5$;*qUgTXI6en3(*Luk87AJb za{O{2)+JAPvKx>Q5`m|Xa}dl>YSamTxOv_>#r3bwu{G@#!BV7$JkO$&HlF()J1@{2 zaz=T7^WH?+t-l!))^@CJ7Dqqq!RJlX89hMESz@#wLB6s>hpV#&YUOogZIVc#?lCK{ zK1L*tZR)9Z=LhtoK+$3c!Ya1D`!sEk*JQ)QVF;VBU^p;vf}e5%+7duaF(d`C`p=wI z(^SJ_yeNdrh%`^eM}TidxueJUtyBfHLf*H3)U%^AZM>qotlEn|%Bqw5=kBmPonfMN ze9o~YCF~!CBGDLGvcBFZ1Z2fqtY|L_WSA8I3+OpMXO6sH~V}j;8;A zxdH#*8+309o)iI9TXNFH?F)d_0)Ocxtu8&Kz>PjQ>%TOVPu|XceOTnjuCWHcZ@>`n zA_gw!*_s()yoqjK`gUY0=q33Q7uKlVU7Bkqh3MiOchF2ox zZmgmg6_0R$dg~8``>xPyRnx`BH+QdVuEFt#tf?G0<-0M?HC6f(jxZpeT~*YtkYg}x z&_=p{&*$rn(Kc%gPHt_e_fnB;k23Af#Dlznb;k#`r zZqYLZ?zn>_kJPz?z{|2KpY<=rSCitFhcbII*$cKOd9~8lqx)=mU7X;Mepqp|#8RmP z@C|;2rjm+&u+%}H&v|`@xV?bpTv!~x9SUZ=hTlEkq+gq`QC2v-HPO4bL0CI#bxyqE zNY>k~(!K2gpNiq#uvrr5moWc-9)~FZ4Gr%AIm4NG{kz%yO(LxtRXfU4J|H5^BeAsz z8}~+EwLI?7<uN3YB~QK|)04UgxcilqP~iAW`3gmCOw!^W zNXeC=rblE90y3z?ncmAkQF5BX8l{YKq3O66+?Rup?wq3Z2S!lBog#Zn^PEMS;_x>*`geI-A7+M{F6 z5E&@PPmi+we9tH z&A$V8pmx8EW?p6At`seS;!4I8$`!d?g-KHQ+uhMwb$LuF0ix2L(q@@LYP+Wv-`j|5 ze`|ZOdMIVedCKB{fPFU2Wgd?Fv-c<8;*)D%QlD0Nbmq+2m?Vw_qC>0Kg+-1Mj1%Th z2C6?JL4aL@IQ%H6SGem+ByL>TGbee?##i*Ny) z{!kq_`W!)F+S*SiIV_w2djsPqQ6iqMZ)9IumlXGqD1U5!4_!(d7x)Lleo0A)r-8Qz z-vG{0x6J>Llg4(8nl9scY#c)XDwjGf@=7DJlk^@qm|`QO@bVZ0ZjS58j9a^3E$e4A zP6Y=%Ae!`rAUbncpmQS~=hc zJZ=E|uKaL+_qFVzTC}(sJHS-nqx!}`9Wvqs+%KzK+vfVWu&{p_kh&*u`LGIGBv7_Q zPF^~a*I2@Qb&C~JFpXFmR2G!cJ-<#H)}LcVFhZp-{X-cn=&!6eL$gG#=lSUya zu&Or2$F2bm)Xm}csg`F4+??R9}mqSxQ9wB5&N~E}mUVU4KVP zi~qWiHqocjI68;RxC34 zlW0|c)^*gY@y0OjY4w!0@LHBIZ^LBy3-FW(8URP9<*QEfxrC(#=P>q;|K-|FT3mL6 zbZHvbDwwoBJeu+i{1k5%-d@|!l;H@lc?qCFJsNIDOUIqNZojRVRHrQWug|*NX2>#^ zqkH$xo|e8xP6#P&$*R34{PUCY0?*8Ytqu z^PyuHjF(R|dPy6mk}CD>pxI32UGPZ1IR)3HzqzzkA1AAI!8c9w9@Z_LqxkUabL(kG z(#_!7=aY1#D0K8Ntm47<3BT*nTu}tZYN{v@C>4mRPm>l-aW&gHP^7kwSy$#l6+Eba zW-C{dkPF4@!gbmhX$SCKrTUbSpJA3-KVI^%=CZlnw^Ds$e^jbD2=mr-5Yk|;?yOFl zNtJn|4$(nm=^-I^j#ve}FKdL1p%VvP6C24*98H<34vdBSqf>e_697rkz*vtTjtX=R zWfjw1A%bLy!ioBc&Z#mSp}_NG{gpZ}x0ISJkdp}4FIdiR!@k>67b&;?@(K0&l;!0rw&#Z2=_>$&$?OJ$*=bayR zJrj+7xi}l&gUisV;EmgtMWy@jRb$^FW0TwQ^tQV?V38EoH`xD&b4XI%#Q&auzeeE& z-a8mN6fMo}LO~Di_1n^%55EViS?oKz83UUoK{vVA-6P4`;qzImFcHLHs?~RHODjTm z=loyB<~Zt2b4}XMO{*p`rd&A)$q&%JY z$SpBXR?zdTb1dg4&@}X2;=TEQqw26QKBM!M)8`2m^y`rqwEsm@<+V1vt9dH$92y)c zEB{7mr!^k}T$v#y1@^fkc&Uc2!l+6+HIAyrc1#ChREq=zlHh?32;3;aHPMH5YGrQf6 zv`95f=M09MhPeVjQbAAU&!3iiShgd`)yCf(NRxDzX;M%-aLMl!UrN}qJPO}^#N4>j z#|CWAcg1PNU(&hgYP$)j4w1RSzhZlS7<<@?Rw_v!&3S%nQYxha-shCVu3aSj~zTg*C=J5PKj)o z*j&_a(LXh8YiPm^^MH{?-;an^M^P!JUAaVv*Y@TkUwG^UuhW;D<9=~pXg-w`&(TY%BV)ge&$xYQjb(xIq^Mol$E(SW;2I!4dJe+ z=1X^wS{X|<(N|!Ndn%(4NN5;O1vMvnxmqt8?hFjwiD}1z7%BScsaG?;13z*~gslcK z)Y~dHk1Y*`pw$=dm0>a}LY#51f1J|Gfz%g34Be1_H+g_o@>!HzFvx;Lp_jI605=cv zgdc&;*ehRSG5UVGz|&T9vk(FfQC*O^Qw26o<{6}~FzN_+{W9e2f4yRvUSZ%>envV` zGW;P4+A}_G?yiz{qh_dB;=h&e6*jETq^?zQSLO5kTc-rnxsMJJ{uf5-{MWK$8TN&p zXlbv1>jX%SIAQ;?urLfr@ltCIL6=WtUlpGw`85!fb%)@-?^@x5(iKKkqdn{{(!W%l zq{2|aRnA(3q~`z;>z$vr8tEVSfNp40>({~9I*h|4Oo@s97p;#ccoS%KNur23`m)J! z?Hy+o&4$nBfzBL)|M3R{*~A*4d~yg8CoC$#l3)mCa0-sInY-druz?t2R=GuDM# z%C(~zUqB&R1VU!HTZayZ{@^uOl02vtN9R#Y4du{qE;HKY;|fknvm3bV*DYH>Ov|5t zV0Sar4$%vi^K=bk$^5=tD0zXHY(Q?U4FmN+$OKa&amNQjHw6Hb2rjYa8;GAvdu_bK z`p8a`E-hGoS#AlS2Wt3oaK@!uxC*avF&28o0x(Iqe|hDd%)^1tO`osPHcPYIS6jT! z!gDS$%mh2Zp{UX=Va(P$AZXiN=812A75JleZHruH_<>~PIDd4U8Y64G6P{FiHVeII zyd=L}wxRVyap=>ZHlpQOS+P{i?kjY&$~S}L)=c*B@m=KSKq*0qm>GbKxra(pUoiIH*v3I#`29@igSR1#VFw$@^k!bRO@-`i)dM5(O0=)Aohu8gougV5Q z8$AT!2}=auwZIQ~Ip4o@37a8`>DDI6zgT0>Bdh6vG;Hozvd^}h+m%3JcCte+K!33S zhT4j17&Ag0VH)F}&weRV6bHHEYXU<(1zLp~k z0*dGF5!kR79htfguE+No(omZ&Gr95S7HIy9NpD~Fk4nI0N8BE`(mKJ2zLH)gbQXK! zap^7}H^=_REA#O3?ZGB84n-VmpJ>o6r1nhRS{l@EmgDo~26?F}QE`QTDyB8x=J6>{ z3P2J5YWB~rwR|Bds)W(LTOjhJ;g7EH{*}tFJCw^4DB8d0J>0+={%A{7nhs09pqClr z3-#)FN~eypr|7+yl$T{V`FH&A#E^PlN~-jc3qb*;eoHqiL$ zS2=_jp)sNLN-y7@pzPF~C!Q4HFyYrFgr5kQrN|p*WSJ&DicZ?{svx8^j}=AmqBzv> z)esdUjSaQUo|c4vYr#6~teZ@$6>&-avvvV5j>99o(Em4t3w4!$>jVn_+qIohr+tHXpn!$vTN9k&E{gQMTS0(PT01VQ)FbI18a!>iTe$FbqfqgVxZ2 zm_Uo57KB3y7`~&>K5ScmfKOm`tI5&6E`|Zv|AUgoTafffgY8tP9XR2P6%B=F?XV{K zsT1QaW}4Hm?YM(0L`eGw2FxK?2o}GDAlpD0!eYIDmrlB)4E4qGy!AEg5JAxEJiM)Q z^8K79Wj++uKH=aNN1|G~Uhvd{z9GA*M%W~w{JB*c>GK@GWmvSAh>OZcm>Z>cF{2Q1 z=gQCDM6kn<5A#oZaT(lTq>m2oZh2^~itU7Tuy}bpkq}@1J&jYTuqW2YT%^Bf#^Lf9 z=Pl@e$^Emm8lMf-^t**F=ezs61<3sA5g==SmZ`k;`eL%SCl_>xe6MekA|{E^nQw%N##?EuC~yBjKwV{Dl4_Tj}oJH)atY=IpY3h^VWAY z@YOLKQukxFqSZ_PvD#LguMwTYxm!ZAsI%tp4fHRe@&aKsU?m1Jo>Fb)=~l@7r47p( z*6w{p7LOC50VAZNyCj+qQ(5sLRQ}846JU;`Sp5# zzq=G zy62wj9dMy~=AGX$V}9J0K%)TFa_g;sZMiFP-SUi*p@)`)@+9DXhG#4vS$wA)DrYQx00BxbK<)5BEP=yl||$# z(p}$Ep8DbZq#ke3HqwTT?i?iW10xa)FPEsCNMK@XmdHSmU~%u3!4B|RxVX}P%b1+? zQ?wS8S+X7}S>26!+!K}FaQdw8x1IuvWNp0&JbL3Fh@7?c-}G$Vs&LMKl%{0!|Ck`FmlVcoZqw0iX0|iifmYuSvD_@4_hn@x!Yt9*)cZ zskbQe0&akRJ9THGa80|hZTpUG+qP|VY}>YNr(-7_+qP{x-+Q#jSkL|mbuu+()g|ybSD=52gQ1Npyw}{l0+F_%|jUP_+hvA8$ zci$s}zcx&5y70fbT-F1P1ET@`nDW+78dk^eX<4R!bE)45JJc**aTm}WI6qt&?&fOFEi&}@WUGZUcITStVC>!7S(>+=V@m3Y)E99h9TR~10ziYG|Obqd}s6x zOz#taDdw<}8NT6ce(h{lL;XwIN4F&kQaJ@xHO7{ra1^0CU&8}P5N(LvK-d=Yp@w_X zwt?y&#m{`YX+TAYiD{mKmmES$K~IQEi1VdJ->eQnPO>d!)H18XJreZtXX0kfS7PQL zdaD=&_%^o936wq9wrj;eU0KW9QLqAWi!QH!C0TAh-gHw#*HVBfoXkL!U#RKl2Z>Kx zuJz8<0z{-(Tk_~{7WhCNF;)t6z@bIVFhi0>Th_}lG2#O`>hK+bNfR$cS-u~#?$rx$wa)~13iCz^_A;!aYm&i2%K|Tr|$Pg%8TBA z#wHwSYvVYnp45TVul+6$Yn)|<9h6InhiNov25)wv;}>8w%FtiQrR!cg5~pN3Z2S@^XqwCCW%>uu25sxK5cv zW9mrGBoX|-e+A^8q0uFii(2gtOF$O)%!7+~Pi@B#&bNz5YxnAbte%~}ts#5QmjP;Zeu4lW!jtEQx5hAE8lY4C;C=6iYQ_71zwU&$ zCtg7_e`saGhdOwiW${Y155aE}()@>TI}lC#044abfl2$3z1^);MwmMQd$ZpF5>?IQ zHt9+_lgsS_L=i3Xf}tQY^f{t`SUaGiQmSg64vLPe4a~4`Aag8d*(e~^>7>sv1o@}ABLlPEVKQKD_5g$dApQA zQ|he7u0}FL8`+LJEq&#H%0&P5&5fPPw7=lf$|dSy^yb72Y4?l0_9^v$wS6~J+PwP5 z8tKahWeYnrq;fl7DAb@1n|H*chGzkZXUS~(=5_z24HR1XF#WaAuC^uV0w0<`uIyQC z5OE^>{zLksLDC(adYn~>&nu0KisxBO?Z3<{?OT(9627JUGtI~&Jsv21=e$RD+|wLJsh^=i z(p>tO!~J9gGs&Z}Oz6H#?Qo45jOa~nypqE5U_?ABT~kPZV~EF28>ZArDs0wH;$PL| zY6028aWx`dJsoyd^9p#BvH8%lc!w#3_W?K%qg?llV3EJ-B>2!hUnKLwVZTHKnCwcJ zq~1#wtN*o%m(IYjmU9oMql?&*y7C>xtpWziS&i-*Ox7-dtIfReB!jKtM+Ap zNYTn?E}}X315|&`=hS_>(rP4d8Ey)C1y!2mqEthF1IH?Od{1iQdHrPgVhy*(G#()^ z&}0O`6qNj1?O3=R{WmzmCB$gC?R(sAXr&p)Sw^SH^A)GHKu1ZGX-a&a>zVlYE3bI?Q-&u6G&xUZO}YYp{fypfS04a|y*C~t6373Z5<>M| z+~gL21y2M1zkj3z*V9G;q0w=ItEjxc?6n|CEi>55Rm0r0eIEZ{e6(tA#_D#H|JZJj z0`cPiON;89950rkhs5hYiAZZS9y#dOEIALe)}fGJnX3by(JVAM*mLDJ-#SwiT`s-2 z(SPf=SA;=azj{Y7bjFP`;pZjKLx@7jd|Od}#A4_EzrAvgcA~*iqCbL$o&F9w>X1;i zc8|OpHUY+-n>88rZ`<~B1BwtgpLVx{2{JZ;xgb+G7;_NACb@rG68vhSdc)-;ymlAR zW~53Lz{$cw7=C*I!52(2_F{yBZ6)-sQrzfl)E%}*W{8h1!sVvq%L1>a)rlOP%vgVa z3k(g*L!C<=5!~A%a&W@neQs|$JUhpp$-2lrU%eoK+OJO`ZY)Y;U<21DIWr+9jw#x% z$1Ru5$Fq1tfS(Tx87M7$XhScu7y}q-TJ&-{ZGqLLd=put^gijq)aLd1bAHC2D;*^x zF&G5^huiEvq-TtGT4zj%f|-*iE}@ryzQ{Q_F=QeAN=qu-m?iF=e`w7Iwy9 zQrgU?(~o*F1~%7!^J~(y>&F|oEdd*2Fxe*V3X``q3#H778LY&b9TazVTtt}&fJznh zygdv@!vsqZhYvXTeL=CeUnc3xr8d5+4`uM#=)URe2Q3l&bl46|+aWw8j$j*qdPcPK zMCfe_^-v+W7#U1Ltj1-SBNGZi3sh51dC`vJwX_z9HLFv+Xs?1!$XW9k3n8tH zZKeT&lmcC@*;5~^+KyW*5dq-e=>JSb_C^M0Hvuo>;3ER!psjx#&LBFm=CR0r3xx_W zqFsP=9uf&Gbu|$EgPB<_Ab5+!f9M7)!x5X6mHwOLZz)ok-0hE05ixy#25}6d9u=Dh zZ?YH)%oQ?6Uv$4YteuhyWoJ4dA5GH&tP+;a#xD*<0=Lvx z)<N(=`@gVaG#Bd9#jz>sGw(kT#v5J^4};~3X(pV zv;3uIWFrta^OOeQ`;0>lSa<{Tz7J0V%>9oGxVr`fM&m?>njK{%0Ze!1@rr)w0qDO0 z1QseXkVqO2aevDw2~5z6?e2X$FKxoix+sm! zo$>^4%x%&BVQRv{Jm&w1R2{56<;GQrwS|zdV1C9{bYBZ=vcs8RN_7En*6RO-^})-w zF*u)?*BCcuLg0Uk!X8)(H_(jQI7XhloNyg$Hk2y*g}%}ZLGin)t=q$SD6yZo;a6Xi zUt$oAWJ$h(6E}K)33zKvhNk~0_^S}ZVoWTh4jo45lp$dV_%m5F))0UpfHUK!0;*P- z=EW}r+lNe3Za@z*$(=(|+s4>w2eV7z34w(Cv7ls z{(VJmaR|P*Sb~8gy7E+b`VN3;?m#sl7tSAGtkP^pU5{^;@=!dIL_x5ZH_|nZ-+| z2lcBG%SfQ#?Yf{+aD#*K!)F5mRNXG6+RKsB1(4{B7of7X))V7jC56(hL-8U%H-=&E z+-SAu{vqyvH8fd?yCDI>02*dg3NS-2NG-OzQXhI!#-B-hWhM^ORo1J~sz?IZWH@GM%_#M1yif0^oBIAYdWYzyxXLK~H+r`*Jn~IUMI63c#<)E6CHh*xODK1aCl5e{>^4Nt?|ZVW3H;S&nh`vIxPE;o3n@Hpg0(Y$Z$*P@YHW=T z%WI%LyMnysB|1}7IlkdJ{T{&=VZW)41G`JOZ|<(xMjV0(_QRa;@@fqS^)Tt<`qY|) zNynVJ;zwqHcRn!%zG_nBkPTy8ZwilFbP%|P}EM>N6pRXXA zgh4cabxw}2k7xS(cQ>WuQMX6L;>0kcwX_5al`+`kaNmi+8mfK$e+(@Zp;8#-uM3?jv)3Q&X9e1}Ir+MW zZhCO`C8o4frZBxc-{Vk+28s57r>XKTQy37dv4>%Z+iEC~_A7dK{p(DqAyuB*=Eror zu;%yy&p#>8>Ve4d1ycAMWPtGN6MZ-9pW*ONSqmwJIiSe{sbh z$Q&rH=*PBe{(rs+Q{Z~}m~lv9ZL==WBm>~NMzd*Z2Au5F8MKwUm;b9LXCqWFu_;uU zzelNcD-&z3$LZf;<7+ty0xlg5TuU+1B#t+^RtO{p-lLs-r}bCQv_>qDZt%~MpHwDG zYX4Jd8Ht|XTcTu^>mspeK?}#3f3yjn7q8cU^+igZF|406VMzl?YW81Eh7;%k>XAu^ z#M%v%4;MwsFC2&VDY;omM`J!?;46ku5Ef6i=d6k@ONIMfWux;-`Ifn_lseCnZR~eZ3tCH4mu;RlDia z%cE8me>Gzj|2ff7GRc z+|pj5O*aKXcBQ&v3BcS~VAReKU4<|I=e*p_WLE=gkT!6}UQiSMe{={oYb0h~fD#Nj zhL+b??|d2QJ;@^T2}wc}tG3qw+AcJ4>bewz0qP9%+y|&ir>9ajOyOL~#K4oHmc~8L zMSML|&4JMQu#x)!Zg`qP7Dy8MY+@FF#9a9J#N4U_^0%RghgLX0b{9sK^$I*ZDaB|x zBge|2`5L_@(gNr4f0aSH9pfPbQBWN>=%1?Ygn3jCN16Q+eQo*NBKJ)5R_KNWD1)l% z0yi|M8=D4I)$QHKnbKIuI_VD@Dg5(RAch#Do6qa{FkPK*IL3* zkU84QGtZ(g3*f^DjM1*Bvnz7bRbY;o70{f9($ykYjNTGFhMEMe>G@5)!PD$HLUGoVi^J2Uk@=gLJLFMm02? zkXD>x{|=O_lHf`FrnhXqYV?m*TyWR1){`nwR#{>7q43~S71SlsxDwdLIwB@y)G_lg-}K#}*A*tcwc>xB!?@S2JJ#`P)GMRDLKh*1JHzbdj` zxVa3`7y@=TY0ufLha{N#_pIs+YAhYrD(`7PTe4XB-4~6fiq2=Mh~m#4wROJ^02HLx zXXra2?$IdsI`)4$xB=$9fEB47i?vMPncB+`ajH6&AeOXopybF?#>F96mgq*=rT5 zykoHZ3o(meyZsSouO2&FE==h}Ip`_=1N8Ljs<0sy+*+n_)*_`ehQ;<%D%;s*ztxb9 zf4CmH|LhmY*KUk5IT0{FoB&Z8;%S{xfVr!XFlq&e=8c6I(k-(hd(@XWg@u0c?G`xG zz@k>@Z(wpF;cx5KH%=dCrrxgqB>{iBrs=?#oN9ZhW@?$hZtn}=wqqWA1l_~E9u$bjxJVvQS*fCGsPebe$wPTV>|aHeD-Lu0z3Ll+6pAv@SnO*PIxP&s2ErGf0C}F zjSYIc&HD5F0S1%Ug!ukVb_PT|}@iYfn){!9dM6?)4 zLLV4un&8q5?U&TvM;BtFf0n$Tymb;x!zsM6X*!u$Oj$)w%%+cF(&mg$&b6=z1%5GU zE)CH^V?o1!H0qzmJc2uEy++6Xa_GfeYLnp$CeJ%HD}sdH*OMt)Qv?prqGblm48aG+buPs4i4{4mKn>xODw z(qCI1UXF$XYF9!>ZYYVQrOk~JDc1Bh8nNgid{X5j#HAX7wjiRXd2C=&MAtLxymk}m zY5`}#)lQub1+(MQf0O4i;rahFL(Zqy6|R+)Dj=AZNJ-*~dX93>s}5N=Ozs}fKNn{p z)l>`-xEw^)(>WT$p9#ml#pRs0=!ZZ;5p_XhKO;|Idn(?+>lV6hw=x|Bp>VFHob zI)Lh0*WmS}&0I;48OZ5y#<2;#qzZ2hM6l8PF&me=tm?YCf5&A1FzICCcIBwVnk7{* zSY{;_Tn5)&eI||HoNiE`I1M3M_Z(NK>?A8v!VWUZ~S{y0B7>ZGTvhFi}^9BygwFA6R{ zXBZaYXjDfae`Y-+`+8g~J<{+7A-N~6!u{PDQN>&^8C<+2L|?-se)?-JdJmco{a|7l zVET&qO$jFC?-ijO?Lreii+$BEs{Eu)33TSAxgefXLi+tc`BsQloV^FLCCyPE8N|qf z)zPG0vCn=s_F;Y~VuPHXlYgODSjUIga&`19%OT1?e=1>hl>T7;jQQLZz-k&5Tq4+$ zw&tLxEa2yWsx$!?ab1<(BE-4(v{ydx!jlwXeZEIijG0~8Tt^JZ`S%-8=P(kCo$V&U ztVg9rdFj)ThE|;7t@GQ(YRHcifuFi^HP;mKKliaa7p&CSQu0meJw+@Yt5+`$ZFApE zJA@B5f7iu}YDYs&|Ir10Zhx63E};B`ym(5C%lb+1?WkRj^P?w2gKu%bleSJ+#&1`T zez{(F-0#u3xdKp&aRX`!bm2aAn&uN!GJ*#b*M3Uw$k7M}PO&5RYt9C9wW(?}mlo;} zGaVl0NJ??D(nAUL=(xhfqmQR#P+RM( z92Qoplu1ms(NWc?Y5V5r8g#O5`DD0FJ=EA*sBGvYI2Y^WK4EMf&lFfQZ>;-`U&eu7 zIa!gUAbUvK;Ia~kBf`=ejp(}{VBDuCd ze{#mA6cFg!v3B9KE%q#l^-|8+dE~_CIX6|553=Z=o3=?Mp#K|~j|jn=n^0CZpss=& z=QYH)e7KQ~EvX&z@1t4}Mt?seQk%g$S}LhprAw!S$RE*NJ{5 zgz5evfRGWtv3dXe;9r~?Y8zr@)8n_Byzm{{-Eu>n4Vb{B(%QQXIw-NMpVMU!5Z>7- zeP-!TT^(^4767fPg$pE!<=>Wb?5QLWb|NhvB|txmrIeU0)E(Etj00Ul1(tZle@D3R z9{QvXE9p_ed=0y3V7CN{Xy&oBX!OXg?Lg?v5<3Twi&lMn6ovsgJ7;VJr3w^xmKB>Y zd7C^5pk(4czT&MYXAm{Wk9w0rssG%) zk(<}w5L$dBMQe@!A>+=;48SwTGkp2fddHZfL(1ljeUT?e>xon_LYk`i_7f{n%AoUU z^O4*sf(}5U5c0e9Cf5E};{YwrA(=NSU^hqz1Nrr@kA^-a=iP{v9wf2p8f^9E}5 z+9)?&W_Wx-sMRa!V~>nP0i{x2gFo1?0mFGca>z1ij%D)dd@E$KEoqRKnkd=G2mFx? z?R#ji;nYYvp6<-Fc6YPEuIr%6kcj_TuJmg$z&{?YONwqf-yJ}^f6^4=ELEUa7Lgk2 zmdZoDqV)woeIpwr(N}@5f6Rlri{JCIonQ%D;;W(P_}RM@7P=PDvm}}7rJQ}o=62HkdatTimdORjOo+_!b& zo}E3)DXGIgDgKBXg;+u!7HDMxzv|v}UB&U8%V#)1ys>{!r)a%#e~RQqtW(6=#k5gc zb`;A`09VZ{Eu#3DzNug05rV@&d5V6EjZ@LTkptA?b`{7cFHxczgK!Km2kYP27i=uj zWK~?;f=E$ZuD&kGsjZ;tND)r~HatM4(j?S6m|wKoc$(_)^v~IO=Cwj-B4odK#l_WG z7@%8t-~&b>0t+xYf9oMmGGW(uCvnWnT9{tl1MbklQKWzBv_X9bB0ahhC^Iof8c`i z)i|_nnxG1dX0VT^zg<;_jIX0@a-oTaq;ekWWPo?p-O008GKLR;FWxJ+3)J=H&z#vg zr{%X~d8EfqNZF|o=12~>Tp8Du_}eot#4_qde^u~%8Ys_4Q-mX5DfZ|m-Uq6WTIoDb zEqEyZaTqiEe`*S}Xy;9qxRt-(31DZuu+tSAi=NHvE$qYNS%8W{N|bV_E`XV;`deC* zSA1z^jn5@ueb>m-wRd{dbdv@_N$`;fSurXpj+)26NS*!^uyT;u1L+M`2#aIy6TM$Y zgSSVSS3f57&W?I0&Ute}I0P99ODn4= z3uc4n%HNa9Vc3?d6_O-xqMv5`{WBsRv8{c8e|MrQi;hA8_1LNkP7S1XHeYG^7HgHT z)y0~Xvf=P$sk)A+I{u{M`fV}xQV(we0P5#Q7Utss7cDcCzL!uJdW)x`nkAjQ<(e$1 zj2HqqDKHM zm%g9{1_CxSx2u)|W+;~reFYP@B)H8TZ>+kCz{ z85sjzJmJVi?HxRwfEJc6Jb?dt1yGq#|K-h0{}&m6u_wUAQ_0@O$j%fX=YMK#1h&9US9dq0~Gb%mB;)Q#12_V|gPNC!hyF zmx+OiiHRM+^w;n2SN+e~nA+Rfc>eA1uf8y;T{Y9#6>#_#cdz{&ttPGq(pYGyj{psjI_(vUmHBZc_c<2$34_ z-!m%MyL?UuK=rql^qAP0Og^uhdk3r3UKU?DhVCMJ_TeHsr{dY>@b|&_wKs$?1(QyEboPV5*JmHu=_0IAsK5u3K z@H4arz|7;53?qY`z00Qyz`@nU7w~zE;QrDY2RndK_^+jZAxWTekT8g*gyA7>}@_P{?8RQw!c$|pT% z8zX1Se;9lQcKHYVv~c|g{4BujAMmpP_rD>_X8|7nfPbF_c>W9iHyxR{IyrqR?O)%Z zPm%p6HV1xc+sw?v%mi*_(cXkN#Ht~r^RZ4C&z*j6k}cum3&e$()v{amHli99VCgGO zi>r?hNvy#h-o0$a#`{z6Gb`v2IWj*Yib2F;m;j431H7_BCz(Z8W zv1#KQC4b~4?Ym{Qh65>I_NJH3f$(f=o`-zcbN>?G`blUUap!>fqDm>(K&TYOlOL-o zHJ9l59>NEgS#lVN@=Gb$_QZCsvS$*g@%XiJEAz*W2`pyPA94F@Xa)mhPySZn<#cYkIfo!nnwJsZQzdJsK6 z?N~TRMFKAl$(z#ik!Oz9%BUqTB7Cr)O(cna>54xf3}WtVw_a zC!FPlRen>e+}YAqZ6z&61FQX;)*K;0Bd4|myx#_>PSSAKp+A~QI~ z8$YaX2Dkvt!%ljZz4sqv%H>l~e}`V|<)Os(pn`5^TujjW^Q5rSW*Sc;V?R6I1AiGg z=|}C4YJz!b*K9WQRxY12N=(+{@1;tmWstaLgk%-u1=_!+xGD&6*!>#rk{~>Ypb%yX z2I^%cO5*~PJ53@MXrPZ6`aM^-HF~eT*_r#!CTxg9f8aiStsaPb{Z5P7ow6;oDpp4hIrW66yWv#) z-B;{^>H1-AOHs^k@1g`aCo6?z^X=Be^jxsJjO}Knf9JHJ=GB`;o`S?>3-7Z~Y={$3K zkMrP~3T>*Pw*9;9GZ0`E6NJ?X){K$b%0PKWtEGljX75IesQF zNZbWczS5h=UZ?IaA~acBS*WM=tADZJ)5AE|UXXF#rXf}}T-L3bDk$Y^_JLatHVt~< zKFIOzsJ!Uz1f`aQ^?&dN($V?;oS0Ld;Tk%7B9RaS`$iGPDH=+N(eozkyY)04T~F6KRn!cz@TOw&$T;Pd0xQ#d?IH zZUbL=rAdB5wEqIFp7#e|R-FNKq4Fx#lCa~(Ptkzr@95^Cc4Lp(+KT;1;OM-}3?70i z8P_68UwIcMM=2D3^SbNmEz)+c;wg;D?nYJ>+^N=^_Frbl#-Y}2h%2YaW)DF%v+VXt zZYyJr0)>5|Qh!zC(M2+?D<2;$mh2YGi&XbF-lQDv4jt;NNSR;;w5N7ju7)MiXNUXD zotxO7stALYsP&R-H{Wx3PTCpg9Cc*4ew9nm(mQ;IQzhP~PNUn;m`3Gu>m3w9;Q=qQJxUSD{%(s}qu~zz3MHa%6?+Gr1 z%tH++mVZ>OTNy@M?X#ursac7aMQ^p29JdIa8i^bQ8nKS@oj*OyjS0)a&YmlP$q5P{ zVdgMozpSCGf3t?*oL9ym@((3N4?nC!C?>s1hsC35Sw1EUN>6b1{tkcM4IkpZ3zJkq zcF5Xl9uF3^jo{kFz|X>q1lzLUR$4-E#eWF-GpGr;rXYiQG$$ibK!$N9I5Io2 z!tE3CXCO}5SebsFD-R9SZ2i>`sF|+m--V1QVf}=DI#ghWm55}c4Ie5kI1QNi*&;2V zw1MF3D^mEY#b|K~1H7g@Up+dtUPD!!&GoiMD9vt%7m-l(VTNr{TOOPz+*0`hgyFbL~K~FsT6wL|S0H@PEASj4`ZH4wgfBYV+%XK|6i&lA=$R#@% zzEb@1YS3>2k$qA$q*29{t4LN1OzThTXkglr%puWI0IDJuNTztn*D`p;>*6233>Z057k|Pw zNKbSrwiAom1wqBhaYQRCKTcsM@!$4K2#k4CVpfWzfhkB7_}f#q3f*ICW=ra&kDA}F zAd8o8R3tD{&IIW8`33Nd8E0S^)Y_g$ln_y1*Y9tlVPqoCfH*n%)eep)&JY+fjVhP{ z>}MF~w{Hkq%VS7NIY8RZ7Lra4K!2ej?1%+t(TfeEBh4iH-3T2mGT)qGsHK*-s);#d zbajQaP&ImrF(pKWTKZ02Opgo*68|08;`DdMbwCIl!@SU!=tF0o(H|bSFqUOV4G)H3 zMx6~|s7Dm%ZU*OGz6z3BT$Vd85H|@F+)t~74=k7U4#O2Xa>U4kDVvI3KYu!e5iM6) zJdmADL zY00Hqyu|U5Wk}EgwRta&wtpYRQ0&P()|&$oH=%hda?a6f8jVv~a`vcnH_EjpOYHUM zutSe@B1SG)8J?;QMrPHb5>&DDc?tng`1`_n&X59VbOzDk#HIeT?DFsxCg(V}=yoNe zI@m${mY6u!0#R6@L=bqfZ)@+BUi5nORzDfi%e~e?(_BrnZNxZb^ndc`?-TFI**P@@ zSUEQ?hb(H!SL(2DWyDfTJ9fFrc&!Iv??t76m|K3R$Rx#WcY7~?1Ov?%<70C@?VR0q zdT;m`O6Or}6j6)362KLu+M+7p@3^wMxKuz+1wG4kqPZ4s3u`@E2^Qi|`_Hsr?fISAUrL%Y>UVB95bJyOy8U;wbatytZNLuV(0lk-60q!p`QjO3|PS^*^}u z5)^&XrR9L}b42!LW$}S^`b5|iLR!Lw^CdPF5N%Od64j4n@p~y-Yq(&etKfBN)teV2 zJ}0!$z}v}NR=-xiW^e)XB5NghdPz5^DM)#f2Qhb2G=C#>#8*WE+t=8#rkDs`)^J?F6P2zT$bk zA3|bP;(_v?s2%*`gkrx`X7@CIc3cOw6QA(pVC5WRLnn&@6GxKEUiY}k#Qe(0!OkX+ zL5L4gX@B)i(Ze@Ey+|XuYY*;XP(PM3)t=BtYmro&wZfe0bR0kozkZ1hP86b>0ORT2 z1_>#Bl}i1jKGQM0EnX}}!s2$FMauXGX3G<4dVI+_l8l(0S{$u*--81SOEo%Kl~n4~ zADzHWXd&euJ(4^G7XMD5P3AUU&Frce5?&3#3V;2T4J^g7=(*$tjWV<58pDg$pOqHyM?A<= z4fQn=D#{E)2N4`O(!YB%Y?*arDE-GV1(D^7x=oPwVUmiWNsYsCiKMu~xN#@Vvve|v zPJf%&#LU`+Ac=UdqXzRy(+EWBSFGx%02Sn(TnWV~1-XoC{Ks@r;Ggn=nxIl-rMB8;sraB)DYtS6wM;WkjD6@L&` z4;9Mh?Q1I6=#6kSy zsoTyMVE(|GE1KV;H+!~a2|46y+dONl&Gr_m$PG%fvukiCkzHbxBJ`}7H1AGiqpSMD zJGFEw1wpf}7g)Y7=M_EazzCASg0q}HE zyNA(lgcVz5<*NZkDg_{vxcv#%r+wl5qHPl&B3Q>}Z)};c>2}}Q^y)uHN`LS2Vr&=( z^zmvqscSPQllQw`P9NTc5xuT9tJC3%Oybz`E>6kf87Kut{t)4q*sciTrCf>D!OV8< z5fyZN*hrqk#FS!+CUh}c{V0}nkt;W#9u;6+RxL<>Y}M^!_URhfy*EudEiL%=Hb%*w zO+(PD_BwBPCsztNhd~Ld<*QsH1*yf-E`|Sxng6(>ZSv%9LA`|{)TjZ`kMMornm{)WS(bez4s+V#V-x5Y)EZ#Kf z=HBhJ1t|slLZH5L!GB&hj_O^rJ7gW-GwWQH1?XORqlT)A9s?e@XRNDUH$nYN9f`m-yL-NgA09i$>1S;(#%gpo4l75+u$g z8hHg~vK?Kr$barNHf5+&xeT+%kvZx%z*}2(IRmesI=N_)KT$>67cTue?WC7%3pkn( zXvdac6OsK|FP8|&9X-yqvs*F*_tc6xD#*y+B)19r?d!~(<4!HKjk%_ZT8*3BFv}#h zF&gK?9Z-W%d>GPr{Nr(w!6`UtIl9tok(<2p)wXJbmw$G!se2LqBWiwSlghMn&Nsbw z4B(S5DCyB*2>l=yU1eaa$1Z^iKc-D`dj-&p66BAckMPRNJ<&TL3E*pXd3~YD^M9D* zv9tkeGnaX0m~MUX`q}!y0z2Qga^J2G4o+l5JdtLT04c(}cu-pJP_1@up$0YiX8Z_0 znH2sZn}4~GgNLPS?;s_#Lz@leAgY$-=9K~oajUN_Q)ETo1{`XWfhbo{6!b$}J}q$6 zsD0jXGj3Zr1g5^F+xh6rK}8f5Ry4BPSXaO{pxAl~bay^5T$Ahs zJAcV#4tOo@ndE_qIDdJA{hbIXivhc%Yq`17v2)e?J*&QcZ61H zp)8<;3gyVs23l?n)_?oH9D72`6$w|h9FJ2~R#da@+-rNxdkVTz9u>l=O0bqbrhg_f zHRXX|Ya&&0;;~Qf=k~Hb*N{lg#MWC+f2o4pa_RAGMm>o>)5yI$bf!OR7}7IO`;T(r z(&B9ol&Hj<)(1$52aeT0;b7l>Lk{oC3=V;UYOb+k*OLo8kEL9S_K7aQ+rq_%2jhv* zgPwcETX|(xsi*J>Rw`k#u~r^r27mr?{<99|t!WP#K%(iS<>DjqEJAfof6+S6K6>xv z`EzHC@R54!2^2LqTv5?6F=@K)T&tTyJgRXV41`X$r7g>0?0+ObbtJf< zWp#0JWg;s!{QO1bXIU%t6TGuY3UQ}N0XYTNuH05Rs5^Wx0$yJl#l2yZ|=Lca7$blLjee39+DLNIabz2;Z_pIoJMv;5t zX6MgZZ~GQMV=$1q?iIn`hkwLRPH5&1AM0a0qk8w5Q;Mu=3JAh&u#paynWPI^A7d=- z#~-Tk6X!GV2i8OC!^~*a)m#rYUgP_vHl1@0;yP&s+zZhj-y|bQ;~WP^;j9oZ5|eojf*0uE!%C*zB!BtyvJF~T6$0OA zRc%!J{)~Ggrigp$*coF-oAMrgeB5VV9t!hILrtZ#^54Ik04n);O$ zILpHGv&w*?qyRi5zyb+QZ)Gu<*S@O|hBbp7;j#|8tspUd0INajDGD<>q;u(2+^{V- zASs`Hylu3h(I>tR8h^nv+$l_BP*8rUUm@UbpMu8F>I14i5efuLHH))QlaNet*6W5q zE>tWC^s`JZbA0>6@SSMpvGOtd$r?uMXp!B ziN-etU=tv9^}?@l?Ayi zKT^j#;#9o!8h>_Q2Hus>7+cm{U$}2O?MZu8!~?r`U6nAL@_Mds#FQE@+2q7RcxG!vJ$6*Fs}~7|9C$GPYr-W@3zTzfC0gz57ZsdR3}e*NX5W?X zx>$${jlyC$cZVus)ri;v6SA;=yFQSKUUvN-s!tKb4lF5wtjw$KM)i418yoARzawsc z43qJA>whU5Qhe8|sG?J1x7`T`?3K3aJwVzOIe$M0a|wFUJCZFcEHfh6Ok${Wh!&KHY$ zn16B3-wu$=DHJAf^Jy2+JejoI-c>1IT~cgA0}0$JtC%Rq@D=xW0~}K}xCqC1F7zG0 zT{^Oo&RMP_-W-HM|iJQL%=d8AZm zJ_;+ffYuB_ELY{esinVY4|DX2+v*7NT^-3&9@pZ<6p*7E_s%>%>H3+?ol4f z`E!>-*OG5vO}HbReAdcU1q|K|X_TjZ;*Zl@TGPkgb;sU`{VR>R6GHx5^Q%GB`X2!482^BB*#;Mu6%tH)Jsf|^@&8PMc(^*A7koRBNV{bwUY z1!$PDdf#E-Ns{5MWc<#DQ`KHTrr3shUeVijA*DwYjxv6a!hZo0mlqr7ZZrZ9uGg#e8 zJn0lI<-}y)Q@J1ulwv?;lv&YaAzrfcbz}VL-)3QwVEFZi5F@@2R88q^D1QJ7m%aTb zsaILCJO5w;*e!86d^+H{m!ii!5Kv6u`Yws>XKL}R_L~eMbYe7zPs_L8C*`g7&EfN+ zaF7+=VFFj1v%nwnbm=}MOrtZBbT&W{Psv#OOCeQ7#hm_I%EhTWowHgA9uAvz(fhvd zQz0cr%EbacDWQV-+uGNv{eKqfa7vx8bXBrHp6!`*j$t?GZdY_1LtcP3g8wQ!g#;sil$(%J|1;_ zu{xY}7((ktdcG^mD@p!px)%yy^I_%?iGFfV6FA^Foo#obasNZH27eC^?CWN2PLZ9| zJ)G0)7MUJOGjB~#6Y2P4|3|tg7$tV_(o^=0kH8cvpnN6-$U~h@A%6AtQLN73ds0^S|;U_Qz%Fmvon%zte!q1>bE3idw!0{Dtm9z>wSjmtE=HVk;PY&7A+{{DRH_K`LswmY-olc*CJ3g``;nX z<%toc+O6-F#ecl<23O)bEMi&$29pDH6azHwk;~z+*3(||E_IAYkP#cF#^eP}!nh6g ztefP!E}CFhXE#6R%Vlx1ybBB}136|BQ^Fl)I@fZ6+kF0ZQML!bZ1!qfPWHMe_%7bp z^I+WZqb-I*efU9z1zVIgsT~H?+7+z3py`7G0#>Sm_aHm3X0{9gdgG{TPdx}gGqWvU4(wP!fb8c{pqHiN`eKI zRLnC)L38qT$q0<9OJ;@H=sE7g-#sLgh12>qtJykf+kXQ&FJ(qjl$oY{r+OUxkB-c* z8EPcRUVqT$#+#NL%fUpx1dV@Bs134lE-l3X>}Y!rg#Q+Fc$&gLl$|MC#mofP$R-_I zPq#{BsX0ZtJon|^Fhg3P1t%7^-5ruhI=VlS-^wPWrbVKxxXG_=9VZyeK?0NL9J8Vn zBnZ5==%m8@QEHld3nBnF(kU?LoyMd4P^q6JYPZIkzDpqrox~KVp}e;>dp6hzY*FpI&*F- zUa$$->J*89Li~f{KLjT1J^>K^-C6${r+>&x6^bz_>d5YZpl6ltO*)0A62v%}mpkls|-3k@3I0LHbuYL5Q5p5RXd|55@EI5?u_oPqREIW zA&i=#;PRbuTb$>td3Rri^2_L@cbiCwp<;_+Ep0?i!5KfS-f4dq_QEm)*Sz3EWq(^q zpm)Lqi+n#16^W_j^F_)4Zyz+vBp4z!>jR(Y{0Dc6cKc8|m*Ww&gxOgEnHj>2UYi+d zw8u8Z;C;4fU7WT3+~DN*((;8yN?!u&K_B4&3tC{ldjpxq#7~GTYo*t_l(UQyVJ@>5 zm#$8Z2m~T3HRs~Hpw4Q!A5Fr_{tF7rZ%3v-b$#i=F_yy~ z!x3z@O8uz>mzsL!TgJKPRx!L2Ywx|F9wv74L)fD%DAv~Y*_4k{gK6=)@PCOO&*$cw z&Fff>#LPpA9SZ7V$KCg`SU29T9FjL+F0b2O5fbM{yjE6f$j4w$R)eG+L6C_!a}gT| zggZ@lyCxF+wwO*u$A9@G@aTIEsPTTce-!(nLMbERX+Zep39x+y(SGqg;F{g=xY+4L zC%@$yz>3=&uRn6USLVM%27i1zs(ZUd7?ri{unirx*GkBri;i=1I!~eC`s&fZSvp@o zGHFEk0;KPJpZB1qe;OnaAuy5XbV*tZ&0VSUw(}wXiOe3uswK0D{yWGG7m!eeR*)@} z)}tc5U1dO0sW})i7~s8Ua_X7pd6vY{2=P6n(>U^bU4s||EG_~e6Mvh-Ibl>ar2;y6 zhLk3@@0Kelkqx=CZ#|lgF^mPvHr;cBEBbVj7h)*~XkMc<-*?;WBx>H{SP$RRB~k9Y zyJR5yAKRu_=KUPCCFf7Xl5Gjpn(fd4QIZj zi9c;m{W36N{y3@f(+*XFE&biiQ6>`@6np~(ODzsbuEf&5$ka^G!Shz!QaurTScNmE z#tJ_D;w%mGH45{YK1pb8EQQboSB;e@lP35CCvkxS$9GB1WfI8ayj{8q@RCz^?H7Tkh;IgnLf+Y-g)?1a1M{S7Y>J^j#a*a1Of_D z$sLImmo*x-8GjvI`b>xwPCp$8>Ct%l|;*AD>R2 z-+3Zwk?QFlQMdN@2<(8HVf)~7EkJ1O zYj(GlB5CTxUfU`=S%~K}2d32RqCsua+5oAA2EY6e8SsE#$aq3RIc9jI1j|2l1SW=8 zV%o%nSssL0#tG`59LV7q#B+oqx*1PCa zg(7CL3Mvd65Xfe)*iY`08pgHM%8!afaSYM@YQjf6TTa56r~>GbvAt8hZX~yww{9t0 zqN(+S)yx$_h-%M?x)A}Vfj#^YWR=j#$>{8afq>BG>+65=do`>{*zodNt>bh;_m@no zwIPZ?enNlj10rprcKA-Ez96sZOh6cgifMDy7}WamvJOtur8W^}&k$kWTB4u?xiAcd zB?2bAk1YdBn1u*Rp|(O}mLC;Yv16^-4i#$|Ghi=Dwxz@B*z_dN#`v`nxGNYqGa4Hi ztxjxqlL z5l3Jv%i?KjA~Ujn^$7w#)6P}b6u*^UYSf&_hLnFBA;`^%N<4q9i}?VA(9_v1 zoX!T|tbF4(8KW@k!Q8jk=9JSsYMd(Go4GgPgb4cqq#kLq2=yp>HQHAh4KwEa$UDn-f@+RDtm2 z^Iv~eqQ-c(H7Gs-1ShSLHHS}yY;EoUv|x-;1a<76_rT3glI`1IaoOwb=h*nR{`)93J%B!j`NGZ-gBv77wuEHn~3WmJ41fggTiL7yB zd;ISNQWP>*d%U7iH5DH2UaQpWRDNt=Upa@Po|IjZttb`U5k~NgAqGaBX>DhW5zT)# zHYSmettw?7>`%n^s)H|EYl)!Ly||T`h!~}iCYe1Poff44 zuk^&aVH`d^OOV>TiK&=JKkKzK6nBwIo;2!X)XO)V{Qt2q;9`9PfXYpEgnJA>&xNVwnHlyp>|p?td>H;0;XO~rFFppA4jI&pmo2Y za%#6)-%Y=^FA@Bp^vrz3O_TOl_gD=FsBa!0`KlKS%xji+5c!F(|?Cstj7Ul zm-Utr#IwA%Su6xNSxbv>!QOus#@S0jsr5_VL#byflAw0ki7#S^M?Z<+-II)eOP|#3 z^A!^+_VlqQyTkE6A0I}DG-M!kxNenTaf{VvJOWNKK!YXVS+yAZU0o^*OO1xt<~MqU zQbRpNZV&?mTq=+s;(6xN4^^tsYTHsAgXC7bGP&b1jO;sAnzV|=Pc?rXnuioxEDHpU zg!~j^dI77lpn2>2|V@WXZNcXVm|Mg~?+xhU-}LEAOk0i{qBbzc-Vz~n6UF=1v= z_Qt>es)-(mR0yJpYhv>ZzZZ!gXj#tpJB?ia#eho`f2rMl6St3G06^lg!90ejzBgEs z*ZEk{%cDQDV)z;NK0<#i6{85YNWmGfQP;}25Sl929Ac%1fAJUa={GLL_?dwqqvPXC+<05~I(hN{w7)}je0zx71{>-6Vmb|h0xopB7i9>J^2;O>qyK$6EDu64P$INp{U^A#$*bE5hz+9gNHI-=6ZxRW%h7eJ|sr8**;sb&c@_= zlS8i%TRiE6`zL3+*mjMFjfYk?3XVd7BjX1Ls5jB_G#0$eR{k5p8EL!;k6)S=ol5SD~30eS1Y>ch9>#mF(X-+rbXDRIm)Q>uG# zDp`N=s?j0}73vX~hnbpHXTQ;tFM-*H1pnGtPGUrb1FT83Ozegt4Y9I*nN!;bx{#Mr zwEn8I+GoKykm2;cLGq|EzS@R$MV`1>^Y~V|1AdK<-12xdvofj$FTmjZfO=%I3EbC$ zZOt$C&l*DQ8X~+_``+wFo0_zjvmsCk+T)SMccL{@{tL@6wP=_+?W&FHT)ROGt>Pcw$-!tK_Is z+Y(yZ3IG{tSp6{Om~dwe+c7@%`BAME!Jt za(2fSOrT7mzmRoX?7RL>rhUEt1C*IPgWK*AyZ)*qezRXx8l6A9Pn`!6E#Z>P0(g;L zlF=03>y>%QrTvyepr%f$$YCFe(^2S-MRF#R6MW zrYvii!lFw^270R<9ujx%oc_dvs!xBEF(|N^YrSGC=PTvGRj^0*?o@P)2a!9o86+&4 zkz(v)neKKD3P03%An7-ze5Zx16BE{NDiwJ&LS5}&AHRi>2}ls*4AiFMaiBGYw$qwy zYg!DT4BK(`DZ~`IjBDOln%XpeWo2bQlMU2gDUI&T>=qRXe ziT+1Dtxof<6Lu zHuOhxZcLQ)i>SV6_FZPN+1lC{fC{9%urWAsI(Wqo%p)q&GI44r^ss-JJCyw9UbQKh z4jPPfXys@}jEweRB?;4~`)UsizKiYja~B=PGOsiYjWm2?rK+yJKmddaq7a8(V5z}Y zfAD;-#-w41uwKUH4XW#=rhvllDL#-UEfFKln&22$omEMOfr-$M1N8gzNN1>WM%tcG zjWnKsEGu%xsjo!8+G%?qf4UTRss9E;AWA|ig%uLIZl;=$nqZ7h{M9Np zjXys{CLcj$1)d>t|IK?su*^rZm8(F(KH{dHmY*fLr&2vIJ92;LZUDPb4;BcDQ^iY> zseu|8o3l&t1@#E3K1Cfg#0zyX1AHMYXgp^I*r-JZj*uie4?%y7nZ-AMIRWp4wJgY3 zQ5xUu-Q`S7#gE_Ti|F$ZCgY5wA-({O!uc4~i__MonhsMk{x$V=PWn+e+6r{f6GyD! zdsyUs1o|X8XS@~C^GJxDBJQvnQfCwVRB--sjm0XP+xVdrOILnNhl<#y{DfKc6|O47 z5xh6QPnGIVYW{yh>ZI`|+{BJmb~PEbV!H@GN2vt7r@^?caw{c*3`i&+O5OSIPXeGC z2KNG7(J!h_lwPi+dZ@X^1)$V50gUlqIa(^Pky)t|Gr9>SLBPfm*e&?kKF%p0m;FWg$RFo+mNI{>MsT^&Qt`=obs%-WLr^K? zEtDNRQxP*JEbqTWt7U1EIx=^y-3*{GIXgLjw20*5^6#m1EfQS^w^{bhWqACsd)hQy zuBxV8LAW&~;K4`hk@xApjv2f-EK6u8#IXd*L9`cZ6CDQc`633`w9fDbPGXDzxDf<; zmVOTyd5?eTbA%+2i19-GL8Qc|seE6z<}cmYy?J&{h5 z!oiyi`?EB`gel&@siO*#oSaQJn4JJwNKgI#0_$8p1Scv7c?%g6euu8qRK5ljlA~^M ziC&74FQ5wl(aqBfO(j&^07Nzj+fpPVYr}{gzq6GEIvb@XRBGeUBe2dnp7p;E{`PXmAs!ogW4uc}I4}|B5%xTR)yx!J= z$BJt|KNQ_Vea8V1Zgf+D*(d4#K2mb6?xd*&Ea~kYQcd_7FFUzEP=!r?D9LCWDH6crXi|0ai0uxjpZRic{qAtPeVyc_hcm&t2v-X)K19*Y5lQ+B*p{s6 zZ1nX7Y%x>zDU!0P=pi=telV{HHy(eu>kWiSq3g*vc@G^C=V{t4XO@3X`J+SjA#~OA z84_SFp^cIgdZvRSf$G@g*?NU&HqU_N=5pG4Z;B!vBS8(fvMMP*TO}q11C`Lqv&eB? zO4pg;@YP4iu+(W_3PVwMK5`&9*h_fq(;FW z12%AwM$~PiAqGxu7_#XcC@A=`5^UIMD+FGGfZNCV#VrMmZH?%cvS4(dLPL{9JSP?G zvvMxWG^y2Hl^o)QT6Nt(_~;o}(&a+1fl8sJ0kBY#!^#Qe`24oT*Wuk&`la_~;UDdp(Dq1bMB%=GRC zPDg68s5i@DuOS(5lS(L*+2Y6A3BvZPrGvxAF04!Gwy}w6+1F^+{4jnF&5%S;B9J&F zc15af$G?F>#`o3W6TLWSVjBjH&wUkSH*Gl*+@t~(RS$pGBABpXN#j*gb#fqjb;0z+ zaW*98L3;|?;&3vur#=A0fCLSJhKeIt-;au@%`&y0E%dR2^#~TSTvELiCy3Doy;N>m zjzEwUanMBW+WU^;se8$V1vgWxXI-rsicF;ALh1{5y03~Lm(3+t<~P0$^Bug)`ZOt( z4}Kj-OC5i%D>DvRsD}=3g4H7R(S`FYa6E&6h&wx#>B{u9jKS4)IlMCA(;Dt~|1xBB z?I0M1oMRuIAf}Ue*`@_@gK#s9iooKFDlXCv?%Pf2i|NmqSbF*=afbGA6eaO_gD?^= z3!pgO=yzb-M-O9-e$%Pb@0is=b4cyEfCG|S4S#=}lYD<~V*-i%tynDSNHMB_WYm&N z$)WY>2=(~YVUp0qw#@;QM}AkaOSiX!mMM}yNE{_f(OtEny-@D1hL?R8)>q`^*ap;* z>-)IpNX}iY>~!H1EsnoDT0w_lStAFYT|a={I0Wv-BF2wI@%0v zX{x>qDN8oTl=5*gqle`X5UbEW+b!SzNlKVa8jPy-B9R6+|o99#FjSC)zZdUnG zSnl*7F=*W=_l~{kt5_GOIgaJ>V7L!B5o4q>!r^M2i3<4pDd!+)A#J02~^VU zi7uSQ+RO8ym6aAeK9n6~$(eCNKH;+~8BU{ynGnvYJoRXaz0h=JIH?(rzw-DjJ+yag z*(nC^QJ{BAMaTs20!fu82>n}I zflssKUpA@9N-fRcvDhp`X2=QyKmAoD92oSw7Ql4KbF zr@c5W=rBMdgLOaf{6?km+@4?!tn!vBh|O~=1o(cY*XoK@nXlGdm($YOXNx0ipZa4gdkiRe@R zS+VDZ4h~a`{8;tZvvaWd*8^95@d&>Mgp-YL0C$(`FKAhCZ~I1}D22gPCgk<4zw9`jJ`jkUNJNtk z#j7HFAl~Q_g=)mPQ!alm#xeV!yRShb%)67xyK`0D9${7H^Hym&J(U62AHuzhOf*t* zAnWymMj9b+`6pw<;95Vh5SQM4nOE3d#PuQ(fBi25{w!lJvo;C4BmwbHvL!9dBWO%l zpo^SWfuc_5lJ+*Sj=e8zC)p9l^$6S>?D&E9L+%$JYuqRS^f7;(CRtuJ6)MJdCU0hi z!pZ(~-9}(1&}eibCzI#_Uy?Wb=d>4*Fv(~>-k#qCEtdk~*4qPRIz0#!!)EOgn4*FH zxdsOXoRl)JoIlQvO&m)c3S(5JhAm9!sk;*-^C-6<_!)3tCA7F*>t= zpcXC(6+a#rDB*vy4>WdhN4DI||Vy+XGyzYN^#?;t907Q@TelXJysAcJFAR>vLUeXv8LPZNm)Lin!($?>51YhZk}TNSQ@AJaQ22Z;WI9== zF&J!QgPTsV_e1%=1NAB`s0SaM8eO-rYc@j9GQLo^T>?&jR)cUoE#U?#e}q);R=a`k zV7ynp?nHmE3GnrtT0g0b&l+Yi3Xy}j6a&=r0k_p=ID06z68cMXTsDN>=z!)qYdRHH zkJ0{;6z#e@0TJxjR!}0C2>j3Q3`U&0=(C)EP6~xZiOcr|`Z}Uk>5q_g_(*c2dyXP` z#G0GH=dkU$ixC_h?2p9Q1g@B2%fL?!VWjDHD7Js8`hm=qS!ik(su@+`SKilEqkU=7 zF0Zpl?0%m1e|e?mMpPN#x3F0qxf{v(l-d>~4*vu0cQkP#m{797<63Q9d+4 zuWEn6c0X@g(g#Q)x5L)s2Czxra&*4H&Ztkrs(|I{N`TArZ>K$#R0j+m4rWe?CWh%~ z3*|^;(uD$Hif1QcaRse)@r9kn!~DFAgzPs2YC>~OKgqVvXoMd~&6g>P1psULAKSz_ z&K}=!;41wRm0xQ4O=%%JJAE-{6CMGz?ight1!l|0sgr8OG+m zT&wwt6ebU#PO;A}s-#fVMLvo*n{%o>JBQU;L0zIYx1xqtC5{KZ)p=UPeJn^9<>_N8O+OP2=A@m$9G)6qi1e1ril8ATl*EGYT(EWo~D5Xfhx( zFgZ6imr=3-6$COeI5d}m@&YG+oV5i|T<`KNifi!T5C*s4?h@SH9R_!I4ek&$xVyVM z1WRxW?gV$|P0l(0Uvlofub$LYP3`r4Evr}e?oCdtpiC!ZVrK*tv$J)kW1?r|2FMsX z+tDcj&0MSv9RbYrj7)4i0A|oX9U~_lBRdbk+}YWln}Na2&5hm~WNHe3a&)3MwzFYC zASYL`aJB~icL)S>HK3!Dg`F+;|JPuj9D#<;AV(2HXHZO8J6nL1i!Fee6~N5I&C0^f z#_>B6*Z&yWIsUdWH?#qo07R`pkB){$7S0|BOb|2zVyjH!QnGtvDf z12FOcID07ASsU7#0AyT$tPGtz0V19jKod_37FW;AY`$4p0I* z0UcdI1b(XtkOOf6ko?wyg#N$6$XFNyZJj`7F198>M}V_A5TGn61CX}|+Wy<~KL#HG z|B(*BM9=hpB;sW3Xkiah%*n!<-pCO+MM#*Z@JTKwx47m{=G)1B`%X7PbfszeA~b z*aHDf0283;zp<>Lv!jJOK%0@Ck&%%N!1(+3=TR5b8xuQQYmYw;|I&p)OISlgMU?ix zrtKdSVPQLWfEOKq6C)Q3fR2p?)M<83Hc;O|J@@(VfC`2d|DnYA$6eCa)DFPJ^l$1W zF82RJ-}OIoQvH9KL~6i)XOy#Z2DJx3^=FuL7}*$&L4QpD??&oh_WyU2^sg}g55x5T zZ-D+z`+u05--+n~|7)>gF4ornN=@}UHQ+yu`roV!Z7i&RJ^tAJulMS}f4_9Xc6L_( zo3HZU-IH`Sw6-u7vNf~*=g7iI%)%XLqF~`{Yz{Crv~~ji`&{*R?ba5yKm|J|i{EcjEf!@~68RP=6cX9RsfZij7-?PTf24E2See`d{ z4qy=egE#;TpZ*|D0E5UM#06jw{ReR{0vN>pASM8V_#ea!V37EOSO5%?e-J32%pU~G zC;JD1^2z-{pnUTGAWl#|g+BMvxFDe?d@6;GYPf`hfqHfr$|$mFXV? z5ED~>3)jCqeqY`mAaf_sN9v!npvs-B4V}#Y3ISsBhZkrGGdP<&0{?0xs4QnU zyT2SjF?dIPoU$!Q~lR!GIntUDd_xv zug@B2Z~YH8wE%5PAkZCXjIcCsXUy~2vhH)oeT@*l8{O_CYy2A$)R~CoqHE?BvI;g} zL7%3{#oL=CMsFAYR=RBU^`YmH1$>Ykm5;>#&dFcpTH!07F*?IzBf8GPvr|PS&j(EY zyNLE9llm7*=yTdv^GY>)Qr^sUPwRbuq3PxvciE7~z6IW&zk*|lJNixMm5Mq0gC!^) zd|6DWIX|85zI)>YehC3nd@6?6n%K%#^hg9(+^?Mo-F*GUG)aqBkmDn_=9=_$EJuQa z_f^?{J#i<&P$jRNxvQry$D!I7mMC0H-a*c$4q+0ngT_;z@#AFKWECT8L1dSIjEaCH z|Cf>0sgPDUy(9rK2~%|+PvpgKuk&!FODDkx=}+`yVLwM^EL0YTPSZ&v@ca77B(D2( zW;&tAy?qkhH!&a(>b~MFtuzKFC$e7wryXjavm&YUz=d2Vqe!xngqkEU1h`lY3hKQR{N}7KEP$;hDOjxJ%6EEFw$1v+_u^je zSl51!&~?xtp1xOm;SNX3{z3PF+$f=<=a|=s`3dyNuY*Lpyyv?DPcD361ePB|QQ7Vx zx=d_R>8B>Z0IcXZs?-Kct6}P^)3LU6w4hqES-CqJN3aX%TuBTL@JE?{j_}Nx?scgy z$$=+Xn-8o{(n{KiFhjG;2EQbhmmdSXe|moXDFj{oj(J;LRGDs7|C@f9!B!JY_}ccg)RY97 z{NCa$Z~H@7RQp$~f|ikG&C0}HKgXE1TjP-6tM!(Y&WvjV@v~nZEzkJ$yywr|ws@CQ zSI3LZLi`B+;Y9~ecOCJ|1Cp8S68HR*>Sf+3~mcC${{u=u<_9*h<5DlJA+E_8yJR#t}m64X-#J=fz+h2@KjbuBFY0?p=4{qi86Cn9 zZ#grr`XEXg`z7u3i1jqB0g};Ys`O)Iks=3F5XLnW#y)p)kKCP5ww1!;I)K^6}F{p|d z#U`b4sEpC?3n(M&rWUIjSDG)Un0kUiO?f8Y)W3e3)+oyTu@_q1$DsRgltV})@HQ|T zwZuwOTXw9IsSqKH6^ZTVSQ7Nt4)Rjc~_ThA6KdLY`)tB2anvH2N*<$Fy`Q5_7-)Th@H;Bdu{5hsCmJ^?m zFTTuC3FqodiJzp)2FtebWr3)+-4WD&nxwtwOxgtsTT3H%5|m6 zwI0@~@bZbeF6J2o5A!|_9G7At9iixbdn_1kq3CfFKq&pdXMiJqrx*`!DP<=u)0>+=tAmU2?0y9f+k*LZkzyPpmJXJ6fKaX z{PcvuDx6a+R6oMSCnQ>q;Q?bUSa$tM>X}k%%wP63eudy$2;@T0tCk6A3d>0GH`(== z_@iGxIlQu6BWpD;QfpKIufKYKAJa7**QJiV;LC~%J$HY(ZAhe(C4sjILgo*3Su3pJ zgLk1pKz(m2*H~xM=URTW`&x6N*u*_F>J-Fcb<*fmM|iF%@6ZH2m%CvX<=0SkUK^QR zoG3C;9Ip!ySunmSTMf!>#1ActOaN14JuZvRfmiw9o(REg$N6!Oy5!J*`)t2Vq1o_XkK^$Q#7 zQRka^!SQmEi_s>0`g?7aqDYIevXK%Rb4x^*nMOC-rp)SJdKG4$oFG<;DXhgRa*ijf z+izTXG~C@C7)#Wso^a8BfLtGorX>9sxhOH#zLLq#^Ji|-T0GIE&6*yA@AP(Uq+eqk%hrs%(}xnuxLbPBIDxb_N=zrq?Aed^X^oby zaim{m^y8Hm8JQtW#HCrjo8hLt!p*FS6XT_dJCP3~*~hxB?GU9}iO6%}r7%$|N0iY@ zbsh(Uv%k_af9jNfIi<4c+0wsjFB;8k6D~x%Di+&{QLzsR2q|G(K^u_K;r0LvWJ@_6 zfQVkb*>ta#DCPsJ3iMxnukJ)fBy`A(q9FA=7(BP-xa=j;<#5sj7H-7J;*0GS18>cb zHTE^CvckosEhf&Rl6023?TegTr|no~#g*)#gTFZFcGp`hviQ$Q}kM<);$YYr2za4CT4Y1ZK$* z^q|<%=Fbg*A16x7ZBFE*nR&WASykF^F;#^eh|aCmNJ$t5+`uL8M~SRDcIbN%PJbc_ z>UxF$$Y%_HEXf$hM#snMGi?ZVUup*%CnH)FM~=WD-ZZeo1FWc0F3iLtWU6Bkb>weR zaSwS!Zr!OwD2+)<*h?)R+iT{Qf~7yd{ibpT=bOp`u6F6CE#HOEAp6o(u4jYRd9JQh))Mx zja*x9cUuR?{Yb9k@X3rFsz_7M>!EmY zfK*LZk()76{3xi*pRkO+J9+Yd=KkIhC1BHv;!{QXR%kf~M!K2~QAl-lX6~&(31P7@ zq+bQ3B+kW#j<9%QK2XO@w(1Otr>Z{*SxVy zLUm5kkG(Wg+Ctw^usny9A4bBrj97{Z%`2O)EHS(=>ImF@h??IUJDetePo!Go64KlL zO@v5Nm=eu*f}-p^11tlu&?#KyJ1sSkjmED~sOBT-BkE?$yGWBf+P|&=>#bjN5v4b& zt&kFer9#8g&2LeW`ZyKwt7_<1FAk-rTj@P71A#6C3=}g0xXPWt$5ovc;V&wiCBipm zw|)>`?88dul3w#X>L+G@LM+DyHwSr~NHQ_x=bR?N>WD_-cA%5oJD=)kB%C6;$5)7R z-iP#EwR55v2Ydw=kQAOd9!UFKqUYJJs>Mpw-}-Sy%nAXA_p!Bz^{J|vn*#;RF6H8z zkgB{4+_iY&T|uS#FM!s8)Q3BMcqLlJNIo%pJ5HJZhIX?J zujIE%af43H&u+8DOJ+z1>Fit&A_*-&RSB zJcDDQj2lDogDju#bv2gaT5;Ut2&+Z&`x$gb9+%HGe`yj#M|b+&tJ9ZZ$J5BZ2p&05 zNW@;f;t%($6cr)%B)u`Lyu!ao%0fIPp~z%b|oi#U(+^ z;|}6~!c_KGdcEqQr+Q(|prUJggj6mohO7Gcz3Y{}F4|6?qJK(U1zqfu?|#vTTSpN= zTAwE>f(BcpTVod?>%974Z<2u9X*~9!{`LDiF8eqs=F`id8S;kS&Mc=NyVQdJA~0^20`*`XDur0SPr z-nd(#hpn1E-i&<*ihZVMN{9%9IT9HjhujeOiPyU0Co8INadc&tBrQl;l_zKxz7q3` zbL{z7`n3<--Obw9amgUHA^)Yio|z&lRNR5uEp#6iP0An+-&!c)fHMnlC7*3b#McLZ zp24Ckr0prL3enk)UQo{b* z8Q%~i5p0;o;{RRY$w7E9y`%R7*iYnt4UVHD7&L)+&wJM8O~#7!`oQa3I0C5&=vhBC zYRZOL?m{N9>WxCm4g9YS6iTdiS}K0Z`I%q`ZUlo@#qI}Ljp4A~3keh#liD;@+boIm zUvqK#E*(1RxVjZ^7y*#FZ8kyvJW$OKLv@Ib0@|Vcn&2xguQ$uVZ+ympLP$z~w4T&1 zIqbbh4L^RUK?4LG%MLfr_kPW6I+Co=5+bY)kSp^sL`q+iujme2BZ%ABtYyS$pX++( z7ULs3;D6Yo4Pw1k*e)piFf^F0GjkhCgwN@K4ZB2NXwR+B210&`=)Ho|gJ+`hIF5Fa z)yMaIJ*AXt-S|jskj6MnO;W^v1oI8CH*WPNg?=f#%cZ$UE!IgzS)qZd-bBI+vQPz%2pM;Oq)e71ouVe- z^U3X2N<|k_Bt1W`-4?yZ>YNxW(&pC@D}kG|EFnKQPY9x$XOhs+5smFYujV$sMyGG! zXI_2Zq27msi8y3#v&oPUQ`Ct??-kRAER3+AYc3cp)NydxJeyXxT%Ufo>`cXtYJ|{D z`=UaaF%sCSsx(Nf7_|F;q-daB<{>e^i#1-QC)+nSILbh2z~qsqCz0TjY@PKO<6Lc^ zVuyyR?b-oxTIwm{=PNa|yIi-Z?CN(=c!$WU80NQJdipq750S+Zte(JU+YFYZ4HMSR zC3>9MFn4;Pg!Ziwg7ud6YVk=8@p;5K_*SSmBz{Ig8u%p>qj2+o_-0@7PK$W$#1&hn zzDB8BvJf)wN6oA)0(5w$EMWnj{6UE7gH$%x)5-%m=8L=ioc=_jmqALz#@v96UBrwt z9P~jCqsx`IO{ct_jGr+|i!}w7hqtV0hiQ=uW|DfdYGVa_Ces#mLp|ZRiTLmgb@!8t z9D;XhzE$B_>*+{;Fi-tfE5KfUf&}NuVaR@hp_N#Zh~F_R@dcHm-6xm@nHnc!!l&Pp zgX<)twUZIC0|DRX)MjDNVi>*|cUxmIwFAjZW6BAmo~BX(zbv5lQi}a<=m2eFh;9UL z`yC#MV1-Ir9t8=wtG*5ta(jv2mt&Jsx_EU$7D|m64W&bWIZp#25}K^Er8sfn4hZ$D za3Hg~Nk*CgVL4@W2Jm{N=hM;5c3voqyB@E`iBU`f_s%D%ioCU}??#qa7wHy6ZaXPO z9JO{CACi@w((@>GaisdEpK$}HLO#Cq43Y-GjTEm8g*^!HYnwc*j*P-HVQwj!7^Pxk znpc>iQj54XuG*%Z}#5Mtb@eAM>Mp2Ucg3+3(ril*?r>{Z#>{r3b z6Wnjn{AJ7K=2trH_|vZHJ)_XU#f=DRu{T!z$3!&}H!X0|<@Ebt-bQ&@_FbZ(h7k;K z8q)OW9u%(XTTky>p@g$f01KihNUTFowlYjMKJu=AK@~2$1P-S%XB$KM4{(^Y#%@S< z=EtOyimhHGR@9R+)M)X!%OjLX5-w0 zysQ|i@s7$AuFqp9Ll$ePi?sJva$BJqCVhMY=xNpUTA)`^7Vt0y! z>4R!H`es9OGgtxryXk#wQ&JiAZ7B4gh_@AgzeTHiP?p4nA1ZHdT|4(^2Mz|qkJB5; zImPDnpn2XV?w%Fxm-JQ}Od0zVQkxsRodkFhY0K^#5UuoCtHQ}856q|YAD{*uc5E;3 zf1b{h**1j*!MqI+d*uhT(YyHNHk8zvur z(j+57*-YnqB^ga0$(tv?d$*s%#Flt((zN6Qx%sO!0?*297iE0j2y*c9>%{ZKasK8D zwz=p@?YC>_QMaRHRcv;T5@|ygA%oyszrIELnl>fI;Q4C1x`3V{q@NEI*Gy+ z0x;c@+W9s;Hz4nAT%)9yoO!{(F{FEc<^gV!2{9WPPGs~#%DP`h0zmsNtR8JIa+)GG z{DS-4*%W|lCdM!MZi!6t`jlO6`n!dzj=`M9fLdq63LGE`tjT_qL_rP69BDEu&Z@f_ zY~~qr9C~>d#g+6$sCU|@iP>E|0m`yVZZIciHIM`e>)q-|{&Gp9V*3W{$MH9Rid2*5 ztBC=&W70dm5nd##2UtfeI!u-KUf-!`Un5sZ(HoHMIAucK+|rpWNbcRHuToiBA-fka@9#4neh0p&k&0nK`AsJIO2SX za5J}PXcIKgS4gYyYB?21bKbXq*lRM$d}E<4d-MKqW7yqEoRQAotapA>P!_W8eHNFh zuFF=aduKZxVN4?d5xGW`gJ3~B|L&3vR!(guTzvU>A>5I&XO;p!9; zIH^aA@trAD2sQFPi40&@YA};xVRTNbobR-^$p@n~yj+hG2DU@+cLf?F*WY|~Lf`IB zA8`Zrl(Ro;gvcJ1@$^313H+LM{=EM6tp79)LS1%|8E?yk;WHp@+vbvl_zFcb<7Q>o zu`v>I)kudJH><%Gsy8`*IEsFH;`7v{?PiJ~a@4vpI$wPF_GWjc7=4}{v*X**kG&7D ze$whIO9HqOLaqYaB77xbW=QzBjIoX0NsESrp;Yn}UYDg2Y&-84h>251pB=up4gipt ztSuiNHui!(M4)(b?ocVpW#L3Do`l#B4GZEFrKq@zhIwj{;Yb#LUrUf{GryNUU%xZi zywq({r|@Asi4*D~w|rw2t`Qy6UyPOD9r!lwr1A8rB)7$vYa{h)G6G3Qwd= zdTmpum-f1kDWhD`Nb3gXVfj_Q1J8u^@ZWfUC?v{Mb`g21aKuxqm+y*tM0_;P_>ZpYAC86Gz3s%bl`c=c6i@9sOIE3w*_f^9L#skr$ z(d#HeTx~l`jO^b4OVcm`6(|7unZ#R;ePu4`N{+T%LB+S~!X_zi7;x zVtHjNdE-+x4>BSxtSdEYskeHOctYO^v@-b{*)wmnyjEx=25!EZ3`znwZlX5XsaB2q z2fum10s40YG%4>*6G_}VzS7MD>uUf#K*GQJ^~$>(akM)~YJ98p#}+7WVz4hV0g}w2bcEmJi68ZEg6{ z;Nc<~-DrdexDf?McSr20tmB&Ik8yOi7S9hva|f6HvsT&nqNUymhr)JY_9{_i$~oozeGh1PO2vSU+?B*8YSHl4zH*ACYECJ14+{*!37@mhYp^6Z~wRQc!DZG`Jw-;NF>{ z&R}RfjIB(lS^|SAzUEg@ig0>t{e3~JC2aX*{`sv6f4h+33;erfz6*76OZWKm zM$|61f4wQZxMR%Hp2Y*%MncfC3Ci+mA@`!&0`EpJv=DS^s7IbGHcoCmJ515Uv(&C= ztt$oGke7?!yn+uCAG%G?37m;>QKTf%m3W7K*d16>SAHxVOb0rfeo#TW!F9sh&KVl( zv=r6L-utNkE2j1R!3_PVl_P9%d=Y$>xZ8e`f6l@PAqV1uv0l4}hOnzjwKG8-HrSrd z6*0@yOmOI(d?*~N#}rS6o4^=ma#D8n$79Cu=rI_K09L?^~K7Ws2j45!@p?R(gS z{Z>SrjNoLS_-?OK$lxQ!NX~SB+zG+1mJP@0qlf3jCh(s*OQzBd$Ymtm;4#O(dzYX3 zf960!BJ`!MF6!;4Cwk;DyeQ9zq^9zx<{Lbuxy8$nI4;^-Z8FvUBE!g+n(trg_HNzZ z2x@@dg|upG$lv9{2d62Bd(29ts6S6Exg`jLf16km9B{Eh^xh-mD}8q>r44>rHvL2o zmZy#E)&)njzVpk@_p1>6pgxM;Dt$$fe+TTUtX=T>;0{JxpLz%ffQ0x4x|-NiRBeLR zsqBt#dm`Np%_F7iZCpsy03q#g=hc9;w*(Ces_CmjLlUnOd=`Kv#$~RE^lOI#N~$ z(zawwEMs%OeycCJ&Syh$skBkCECQ#~Q!jJVyEk5|oXz3r+OuvRb?7`{H~KkqAvR#n z-)tG0Ugd;$2z@g^#gIVXW+_FC>3k(1-NF^>w!K?3t%(!;%N!vQ`iBwH6o0g6wU&1- z*j5P#fj$vEsrQ$Jk)c98aAtqYe?TZ}?SYEIZu~SF^DKyuxOE%eF{5wKR!Q7i9Z#8e z)w=Ga!1GbZ=i#dAp)b8g-JAhna88lGwzZe(>0QgN8!`!wkD2k|Os#nySLcb^vmSME zTADDS?%o^q!xBLumHjxeV}*L>V{hT*)LnVtc86ZYJ63pL)~Q@zR)eB*f3QwGD`?c2 zEOL5m!nIHdhuSFUiyB-zhbn#Sj|XH$8C~upsehsJ+NTW-k`s->ELW-Aw(je}fth7O z!8N+TT(YPLP``<9&Mmx}q3%RcJh0vo(*I!Pwy0GW$v)sUS05^(96H_EjXz8mu~k&^ z_Mz7^sMJ!W@dn>bpyy`Ne}~fB(b$?oKGX3n4I&ybXttTnN}rJ;QZ`tDm>(ZO{9QT} zPXzz3*MZlO8^>`}t+DfLPlsm+Sg~p3l16^sAs)r+{r4jc`~2Zwt`^MJQYde#tMB%Y zn_HPTKYSRh`P?txjf-wWdwDzQ_dJ(wGJJgWgPpuYSlFN(n!@7weo9~e{^=WjmGTX(UX{&QY1>VZ5<%DWQzwbUPSq^${n}gxbR%pRF z)oJ5SsItdv)xs&LHnF~Loe8`}R0O=&@EmGJ{mTd%gZj*z6 z`-%T&8dVpBt@;C)7IV?Wy@7nt>W_Q}`%75&B-HR@GIkT?{vr?SY57UKl^3NG!2R-!e*iJUh!cU=2!roMGU z5xX+i55QCU5eVBbBI*#Jg$ZQ^4m}Ku$sIk#BjGioe=Gg`5<%dg^7Pnsx0sE)DZ`08 zty!c*8G!v@Edvh5r^MTzU>MUjIQD!oS08HwQT-YjRFuNX6I>I>VZ8{^W52|O4eXs2zJcA#XFsk+36Ys`xp8bwwJU~Y|` zf^_w_5zC_p5x5a0yAE=M{3;(|FUAZ1EO|O*e^=K_dCic62^lqKg&#>-?==uwU)HE; z?KX=>sODjxJO1q|!ISj-r25S;$`0X+2eUR5PSM4L$sHwj?Fa1uY%w!m&HAh9iYm&VtcVb!I<{3h7YS zf9CoNUO3}t$}R9Y+3&o2XMKfEYtbq+v4ng%PR+rElf=qd+#L+T9txoq@D1$2r`5sk z4P81xSb7~C$$?=f&!aU+#y8BEp;pdP<9H1s;EMqar#~K6xC^h_tU~g zTIg5YFffr3Rrpjwl({OW{45qU-JOAr0(^aL7C#zD6?-$e-36R4r)p(WM0VDse<3Z9 z9}Bi0KBdi%mq&l*x!{C$%QmS4%M=Gk(T5V+oD6eL80k#zSmdz%;fs3Z zL|<*hH~|fpZ7*|x(~gn5U$-AzO#tY5q6yfrvObSlS#p&ak9PYf6cU zR}sMT$Le=L%a6%o`CI*XhqJ%BEzNy@W-M=rxaL`@1vuFKrBu~`L>IxwrYDHMReX*~L zPLg%6Xp`-n>Otkla29ZLe>4GGf(*eEHod<64(^@*N>NhA$qUh_Kn$_u)C=o~*i)&U zmS9HlhTe`ypkfa!eDxPJuM|Y876&Gn-Jr^ zW%aMjG(@FaW(n!w?lKb50cu-9-qN*xfdTITyT8V}{oobE-2fhP-$UJyj7N)MN;^9h z&$wOCtAV#lh{(?HV~r~7BX!lf^-)McB5KV(kw|bDjKn^Zi|3nEuD1@->5F%-$Iy9} z+8$<-`msSYq90iSe;4K4-*LM!?B_WatoiwGlj&Qj<%_uPg(X(*F{{I+Rf7$KGW}SR zX>tfKAij|&ivj%(e4oDf*(M5>D&&K;e z=w&LNck6zATg+&+f-AS{Crp*4TSZ;XJ%4VNBt!CTrGKqpf8q9%O5tUNg&MyTSp4yA z&nUKn)x{J8%9o;$QNcogq4g~|A{4sNMBpKC4ktAM)(klivttV}{(BpoiZG5;sBDr? z@pB7IUJ^d;n|~)de@zXcyWowI0%wi6{1{z4G2|#=vB`=N-vrX`*?Dg=qTuZL zi=+u~qcHBCd?$UP4@+W1&WT^7-I6>%4sJm#X>;-Tk z+`a*l+e3VVyj~VNtR68Tm`5{jb^e%akActN$v)BFDv^A~eClC;z{!`)#bl*58U?B} zK1ah7vH*9r9YQ8!x|3)wrtx+|8J>8A9`VC$vy21@e?BpZqq#s-OHi(;siZY85a~~OG9hRv$k=2jx;)@kXr@0)D{F@_Ib6SRF$><=Dr|e0G{Q8{vX<8;u<@IB&(UZwYQ1v>FNGXG@DM3WX z>v75_sXY7GSk|D9Lrzbc*@w*hnHnmSAcF=Te^|i|BN`x!Y!CctIOm4cwFNJB?a8%` zFT)_8KK}--(Se-%^qj|{jNuB?LdcbL{wb6Np`Y=kONy+X>mZF|hMZvvfm*_1x~5H4 z>^s40oRormG22ie#!R_bHAmkdV(jp0{f&pO+Yb&EyoU|Nl>%syag`9xVzuUufAs4(j_B0ipgHR?2Tjc__f zb)NodQEb4xuJgDeJS`M8XOmAH&V2-@&gwrEAzt@U(}OFz+3oYv^&qmi8xi zNJ{Ch8zQ54^7-3U~J^Bci-LWO31ktH#u?Es|LH#G6(E$N+qYl(=dWA*m(f7{w0 zA*UuT3LKq*<*HC4ydPJ0iPK7-I_PA@3d%+`$|hqLj~<1re8oe3h3mLefV%ujq@@&; zX`*J`daO@YI;bE+tNcN7yZ4;Ipc`w{@&(#erLVc+8|z&eWRVg^SR&x`ik89(=*2}n zu4b$zBI$abD@deY`VCvDx&690e_XmgQw1Fxoydz*5O0P%vd zoJ0@KSvW1)GwIdZCDcJu%dPdfvrf67`Pc~$9BLX^ujLti|1I_P9JT5iFQToJfaK`} zgf#Y%^ue7S-~Opa==!&;Ne|AQQG1}>mkpP+7~(>Saq=D~lKeum=?UC~f3)eL!Tf-j zT3oXX-3n6@65MlRLN%^;rkcS(7POWO1MqJ^?5%}BCSf!l6+U+Z zpRRfZ^P}2&NI2)@6d_JH-KYCFw}W}4LqK)i$T6j3+OcmO3!B*2We|6Wi*iGyzyR%~ z?Gkj0sd{r%S9q`Wf2i{Hl#+BM2=J6_zrnzSjFk z>0x)9g8mjPX4K|&E)<3bCQg;}+-$;fnzWi42|qL3K6oAUkCUQAtE?g<{={lyp^HX` zl_kX3ErGajQ+RFffF)Q<=$&dHnrk*P%{5ogqoAkc-H;yie;vl29z6hR#6w>&4kt{O zMPU!|i^)n}{f*W8hSX6^+plnMgoW~xTr<~f?(&C{VHz(s#^7e5D^!**A&gFlN@|*A z^33`KSU4d~qBJQ85vJiPeOsK51Mb)e9rOWVeaI5fcoE(0`k4YXU81VZr~GM^d&bnN zaEH!}4fsQIf98%!E%uei*uFeMR#p4B9?i)0r?zn1#d__@2{@w5clK#eB@SK+C{uCDSUl zEapUa@n#hpWkrJ>*f9T^F{D!^$_oGzlT&%U0&*#QejFGM=GoEB#ELqEeqva~3vHqI ze+BSawhMLzD_2+WU4=wIK#UUDvRrGG2fOt9ct(G3fVNvh#BWk`MS8)GCNy9DWHSsQ z>yReORDdQ%d$yjN$^sZ3P{A~5zd3rw5x_D&LYX~Hg&`0-fMXW|ZxVd}YpTq)&`^Y8 zB;y2*@W~q@fdeJ)dW^a&a?CzzLCqX1e^{mw?e-4mb7*q@qnmZZde6KkK&#dJs`e{; zME{yX6>_^prY0OCwFg4Q16oBFRl7&@kU^tP8^`x=K`g4dW;Oi}q?HES^}_)04YHkd ztI!@fnvLx&a%Hd&L0r#}C1@4ls!v1kMFGV~`}0vhNO_=$&+7)#-g;y(sy=E|e{TcQ zdr{y_G1^FqlW4ez8&Jmw*KIr{^Yl_P62a(4ig#{Ulq}=gl~Iv#6Q0J!LYS2bMsq!~ z`~yB$lZK`dlhHRII!QCN_>B$Qq7`$!*H7v@>i5;bDrE5EWht+MY=DXj+ z=&!kJnLB7tLO-(Wp9CTyVyGm_XzR6nb_b0&g->;i;`JRh4kT?!+Jv+c&ov49b3vG6 z^>&wr8o}a^nKoc<>f#-_gaNX}HXhI0U%|3ZsbrexOLE)bTWCbK&(v)ae;s}LX6}iT zbJJ602Eln24-4P3BPT)&s^++NgBjo1Q7>J6cUAGZMkhg?F!u@hL0QLq zkA%fM`UCL*rPss;>vcYP+vaq_`W4miyV4qjqk0Nv{-Tl!nBC$wzuq$m965%t4LQ{s zCZFi)o>`FOCWTlsKe3iWfBI#V37vQ>iWizDJ^A-LL`2RUg+)i!qg<7qg)I?mWN)0p z8J_C--G2Xg&r?;V3FlqQf#CzII6Ex3YxsN0DqlOysjg#2v}8jH?XT{FXvYB#Xe8wf z%YGr@jTW8vpjs4)7KF;joSZR@jLfAF9_13$bYC<-#p ze%>AReDPQ)%h^lY9`%ne${dQn&zc%KC_OMeqY|B!Y>|Ii`1qJnc(I)Qr~^(jWz{-2 zad+9DSt@)ls24B}y*r-$$fHsTFq04{#?xhIM{K4owzOei$c-|r{6KzT?)8wr7wmSw zYbOe8lC4z8pc_NNf6+&4FfDO5dHsDso?VmpDlSAFs(zen*~osqqNLyO!%EY#tG5+R z7h9FK^)Ff)UK)kqcI43YAFT*|y)PV-&!>~BSqPJAV7&2B#`C-!LR5QgC?TtOUY6O1jKX_!A9ESTYGDR|?6Ff5jM^L&Bl*Mcg2$F}B%~ zGnyHCwdhjeaTsH{@ECfA!A4>SU^tO_1okEzxCZ9k?eh+H^Qhvl4#HOsoxqhVPQN;^j%U62m+wNCDTypFDgREN*D z=8>8zi-nt^e+aEC1Oi9qcpfe=XgQkIYM6QQG2eFz;`m{YN6C z?SD3Ik0$n(mCMObmpH;x>ED>gE4K|-o|DuMKQFSDlbitQunb_4%;I37ytcr%tEe=w zeth<)K}X*V>rF|Qc@tP1p_gI^FKipKIaz?5)N31-`eLs8)gc7>mfBWBHPU(er=GY- zUVtO-f6U+!fEO?IhhNT7j@)rd!l52}gN#C{+x9Ds0$HqsL z04Q|lh4R(zuh+g5FP0aKOBeJKnj3?FV{}oc$hKoorO$I7Q%el*q7q!mNpEmo%EVCd z41T0#q804@e|2*x#5#HUBDSt{&$i-dd46VnmUe^= zgoc!e7Gz5nyAXz8vsLp&a(Ks`#pfLP7>h{%sDq{8L;^8{8joa6*f(vr9$}^Yt~o86 z&Mh$juR5lEX#_SA0y~Fe0(O3N!}lvzDC{cN)h1%; zf4y=H&0&6&IuKh0hVo>W#01J&!VU`Qi!U;1F!g<Ws+3 zRns`^z(qIbE?B2I;#K=j9e{O%=cBi8{TR;bt|EeWLmz33PkKRBavQJUu7OOFe>{qr zaD`y;7(d*;K<=h~E!e@X(WmVX7A5Yef9$h1RnZL(OFTDc3%=t7rn8PnDwgyQ|Ny`@!?W zD;0Dh=j1mx}uizAbTG&f~2=uBa=lDloogh4-r@pmH0kA47rzowh~e_^3?F`D)# zE?*rNKD8kZ6QVGNJH+St?qf4YOlj84P!NMYl#LMtp@s&T_bAk+4Y;Juz)^{#6-$b@ z1g>H@%yF^*wN4r$jOFaAKWh;^lcSw3D2_HkZL}B95sq%cqYlI|P?(p#GR`vZbDlH? zFfMsN@Ssn;43l>Y2(k~(fBd%sJ>H6;%*^MXCbr?G&H_MYn;=ieQH&h0rW0lWi$W={!0E3PuCYeI@hNL=4*BkBIuvE@Y5J{I| z6^6-dT_A!B)xXkaf0RZT2X`aAwjlz{KBg#NbR3fW4LEI#<1eB7gseG~p1haT2pkcm z_zMWGmE9MQioO#qygn^0q3xTk?%i0&UGu`78FQRJB{m^;P*ici5SiV>HZ&HJ2A1JN zZ4W4JJsxem&Nl+nM+A)DpNG!gf)wCy6Q`20z?VrP5$GdrfBh1MPQuy9)J*4;3vdvozg=t+0`)f!+sCi|gqU4{~Pq0t=xVwE*rT;f&z zftt|hL?8M#mtsPX0=WuyTfdnF0d6b+Ds9(d12AK62}-*g>d<~%4xT{-v_LM-(QR9D znJAQ44?0I(t4$qn3entDlz1XHPveKuHrxU5ntsULf6sT?a-KPRsDuX6`y+a9*>PO7oqwD@wCPoB5>ciRkq@# zgVBRB7Z;Oin3XOjgxGS#rSn9`r%=WnX$%sPzlSXkS6KT|ofDA9pS=g~iquVQp>(ye z2%Nl_e_@dNlZpmcK+TGd{K`!GbD(1?KW+*3*T-8F;LI|N_S{e=(6pmKV`?q$m(R+j z>*RokPmn>8GUDYXk!oHMs_@VE|7}k$2=LY(0|3 zqsb-SNOe57qG?%0t}tr%xT|`&*CW<-F$_ktABF7+o|7^JK0-^^Hln?@_)RZ1alvH; zJk!Mks;T=G$uf}5z>X1x_46W-Q^8_;Q7aiZWV+?eKpH0|mR*K-(UB?5`r1j58%!Y7 zf4Y(tjt`{7F$ePU@&0Bjw#FTB6TY|d=#_Vr4d-HrkrVfg$21^EH>@;aIVDQfqu;vG z=5>s_ht2n4@eAf9lRIT&Lk2*9vc2(?1!q|+52iQMuSdCvK4BW_XXE~48gY`0meWTNf7 z=AA0bgG*xEfq)8Xa+dlKGRfbzm48$@{D`^PxyrY9;D6&fgym2cwTj>%Z1_xTSl?;p@)W{f4!IDAL1MI9`1p-wr{V9z11gVbjP>$51N);#6l;%F3w#y@FfXe__o`^|LFd0cVSrH!#NSXxtnO6A^m?A2&$U2lKp1 z6b&40ZPe>dVAvc=ZPEbdN!{^=x+6*r7m%|bEbxK%`<@SD1hDz1Y2LtgmY>JZcITij zmzLWLZ2hzhMX{r~6nR5$9JD<`*=GO5{vb!tWy z`r$|ueM87Uvt-JWiJ?@HOu;TC0%dcnVVYvOzitd>9%sLikLhs=-Qicf5@TsqIM7%z5t5cdJ`LxAL6GS#tII5cg*2C&KYczzlSsK<> z09y=~4uV@oNMSMySq-l0Yh1`P=pX&*xacvuiOq;{xqUOT5zQiCfBE%I8LbPYVu7RqB{**NLC7S!I({tSC9Pv`-BIuc3k@t?q*tDx3gckMLg9 ze?F<4C2Rr{P3kq4GJ)N(^lwo>B#rKy$@2Vvy!BMKRXgLIpt7_~e_R5Vf`P!bjYD$CN&e&rfcKS?uUOLXA@qz~*AVTSycw_DSSXFU zC8$J|q1M0{-Xt#jh#+R7J)I3bN~wR*RiBjMgIER;SApLRKqi*U*t0@Gtu}9zwPKN> z#g-=gWcT|}?!a${{O?i*jI>qrFTQ4VQrbx1JwU#g9n%;Ae~knugn_;u*@u!R%73Ix(rA1X^h%$9wSR z?j~iNG?1@~eb$#7(oW)xZ+dZ8hPb?~|Cw&*w07;KEq1xX36v>-H-cjwZ7Qw+fWkSLA#JA}rCU z<(PN$egr|092i`cPISIQ^5y?meTrU$oU~&Me?(zxe!GgIGde>y)&M*zVD2h`=Fg)c zqTZmUzfbG-BHFr3p1fSKWh&a@RNM>~HcroOo<_iGf$(P?)E(TOMoE=rN+EB~F=mQ3 z%Jm{J|*ETvexjzKw(xQJl>T)xg4xPVvS;q z8iGWkREc6)KeTmby64|eI_fHK5_Stxy?%lHB=ij7lQp7J`Rg-aHE_WhP;851gM9Z^ z2UJEh-wK=0aqns}bvh14sc~2XDTI%-7Q=#RWNQXWJh-Pez{xI4z%Ly9cE!4!f0Kc^ z$lh0YXl5hbs-tux0n-(gt9j5{OJ1y;p4&Eyf1Sg4YF!Tl*`ZWUIcQ+L{g2({4Z6%! zD-ZH9Ro7}_py6LhUtA^lLj>Q&X5~JvN+v0-`&s6a_p2C&<^FCJ)hAakN?`u^37y7K zem=)1sd>l+j}Lf~LVxG_RWE);e@>zlWFtIYD~u-UBo}8{XfMe;)t_2J zj2#^+@Ws}c7v%6mmHuA|mn{{;R%(^^jv7>q9A(>Q&G|YU!N$%6@$=kcf2e*+`8Q~a zlQe)BMDw|Y(lzu-z-u~X%6b`X9U5?Qu_5{UAkMHu5zY5oHDmN{x^osAaQsEB4uC0H z6N;fP84TmgHORtH^5ZcTyDq@?EaI!^@YyEK(lsG8K|abcAA%nkV%HPr>BOWnX!rf6(jFzD9pHj1a3Q0TEo5Ny}Apz)Of}@F>MSVN-LhVoN7! zIbM48pr$+j1b@w7qdyQB7(vkGI6g6iCe_B7tdMB+zqL>rY3abe8db8-xu#(HUmnWU zZcDf3C2P?@PDyuAbzNAMq#x<3dxcGnj(GQ}Jd0OR4CIw=3|;o5e>Llmw0w?nF0|Pq z!V=hm?}`W<=rPrb!AYSoO5GhR#*RQ3ueyIeqQGBgNG!bY>`kHd956UL^mdoi#Cl!% z>E8E-4XIdI&q^Mc^ACq?A%M?1Sr?r~qGsLMrt@?w@8Hsm2(!zcD&W7E&HupCg=MNa zNx~t5yFAL-zF%d=e-}-rzls+U7bqCIx2krburde-;6%`p?y|jJHBPrn)*C~0%nue9 zr1Gv^o6z(6%4)~u#nUa1f5uZT!iY`*MsAjYdJsow%M?`DDih#CGv@aNvi2tEF_8gl zV)iIWDjg|1Ou?78YQe|t6Lv|y$q`U{w+GSas_ ze@g?<`B1Zw{@E3~guW7MeX0N{L?aq;8F0>~&?Re%Y}N$g!s)bf>d)m#ml`IPJ}=qQ z;HCjntzu(>l~F_IQfaes{9f>W$-#|t+8t(jS6Oi@>I5u$m2(Q_NsD#?ql6KSSp{Xg zh(`X3VF2G$f38Knyp?gd*?C(t*axH_aGt4rkVuEHY>C8954KBA@su8|pe8pvU9Com zjr)CRDMK(9B=kbMRzue{Rx}N(Pr=6nWbXMq(m7$rUJk0Zo5zDR>AFf`l%f_ba?N;{ z=*BvNUW5#PdXK0RN`H{o5i;jPv5~0#aXW28xUw@>f5;uP*DN;NBS^@F?zhn|o!EOt zLTT4DbFj;CIDA)qMM}2ghts&jn15&)raJ&Q!AxwI`6ONSOMB}2A0=OH^D>XO@+WVa z)8v2OAFNe-lTth?&X zvn9^2e>vk(StHTdt9!x-)w4ye6=&S){BnsscP^EaFVlYlq5=Z}LaL1rl-;XD$nvg` zAd|{G0xn}sBvI9D)lEY##75XN8vRGXV ztMgtIf+Jury1ap?G;`LG10`r@NMiDH?_!vkf3~HNkW@YIX}9?-sc5twCM5!Cl6A=Q zoq0OBI7FokSoc>qA|q1gT9X@}=~pjEY-*!Dc1DfqG922>T9xd!hb*Oy3xwg{lja?v zuJ|XuwO_e-u}Qr;a~sLNVa~qy=bLiOE_&4+q*bK;iwLxtI*?wGyKbVCydCi!T6$@X ze;*shKvz%2%I7SFyMUR3BK5@H+}$W;)E*X<$6p?VRASNuK}kmI*7LI&$_xxI4@&2R zz+;!C_)+wK)4Mb5brLenvIWqmwc~5W18k^<96@bDb4&0+T&*1b(AY9;(L&ohr*BlS zgiiDVZYt?#lA$z{64LU{;}@L?JdHpieZkHfMDvVG*cr3=+fXr?RF-8{+tfbw*H^^TFe~#m7 zH6;IKt**AK(*sjU`g*y2Cbw;pQcG9e(HQz^GVhZ(A)G0=Eo&OaRvIlCS`U12|I_C? zzb6Nm@n9o(HOd~w`f~>Wz#r#059ZgV)wS=&%sgjBFWkVH?rL}CPi)$sDOofnZkLl{ z)98-t0|}FrK=NZE>sb=&MKe3)fBgKXfY0B|v>sYO_sUGDbbkcPaajLU)SiGYh?rJM zDVu>J_d;yabqA1|oilOBj~d}oHKYM5${#$fcb$QyvmMPuC77ApyqbY1l>)15gCpW% z>Y3tes*suA!PX+8MOK0Qy+@E=gj*5y)gsy}T2EpkpLisi-t&%CijqAoe~Vy@VZi+3 zeIx%|f6}>Sr}oy|)S<{7*B#5HEN6KMTi%Wh%ijQ*z3qR7GM#$(($R6vu9&=MGdbRqk$4TN*M29##dHLldV@N(+ zXjd)%yM*yqq;V?})kSj9e=M`#B`*63SpPix7C4;1M5dOG);IXOme$ALXVA1?+%r+X z41jP-{eh>CsoQVFgJ$Sd@W%ZQl6F2f5RfFe&P{UYGpwjqWP`sge+egMvxh=oy7b2+ z>rf`1Fr4w~-&v_OTET+zm8 z9C7{dl+hhI>>I8@f3R-`J98`n3zRCpwbXWuOn&EVr!*aofRuA!&3w(H^U!W(G>VzL z%`l7r)~3~2c-l9zo>F6lXfmathb$$ZGu9NwDB-R5_;}Y-tBjOSZA7mN6w)Cm=#Yu1 zyLtXT9-3R)0mLw|+XBoDe=+Ao`9T<@O=fqDFrcP=hozLle=%c+$*l6rewKJ{YOf<`%&G@ClswKXT{X z_>AI~s1`mB@@G@>bce}62?B#&@V5Fsk9a%&DEE%RXNu3!=p54*SSP)fhk^#ymJ>){ zgStJZOl3U)idMu0EB9hR&m2?mJU2g!PLWotU=y8|f2an=d!yuLWdH|l59|JUQ%>el z<%olrFBlhj)1nMbmtzlr&mz9T^O=fsQP`Mff z;q*Hm*~&6rx?G^Pv9}?zGt@`Qu?5I==qRUBHZ7@S(K7sDICQ9Vev`?A3m(HIsd6Xf zr2>+Ff6+wVGs)$tw9{K9!Ze>spm6s*@JV&gka~AMqACOp+Kl~I(Fx$@Ln+to4%_ST zEF2kc9DK@huM=#0c5A+0;6t1Cz!tuIKRKrT_Q8b-QH*~%_^nSSZZ`G-pmEJ zIwdaTT9g%ti4=tn+vfB8xfQf!i-ec`U9N@I?1KSyRHe6_X?8`ZRFv{)aPIk7eTx#K ze+n4|P~#|#mQ%q--eSjt@t6T>)Xm14!3GeTmaaA0e>}qBEiN51IUIc8CmZJ2H;RyJ z>yV*nDV6KGYT8s*CR}&W58W0Jo$e42Iq929~7GD2E?Hcf3RHhG<`M)1a+ zf50m^xn3{0)*4rqt3BZJ0x+_U{y_U%r-7a{u;6hfRk6K~vLbQLq|vE_SZ7I(TvGxP zMe$DMFz33I#Ut-0HX_GixD1lLn|~_!C~l>r+R4EShg0J$q=M2Sh<1dq6!-7!f5nb$ z_@fP4SC0~_t9z-f!pfA~Hj4I3ZbC$JviGFa%5!q5{jWRT+@U*w&}H3OefyIeWK_f=yW7B=ThqX^}(X8!Tpk>>tLYz0LTJ~i<*ar%Ch z2$#HgycHy>O;Uzr;t1Jhf4_0vZosQfR?`4}EDG3s1HQZHlmPdj6Up{SV1qD}vxXo3 zN*tVPtzahg4^SIVoF_I~?Owc$k8nyKA*#5jS?X`nt3N`U0tf+LHo5%3{Y#El=qlzf zsL%tT+6}#5`B1K9>W@O?3F?J2-=J|BP`0dbtzF1YZ=n4;il)Ukf3Y7@0IkPWyNUm2 zywmYXD8by<_~;3e!XtH1S$7%$j@j6OK?+4hu8(XLcq;59E)6$~Z?%ISnJV89tR0H2ZMlcH3KlhRGQ-=fohD zlcA?9;FLrf4W=Coe?sF6Jk!C^-TE}2`VTdW+c&ZL#m4G~`A9kgdzW4AC_l9#;3wZr z8!JFt73+>)((#@_ClfLy_jWTKKp+T`SItetgsv;Eh4EP!b-ZK-#3a87_(lO9RT=FZ zjiETx(^mz@#Q*8NHt-Bw9IHE1*oRJy?CP}O93yQNM{vm`f7(A9y;NxaQj%#kzo+}~ z!S6(Ufw4qDJ(a|^(yh}6=>u+J%Rqca3NDF3se3U!_%$V!p|{}2;_JWbeOu%Jo*OTxWf5_^|X)x~*ilZV0P+kAJxzuwle{#A`*lD=8pI&|#^^ONF9i&jjME8b- z6qyYthPOF)V|cRI1%ByrVgPArS!36;5;gWkuox7IeS2kB28zoBW^tYb`XGSt2LY1X zp`_D|@D=Pf;-iqLE^O4Ysy`?} zJmz)?xQl(wj@pxmqK=8DD6G*5o7C4=uqJl#;)U1TVOee1@|cg{%1}B~7m*9j_D-;R z7aXT(JK{ja0hU5%o`m4pyIaekGZT+(t}ZA$sm4}U2ruT#U^@!C%L}v&y=HgzEA5Ly z^-c#Cf1Z$LBEBs!e!feELFfk9Qn=tRsiU~d`Xi=4T`zc%Skp-5Bji&%1)%&+Z&4NN zUg!x9`jLE=BMBA^dMd-by>bX*8l_Gx*f5GUsvP6T|YxR+loe-mqWJ?&l;-z@; z!vN}KE-wwZAeb-kn~SB!c_fyk!f4BmUErg-6WDW)7|KI_^s%SvlAfsPqS*cPo0AWt z_LguwP{4Y+$ z?O`EE z8v#RMdG~pv*UAfvfM8b9M0h_lk|sOe%q~eww!;NZxQi}NWkX?=gJt4Pf4XQ;(Fwto z>`#&1fC)7U#u?(>VK^i6Z9PO`>K7URQ_3d>E5)F0BmRUUxX*DfYMkgA8_7!3o>Shh zxvL(XLKa&x!o!NBGqN40J(+@V^`ai^1!Ki1)omjb1fB2Pls0Dhtd0qpoPg@ZO?znc zf1>K?a$Rbo3$6-UUsxlve^HEp90?k7EhUX8{Z#5*834y%jo-+K?k^u@Mq z+g5k1PSUY$J6~+uwr$(C)3Kd&eEL7<+&jj7x^Go;uf1!mw_3I4o-@X?abbfm$b3IM z=*V~#VtJtd$myohX^)~jOA!pD6F+mu>hy1CS~Qq1N|&^^P5zvk2+xsUTM9bB;~*?p zM4h3rb2uWGW@RKMRv0yA-y}Pi!xo2XCUhksQpWPnXdt66SVWihj0n)`<{D|bBi*D< z3y>G!TQ99QI3Xd1bG6=TW(1nAk?U)UbCAU3KyXe+3=p9nGk=8QyHNmSHPxX%V^ZP{ zJJW9msYd}MJjZ$W{nRj8)33V`eGvZ!XQdkv+;2voAFOv_MRbF@lp8Q3QQsn{=F+w@ z4o{Pe+`fG9+bLPD$N(qe2NVO_Mm750If?&%vA4#?lkAtB)+ya1!AUDX<-CcqY;ir6 zj>Is(PVegh8B}abU&}ahH}3Msx7iQK9`v8l0?(B@L* z?5l54S4RW#2Akapuj^t(DZ(Y!YuV<5KlakdC>b9T5pu%yCVn0FEPuV=oryQBQaRvqoBmf?!(*OA@oNE|>Zr!^v4RFnX{y9_ys= ztqBQ&`26im5yA&=m?#2*S9Y~+60d|$yG0A}%~6q;>mT0T0|G(MW$@$dqznr1X+Hk&BcTku1OaJsZQgBAd-rcRLq|CRwp;YM zX7gf#jq0OHq|c3E6vWDvcV{=&a=T#KJ!qvVQ!i$bmJ9_g)3^xe2NxlkSXRZo)3x2q zTu-(`W)HV>AzdAZawa&A!>58i#rSDCch#&)2y#%!+;(=Cm$C5x5OxRAr7m`%ckQwZ z^FGrxIKa?f9N#XY0_uex9Q}*tPz@$<21_gQTR3C-b#C_9oZwnDFc*6o6GzpEWolfJ z9=}spb#xxNCY%Im5%2La#!A#7Ac8DCMDP#EqPEVH`NFI<#))=b%%j}<)|3Uz1LwJq zBeFfM8#gsD=}I{KJA0Y?b=c}Zvwkbdz&Yhr|NdtRg@sw@#tY%&1acPN7;^=RQNl5)crQWjrfpr}pd<2D9*%&D5& zUkbcoM|))Fd|x=8rdt0SK-@*y;vVq~i`;HRRf`G)U3swuL6@PT z@FIQ+KKp~b6>b((*e?TLP?@7RU}_#GTibuWsXH(YSzM4`qyIc*RxkgYx^}ix`Ny8W>hZqzK`6)t$k(;lHx!xcffKH(J>) z!W+*v2O~v|gqHfOP8Cz{QX}?B)(Wm|d$dXX*Ps`VNgDu^I(1ngQ6;{LO(aSkXx+WY zOyPE%=3dOY*i8>SAh)l2+>}oW#{7gglHW%Pb37Y~qFd79E8f7XgmMw(k$_ulod+h+ z&w3l9tv(xpetk%-%Y2ePyfyC0H`BmuxXMKDk5AW4l|sK)$wzGsaKuL)cg2I)3HT>ojT!kv96WKg`ksu*&yUo z5@UOk+V$0W3HD#@W66k?6J2JJr2)l-X)t8iFfD8>?s4PF%`=$0re-y!V(8F#`eb#k z)GUY$LtJ9yNzliyp_R=vM+_%6h;k{VyxnI4zVKk{FhxQz{|V9xR4B!p2}@_ugFzTi z(#r{5_&by8-0f~IIswkzQ6-%_m3!WR)SG#;@2-V$1yD=3L#a>aifUNhdy2RcP!bI;?Wbl}@3Oc?u3D5I?4 z@<@Kb&XS9Yjz(O10*jHd>Bmqf{pS7D5rKQeSDVj3=a3m|`9D9XZymHzzAX6XAM0sK zKS{{Ik^38nIh@?qOhLjp)0y$ISDB3JjzN z4iX8@n+|tvrE~{@e2Z=N{I8ea4~n(}j}tyV3HV8?rLRT9(Acwh1x49( zDs3(O4+dcxe%19dA{cF1C(I*DJ7^@EJH}?U{5FxNmwH;@KU5Y&MM<|yE^Hi(%Xmbe!SUYCDGGxMRClJe8nUkf|b)g?qtKZ4|&m;XU1yG)Sp1u8_{arpMdN9Vy`)vpa zHVO-yFF4LAL8B0S?U;#8AV&IepZku|xB%t#mt zuY;{C?JIb!k0Sk4G$PCCR96?TBF2_Tj&GjJN`Yu>QfV3dD24N>lHGom7BolP!&W1U zDd}MZbi9}}A48PD_3#x-_t+vZ$(UIm^q^*_5j{J3JLkGXM`LGu{N0D_(B_l5So7NK zup6xr4f_+*-@)x^=MkWGr0~oUIuvoOT|mGBMwi%J-P2 zY8e&d(S9^(8f7f4OeBd0O#nF7Gz{6_u0-@Wr8y!jb#qe!1fZ@_?Hog9&5Jw9(wQVQ ztP?sYwRx}jy`G3^@3adBx^S>AdhACZIZ(YQh3QfnIJ4LxOviwcw@}xT@bjfLHU`L< z1$VG0e7|#*J(u#++%>W{5C;4=^>nNUDKNr`=BHFuuZG*tLrZ(uKQT0Pg=JzTJ$EgC z4;u$~hW$>FhD`9hKzqg0E??bb3RtGU>@!8K(5jka^tZp(5+8Taoe)87$!*@RjDQ|v zt;{P8UfeyFxIuRHn(0=uInjQ9|HyaCg`!57ObT#rhy+UGt+%Q`M1*V5IC~$lI|unJ%`aTR zV(caS2w-QlOl(*5q(djlgkcc}Danb&3qM=%jzDu2{YwzU3P5$cJ%>AHu@-#CvV7sTn>gvGOsE*8|~EUj?+Hdmt=FB zPC?<@mhg1(Bj17&(k$pXu98I%5btXrv12%N-E!8-sLjLuTq)=cje5HZp%2h?(fLAbtyPd(=BE$h)MYV`8)SUFcOd${Wz8@j@$4Aol++|&TYNsO<{MT_qMYK z4Co=R3=RQ_QH=*i5c`5Zlm|!1`RqkNY4WYLPMMM@rK_5{zwz`NPUFHh+pn+RsE3XT z%M9?={u5c76dwov5b$}Kupr}PyqBnhU-rvXq&q!%%(*);g&8$Tr*PgUmJt8R>Yx44IwVwxrDA*xcPQy(8D!Nl2Tm-gd^ZTZaezD2smLiULao%Fot zOEV)Q159-Fn8HDI)K1`)H?-qd zf`T~8j;9=&ie*XBx!ao1lgm6$krq-UHEYBr~`n!(Hz%Q=8I$vymxshnBm*j z?71#)6G>#5$!1+as_9wVDYaflU4huFl}SC*NBPi0SQMd`NOInM9Ja>KhX9bI6|&X5 zBQXQ{JNx90sx6|+AuJA4-;xJ+AKx}4M%LR^y1a_rcl+i9mttnEhEbvM=HgyBsTE4i zEtkRD>V(9T&{9HqcY67yJhVQ`4sU5=sU^+!eVa+yPLj782O{#s<>WlMzW!b-3-j9p zLRd$u5832eHwDHbj)`h(SQZ{ara0Z$r2>FNT=!6~M+D?BpeaFGq3G4Q>Q(`0KTy)q z0yV5gA)!#bdTd`tSx|Q*bf?JR+Ge1!q4g<1x5i6euD~1$a(t<{>)iHNG`YCSDw4jo z?3UB>{PD7|nj|0o-C4*oNRHI<-8@Q#cACt={Q^Sss3j8&pUK#ZFYR#u1|tEhn?46p zB=~s_ReIWbA9NU_F{47#%A08WL_l+`Teu|uK)^IflR+NRNd1{`9r{dDm4x$RGy-_j zN|v&koe(`46;JCiHm@olU;x#rYly#-yElH2I7Iz-+}6GX%~W0C2-rE@$X7vO@8vjY z%h<4A?G|#V2Frb8A3YI1lB4PLb`=6DTNQrlHozn|<%Fog)%3d{3-1`l3@VjtWDVK&4~bA+NQ5k%?l}Z0^h%<#F(0qaU>uY3x&JW@j?h(8Omyj zD|^{)Q%%;6EAVYAf2vxc3*{Ub;HWek?4T~tA$fKq`ooC|lD5dpKSYf0hk^3%E~p=W$K>-nx!R}8 z*?9HXJM)>0GOBk$MNrPQDe+fFA3yVrKe|BJLo*x>j?>C5n@z+%nbQcBHe#Q%^7JN1 zCO94-GiggLRrh6Px0n3AJkldE=)<&Dp?L&v_lx5n8ohrQJHESnT==K|maC_CXv{}y zEnIC?H@3qnQ!+N?XZ1lxZYo<@w#r{PETG)pqfnLQ{Et$O-X|PXGkGS%lSJp@%x&H@*!&)6~OZg zw^yVoZ{EK(siZO|PM95%%bfn#g`d(HMVonpikJ?S!_Y09G-@Zq`}^XlGnt8rYsv!RjkRgNp;nrjzdiK zM8@T~+DOsVZI7$n5UF^hOzn!Wh}5iW#KK2KBQ$~ypt%2=z(`(5$l(D=8u1e|=i=oT zF`_3m1JvG9DDA5S7PeSy)uwkWEy+yLAw~B9+=~_ADPd|6NV)<6jcZaA5kA(}2IipL zfzURB&mw=!FBTmjW}%tmsy-#&p31}1RszyQN}Z+A2%BnSdGY*)XI2hQUDz_)t(tq* za5vk}xkB%OZkh#t(Y&(6TlM5Gc74LO5HHA?t>vmsDHKM=c=vrvZnl9~$iSpfCBq+BBk? z%-De^#T3nR`AB7tns<>|KOZKWRuxu|HNfeb#}V3YAh3;>=pV)eB_W9T3;s+fa)1;I zSKs#uGg5T8(lvPhty+)O$r&Z+cDl;~=mh0Qg9Xj2Yh!u_XsIX8URGQZvYkY6s13#kzlwr z>iM|Taix}8__;E@f~Xm^o2oa3vs#t-V*#m=oFa6gU@F!Xi$=!0lkFl-Q%W8SoU&z> zzvQ=oRql);x!A$=zJ9Z!%0k|gerqhBGXe!b)M&eI3=cb4x`PFNmh$Wwk0uUwZERRQ zI9RctY+qHooom6AESZ z@_|?anGAa;&W{(sc%J`Zfr|$f3;vW+noA21+l3nfCzvU8S-&6OngIE{>qMFXgxIno zg0h{WU7jZ)f$I0RA=BA{;Jh69>%*iU^wh&v4D11G2@5)&;xWl?A2xU#x>Eis1dGOB zgE-TP0u?CjDH5PaFkj%|wzhGUvT#J4;?K{{aZg?dXycu%t%yMA>}&Y zkc`+hz3-v=-3r4a4Gi3~BNrB8*!#(XEzy8dr18`BnkT)b$5BvZvkKdbzQ6>db2L}9 zrXqF(kOw`?Z&+;^&-sfU=Z8Ug*M!kVI&Xa-VMvES9fnzNoIT)m^--kwRV8PWEa)5x z08X`2}A6A)zgDYNFa}b_`OTO=$lCU4JF-AEt}bc$U-wvHzM5~AQ)tgB2QnF7Yoa# zLl%t9EWXdD^O#h9G9s0sPH;M=Ft;tJ=%lM#w`l8j#CtUA_@NyfcM^fJ`jiF)X-0X% zj*Q@#d0sff-2R9wlF>b>qg+dzE~*?)Iz681^ujrskK%%q{Ee(yS_UWc$v!gCFHYcZ zP2!tCnYPKWnlAI6>#EEC0gmyijmmIB4nZAQ(j1LlDv5k0m&e0q0Fw zQ6%S~`#e=B-rmi5C`^Ed`4tKLI}=mppff~!h^4D}JCOLBD#l@1agyus8XLuJzCn)o zh&{)(JNm==k%Si+0?UbOGr};7Xpm687Y<2mG%cGj zeX?BQBt=Jb3#Gt{v)?%aq+sT8D0UZtxQ2b-Jz(J6!g5l0*uGY|d)Ej8&!?hPE6RF&-?fdMH0QPZyb>vd%3_?g^>JD-cG6yW zQ#i#JZob!DYx)W?pcdm4%`T)!`iXOQo^|DG??=w$#33f1Mx>mw+Ig+9iR;01H=pcq z=c5W*SXjJ4wYI1m=S37y7;aYJ=Mr!``&a6!tsFzO?9fniTKu|N2DiT{QBkaT2FUssr{<%AqP4z80+PYO zxY_>amBLs+#(y3;c>F8+nF8QQU5f=!wbmp8c>e<<|EJnNIORV{z2CnYr5S(^FfeYe z*5Ygc(ZBC-w~pii2Ejl%QomaOcz7(#%&<(77LHEN#615AWle0&oXv^ZIk|aKSr|a6 zfmhm6PMh4AJs0YGoKnTssC>-J%N!2)rQ6#Yl&)s8A}Qut1RB4{C#2q1XT6ZnrNWBn z+pUh-p%RH#ZhY)Og+(z_8k1nGuum|rBVamYCeS!d61+yzQR4=aQe+2~MZ!%cj1Xp< zn8EjzO9Yyn18`{e7}M|OMl4JLOKu@NzzMf0oT`)blein62iO}h6`057J*Jn)5eVc^6F zSmP+=4RLdEAeiJ_)I6bZj}*6H{6E2uZXsX*)es*Zmm0$0u>x?@=unnLAf6EVz?^zgt5)U_tuj#S~|V*FtcL`6CTa(qk;NW=a-)Kj@`yr0AAYM79}5-boHiWd6X z27~;Apyd2PBuVgu%j$6>`RkBq6EfJWFb>W8wP8=m(fP1Fh(RM%s6p$F`9p)GM5thS z*#kW2nDf(KFg-c@EGGoiz)XrXfnp@sFberhKl4#V*y2PPaH${@WGDH=5sL%30mRyA z=qfZN=%f$`V84=ZJRv*%b2!d%lEGbwi}QXN41k=0pi3${g3#{M7XSEZ4>cvGnUBsN zOp*-gz>ubu~ZZ4EqsaBO;xrI$3lk5a|w_lqXf9WN`JP45A)6d{+a2XeE(bwyyDcW~vyF{#ZZsLmv8j13rAv`Xpn`Ud5{K(1Q#L! z*mF)}nLX@N2ZBg2=psatYE7j<$13z<&CbAz<9p(h-{|Uoq({R(FDlUUbo+yVNcvOE zQLwV{PQpH;yzvMc9C6d9>*;)1u^$Sf3Py*(CklPb7U#n*r!&E`4{x;?=unP=N!ZQJMG2O@SSVtydnF=eMm6K-(Tc9*_ zejPYRJ8M7HRe5IrG5L+LwMRjQ@Ak;#`8HcwqwWye9G0t`{O6M%(^G6oRW)uKRH7xn zYiQDjLH3Ee{Juxva#=al+Dx@m3Eoy2^lLup%0c3x!BRtLXB;R!y)9QvjC(z*#web; zp+K9~I8k*zS_!-K37S+mNtifBi(@60sRlSWUhCA~hU<$F<)};m=zaP8YOS;=9qg?b z`BGwuSNAwb5w!jDc5$h(%*dJ>8L{RvQ|4M!QCg7sWmhku$2EDL<$B}6F+}>D2)$7^ zLFn>#s6)*Lry2My@3n>j%-uGKdP8)ztE60vsJPRqis2)bwBfnXeBl1K!zEV22l-~( zY_c#;52lTrrBBx>wZ-3Vk(5hPkx#12({-#H7BVmr%kR8qgIx_3FPpXqwsnr3CSgnt zve!=L%g5I)%l9ScSFVvIp)7jwHb*Rbt_Mn0!IKr|%fK3cBV2_=Jy-kt%HK7bgB;_H zzi9;QtqRKnMdk;aY}tHv5No;;QH)}wS>gVW6cNL3h#MU`j%ck zTI(WY7!w$KZLxq=Y%@#yXetArPtxO7r5b4)q)zaa);u<8xH{2kwqSSn$9AJSFgm^a ziuIw>tYEvS+l$coB?D@;Fjoz3tG7O{jE-;!H-f*mWoa@80cHGP^PYcuk(jeU>PEcr z2lg8Ca#urgSj(g>KVPN$J8aLjscy5D^ZOy<^D3}&O<@z(eW(6x#!&M7l`ZllF)Yul ze%81ijMT2Ov^cY8+cXq<@RdI^nrheJ$7h?_d3EZgfYyrVO`HwEUYQx9rfP#Tj0eh( zw4CY}jUQ?2Evi6Nx`Lf}S;I~u8x2$7lEuW{&BI=y|I+vOS1GWsBjqEm(MzYk8AVph zw+xuhM&tCDqKG|Beq`}+3kqD>OJqT;0qdp14y5@fj|{qu{MSQNqm8d5$gaueQ>tA_ zI#_6G@3v8hR-j4EgGW z*EzQi(dstocjVdkQ;9(#lAJUxgSB`AMm0dx5?K`9;xITvDdJp0Az~C-g+i@2>;e^k z4_HqnMLn8F3~QQtstbx_3#FE!9%71es$^2p4_bd0^!%o=S~26tC|qZAK%b9_9&-%n zxHxPYhXq0}?yI60w1g1|HeybdU7*klyA<|<)z>YaSo_kUm$6O&9!5`oY zbOVWmHFjTK6(t?INxNzhQQa)-5j32o9?mJ0W_-3sbO+e6@Vlmw+&)SyY`LZ$ypV=P zjCG=5GwHU+hkUSioC{4Ub1Zw1tN~3Ex*rUC1giPEf>(BjE^8B%vQ_HfRmcv}c3*LLWkGP3)_#^e(yzv$;fG*cPwDys%&YtVa$WfQ3( zw-i-wolHQGxVaPBT-ji$!Nes)AA<--g7%O=>&g{lq+8KF0X)5R6&-4p!?pA7hQbL3 zIE|s27Rr_i*4*>7_{;A2<8i>C5P1D+%|j65V46{7uYEaYt12mYbJ3e*Ml0^UMPc&- zK3~aF;b?h7scHlI9Lp@WaMF($LR0JpWORliu%9aP1(WG<(0$ZaqT=dSN6^0r#ia}Rur_O_ExDNoQ?*+DhtQd6)Cb}W__yg`hox}6kviKOQKfd z6u`)6TG*K-ptzHMs3|+B~Oq9pf&SQF?5}g`~{&O*4Vhf-Wkzvbba?#>IB#u)jJNoGfyQat2jtfjr`-Q;~t`=bkIn}U>Q7p)1%|w9khIZGw2gc8m4S13%xUD ziCr?MMdwjl_LHa+{&>bG6JYJ$$Ni=NnncF=V*hev1;s61nI5EYvv~WsI-A_xS5(+Znq|u`&^rNLG*B8t!DW} z_$CQC!Rs?&SLw||z*y^r(VG$7IP93j)Nsi8n&J&q@FfR6X#{SM;>rtt-0z>JRqb1I zYuVm;!Q~%=DAYRe?hl`}EpDLC`M-bW><-=#1yb;nMH@l-RY_Ifcfi{=6`nTH#5Ia>Q}nMnZ7S)YMmh|-++RGw3UH7>(zZI zXE6)ZVBSP73QN$pF*nGD$L>J_FCCrT&CXtew~j`0uVGb0jv`y;0Mz+LL=Uc_7YU^7 z52p~{v3sCRQoO`p{5>2DZM7r%6r^vNcEsORz~B2LjQ#r(`kKrsmNZwwFIl;rML;xv zFIiFBHr5;aMK=ZIM(zk)37<|3J6#002g?GC{3wp%$97)n3G@}aGjViGy60{4`y9f* z;TYwAeHxy`>RrLNdmzjipgjXw^%ot?fKFSHE0LIL3Qu#zyEbymdxM$xL`>p@L5K%} zbp`J&+!hy1E67gkg1&qlg&w$3`Da`;6(QR>q|=)}O}ivwV*J3U$!Pk$BO}AMQ-TMy z4Q{*)9a}he`87MVrhk4x%hYf;%$}yflV05cvq^^vokSe>jyQ8 z=Emo-_H+Y@fTwPDd$;^u$gWOZ$J-9-m@>GIok}$*@r`<9$dPR-0d?c{_cgb^bXJWE zi+S(RQjO=ch2v~h)8YbRSz9P*;_(;oBy@^9McgWtx}YfeB&d`6#?c4|Z9R0`D#z3J z?eOXSC3Z$1Dv>u!x6>Lt3iOytgle2Yw&wmT#lIeCgCkvDVxmYH)M;{OguA3Fkmp+w z+7(ZUc~Lt4LW{t!W^ri#iR{$8y7lt>dT}6>Blu?J;lYMONZ(LNsKCnox*rQ<;_j(y z(cR8vEW~p@qed+ZZb{x{ndi@rzP~euG>@f9O~uJEm`%APU3U@f;qD)WJA zIYyYZ!S+dI@`p*f*5oxg)9R;Cb^jll;RdOK~rv%#L}ReIFkE7w5;vs^ydX2h37S#&O|GdA3g ziQw9T$n=j@rm4k`4)vgW87+dkfd@!x$ha-=}TAdE2Px>X5J-Y(L)M6t5@sxc|a6# z@9aMxDM|I%Z{cyE=iPgfl9tL;FtU9i`0 zu}frm(-|dKR{&TM*T+-KdqvdO=@44`T1Ct>U#8U5w)|zDZQ%!0WvFXFNV!33InWuP zoJcW)!CI%aTeF;OOfnxte;>Tuj=mOWD{I(Sl5Wkb;QZAnwDfFii)K1`rMf8DY~yGBj}eYi zc+H~XVpGUz(DDH!Y*9wZv@nuxw)stn3kt3Bxq=OZmzxG=MmelY3zZO9zZb!b@322P(t#`& zM|RxAuCRkgF$LlEmV9B(uDcJN-FzE5l7L~~8{Dmc>Y@PF)Mag)9voGq4Ul?iY(PZ) z>fqae`1H)qS=p-El!x8Im|VyrTohu+JJe*<+jy*$aFr4AvD=Va*IcQ7O<5U8#qS>L zS&id-ldkLuihQfkgd!hsZo+J_t!`~eks}{)dn!Kf8CvOCD655C1%f#Bm#o8@*cv-I zJDM2Sz?!5YbONBjSXfirn*qMe%si}ItgP%jtekW#%v8+GR5Y+ma(2ez2F@nL)Z)CX z%&ctx&yrNL7C;IZ56gegx^USz{?Dk3m51m5j=ES_c)0#&)D^9+W3|PN?vtyRKRP37 z`uGV-630nTzbTh`b*(ZUn8*@nkbq;TVDbIALpRwXXuSwUcJcQ-tFV%89Wx768iH-e z+??DXLTnQHBn3JmHAn`W3S`+J6VxR16>~gU{0$<)bXDe?6R)l!5DZOv58IJ?_ zW3)Y!Whk|sV`SvC4U;2>wfjv*hN&1kMkH(oD9qZ*@Y>5Xj+9}rG7lEeQnio%u&CRo zJA{WvPCEt9TiUV{NIID%&JWCw!Pq8-$w27!a^2W)t$%16#6qnr{PUgK>MN0EZ)Zy^ z(OfQy2OcwLM#;!)^JfZVM-o-$XtkEuSQk_uy#CQ(nRdHGc$g-y&L(f1W(j*ta4orP zQ(ZK#=jGi&bg!ARzYC9?`B&0OeyR<$jpd;nZoELM0n*5)A)uZ_!w}h{O7|kg`~BA5 zxBYcP^=3QeQ7hE@Z(*gL8~mHH1jrBJAAZ7pKyg3uK1n~(zS%!8m+ZB2sWgZN3hi{U z7Ytd8^#vltYE2;2xS)vs%+cqL<-3T}u>_mjcHt?2Hx$L>PQ0YWzJWcN#pO=1W!;t` zKqR4M=D|^kKyHTE;%AT_;2n2-g#pCW6vJ#ZWA z4ioC%B}c#2T~A2({J!5u`14-30nGRpo9ko&0vC{3HD4Qf`kdy0t8cwiJ<0j1`OEnn zR(hOHW^cs$;37g8IPxMmGXm?t?f2aIrvo>GelMK$@3X%`YkHdK>a3@I`l42=rdf&n zOAJFlGrlB0x|WQ;%g-woU&Dx+e*E@f`M~vVcP%|eh`)ndO%2WZqKtiF*EJ1aA%C+>X=`qX>Y;0z!xan5SXo#w+|%zZnE&*a zFp7f1mz53r%PVbeC<-4G9G>yh5Wd4c-&Qs%BMqBuK>p82o4vs&5V-B_IFrr8_TB!y zD+|4!J}g`34JJ`Xk0y#r@BO8n#|r1Fy6gy-57bsgIpvR*>nFz#9_5a!k0V$Z*BI-E zrS?~*4op@=tkmcDB}}-|r&$){q6oOi$K@18uny9sZc)@h|2@e*H9&@M9)h_BSv?2W zsm~-kP#)H(ZH6;*)D6=DjwT3U#0+PKy$J?@3x4;!=Ug++fBw;|r7;4Jkt%&o&#pJ` z5A-yzn{yPiDGa81Q?-G#O~3R*JPl$z4Ix}ZxWZiM#N8Z^CNxn!+2im1r%eB-(e_p_ zvpMK7TIQZ+OmrD)zzsrXkBr!FfE`T6Y`&ijs$)qXbbDz?u2YolM}ysZ`vsm|fS@RR ztPduCi$^Ed6vdO)V*kz{clz%bh1ETk46MDFfW@P$* zPvqcVpQWLNhL$5d^>?+le0l_r!M-(fYkItm3Ci(Y0<*_M^#lW4$+h6p#NiL7QLcFu zHJ_3z>ctVJZ`vI8xU1+@&<5SXP-)cmGIsvI%tg^;9}6%(-iBsJwbK*cdu@yld{0=n zihr*Q;8 zFn2DMcu^+mG*DIdm_$AWlRBIEq`jI-2}ROU!U=~XV;fb$5hl{$OrgqBmB&y>>#wXi zcEL3x#)U5U;TUxMu ziqIgi38^5&HGg7`u1i-#T7%Hq149=k>Ux-iXRt?X5uuwB!)qGUSVQF7gLdwtb{-%( z4H%q55Xh_5WugWi)ZxA9!@o^?-dMD=xDb8kTh^Lr5|!cBP3_KB;x=7+6<37Nzb`LV zJZsb(n5e!pygcJogfP4SFYGE1e>+;9b)m>GGE)4>qhNA|kkNe;yq_2zE3O$k0+QAO zvD;a3JRW+-I$KFsO-bQme+ae}!DWT8rEKkg)+ON=O@N~O!~k^_TE1?)E9cA+P-s4} zcB{BDEmgT<&&;w+T;KimKDqL*2lZA%wfh=Q+y~aZJf!}28<#rN3&4TnWZ`0mrJ#^d Hkc9m&^;7sn