From c2c07aadf7f286115bd12b0f2140a2abe11c6ffe Mon Sep 17 00:00:00 2001 From: Marco van Dijk Date: Tue, 1 Mar 2022 23:53:37 +0100 Subject: [PATCH] Initial commit --- .gitignore | 6 + backend/.gitignore | 2 + backend/ecosystem.config.js | 16 + backend/package.json | 34 + backend/src/abi/BondingManagerProxy.json | 183 ++ backend/src/abi/BondingManagerTarget.json | 2258 +++++++++++++++++++++ backend/src/index.js | 4 + backend/src/models/event.js | 31 + backend/src/models/timelapse.js | 31 + backend/src/models/user.js | 34 + backend/src/routes/index.js | 7 + backend/src/routes/livepeer.js | 233 +++ backend/src/routes/session.js | 51 + backend/src/routes/user.js | 106 + backend/src/server.js | 89 + package.json | 46 + public/50x.html | 21 + public/background.jpg | Bin 0 -> 3803462 bytes public/dvdvideo.png | Bin 0 -> 87313 bytes public/eth.png | Bin 0 -> 83917 bytes public/favicon.png | Bin 0 -> 72060 bytes public/github.png | Bin 0 -> 4268 bytes public/grafana.png | Bin 0 -> 11394 bytes public/home.png | Bin 0 -> 959 bytes public/index.html | 21 + public/livepeer.png | Bin 0 -> 72060 bytes public/loading.png | Bin 0 -> 14508 bytes public/manifest.json | 14 + public/metamask.svg | 1 + public/mistserver.svg | 142 ++ public/prometheus.png | Bin 0 -> 105956 bytes public/robots.txt | 2 + src/App.js | 34 + src/actions/error.js | 27 + src/actions/livepeer.js | 43 + src/actions/session.js | 18 + src/actions/user.js | 50 + src/eventButton.js | 47 + src/grafana.js | 71 + src/home.js | 116 ++ src/index.js | 19 + src/livepeer.js | 186 ++ src/loadingScreen.js | 35 + src/reducers/errors/errors.js | 25 + src/reducers/livepeer/livepeerstate.js | 19 + src/reducers/root.js | 13 + src/reducers/session/session.js | 13 + src/reducers/userstate/userstate.js | 16 + src/store/store.js | 18 + src/style.css | 550 +++++ src/util/livepeer.js | 28 + src/util/session.js | 35 + src/util/user.js | 40 + 53 files changed, 4735 insertions(+) create mode 100644 .gitignore create mode 100644 backend/.gitignore create mode 100644 backend/ecosystem.config.js create mode 100644 backend/package.json create mode 100644 backend/src/abi/BondingManagerProxy.json create mode 100644 backend/src/abi/BondingManagerTarget.json create mode 100644 backend/src/index.js create mode 100644 backend/src/models/event.js create mode 100644 backend/src/models/timelapse.js create mode 100644 backend/src/models/user.js create mode 100644 backend/src/routes/index.js create mode 100644 backend/src/routes/livepeer.js create mode 100644 backend/src/routes/session.js create mode 100644 backend/src/routes/user.js create mode 100644 backend/src/server.js create mode 100644 package.json create mode 100755 public/50x.html create mode 100644 public/background.jpg create mode 100644 public/dvdvideo.png create mode 100644 public/eth.png create mode 100644 public/favicon.png create mode 100644 public/github.png create mode 100644 public/grafana.png create mode 100644 public/home.png create mode 100644 public/index.html create mode 100644 public/livepeer.png create mode 100644 public/loading.png create mode 100644 public/manifest.json create mode 100644 public/metamask.svg create mode 100644 public/mistserver.svg create mode 100644 public/prometheus.png create mode 100644 public/robots.txt create mode 100644 src/App.js create mode 100644 src/actions/error.js create mode 100644 src/actions/livepeer.js create mode 100644 src/actions/session.js create mode 100644 src/actions/user.js create mode 100644 src/eventButton.js create mode 100644 src/grafana.js create mode 100644 src/home.js create mode 100644 src/index.js create mode 100644 src/livepeer.js create mode 100644 src/loadingScreen.js create mode 100644 src/reducers/errors/errors.js create mode 100644 src/reducers/livepeer/livepeerstate.js create mode 100644 src/reducers/root.js create mode 100644 src/reducers/session/session.js create mode 100644 src/reducers/userstate/userstate.js create mode 100644 src/store/store.js create mode 100644 src/style.css create mode 100644 src/util/livepeer.js create mode 100644 src/util/session.js create mode 100644 src/util/user.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bd8c3b6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +node_modules +package-lock.json +yarn.lock +log.txt +build/ +TODO diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 0000000..3bfca08 --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,2 @@ +/node_modules +/src/config.js \ No newline at end of file diff --git a/backend/ecosystem.config.js b/backend/ecosystem.config.js new file mode 100644 index 0000000..73466da --- /dev/null +++ b/backend/ecosystem.config.js @@ -0,0 +1,16 @@ +module.exports = { + apps : [{ + name : "backend", + script : "./src/index.js", + cwd : "/var/www/backend", + env_production: { + NODE_ENV: "production" + }, + env_development: { + NODE_ENV: "development" + }, + env_local: { + NODE_ENV: "local" + } + }] +} diff --git a/backend/package.json b/backend/package.json new file mode 100644 index 0000000..7ba6eb3 --- /dev/null +++ b/backend/package.json @@ -0,0 +1,34 @@ +{ + "name": "LivepeerEvents", + "version": "0.4.2", + "description": "", + "main": "./src/index.js", + "module": "./src/server.js", + "scripts": { + "prod": "NODE_ENV=production pm2 start ecosystem.config.js", + "start": "NODE_ENV=production node ./src/index.js", + "dev": "NODE_ENV=development nodemon ./src/index.js", + "local": "NODE_ENV=local nodemon ./src/index.js" + }, + "keywords": [], + "author": "Marco van Dijk", + "license": "WTFPL", + "dependencies": { + "@alch/alchemy-web3": "^1.2.4", + "alchemy-api": "^1.3.3", + "coinmarketcap-api": "^3.1.1", + "connect-mongo": "^3.1.2", + "crypto-js": "^3.1.9-1", + "esm": "^3.2.20", + "express": "^4.17.1", + "express-session": "^1.17.0", + "install": "^0.13.0", + "joi": "^14.3.1", + "mongoose": "^5.12.3", + "npm": "^8.5.2", + "web3": "^1.7.0" + }, + "devDependencies": { + "nodemon": "^1.18.10" + } +} diff --git a/backend/src/abi/BondingManagerProxy.json b/backend/src/abi/BondingManagerProxy.json new file mode 100644 index 0000000..3cf942c --- /dev/null +++ b/backend/src/abi/BondingManagerProxy.json @@ -0,0 +1,183 @@ +{ + "address": "0x35Bcf3c30594191d53231E4FF333E8A770453e40", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_targetContractId", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "targetContractId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x40ad1a638363b6b3b26dc3664972fd42f024568678e363cb8795b33924a15e9f", + "receipt": { + "to": null, + "from": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "contractAddress": "0x35Bcf3c30594191d53231E4FF333E8A770453e40", + "transactionIndex": 0, + "gasUsed": "2316072", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xd9be4d6e9d912a7600624d400b59064d60b250ccca6e6e5652a34173e122484f", + "transactionHash": "0x40ad1a638363b6b3b26dc3664972fd42f024568678e363cb8795b33924a15e9f", + "logs": [], + "blockNumber": 5856381, + "cumulativeGasUsed": "114052", + "status": 1, + "byzantium": true + }, + "args": [ + "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4" + ], + "numDeployments": 1, + "solcInputHash": "fbb7c6c031c5ea66d51283bdfeec92b9", + "metadata": "{\"compiler\":{\"version\":\"0.8.9+commit.e5eed63a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controller\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_targetContractId\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"param\",\"type\":\"string\"}],\"name\":\"ParameterUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"SetController\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"controller\",\"outputs\":[{\"internalType\":\"contract IController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controller\",\"type\":\"address\"}],\"name\":\"setController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContractId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"Both this proxy contract and its target contract MUST inherit from ManagerProxyTarget in order to guarantee that both contracts have the same storage layout. Differing storage layouts in a proxy contract and target contract can potentially break the delegate proxy upgradeability mechanism. Since this proxy contract inherits from ManagerProxyTarget which inherits from Manager, it implements the setController() function. The target contract will also implement setController() since it also inherits from ManagerProxyTarget. Thus, any transaction sent to the proxy that calls setController() will execute against the proxy instead of the target. As a result, developers should keep in mind that the proxy will always execute the same logic for setController() regardless of the setController() implementation on the target contract. Generally, developers should not add any additional functions to this proxy contract because any function implemented on the proxy will always be executed against the proxy and the call **will not** be forwarded to the target contract\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_controller\":\"Address of Controller that this contract will be registered with\",\"_targetContractId\":\"contract ID of the target contract\"}},\"setController(address)\":{\"params\":{\"_controller\":\"Controller contract address\"}}},\"title\":\"ManagerProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"ManagerProxy constructor. Invokes constructor of base Manager contract with provided Controller address. Also, sets the contract ID of the target contract that function calls will be executed on.\"},\"setController(address)\":{\"notice\":\"Set controller. Only callable by current controller\"}},\"notice\":\"A proxy contract that uses delegatecall to execute function calls on a target contract using its own storage context. The target contract is a Manager contract that is registered with the Controller.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ManagerProxy.sol\":\"ManagerProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/IController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\nimport \\\"./zeppelin/Pausable.sol\\\";\\n\\nabstract contract IController is Pausable {\\n event SetContractInfo(bytes32 id, address contractAddress, bytes20 gitCommitHash);\\n\\n function setContractInfo(\\n bytes32 _id,\\n address _contractAddress,\\n bytes20 _gitCommitHash\\n ) external virtual;\\n\\n function updateController(bytes32 _id, address _controller) external virtual;\\n\\n function getContract(bytes32 _id) public view virtual returns (address);\\n}\\n\",\"keccak256\":\"0x34ea30a2b44d0cbec58fc1d703476ff0085b0fdadab0cd65c35c00b8867f7546\",\"license\":\"MIT\"},\"contracts/IManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\ninterface IManager {\\n event SetController(address controller);\\n event ParameterUpdate(string param);\\n\\n function setController(address _controller) external;\\n}\\n\",\"keccak256\":\"0xc179e4cecc593741514237d5194b4aaac6b829789629fa19ed04f572a8530481\",\"license\":\"MIT\"},\"contracts/Manager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\nimport \\\"./IManager.sol\\\";\\nimport \\\"./IController.sol\\\";\\n\\ncontract Manager is IManager {\\n // Controller that contract is registered with\\n IController public controller;\\n\\n // Check if sender is controller\\n modifier onlyController() {\\n _onlyController();\\n _;\\n }\\n\\n // Check if sender is controller owner\\n modifier onlyControllerOwner() {\\n _onlyControllerOwner();\\n _;\\n }\\n\\n // Check if controller is not paused\\n modifier whenSystemNotPaused() {\\n _whenSystemNotPaused();\\n _;\\n }\\n\\n // Check if controller is paused\\n modifier whenSystemPaused() {\\n _whenSystemPaused();\\n _;\\n }\\n\\n constructor(address _controller) {\\n controller = IController(_controller);\\n }\\n\\n /**\\n * @notice Set controller. Only callable by current controller\\n * @param _controller Controller contract address\\n */\\n function setController(address _controller) external onlyController {\\n controller = IController(_controller);\\n\\n emit SetController(_controller);\\n }\\n\\n function _onlyController() private view {\\n require(msg.sender == address(controller), \\\"caller must be Controller\\\");\\n }\\n\\n function _onlyControllerOwner() private view {\\n require(msg.sender == controller.owner(), \\\"caller must be Controller owner\\\");\\n }\\n\\n function _whenSystemNotPaused() private view {\\n require(!controller.paused(), \\\"system is paused\\\");\\n }\\n\\n function _whenSystemPaused() private view {\\n require(controller.paused(), \\\"system is not paused\\\");\\n }\\n}\\n\",\"keccak256\":\"0xc415e3f42da9f82ddd5953031f3f26aed824368fcc34d3b8a17015bfe80dc109\",\"license\":\"MIT\"},\"contracts/ManagerProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\nimport \\\"./ManagerProxyTarget.sol\\\";\\n\\n/**\\n * @title ManagerProxy\\n * @notice A proxy contract that uses delegatecall to execute function calls on a target contract using its own storage context.\\n The target contract is a Manager contract that is registered with the Controller.\\n * @dev Both this proxy contract and its target contract MUST inherit from ManagerProxyTarget in order to guarantee\\n that both contracts have the same storage layout. Differing storage layouts in a proxy contract and target contract can\\n potentially break the delegate proxy upgradeability mechanism. Since this proxy contract inherits from ManagerProxyTarget which inherits\\n from Manager, it implements the setController() function. The target contract will also implement setController() since it also inherits\\n from ManagerProxyTarget. Thus, any transaction sent to the proxy that calls setController() will execute against the proxy instead\\n of the target. As a result, developers should keep in mind that the proxy will always execute the same logic for setController() regardless\\n of the setController() implementation on the target contract. Generally, developers should not add any additional functions to this proxy contract\\n because any function implemented on the proxy will always be executed against the proxy and the call **will not** be forwarded to the target contract\\n */\\ncontract ManagerProxy is ManagerProxyTarget {\\n /**\\n * @notice ManagerProxy constructor. Invokes constructor of base Manager contract with provided Controller address.\\n * Also, sets the contract ID of the target contract that function calls will be executed on.\\n * @param _controller Address of Controller that this contract will be registered with\\n * @param _targetContractId contract ID of the target contract\\n */\\n constructor(address _controller, bytes32 _targetContractId) Manager(_controller) {\\n targetContractId = _targetContractId;\\n }\\n\\n /**\\n * @notice Fallback function that delegates calls to target contract when there is no msg.data\\n */\\n receive() external payable {\\n _fallback();\\n }\\n\\n /**\\n * @notice Fallback function that delegates calls to target contract when there is msg.data\\n */\\n fallback() external payable {\\n _fallback();\\n }\\n\\n /**\\n * @dev Uses delegatecall to execute function calls on this proxy contract's target contract using its own storage context.\\n This fallback function will look up the address of the target contract using the Controller and the target contract ID.\\n It will then use the calldata for a function call as the data payload for a delegatecall on the target contract. The return value\\n of the executed function call will also be returned\\n */\\n function _fallback() private {\\n address target = controller.getContract(targetContractId);\\n require(target != address(0), \\\"target contract must be registered\\\");\\n\\n assembly {\\n // Solidity keeps a free memory pointer at position 0x40 in memory\\n let freeMemoryPtrPosition := 0x40\\n // Load the free memory pointer\\n let calldataMemoryOffset := mload(freeMemoryPtrPosition)\\n // Update free memory pointer to after memory space we reserve for calldata\\n mstore(freeMemoryPtrPosition, add(calldataMemoryOffset, calldatasize()))\\n // Copy calldata (method signature and params of the call) to memory\\n calldatacopy(calldataMemoryOffset, 0x0, calldatasize())\\n\\n // Call method on target contract using calldata which is loaded into memory\\n let ret := delegatecall(gas(), target, calldataMemoryOffset, calldatasize(), 0, 0)\\n\\n // Load the free memory pointer\\n let returndataMemoryOffset := mload(freeMemoryPtrPosition)\\n // Update free memory pointer to after memory space we reserve for returndata\\n mstore(freeMemoryPtrPosition, add(returndataMemoryOffset, returndatasize()))\\n // Copy returndata (result of the method invoked by the delegatecall) to memory\\n returndatacopy(returndataMemoryOffset, 0x0, returndatasize())\\n\\n switch ret\\n case 0 {\\n // Method call failed - revert\\n // Return any error message stored in mem[returndataMemoryOffset..(returndataMemoryOffset + returndatasize)]\\n revert(returndataMemoryOffset, returndatasize())\\n }\\n default {\\n // Return result of method call stored in mem[returndataMemoryOffset..(returndataMemoryOffset + returndatasize)]\\n return(returndataMemoryOffset, returndatasize())\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x59d1851363df8c385106e513652ace0d3903382df8b9fed03906650c5484158e\",\"license\":\"MIT\"},\"contracts/ManagerProxyTarget.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\nimport \\\"./Manager.sol\\\";\\n\\n/**\\n * @title ManagerProxyTarget\\n * @notice The base contract that target contracts used by a proxy contract should inherit from\\n * @dev Both the target contract and the proxy contract (implemented as ManagerProxy) MUST inherit from ManagerProxyTarget in order to guarantee\\n that both contracts have the same storage layout. Differing storage layouts in a proxy contract and target contract can\\n potentially break the delegate proxy upgradeability mechanism\\n */\\nabstract contract ManagerProxyTarget is Manager {\\n // Used to look up target contract address in controller's registry\\n bytes32 public targetContractId;\\n}\\n\",\"keccak256\":\"0x920bcc2def240e06272dc06cbcb9f12976f1698cd4f1020c165af25ee837e553\",\"license\":\"MIT\"},\"contracts/zeppelin/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\n/**\\n * @title Ownable\\n * @dev The Ownable contract has an owner address, and provides basic authorization control\\n * functions, this simplifies the implementation of \\\"user permissions\\\".\\n */\\ncontract Ownable {\\n address public owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev The Ownable constructor sets the original `owner` of the contract to the sender\\n * account.\\n */\\n constructor() {\\n owner = msg.sender;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(msg.sender == owner);\\n _;\\n }\\n\\n /**\\n * @dev Allows the current owner to transfer control of the contract to a newOwner.\\n * @param newOwner The address to transfer ownership to.\\n */\\n function transferOwnership(address newOwner) public onlyOwner {\\n require(newOwner != address(0));\\n emit OwnershipTransferred(owner, newOwner);\\n owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x64f114689f2f161c4a4b8fc8442ab914436a33e6021bf17401eaeac73319a419\",\"license\":\"MIT\"},\"contracts/zeppelin/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\nimport \\\"./Ownable.sol\\\";\\n\\n/**\\n * @title Pausable\\n * @dev Base contract which allows children to implement an emergency stop mechanism.\\n */\\ncontract Pausable is Ownable {\\n event Pause();\\n event Unpause();\\n\\n bool public paused;\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is not paused.\\n */\\n modifier whenNotPaused() {\\n require(!paused);\\n _;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is paused.\\n */\\n modifier whenPaused() {\\n require(paused);\\n _;\\n }\\n\\n /**\\n * @dev called by the owner to pause, triggers stopped state\\n */\\n function pause() public onlyOwner whenNotPaused {\\n paused = true;\\n emit Pause();\\n }\\n\\n /**\\n * @dev called by the owner to unpause, returns to normal state\\n */\\n function unpause() public onlyOwner whenPaused {\\n paused = false;\\n emit Unpause();\\n }\\n}\\n\",\"keccak256\":\"0xe9635fcac46c22547a08f6977a8c75e7341411f1201f60bdd4c79c26e6c286ef\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506040516103d93803806103d983398101604081905261002f91610058565b600080546001600160a01b0319166001600160a01b039390931692909217909155600155610092565b6000806040838503121561006b57600080fd5b82516001600160a01b038116811461008257600080fd5b6020939093015192949293505050565b610338806100a16000396000f3fe6080604052600436106100385760003560e01c806351720b411461004f57806392eefe9b14610078578063f77c47911461009857610047565b36610047576100456100d0565b005b6100456100d0565b34801561005b57600080fd5b5061006560015481565b6040519081526020015b60405180910390f35b34801561008457600080fd5b506100456100933660046102c1565b6101f1565b3480156100a457600080fd5b506000546100b8906001600160a01b031681565b6040516001600160a01b03909116815260200161006f565b60008054600154604051631c2d8fb360e31b81526001600160a01b039092169163e16c7d98916101069160040190815260200190565b60206040518083038186803b15801561011e57600080fd5b505afa158015610132573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015691906102e5565b90506001600160a01b0381166101be5760405162461bcd60e51b815260206004820152602260248201527f74617267657420636f6e7472616374206d757374206265207265676973746572604482015261195960f21b60648201526084015b60405180910390fd5b60408051368101825236600082376000803683865af4905081513d810183523d6000823e8180156101ed573d82f35b3d82fd5b6101f961024d565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709060200160405180910390a150565b6000546001600160a01b031633146102a75760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206d75737420626520436f6e74726f6c6c65720000000000000060448201526064016101b5565b565b6001600160a01b03811681146102be57600080fd5b50565b6000602082840312156102d357600080fd5b81356102de816102a9565b9392505050565b6000602082840312156102f757600080fd5b81516102de816102a956fea2646970667358221220274e52a3b60c7dff1cad0833c349004759648080531c69a484b94b22224cfa1164736f6c63430008090033", + "deployedBytecode": "0x6080604052600436106100385760003560e01c806351720b411461004f57806392eefe9b14610078578063f77c47911461009857610047565b36610047576100456100d0565b005b6100456100d0565b34801561005b57600080fd5b5061006560015481565b6040519081526020015b60405180910390f35b34801561008457600080fd5b506100456100933660046102c1565b6101f1565b3480156100a457600080fd5b506000546100b8906001600160a01b031681565b6040516001600160a01b03909116815260200161006f565b60008054600154604051631c2d8fb360e31b81526001600160a01b039092169163e16c7d98916101069160040190815260200190565b60206040518083038186803b15801561011e57600080fd5b505afa158015610132573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015691906102e5565b90506001600160a01b0381166101be5760405162461bcd60e51b815260206004820152602260248201527f74617267657420636f6e7472616374206d757374206265207265676973746572604482015261195960f21b60648201526084015b60405180910390fd5b60408051368101825236600082376000803683865af4905081513d810183523d6000823e8180156101ed573d82f35b3d82fd5b6101f961024d565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709060200160405180910390a150565b6000546001600160a01b031633146102a75760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206d75737420626520436f6e74726f6c6c65720000000000000060448201526064016101b5565b565b6001600160a01b03811681146102be57600080fd5b50565b6000602082840312156102d357600080fd5b81356102de816102a9565b9392505050565b6000602082840312156102f757600080fd5b81516102de816102a956fea2646970667358221220274e52a3b60c7dff1cad0833c349004759648080531c69a484b94b22224cfa1164736f6c63430008090033", + "devdoc": { + "details": "Both this proxy contract and its target contract MUST inherit from ManagerProxyTarget in order to guarantee that both contracts have the same storage layout. Differing storage layouts in a proxy contract and target contract can potentially break the delegate proxy upgradeability mechanism. Since this proxy contract inherits from ManagerProxyTarget which inherits from Manager, it implements the setController() function. The target contract will also implement setController() since it also inherits from ManagerProxyTarget. Thus, any transaction sent to the proxy that calls setController() will execute against the proxy instead of the target. As a result, developers should keep in mind that the proxy will always execute the same logic for setController() regardless of the setController() implementation on the target contract. Generally, developers should not add any additional functions to this proxy contract because any function implemented on the proxy will always be executed against the proxy and the call **will not** be forwarded to the target contract", + "kind": "dev", + "methods": { + "constructor": { + "params": { + "_controller": "Address of Controller that this contract will be registered with", + "_targetContractId": "contract ID of the target contract" + } + }, + "setController(address)": { + "params": { + "_controller": "Controller contract address" + } + } + }, + "title": "ManagerProxy", + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "constructor": { + "notice": "ManagerProxy constructor. Invokes constructor of base Manager contract with provided Controller address. Also, sets the contract ID of the target contract that function calls will be executed on." + }, + "setController(address)": { + "notice": "Set controller. Only callable by current controller" + } + }, + "notice": "A proxy contract that uses delegatecall to execute function calls on a target contract using its own storage context. The target contract is a Manager contract that is registered with the Controller.", + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 2670, + "contract": "contracts/ManagerProxy.sol:ManagerProxy", + "label": "controller", + "offset": 0, + "slot": "0", + "type": "t_contract(IController)2645" + }, + { + "astId": 2852, + "contract": "contracts/ManagerProxy.sol:ManagerProxy", + "label": "targetContractId", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ], + "types": { + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IController)2645": { + "encoding": "inplace", + "label": "contract IController", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/backend/src/abi/BondingManagerTarget.json b/backend/src/abi/BondingManagerTarget.json new file mode 100644 index 0000000..0977aa9 --- /dev/null +++ b/backend/src/abi/BondingManagerTarget.json @@ -0,0 +1,2258 @@ +{ + "address": "0x3757DB506ECd9CBE643660C0F5b70db5b321202C", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newDelegate", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "oldDelegate", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "additionalAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "bondedAmount", + "type": "uint256" + } + ], + "name": "Bond", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "startRound", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "endRound", + "type": "uint256" + } + ], + "name": "EarningsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "param", + "type": "string" + } + ], + "name": "ParameterUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "unbondingLockId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Rebond", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "transcoder", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Reward", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "controller", + "type": "address" + } + ], + "name": "SetController", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "transcoder", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "activationRound", + "type": "uint256" + } + ], + "name": "TranscoderActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "transcoder", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "deactivationRound", + "type": "uint256" + } + ], + "name": "TranscoderDeactivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "transcoder", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "finder", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "penalty", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "finderReward", + "type": "uint256" + } + ], + "name": "TranscoderSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "transcoder", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewardCut", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "feeShare", + "type": "uint256" + } + ], + "name": "TranscoderUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldDelegator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newDelegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "oldUnbondingLockId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newUnbondingLockId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TransferBond", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "unbondingLockId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "withdrawRound", + "type": "uint256" + } + ], + "name": "Unbond", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "WithdrawFees", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "unbondingLockId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "withdrawRound", + "type": "uint256" + } + ], + "name": "WithdrawStake", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "bond", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_oldDelegateNewPosPrev", + "type": "address" + }, + { + "internalType": "address", + "name": "_oldDelegateNewPosNext", + "type": "address" + }, + { + "internalType": "address", + "name": "_currDelegateNewPosPrev", + "type": "address" + }, + { + "internalType": "address", + "name": "_currDelegateNewPosNext", + "type": "address" + } + ], + "name": "bondForWithHint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_oldDelegateNewPosPrev", + "type": "address" + }, + { + "internalType": "address", + "name": "_oldDelegateNewPosNext", + "type": "address" + }, + { + "internalType": "address", + "name": "_currDelegateNewPosPrev", + "type": "address" + }, + { + "internalType": "address", + "name": "_currDelegateNewPosNext", + "type": "address" + } + ], + "name": "bondWithHint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_endRound", + "type": "uint256" + } + ], + "name": "claimEarnings", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "controller", + "outputs": [ + { + "internalType": "contract IController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentRoundTotalActiveStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_delegator", + "type": "address" + } + ], + "name": "delegatorStatus", + "outputs": [ + { + "internalType": "enum BondingManager.DelegatorStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_delegator", + "type": "address" + } + ], + "name": "getDelegator", + "outputs": [ + { + "internalType": "uint256", + "name": "bondedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "address", + "name": "delegateAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "delegatedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startRound", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastClaimRound", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextUnbondingLockId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_delegator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_unbondingLockId", + "type": "uint256" + } + ], + "name": "getDelegatorUnbondingLock", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "withdrawRound", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getFirstTranscoderInPool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transcoder", + "type": "address" + } + ], + "name": "getNextTranscoderInPool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTotalBonded", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transcoder", + "type": "address" + } + ], + "name": "getTranscoder", + "outputs": [ + { + "internalType": "uint256", + "name": "lastRewardRound", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardCut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "feeShare", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveStakeUpdateRound", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "activationRound", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deactivationRound", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "activeCumulativeRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "cumulativeRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "cumulativeFees", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastFeeRound", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transcoder", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_round", + "type": "uint256" + } + ], + "name": "getTranscoderEarningsPoolForRound", + "outputs": [ + { + "internalType": "uint256", + "name": "totalStake", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "transcoderRewardCut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "transcoderFeeShare", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "cumulativeRewardFactor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "cumulativeFeeFactor", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTranscoderPoolMaxSize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTranscoderPoolSize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transcoder", + "type": "address" + } + ], + "name": "isActiveTranscoder", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transcoder", + "type": "address" + } + ], + "name": "isRegisteredTranscoder", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_delegator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_unbondingLockId", + "type": "uint256" + } + ], + "name": "isValidUnbondingLock", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nextRoundTotalActiveStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_delegator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_endRound", + "type": "uint256" + } + ], + "name": "pendingFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_delegator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_endRound", + "type": "uint256" + } + ], + "name": "pendingStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_unbondingLockId", + "type": "uint256" + } + ], + "name": "rebond", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_unbondingLockId", + "type": "uint256" + } + ], + "name": "rebondFromUnbonded", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_unbondingLockId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_newPosPrev", + "type": "address" + }, + { + "internalType": "address", + "name": "_newPosNext", + "type": "address" + } + ], + "name": "rebondFromUnbondedWithHint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_unbondingLockId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_newPosPrev", + "type": "address" + }, + { + "internalType": "address", + "name": "_newPosNext", + "type": "address" + } + ], + "name": "rebondWithHint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "reward", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newPosPrev", + "type": "address" + }, + { + "internalType": "address", + "name": "_newPosNext", + "type": "address" + } + ], + "name": "rewardWithHint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "name": "setController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "setCurrentRoundTotalActiveStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_numActiveTranscoders", + "type": "uint256" + } + ], + "name": "setNumActiveTranscoders", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "_unbondingPeriod", + "type": "uint64" + } + ], + "name": "setUnbondingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transcoder", + "type": "address" + }, + { + "internalType": "address", + "name": "_finder", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_slashAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_finderFee", + "type": "uint256" + } + ], + "name": "slashTranscoder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "targetContractId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_rewardCut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_feeShare", + "type": "uint256" + } + ], + "name": "transcoder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transcoder", + "type": "address" + } + ], + "name": "transcoderStatus", + "outputs": [ + { + "internalType": "enum BondingManager.TranscoderStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transcoder", + "type": "address" + } + ], + "name": "transcoderTotalStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_rewardCut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_feeShare", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_newPosPrev", + "type": "address" + }, + { + "internalType": "address", + "name": "_newPosNext", + "type": "address" + } + ], + "name": "transcoderWithHint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_delegator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_oldDelegateNewPosPrev", + "type": "address" + }, + { + "internalType": "address", + "name": "_oldDelegateNewPosNext", + "type": "address" + }, + { + "internalType": "address", + "name": "_newDelegateNewPosPrev", + "type": "address" + }, + { + "internalType": "address", + "name": "_newDelegateNewPosNext", + "type": "address" + } + ], + "name": "transferBond", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "unbond", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_newPosPrev", + "type": "address" + }, + { + "internalType": "address", + "name": "_newPosNext", + "type": "address" + } + ], + "name": "unbondWithHint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unbondingPeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transcoder", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_fees", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_round", + "type": "uint256" + } + ], + "name": "updateTranscoderWithFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "_recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "withdrawFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_unbondingLockId", + "type": "uint256" + } + ], + "name": "withdrawStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x9fa315b88ca626d035a29b7a3ba4db5996bdd711490b24e37ccd64a74a194ec5", + "receipt": { + "to": null, + "from": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "contractAddress": "0x3757DB506ECd9CBE643660C0F5b70db5b321202C", + "transactionIndex": 0, + "gasUsed": "64037927", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x2cf15132b784f96e7462597389147f08d2308379df441cb0c41ba3783414dbe3", + "transactionHash": "0x9fa315b88ca626d035a29b7a3ba4db5996bdd711490b24e37ccd64a74a194ec5", + "logs": [], + "blockNumber": 6897365, + "cumulativeGasUsed": "29733427", + "status": 1, + "byzantium": true + }, + "args": [ + "0xD8E8328501E9645d16Cf49539efC04f734606ee4" + ], + "numDeployments": 3, + "solcInputHash": "3ff5221b290e455902c32c32981b5340", + "metadata": "{\"compiler\":{\"version\":\"0.8.9+commit.e5eed63a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controller\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newDelegate\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldDelegate\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"additionalAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"bondedAmount\",\"type\":\"uint256\"}],\"name\":\"Bond\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startRound\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endRound\",\"type\":\"uint256\"}],\"name\":\"EarningsClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"param\",\"type\":\"string\"}],\"name\":\"ParameterUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unbondingLockId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Rebond\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transcoder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Reward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"SetController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transcoder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"activationRound\",\"type\":\"uint256\"}],\"name\":\"TranscoderActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transcoder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deactivationRound\",\"type\":\"uint256\"}],\"name\":\"TranscoderDeactivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transcoder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"finder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"penalty\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finderReward\",\"type\":\"uint256\"}],\"name\":\"TranscoderSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transcoder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewardCut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeShare\",\"type\":\"uint256\"}],\"name\":\"TranscoderUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldDelegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newDelegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldUnbondingLockId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newUnbondingLockId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferBond\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unbondingLockId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawRound\",\"type\":\"uint256\"}],\"name\":\"Unbond\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unbondingLockId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawRound\",\"type\":\"uint256\"}],\"name\":\"WithdrawStake\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oldDelegateNewPosPrev\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oldDelegateNewPosNext\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_currDelegateNewPosPrev\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_currDelegateNewPosNext\",\"type\":\"address\"}],\"name\":\"bondForWithHint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oldDelegateNewPosPrev\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oldDelegateNewPosNext\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_currDelegateNewPosPrev\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_currDelegateNewPosNext\",\"type\":\"address\"}],\"name\":\"bondWithHint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_endRound\",\"type\":\"uint256\"}],\"name\":\"claimEarnings\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"controller\",\"outputs\":[{\"internalType\":\"contract IController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentRoundTotalActiveStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"delegatorStatus\",\"outputs\":[{\"internalType\":\"enum BondingManager.DelegatorStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"getDelegator\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bondedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"delegateAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"delegatedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startRound\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastClaimRound\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextUnbondingLockId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_unbondingLockId\",\"type\":\"uint256\"}],\"name\":\"getDelegatorUnbondingLock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawRound\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFirstTranscoderInPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transcoder\",\"type\":\"address\"}],\"name\":\"getNextTranscoderInPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalBonded\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transcoder\",\"type\":\"address\"}],\"name\":\"getTranscoder\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"lastRewardRound\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rewardCut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastActiveStakeUpdateRound\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"activationRound\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deactivationRound\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"activeCumulativeRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cumulativeRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cumulativeFees\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastFeeRound\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transcoder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"getTranscoderEarningsPoolForRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transcoderRewardCut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transcoderFeeShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cumulativeRewardFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cumulativeFeeFactor\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTranscoderPoolMaxSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTranscoderPoolSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transcoder\",\"type\":\"address\"}],\"name\":\"isActiveTranscoder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transcoder\",\"type\":\"address\"}],\"name\":\"isRegisteredTranscoder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_unbondingLockId\",\"type\":\"uint256\"}],\"name\":\"isValidUnbondingLock\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextRoundTotalActiveStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_endRound\",\"type\":\"uint256\"}],\"name\":\"pendingFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_endRound\",\"type\":\"uint256\"}],\"name\":\"pendingStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondingLockId\",\"type\":\"uint256\"}],\"name\":\"rebond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_unbondingLockId\",\"type\":\"uint256\"}],\"name\":\"rebondFromUnbonded\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_unbondingLockId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_newPosPrev\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newPosNext\",\"type\":\"address\"}],\"name\":\"rebondFromUnbondedWithHint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondingLockId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_newPosPrev\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newPosNext\",\"type\":\"address\"}],\"name\":\"rebondWithHint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newPosPrev\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newPosNext\",\"type\":\"address\"}],\"name\":\"rewardWithHint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controller\",\"type\":\"address\"}],\"name\":\"setController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setCurrentRoundTotalActiveStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_numActiveTranscoders\",\"type\":\"uint256\"}],\"name\":\"setNumActiveTranscoders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_unbondingPeriod\",\"type\":\"uint64\"}],\"name\":\"setUnbondingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transcoder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_finder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_slashAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_finderFee\",\"type\":\"uint256\"}],\"name\":\"slashTranscoder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContractId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardCut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeShare\",\"type\":\"uint256\"}],\"name\":\"transcoder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transcoder\",\"type\":\"address\"}],\"name\":\"transcoderStatus\",\"outputs\":[{\"internalType\":\"enum BondingManager.TranscoderStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transcoder\",\"type\":\"address\"}],\"name\":\"transcoderTotalStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardCut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeShare\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_newPosPrev\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newPosNext\",\"type\":\"address\"}],\"name\":\"transcoderWithHint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_oldDelegateNewPosPrev\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oldDelegateNewPosNext\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newDelegateNewPosPrev\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newDelegateNewPosNext\",\"type\":\"address\"}],\"name\":\"transferBond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_newPosPrev\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newPosNext\",\"type\":\"address\"}],\"name\":\"unbondWithHint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unbondingPeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transcoder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_fees\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"updateTranscoderWithFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondingLockId\",\"type\":\"uint256\"}],\"name\":\"withdrawStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"bond(uint256,address)\":{\"params\":{\"_amount\":\"The amount of tokens to stake\",\"_to\":\"The address of the transcoder to stake towards\"}},\"bondForWithHint(uint256,address,address,address,address,address,address)\":{\"details\":\"If the caller is decreasing the stake of its old delegate in the transcoder pool, the caller can provide an optional hint for the insertion position of the old delegate via the `_oldDelegateNewPosPrev` and `_oldDelegateNewPosNext` params. If the caller is delegating to a delegate that is in the transcoder pool, the caller can provide an optional hint for the insertion position of the delegate via the `_currDelegateNewPosPrev` and `_currDelegateNewPosNext` params. In both cases, a linear search will be executed starting at the hint to find the correct position. In the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol for details on list hints\",\"params\":{\"_amount\":\"The amount of tokens to stake.\",\"_currDelegateNewPosNext\":\"The address of the next transcoder in the pool for the current delegate\",\"_currDelegateNewPosPrev\":\"The address of the previous transcoder in the pool for the current delegate\",\"_oldDelegateNewPosNext\":\"The address of the next transcoder in the pool for the old delegate\",\"_oldDelegateNewPosPrev\":\"The address of the previous transcoder in the pool for the old delegate\",\"_owner\":\"The address of the owner of the bond\",\"_to\":\"The address of the transcoder to stake towards\"}},\"bondWithHint(uint256,address,address,address,address,address)\":{\"details\":\"If the caller is decreasing the stake of its old delegate in the transcoder pool, the caller can provide an optional hint for the insertion position of the old delegate via the `_oldDelegateNewPosPrev` and `_oldDelegateNewPosNext` params. If the caller is delegating to a delegate that is in the transcoder pool, the caller can provide an optional hint for the insertion position of the delegate via the `_currDelegateNewPosPrev` and `_currDelegateNewPosNext` params. In both cases, a linear search will be executed starting at the hint to find the correct position. In the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol for details on list hints\",\"params\":{\"_amount\":\"The amount of tokens to stake.\",\"_currDelegateNewPosNext\":\"The address of the next transcoder in the pool for the current delegate\",\"_currDelegateNewPosPrev\":\"The address of the previous transcoder in the pool for the current delegate\",\"_oldDelegateNewPosNext\":\"The address of the next transcoder in the pool for the old delegate\",\"_oldDelegateNewPosPrev\":\"The address of the previous transcoder in the pool for the old delegate\",\"_to\":\"The address of the transcoder to stake towards\"}},\"claimEarnings(uint256)\":{\"params\":{\"_endRound\":\"The last round for which to claim token pools shares for a delegator\"}},\"constructor\":{\"details\":\"This constructor will not initialize any state variables besides `controller`. The following setter functions should be used to initialize state variables post-deployment: - setUnbondingPeriod() - setNumActiveTranscoders() - setMaxEarningsClaimsRounds()\",\"params\":{\"_controller\":\"Address of Controller that this contract will be registered with\"}},\"delegatorStatus(address)\":{\"params\":{\"_delegator\":\"Address of delegator\"},\"returns\":{\"_0\":\"bonded, unbonded or pending delegator status\"}},\"getDelegator(address)\":{\"params\":{\"_delegator\":\"Address of delegator\"},\"returns\":{\"bondedAmount\":\"total amount bonded by '_delegator'\",\"delegateAddress\":\"address '_delegator' has bonded to\",\"delegatedAmount\":\"total amount delegated to '_delegator'\",\"fees\":\"amount of fees collected by '_delegator'\",\"lastClaimRound\":\"round for which '_delegator' has last claimed earnings\",\"nextUnbondingLockId\":\"ID for the next unbonding lock created for '_delegator'\",\"startRound\":\"round in which bond for '_delegator' became effective\"}},\"getDelegatorUnbondingLock(address,uint256)\":{\"params\":{\"_delegator\":\"Address of delegator\",\"_unbondingLockId\":\"ID of unbonding lock\"},\"returns\":{\"amount\":\"of stake locked up by unbonding lock\",\"withdrawRound\":\"round in which 'amount' becomes available for withdrawal\"}},\"getFirstTranscoderInPool()\":{\"returns\":{\"_0\":\"address for transcoder with highest stake in transcoder pool\"}},\"getNextTranscoderInPool(address)\":{\"params\":{\"_transcoder\":\"Address of a transcoder in the pool\"},\"returns\":{\"_0\":\"address for the transcoder after '_transcoder' in transcoder pool\"}},\"getTotalBonded()\":{\"returns\":{\"_0\":\"total active stake for the current round\"}},\"getTranscoder(address)\":{\"params\":{\"_transcoder\":\"Address of transcoder\"},\"returns\":{\"activationRound\":\"Round in which transcoder became active\",\"activeCumulativeRewards\":\"Transcoder's cumulative rewards that are currently active\",\"cumulativeFees\":\"Transcoder's cumulative fees (earned via its active staked rewards and its fee share)\",\"cumulativeRewards\":\"Transcoder's cumulative rewards (earned via its active staked rewards and its reward cut)\",\"deactivationRound\":\"Round in which transcoder will no longer be active\",\"feeShare\":\"Transcoder's fee share\",\"lastActiveStakeUpdateRound\":\"Round in which transcoder's stake was last updated while active\",\"lastFeeRound\":\"Latest round that the transcoder received fees\",\"lastRewardRound\":\"Trancoder's last reward round\",\"rewardCut\":\"Transcoder's reward cut\"}},\"getTranscoderEarningsPoolForRound(address,uint256)\":{\"params\":{\"_round\":\"Round number\",\"_transcoder\":\"Address of transcoder\"},\"returns\":{\"cumulativeFeeFactor\":\"The cumulative fee factor for delegator fees calculation (only used after LIP-36)\",\"cumulativeRewardFactor\":\"The cumulative reward factor for delegator rewards calculation (only used after LIP-36)\",\"totalStake\":\"Transcoder's total stake in '_round'\",\"transcoderFeeShare\":\"Transcoder's fee share for '_round'\",\"transcoderRewardCut\":\"Transcoder's reward cut for '_round'\"}},\"getTranscoderPoolMaxSize()\":{\"returns\":{\"_0\":\"transcoder pool max size\"}},\"getTranscoderPoolSize()\":{\"returns\":{\"_0\":\"transcoder pool current size\"}},\"isActiveTranscoder(address)\":{\"params\":{\"_transcoder\":\"Transcoder address\"},\"returns\":{\"_0\":\"true if transcoder is active\"}},\"isRegisteredTranscoder(address)\":{\"params\":{\"_transcoder\":\"Transcoder address\"},\"returns\":{\"_0\":\"true if transcoder is self-bonded\"}},\"isValidUnbondingLock(address,uint256)\":{\"params\":{\"_delegator\":\"Address of delegator\",\"_unbondingLockId\":\"ID of unbonding lock\"},\"returns\":{\"_0\":\"true if unbondingLock for ID has a non-zero withdraw round\"}},\"pendingFees(address,uint256)\":{\"params\":{\"_delegator\":\"Address of delegator\",\"_endRound\":\"The last round to compute pending fees from\"},\"returns\":{\"_0\":\"Pending fees for '_delegator' since last claiming fees\"}},\"pendingStake(address,uint256)\":{\"params\":{\"_delegator\":\"Address of delegator\",\"_endRound\":\"The last round to compute pending stake from\"},\"returns\":{\"_0\":\"Pending bonded stake for '_delegator' since last claiming rewards\"}},\"rebond(uint256)\":{\"params\":{\"_unbondingLockId\":\"ID of unbonding lock to rebond with\"}},\"rebondFromUnbonded(address,uint256)\":{\"params\":{\"_to\":\"Address of delegate\",\"_unbondingLockId\":\"ID of unbonding lock to rebond with\"}},\"rebondFromUnbondedWithHint(address,uint256,address,address)\":{\"details\":\"If the delegate joins the transcoder pool, the caller can provide an optional hint for the delegate's insertion position in the pool via the `_newPosPrev` and `_newPosNext` params. A linear search will be executed starting at the hint to find the correct position. In the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol for details on list hints\",\"params\":{\"_newPosNext\":\"Address of next transcoder in pool if the delegate joins the pool\",\"_newPosPrev\":\"Address of previous transcoder in pool if the delegate joins the pool\",\"_to\":\"Address of delegate\",\"_unbondingLockId\":\"ID of unbonding lock to rebond with\"}},\"rebondWithHint(uint256,address,address)\":{\"details\":\"If the delegate is in the transcoder pool, the caller can provide an optional hint for the delegate's insertion position in the pool via the `_newPosPrev` and `_newPosNext` params. A linear search will be executed starting at the hint to find the correct position. In the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol details on list hints\",\"params\":{\"_newPosNext\":\"Address of next transcoder in pool if the delegate is in the pool\",\"_newPosPrev\":\"Address of previous transcoder in pool if the delegate is in the pool\",\"_unbondingLockId\":\"ID of unbonding lock to rebond with\"}},\"rewardWithHint(address,address)\":{\"details\":\"If the caller is in the transcoder pool, the caller can provide an optional hint for its insertion position in the pool via the `_newPosPrev` and `_newPosNext` params. A linear search will be executed starting at the hint to find the correct position. In the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol for details on list hints\",\"params\":{\"_newPosNext\":\"Address of next transcoder in pool if the caller is in the pool\",\"_newPosPrev\":\"Address of previous transcoder in pool if the caller is in the pool\"}},\"setController(address)\":{\"params\":{\"_controller\":\"Controller contract address\"}},\"setNumActiveTranscoders(uint256)\":{\"params\":{\"_numActiveTranscoders\":\"Number of active transcoders\"}},\"setUnbondingPeriod(uint64)\":{\"params\":{\"_unbondingPeriod\":\"Rounds between unbonding and possible withdrawal\"}},\"slashTranscoder(address,address,uint256,uint256)\":{\"params\":{\"_finder\":\"Finder that proved a transcoder violated a slashing condition. Null address if there is no finder\",\"_finderFee\":\"Percentage of penalty awarded to finder. Zero if there is no finder\",\"_slashAmount\":\"Percentage of transcoder bond to be slashed\",\"_transcoder\":\"Transcoder address\"}},\"transcoder(uint256,uint256)\":{\"details\":\"Percentages are represented as numerators of fractions over MathUtils.PERC_DIVISOR\",\"params\":{\"_feeShare\":\"% of fees paid to delegators by a transcoder\",\"_rewardCut\":\"% of reward paid to transcoder by a delegator\"}},\"transcoderStatus(address)\":{\"params\":{\"_transcoder\":\"Address of transcoder\"},\"returns\":{\"_0\":\"registered or not registered transcoder status\"}},\"transcoderTotalStake(address)\":{\"params\":{\"_transcoder\":\"Address of transcoder\"},\"returns\":{\"_0\":\"total bonded stake for a delegator\"}},\"transcoderWithHint(uint256,uint256,address,address)\":{\"details\":\"Percentages are represented as numerators of fractions over MathUtils.PERC_DIVISOR. If the caller is going to be added to the pool, the caller can provide an optional hint for the insertion position in the pool via the `_newPosPrev` and `_newPosNext` params. A linear search will be executed starting at the hint to find the correct position - in the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol for details on list hints\",\"params\":{\"_feeShare\":\"% of fees paid to delegators by a transcoder\",\"_newPosNext\":\"Address of next transcoder in pool if the caller joins the pool\",\"_newPosPrev\":\"Address of previous transcoder in pool if the caller joins the pool\",\"_rewardCut\":\"% of reward paid to transcoder by a delegator\"}},\"transferBond(address,uint256,address,address,address,address)\":{\"details\":\"If the original delegate is in the transcoder pool, the caller can provide an optional hint for the insertion position of the delegate via the `_oldDelegateNewPosPrev` and `_oldDelegateNewPosNext` params. If the target delegate is in the transcoder pool, the caller can provide an optional hint for the insertion position of the delegate via the `_newDelegateNewPosPrev` and `_newDelegateNewPosNext` params. In both cases, a linear search will be executed starting at the hint to find the correct position. In the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol for details on list hints\",\"params\":{\"_amount\":\"Portion of the bond to transfer to receiver\",\"_delegator\":\"Receiver of the bond\",\"_newDelegateNewPosNext\":\"Address of next transcoder in pool if the delegate is in the pool\",\"_newDelegateNewPosPrev\":\"Address of previous transcoder in pool if the delegate is in the pool\",\"_oldDelegateNewPosNext\":\"Address of next transcoder in pool if the delegate remains in the pool\",\"_oldDelegateNewPosPrev\":\"Address of previous transcoder in pool if the delegate remains in the pool\"}},\"unbond(uint256)\":{\"params\":{\"_amount\":\"Amount of tokens to unbond\"}},\"unbondWithHint(uint256,address,address)\":{\"details\":\"If the caller remains in the transcoder pool, the caller can provide an optional hint for its insertion position in the pool via the `_newPosPrev` and `_newPosNext` params. A linear search will be executed starting at the hint to find the correct position. In the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol details on list hints\",\"params\":{\"_amount\":\"Amount of tokens to unbond\",\"_newPosNext\":\"Address of next transcoder in pool if the caller remains in the pool\",\"_newPosPrev\":\"Address of previous transcoder in pool if the caller remains in the pool\"}},\"updateTranscoderWithFees(address,uint256,uint256)\":{\"params\":{\"_fees\":\"Fees to be added to the fee pool\",\"_transcoder\":\"Transcoder address\"}},\"withdrawStake(uint256)\":{\"params\":{\"_unbondingLockId\":\"ID of unbonding lock to withdraw with\"}}},\"title\":\"BondingManager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"bond(uint256,address)\":{\"notice\":\"Delegate stake towards a specific address\"},\"bondForWithHint(uint256,address,address,address,address,address,address)\":{\"notice\":\"Delegates stake \\\"on behalf of\\\" another address towards a specific address and updates the transcoder pool using optional list hints if needed\"},\"bondWithHint(uint256,address,address,address,address,address)\":{\"notice\":\"Delegates stake towards a specific address and updates the transcoder pool using optional list hints if needed\"},\"claimEarnings(uint256)\":{\"notice\":\"Claim token pools shares for a delegator from its lastClaimRound through the end round\"},\"constructor\":{\"notice\":\"BondingManager constructor. Only invokes constructor of base Manager contract with provided Controller address\"},\"delegatorStatus(address)\":{\"notice\":\"Computes delegator status\"},\"getDelegator(address)\":{\"notice\":\"Return delegator info\"},\"getDelegatorUnbondingLock(address,uint256)\":{\"notice\":\"Return delegator's unbonding lock info\"},\"getFirstTranscoderInPool()\":{\"notice\":\"Returns transcoder with most stake in pool\"},\"getNextTranscoderInPool(address)\":{\"notice\":\"Returns next transcoder in pool for a given transcoder\"},\"getTotalBonded()\":{\"notice\":\"Return total bonded tokens\"},\"getTranscoder(address)\":{\"notice\":\"Return transcoder information\"},\"getTranscoderEarningsPoolForRound(address,uint256)\":{\"notice\":\"Return transcoder's earnings pool for a given round\"},\"getTranscoderPoolMaxSize()\":{\"notice\":\"Returns max size of transcoder pool\"},\"getTranscoderPoolSize()\":{\"notice\":\"Returns size of transcoder pool\"},\"isActiveTranscoder(address)\":{\"notice\":\"Return whether a transcoder is active for the current round\"},\"isRegisteredTranscoder(address)\":{\"notice\":\"Return whether a transcoder is registered\"},\"isValidUnbondingLock(address,uint256)\":{\"notice\":\"Return whether an unbonding lock for a delegator is valid\"},\"pendingFees(address,uint256)\":{\"notice\":\"Returns pending fees for a delegator from its lastClaimRound through an end round\"},\"pendingStake(address,uint256)\":{\"notice\":\"Returns pending bonded stake for a delegator from its lastClaimRound through an end round\"},\"rebond(uint256)\":{\"notice\":\"Rebond tokens for an unbonding lock to a delegator's current delegate while a delegator is in the Bonded or Pending status\"},\"rebondFromUnbonded(address,uint256)\":{\"notice\":\"Rebond tokens for an unbonding lock to a delegate while a delegator is in the Unbonded status\"},\"rebondFromUnbondedWithHint(address,uint256,address,address)\":{\"notice\":\"Rebond tokens for an unbonding lock to a delegate while a delegator is in the Unbonded status and updates the transcoder pool using an optional list hint if needed\"},\"rebondWithHint(uint256,address,address)\":{\"notice\":\"Rebond tokens for an unbonding lock to a delegator's current delegate while a delegator is in the Bonded or Pending status and updates the transcoder pool using an optional list hint if needed\"},\"reward()\":{\"notice\":\"Mint token rewards for an active transcoder and its delegators\"},\"rewardWithHint(address,address)\":{\"notice\":\"Mint token rewards for an active transcoder and its delegators and update the transcoder pool using an optional list hint if needed\"},\"setController(address)\":{\"notice\":\"Set controller. Only callable by current controller\"},\"setCurrentRoundTotalActiveStake()\":{\"notice\":\"Called during round initialization to set the total active stake for the round. Only callable by the RoundsManager\"},\"setNumActiveTranscoders(uint256)\":{\"notice\":\"Set maximum number of active transcoders. Only callable by Controller owner\"},\"setUnbondingPeriod(uint64)\":{\"notice\":\"Set unbonding period. Only callable by Controller owner\"},\"slashTranscoder(address,address,uint256,uint256)\":{\"notice\":\"Slash a transcoder. Only callable by the Verifier\"},\"transcoder(uint256,uint256)\":{\"notice\":\"Sets commission rates as a transcoder and if the caller is not in the transcoder pool tries to add it\"},\"transcoderStatus(address)\":{\"notice\":\"Computes transcoder status\"},\"transcoderTotalStake(address)\":{\"notice\":\"Returns total bonded stake for a transcoder\"},\"transcoderWithHint(uint256,uint256,address,address)\":{\"notice\":\"Sets commission rates as a transcoder and if the caller is not in the transcoder pool tries to add it using an optional list hint\"},\"transferBond(address,uint256,address,address,address,address)\":{\"notice\":\"Transfers ownership of a bond to a new delegator using optional hints if needed If the receiver is already bonded to a different delegate than the bond owner then the stake goes to the receiver's delegate otherwise the receiver's delegate is set as the owner's delegate\"},\"unbond(uint256)\":{\"notice\":\"Unbond an amount of the delegator's bonded stake\"},\"unbondWithHint(uint256,address,address)\":{\"notice\":\"Unbond an amount of the delegator's bonded stake and updates the transcoder pool using an optional list hint if needed\"},\"updateTranscoderWithFees(address,uint256,uint256)\":{\"notice\":\"Update transcoder's fee pool. Only callable by the TicketBroker\"},\"withdrawFees(address,uint256)\":{\"notice\":\"Withdraws fees to the caller\"},\"withdrawStake(uint256)\":{\"notice\":\"Withdraws tokens for an unbonding lock that has existed through an unbonding period\"}},\"notice\":\"Manages bonding, transcoder and rewards/fee accounting related operations of the Livepeer protocol\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/bonding/BondingManager.sol\":\"BondingManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address sender,\\n address recipient,\\n uint256 amount\\n ) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x61437cb513a887a1bbad006e7b1c8b414478427d33de47c5600af3c748f108da\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n// CAUTION\\n// This version of SafeMath should only be used with Solidity 0.8 or later,\\n// because it relies on the compiler's built in overflow checks.\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations.\\n *\\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\\n * now has built in overflow checking.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a + b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a * b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator.\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa2f576be637946f767aa56601c26d717f48a0aff44f82e46f13807eea1009a21\",\"license\":\"MIT\"},\"contracts/IController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\nimport \\\"./zeppelin/Pausable.sol\\\";\\n\\nabstract contract IController is Pausable {\\n event SetContractInfo(bytes32 id, address contractAddress, bytes20 gitCommitHash);\\n\\n function setContractInfo(\\n bytes32 _id,\\n address _contractAddress,\\n bytes20 _gitCommitHash\\n ) external virtual;\\n\\n function updateController(bytes32 _id, address _controller) external virtual;\\n\\n function getContract(bytes32 _id) public view virtual returns (address);\\n}\\n\",\"keccak256\":\"0x34ea30a2b44d0cbec58fc1d703476ff0085b0fdadab0cd65c35c00b8867f7546\",\"license\":\"MIT\"},\"contracts/IManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\ninterface IManager {\\n event SetController(address controller);\\n event ParameterUpdate(string param);\\n\\n function setController(address _controller) external;\\n}\\n\",\"keccak256\":\"0xc179e4cecc593741514237d5194b4aaac6b829789629fa19ed04f572a8530481\",\"license\":\"MIT\"},\"contracts/Manager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\nimport \\\"./IManager.sol\\\";\\nimport \\\"./IController.sol\\\";\\n\\ncontract Manager is IManager {\\n // Controller that contract is registered with\\n IController public controller;\\n\\n // Check if sender is controller\\n modifier onlyController() {\\n _onlyController();\\n _;\\n }\\n\\n // Check if sender is controller owner\\n modifier onlyControllerOwner() {\\n _onlyControllerOwner();\\n _;\\n }\\n\\n // Check if controller is not paused\\n modifier whenSystemNotPaused() {\\n _whenSystemNotPaused();\\n _;\\n }\\n\\n // Check if controller is paused\\n modifier whenSystemPaused() {\\n _whenSystemPaused();\\n _;\\n }\\n\\n constructor(address _controller) {\\n controller = IController(_controller);\\n }\\n\\n /**\\n * @notice Set controller. Only callable by current controller\\n * @param _controller Controller contract address\\n */\\n function setController(address _controller) external onlyController {\\n controller = IController(_controller);\\n\\n emit SetController(_controller);\\n }\\n\\n function _onlyController() private view {\\n require(msg.sender == address(controller), \\\"caller must be Controller\\\");\\n }\\n\\n function _onlyControllerOwner() private view {\\n require(msg.sender == controller.owner(), \\\"caller must be Controller owner\\\");\\n }\\n\\n function _whenSystemNotPaused() private view {\\n require(!controller.paused(), \\\"system is paused\\\");\\n }\\n\\n function _whenSystemPaused() private view {\\n require(controller.paused(), \\\"system is not paused\\\");\\n }\\n}\\n\",\"keccak256\":\"0xc415e3f42da9f82ddd5953031f3f26aed824368fcc34d3b8a17015bfe80dc109\",\"license\":\"MIT\"},\"contracts/ManagerProxyTarget.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\nimport \\\"./Manager.sol\\\";\\n\\n/**\\n * @title ManagerProxyTarget\\n * @notice The base contract that target contracts used by a proxy contract should inherit from\\n * @dev Both the target contract and the proxy contract (implemented as ManagerProxy) MUST inherit from ManagerProxyTarget in order to guarantee\\n that both contracts have the same storage layout. Differing storage layouts in a proxy contract and target contract can\\n potentially break the delegate proxy upgradeability mechanism\\n */\\nabstract contract ManagerProxyTarget is Manager {\\n // Used to look up target contract address in controller's registry\\n bytes32 public targetContractId;\\n}\\n\",\"keccak256\":\"0x920bcc2def240e06272dc06cbcb9f12976f1698cd4f1020c165af25ee837e553\",\"license\":\"MIT\"},\"contracts/bonding/BondingManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\nimport \\\"../ManagerProxyTarget.sol\\\";\\nimport \\\"./IBondingManager.sol\\\";\\nimport \\\"../libraries/SortedDoublyLL.sol\\\";\\nimport \\\"../libraries/MathUtils.sol\\\";\\nimport \\\"../libraries/PreciseMathUtils.sol\\\";\\nimport \\\"./libraries/EarningsPool.sol\\\";\\nimport \\\"./libraries/EarningsPoolLIP36.sol\\\";\\nimport \\\"../token/ILivepeerToken.sol\\\";\\nimport \\\"../token/IMinter.sol\\\";\\nimport \\\"../rounds/IRoundsManager.sol\\\";\\nimport \\\"../snapshots/IMerkleSnapshot.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\n\\n/**\\n * @title BondingManager\\n * @notice Manages bonding, transcoder and rewards/fee accounting related operations of the Livepeer protocol\\n */\\ncontract BondingManager is ManagerProxyTarget, IBondingManager {\\n using SafeMath for uint256;\\n using SortedDoublyLL for SortedDoublyLL.Data;\\n using EarningsPool for EarningsPool.Data;\\n using EarningsPoolLIP36 for EarningsPool.Data;\\n\\n // Constants\\n // Occurances are replaced at compile time\\n // and computed to a single value if possible by the optimizer\\n uint256 constant MAX_FUTURE_ROUND = 2**256 - 1;\\n\\n // Time between unbonding and possible withdrawl in rounds\\n uint64 public unbondingPeriod;\\n\\n // Represents a transcoder's current state\\n struct Transcoder {\\n uint256 lastRewardRound; // Last round that the transcoder called reward\\n uint256 rewardCut; // % of reward paid to transcoder by a delegator\\n uint256 feeShare; // % of fees paid to delegators by transcoder\\n mapping(uint256 => EarningsPool.Data) earningsPoolPerRound; // Mapping of round => earnings pool for the round\\n uint256 lastActiveStakeUpdateRound; // Round for which the stake was last updated while the transcoder is active\\n uint256 activationRound; // Round in which the transcoder became active - 0 if inactive\\n uint256 deactivationRound; // Round in which the transcoder will become inactive\\n uint256 activeCumulativeRewards; // The transcoder's cumulative rewards that are active in the current round\\n uint256 cumulativeRewards; // The transcoder's cumulative rewards (earned via the its active staked rewards and its reward cut).\\n uint256 cumulativeFees; // The transcoder's cumulative fees (earned via the its active staked rewards and its fee share)\\n uint256 lastFeeRound; // Latest round in which the transcoder received fees\\n }\\n\\n // The various states a transcoder can be in\\n enum TranscoderStatus {\\n NotRegistered,\\n Registered\\n }\\n\\n // Represents a delegator's current state\\n struct Delegator {\\n uint256 bondedAmount; // The amount of bonded tokens\\n uint256 fees; // The amount of fees collected\\n address delegateAddress; // The address delegated to\\n uint256 delegatedAmount; // The amount of tokens delegated to the delegator\\n uint256 startRound; // The round the delegator transitions to bonded phase and is delegated to someone\\n uint256 lastClaimRound; // The last round during which the delegator claimed its earnings\\n uint256 nextUnbondingLockId; // ID for the next unbonding lock created\\n mapping(uint256 => UnbondingLock) unbondingLocks; // Mapping of unbonding lock ID => unbonding lock\\n }\\n\\n // The various states a delegator can be in\\n enum DelegatorStatus {\\n Pending,\\n Bonded,\\n Unbonded\\n }\\n\\n // Represents an amount of tokens that are being unbonded\\n struct UnbondingLock {\\n uint256 amount; // Amount of tokens being unbonded\\n uint256 withdrawRound; // Round at which unbonding period is over and tokens can be withdrawn\\n }\\n\\n // Keep track of the known transcoders and delegators\\n mapping(address => Delegator) private delegators;\\n mapping(address => Transcoder) private transcoders;\\n\\n // The total active stake (sum of the stake of active set members) for the current round\\n uint256 public currentRoundTotalActiveStake;\\n // The total active stake (sum of the stake of active set members) for the next round\\n uint256 public nextRoundTotalActiveStake;\\n\\n // The transcoder pool is used to keep track of the transcoders that are eligible for activation.\\n // The pool keeps track of the pending active set in round N and the start of round N + 1 transcoders\\n // in the pool are locked into the active set for round N + 1\\n SortedDoublyLL.Data private transcoderPool;\\n\\n // Check if sender is TicketBroker\\n modifier onlyTicketBroker() {\\n _onlyTicketBroker();\\n _;\\n }\\n\\n // Check if sender is RoundsManager\\n modifier onlyRoundsManager() {\\n _onlyRoundsManager();\\n _;\\n }\\n\\n // Check if sender is Verifier\\n modifier onlyVerifier() {\\n _onlyVerifier();\\n _;\\n }\\n\\n // Check if current round is initialized\\n modifier currentRoundInitialized() {\\n _currentRoundInitialized();\\n _;\\n }\\n\\n // Automatically claim earnings from lastClaimRound through the current round\\n modifier autoClaimEarnings() {\\n _autoClaimEarnings();\\n _;\\n }\\n\\n /**\\n * @notice BondingManager constructor. Only invokes constructor of base Manager contract with provided Controller address\\n * @dev This constructor will not initialize any state variables besides `controller`. The following setter functions\\n * should be used to initialize state variables post-deployment:\\n * - setUnbondingPeriod()\\n * - setNumActiveTranscoders()\\n * - setMaxEarningsClaimsRounds()\\n * @param _controller Address of Controller that this contract will be registered with\\n */\\n constructor(address _controller) Manager(_controller) {}\\n\\n /**\\n * @notice Set unbonding period. Only callable by Controller owner\\n * @param _unbondingPeriod Rounds between unbonding and possible withdrawal\\n */\\n function setUnbondingPeriod(uint64 _unbondingPeriod) external onlyControllerOwner {\\n unbondingPeriod = _unbondingPeriod;\\n\\n emit ParameterUpdate(\\\"unbondingPeriod\\\");\\n }\\n\\n /**\\n * @notice Set maximum number of active transcoders. Only callable by Controller owner\\n * @param _numActiveTranscoders Number of active transcoders\\n */\\n function setNumActiveTranscoders(uint256 _numActiveTranscoders) external onlyControllerOwner {\\n transcoderPool.setMaxSize(_numActiveTranscoders);\\n\\n emit ParameterUpdate(\\\"numActiveTranscoders\\\");\\n }\\n\\n /**\\n * @notice Sets commission rates as a transcoder and if the caller is not in the transcoder pool tries to add it\\n * @dev Percentages are represented as numerators of fractions over MathUtils.PERC_DIVISOR\\n * @param _rewardCut % of reward paid to transcoder by a delegator\\n * @param _feeShare % of fees paid to delegators by a transcoder\\n */\\n function transcoder(uint256 _rewardCut, uint256 _feeShare) external {\\n transcoderWithHint(_rewardCut, _feeShare, address(0), address(0));\\n }\\n\\n /**\\n * @notice Delegate stake towards a specific address\\n * @param _amount The amount of tokens to stake\\n * @param _to The address of the transcoder to stake towards\\n */\\n function bond(uint256 _amount, address _to) external {\\n bondWithHint(_amount, _to, address(0), address(0), address(0), address(0));\\n }\\n\\n /**\\n * @notice Unbond an amount of the delegator's bonded stake\\n * @param _amount Amount of tokens to unbond\\n */\\n function unbond(uint256 _amount) external {\\n unbondWithHint(_amount, address(0), address(0));\\n }\\n\\n /**\\n * @notice Rebond tokens for an unbonding lock to a delegator's current delegate while a delegator is in the Bonded or Pending status\\n * @param _unbondingLockId ID of unbonding lock to rebond with\\n */\\n function rebond(uint256 _unbondingLockId) external {\\n rebondWithHint(_unbondingLockId, address(0), address(0));\\n }\\n\\n /**\\n * @notice Rebond tokens for an unbonding lock to a delegate while a delegator is in the Unbonded status\\n * @param _to Address of delegate\\n * @param _unbondingLockId ID of unbonding lock to rebond with\\n */\\n function rebondFromUnbonded(address _to, uint256 _unbondingLockId) external {\\n rebondFromUnbondedWithHint(_to, _unbondingLockId, address(0), address(0));\\n }\\n\\n /**\\n * @notice Withdraws tokens for an unbonding lock that has existed through an unbonding period\\n * @param _unbondingLockId ID of unbonding lock to withdraw with\\n */\\n function withdrawStake(uint256 _unbondingLockId) external whenSystemNotPaused currentRoundInitialized {\\n Delegator storage del = delegators[msg.sender];\\n UnbondingLock storage lock = del.unbondingLocks[_unbondingLockId];\\n\\n require(isValidUnbondingLock(msg.sender, _unbondingLockId), \\\"invalid unbonding lock ID\\\");\\n require(\\n lock.withdrawRound <= roundsManager().currentRound(),\\n \\\"withdraw round must be before or equal to the current round\\\"\\n );\\n\\n uint256 amount = lock.amount;\\n uint256 withdrawRound = lock.withdrawRound;\\n // Delete unbonding lock\\n delete del.unbondingLocks[_unbondingLockId];\\n\\n // Tell Minter to transfer stake (LPT) to the delegator\\n minter().trustedTransferTokens(msg.sender, amount);\\n\\n emit WithdrawStake(msg.sender, _unbondingLockId, amount, withdrawRound);\\n }\\n\\n /**\\n * @notice Withdraws fees to the caller\\n */\\n function withdrawFees(address payable _recipient, uint256 _amount)\\n external\\n whenSystemNotPaused\\n currentRoundInitialized\\n autoClaimEarnings\\n {\\n require(_recipient != address(0), \\\"invalid recipient\\\");\\n uint256 fees = delegators[msg.sender].fees;\\n require(fees >= _amount, \\\"insufficient fees to withdraw\\\");\\n delegators[msg.sender].fees = fees.sub(_amount);\\n\\n // Tell Minter to transfer fees (ETH) to the address\\n minter().trustedWithdrawETH(_recipient, _amount);\\n\\n emit WithdrawFees(msg.sender, _recipient, _amount);\\n }\\n\\n /**\\n * @notice Mint token rewards for an active transcoder and its delegators\\n */\\n function reward() external {\\n rewardWithHint(address(0), address(0));\\n }\\n\\n /**\\n * @notice Update transcoder's fee pool. Only callable by the TicketBroker\\n * @param _transcoder Transcoder address\\n * @param _fees Fees to be added to the fee pool\\n */\\n function updateTranscoderWithFees(\\n address _transcoder,\\n uint256 _fees,\\n uint256 _round\\n ) external whenSystemNotPaused onlyTicketBroker {\\n // Silence unused param compiler warning\\n _round;\\n\\n require(isRegisteredTranscoder(_transcoder), \\\"transcoder must be registered\\\");\\n\\n uint256 currentRound = roundsManager().currentRound();\\n\\n Transcoder storage t = transcoders[_transcoder];\\n\\n uint256 lastRewardRound = t.lastRewardRound;\\n uint256 activeCumulativeRewards = t.activeCumulativeRewards;\\n\\n // LIP-36: Add fees for the current round instead of '_round'\\n // https://github.com/livepeer/LIPs/issues/35#issuecomment-673659199\\n EarningsPool.Data storage earningsPool = t.earningsPoolPerRound[currentRound];\\n EarningsPool.Data memory prevEarningsPool = latestCumulativeFactorsPool(t, currentRound.sub(1));\\n\\n // if transcoder hasn't called 'reward()' for '_round' its 'transcoderFeeShare', 'transcoderRewardCut' and 'totalStake'\\n // on the 'EarningsPool' for '_round' would not be initialized and the fee distribution wouldn't happen as expected\\n // for cumulative fee calculation this would result in division by zero.\\n if (currentRound > lastRewardRound) {\\n earningsPool.setCommission(t.rewardCut, t.feeShare);\\n\\n uint256 lastUpdateRound = t.lastActiveStakeUpdateRound;\\n if (lastUpdateRound < currentRound) {\\n earningsPool.setStake(t.earningsPoolPerRound[lastUpdateRound].totalStake);\\n }\\n\\n // If reward() has not been called yet in the current round, then the transcoder's activeCumulativeRewards has not\\n // yet been set in for the round. When the transcoder calls reward() its activeCumulativeRewards will be set to its\\n // current cumulativeRewards. So, we can just use the transcoder's cumulativeRewards here because this will become\\n // the transcoder's activeCumulativeRewards if it calls reward() later on in the current round\\n activeCumulativeRewards = t.cumulativeRewards;\\n }\\n\\n uint256 totalStake = earningsPool.totalStake;\\n if (prevEarningsPool.cumulativeRewardFactor == 0 && lastRewardRound == currentRound) {\\n // if transcoder called reward for 'currentRound' but not for 'currentRound - 1' (missed reward call)\\n // retroactively calculate what its cumulativeRewardFactor would have been for 'currentRound - 1' (cfr. previous lastRewardRound for transcoder)\\n // based on rewards for currentRound\\n IMinter mtr = minter();\\n uint256 rewards = PreciseMathUtils.percOf(\\n mtr.currentMintableTokens().add(mtr.currentMintedTokens()),\\n totalStake,\\n currentRoundTotalActiveStake\\n );\\n uint256 transcoderCommissionRewards = MathUtils.percOf(rewards, earningsPool.transcoderRewardCut);\\n uint256 delegatorsRewards = rewards.sub(transcoderCommissionRewards);\\n\\n prevEarningsPool.cumulativeRewardFactor = PreciseMathUtils.percOf(\\n earningsPool.cumulativeRewardFactor,\\n totalStake,\\n delegatorsRewards.add(totalStake)\\n );\\n }\\n\\n uint256 delegatorsFees = MathUtils.percOf(_fees, earningsPool.transcoderFeeShare);\\n uint256 transcoderCommissionFees = _fees.sub(delegatorsFees);\\n // Calculate the fees earned by the transcoder's earned rewards\\n uint256 transcoderRewardStakeFees = PreciseMathUtils.percOf(\\n delegatorsFees,\\n activeCumulativeRewards,\\n totalStake\\n );\\n // Track fees earned by the transcoder based on its earned rewards and feeShare\\n t.cumulativeFees = t.cumulativeFees.add(transcoderRewardStakeFees).add(transcoderCommissionFees);\\n // Update cumulative fee factor with new fees\\n // The cumulativeFeeFactor is used to calculate fees for all delegators including the transcoder (self-delegated)\\n // Note that delegatorsFees includes transcoderRewardStakeFees, but no delegator will claim that amount using\\n // the earnings claiming algorithm and instead that amount is accounted for in the transcoder's cumulativeFees field\\n earningsPool.updateCumulativeFeeFactor(prevEarningsPool, delegatorsFees);\\n\\n t.lastFeeRound = currentRound;\\n }\\n\\n /**\\n * @notice Slash a transcoder. Only callable by the Verifier\\n * @param _transcoder Transcoder address\\n * @param _finder Finder that proved a transcoder violated a slashing condition. Null address if there is no finder\\n * @param _slashAmount Percentage of transcoder bond to be slashed\\n * @param _finderFee Percentage of penalty awarded to finder. Zero if there is no finder\\n */\\n function slashTranscoder(\\n address _transcoder,\\n address _finder,\\n uint256 _slashAmount,\\n uint256 _finderFee\\n ) external whenSystemNotPaused onlyVerifier {\\n Delegator storage del = delegators[_transcoder];\\n\\n if (del.bondedAmount > 0) {\\n uint256 penalty = MathUtils.percOf(delegators[_transcoder].bondedAmount, _slashAmount);\\n\\n // If active transcoder, resign it\\n if (transcoderPool.contains(_transcoder)) {\\n resignTranscoder(_transcoder);\\n }\\n\\n // Decrease bonded stake\\n del.bondedAmount = del.bondedAmount.sub(penalty);\\n\\n // If still bonded decrease delegate's delegated amount\\n if (delegatorStatus(_transcoder) == DelegatorStatus.Bonded) {\\n delegators[del.delegateAddress].delegatedAmount = delegators[del.delegateAddress].delegatedAmount.sub(\\n penalty\\n );\\n }\\n\\n // Account for penalty\\n uint256 burnAmount = penalty;\\n\\n // Award finder fee if there is a finder address\\n if (_finder != address(0)) {\\n uint256 finderAmount = MathUtils.percOf(penalty, _finderFee);\\n minter().trustedTransferTokens(_finder, finderAmount);\\n\\n // Minter burns the slashed funds - finder reward\\n minter().trustedBurnTokens(burnAmount.sub(finderAmount));\\n\\n emit TranscoderSlashed(_transcoder, _finder, penalty, finderAmount);\\n } else {\\n // Minter burns the slashed funds\\n minter().trustedBurnTokens(burnAmount);\\n\\n emit TranscoderSlashed(_transcoder, address(0), penalty, 0);\\n }\\n } else {\\n emit TranscoderSlashed(_transcoder, _finder, 0, 0);\\n }\\n }\\n\\n /**\\n * @notice Claim token pools shares for a delegator from its lastClaimRound through the end round\\n * @param _endRound The last round for which to claim token pools shares for a delegator\\n */\\n function claimEarnings(uint256 _endRound) external whenSystemNotPaused currentRoundInitialized {\\n // Silence unused param compiler warning\\n _endRound;\\n\\n _autoClaimEarnings();\\n }\\n\\n /**\\n * @notice Called during round initialization to set the total active stake for the round. Only callable by the RoundsManager\\n */\\n function setCurrentRoundTotalActiveStake() external onlyRoundsManager {\\n currentRoundTotalActiveStake = nextRoundTotalActiveStake;\\n }\\n\\n /**\\n * @notice Sets commission rates as a transcoder and if the caller is not in the transcoder pool tries to add it using an optional list hint\\n * @dev Percentages are represented as numerators of fractions over MathUtils.PERC_DIVISOR. If the caller is going to be added to the pool, the\\n * caller can provide an optional hint for the insertion position in the pool via the `_newPosPrev` and `_newPosNext` params. A linear search will\\n * be executed starting at the hint to find the correct position - in the best case, the hint is the correct position so no search is executed.\\n * See SortedDoublyLL.sol for details on list hints\\n * @param _rewardCut % of reward paid to transcoder by a delegator\\n * @param _feeShare % of fees paid to delegators by a transcoder\\n * @param _newPosPrev Address of previous transcoder in pool if the caller joins the pool\\n * @param _newPosNext Address of next transcoder in pool if the caller joins the pool\\n */\\n function transcoderWithHint(\\n uint256 _rewardCut,\\n uint256 _feeShare,\\n address _newPosPrev,\\n address _newPosNext\\n ) public whenSystemNotPaused currentRoundInitialized {\\n require(!roundsManager().currentRoundLocked(), \\\"can't update transcoder params, current round is locked\\\");\\n require(MathUtils.validPerc(_rewardCut), \\\"invalid rewardCut percentage\\\");\\n require(MathUtils.validPerc(_feeShare), \\\"invalid feeShare percentage\\\");\\n require(isRegisteredTranscoder(msg.sender), \\\"transcoder must be registered\\\");\\n\\n Transcoder storage t = transcoders[msg.sender];\\n uint256 currentRound = roundsManager().currentRound();\\n\\n require(\\n !isActiveTranscoder(msg.sender) || t.lastRewardRound == currentRound,\\n \\\"caller can't be active or must have already called reward for the current round\\\"\\n );\\n\\n t.rewardCut = _rewardCut;\\n t.feeShare = _feeShare;\\n\\n if (!transcoderPool.contains(msg.sender)) {\\n tryToJoinActiveSet(\\n msg.sender,\\n delegators[msg.sender].delegatedAmount,\\n currentRound.add(1),\\n _newPosPrev,\\n _newPosNext\\n );\\n }\\n\\n emit TranscoderUpdate(msg.sender, _rewardCut, _feeShare);\\n }\\n\\n /**\\n * @notice Delegates stake \\\"on behalf of\\\" another address towards a specific address\\n * and updates the transcoder pool using optional list hints if needed\\n * @dev If the caller is decreasing the stake of its old delegate in the transcoder pool, the caller can provide an optional hint\\n * for the insertion position of the old delegate via the `_oldDelegateNewPosPrev` and `_oldDelegateNewPosNext` params.\\n * If the caller is delegating to a delegate that is in the transcoder pool, the caller can provide an optional hint for the\\n * insertion position of the delegate via the `_currDelegateNewPosPrev` and `_currDelegateNewPosNext` params.\\n * In both cases, a linear search will be executed starting at the hint to find the correct position. In the best case, the hint\\n * is the correct position so no search is executed. See SortedDoublyLL.sol for details on list hints\\n * @param _amount The amount of tokens to stake.\\n * @param _owner The address of the owner of the bond\\n * @param _to The address of the transcoder to stake towards\\n * @param _oldDelegateNewPosPrev The address of the previous transcoder in the pool for the old delegate\\n * @param _oldDelegateNewPosNext The address of the next transcoder in the pool for the old delegate\\n * @param _currDelegateNewPosPrev The address of the previous transcoder in the pool for the current delegate\\n * @param _currDelegateNewPosNext The address of the next transcoder in the pool for the current delegate\\n */\\n function bondForWithHint(\\n uint256 _amount,\\n address _owner,\\n address _to,\\n address _oldDelegateNewPosPrev,\\n address _oldDelegateNewPosNext,\\n address _currDelegateNewPosPrev,\\n address _currDelegateNewPosNext\\n ) public whenSystemNotPaused currentRoundInitialized autoClaimEarnings {\\n Delegator storage del = delegators[_owner];\\n\\n uint256 currentRound = roundsManager().currentRound();\\n // Amount to delegate\\n uint256 delegationAmount = _amount;\\n // Current delegate\\n address currentDelegate = del.delegateAddress;\\n // Current bonded amount\\n uint256 currentBondedAmount = del.bondedAmount;\\n\\n if (delegatorStatus(_owner) == DelegatorStatus.Unbonded) {\\n // New delegate\\n // Set start round\\n // Don't set start round if delegator is in pending state because the start round would not change\\n del.startRound = currentRound.add(1);\\n // Unbonded state = no existing delegate and no bonded stake\\n // Thus, delegation amount = provided amount\\n } else if (currentBondedAmount > 0 && currentDelegate != _to) {\\n // A registered transcoder cannot delegate its bonded stake toward another address\\n // because it can only be delegated toward itself\\n // In the future, if delegation towards another registered transcoder as an already\\n // registered transcoder becomes useful (i.e. for transitive delegation), this restriction\\n // could be removed\\n require(!isRegisteredTranscoder(_owner), \\\"registered transcoders can't delegate towards other addresses\\\");\\n // Changing delegate\\n // Set start round\\n del.startRound = currentRound.add(1);\\n // Update amount to delegate with previous delegation amount\\n delegationAmount = delegationAmount.add(currentBondedAmount);\\n\\n decreaseTotalStake(currentDelegate, currentBondedAmount, _oldDelegateNewPosPrev, _oldDelegateNewPosNext);\\n }\\n\\n {\\n Transcoder storage newDelegate = transcoders[_to];\\n EarningsPool.Data storage currPool = newDelegate.earningsPoolPerRound[currentRound];\\n if (currPool.cumulativeRewardFactor == 0) {\\n currPool.cumulativeRewardFactor = cumulativeFactorsPool(newDelegate, newDelegate.lastRewardRound)\\n .cumulativeRewardFactor;\\n }\\n if (currPool.cumulativeFeeFactor == 0) {\\n currPool.cumulativeFeeFactor = cumulativeFactorsPool(newDelegate, newDelegate.lastFeeRound)\\n .cumulativeFeeFactor;\\n }\\n }\\n\\n // cannot delegate to someone without having bonded stake\\n require(delegationAmount > 0, \\\"delegation amount must be greater than 0\\\");\\n // Update delegate\\n del.delegateAddress = _to;\\n // Update bonded amount\\n del.bondedAmount = currentBondedAmount.add(_amount);\\n\\n increaseTotalStake(_to, delegationAmount, _currDelegateNewPosPrev, _currDelegateNewPosNext);\\n\\n if (_amount > 0) {\\n // Transfer the LPT to the Minter\\n livepeerToken().transferFrom(msg.sender, address(minter()), _amount);\\n }\\n\\n emit Bond(_to, currentDelegate, _owner, _amount, del.bondedAmount);\\n }\\n\\n /**\\n * @notice Delegates stake towards a specific address and updates the transcoder pool using optional list hints if needed\\n * @dev If the caller is decreasing the stake of its old delegate in the transcoder pool, the caller can provide an optional hint\\n * for the insertion position of the old delegate via the `_oldDelegateNewPosPrev` and `_oldDelegateNewPosNext` params.\\n * If the caller is delegating to a delegate that is in the transcoder pool, the caller can provide an optional hint for the\\n * insertion position of the delegate via the `_currDelegateNewPosPrev` and `_currDelegateNewPosNext` params.\\n * In both cases, a linear search will be executed starting at the hint to find the correct position. In the best case, the hint\\n * is the correct position so no search is executed. See SortedDoublyLL.sol for details on list hints\\n * @param _amount The amount of tokens to stake.\\n * @param _to The address of the transcoder to stake towards\\n * @param _oldDelegateNewPosPrev The address of the previous transcoder in the pool for the old delegate\\n * @param _oldDelegateNewPosNext The address of the next transcoder in the pool for the old delegate\\n * @param _currDelegateNewPosPrev The address of the previous transcoder in the pool for the current delegate\\n * @param _currDelegateNewPosNext The address of the next transcoder in the pool for the current delegate\\n */\\n function bondWithHint(\\n uint256 _amount,\\n address _to,\\n address _oldDelegateNewPosPrev,\\n address _oldDelegateNewPosNext,\\n address _currDelegateNewPosPrev,\\n address _currDelegateNewPosNext\\n ) public {\\n bondForWithHint(\\n _amount,\\n msg.sender,\\n _to,\\n _oldDelegateNewPosPrev,\\n _oldDelegateNewPosNext,\\n _currDelegateNewPosPrev,\\n _currDelegateNewPosNext\\n );\\n }\\n\\n /**\\n * @notice Transfers ownership of a bond to a new delegator using optional hints if needed\\n *\\n * If the receiver is already bonded to a different delegate than the bond owner then the stake goes\\n * to the receiver's delegate otherwise the receiver's delegate is set as the owner's delegate\\n *\\n * @dev If the original delegate is in the transcoder pool, the caller can provide an optional hint for the\\n * insertion position of the delegate via the `_oldDelegateNewPosPrev` and `_oldDelegateNewPosNext` params.\\n * If the target delegate is in the transcoder pool, the caller can provide an optional hint for the\\n * insertion position of the delegate via the `_newDelegateNewPosPrev` and `_newDelegateNewPosNext` params.\\n *\\n * In both cases, a linear search will be executed starting at the hint to find the correct position. In the best case, the hint\\n * is the correct position so no search is executed. See SortedDoublyLL.sol for details on list hints\\n * @param _delegator Receiver of the bond\\n * @param _amount Portion of the bond to transfer to receiver\\n * @param _oldDelegateNewPosPrev Address of previous transcoder in pool if the delegate remains in the pool\\n * @param _oldDelegateNewPosNext Address of next transcoder in pool if the delegate remains in the pool\\n * @param _newDelegateNewPosPrev Address of previous transcoder in pool if the delegate is in the pool\\n * @param _newDelegateNewPosNext Address of next transcoder in pool if the delegate is in the pool\\n */\\n function transferBond(\\n address _delegator,\\n uint256 _amount,\\n address _oldDelegateNewPosPrev,\\n address _oldDelegateNewPosNext,\\n address _newDelegateNewPosPrev,\\n address _newDelegateNewPosNext\\n ) public whenSystemNotPaused currentRoundInitialized autoClaimEarnings {\\n Delegator storage oldDel = delegators[msg.sender];\\n // Cache delegate address of caller before unbondWithHint because\\n // if unbondWithHint is for a full unbond the caller's delegate address will be set to null\\n address oldDelDelegate = oldDel.delegateAddress;\\n\\n unbondWithHint(_amount, _oldDelegateNewPosPrev, _oldDelegateNewPosNext);\\n\\n Delegator storage newDel = delegators[_delegator];\\n\\n uint256 oldDelUnbondingLockId = oldDel.nextUnbondingLockId.sub(1);\\n uint256 withdrawRound = oldDel.unbondingLocks[oldDelUnbondingLockId].withdrawRound;\\n\\n // Burn lock for current owner\\n delete oldDel.unbondingLocks[oldDelUnbondingLockId];\\n\\n // Create lock for new owner\\n uint256 newDelUnbondingLockId = newDel.nextUnbondingLockId;\\n\\n newDel.unbondingLocks[newDelUnbondingLockId] = UnbondingLock({ amount: _amount, withdrawRound: withdrawRound });\\n newDel.nextUnbondingLockId = newDel.nextUnbondingLockId.add(1);\\n\\n emit TransferBond(msg.sender, _delegator, oldDelUnbondingLockId, newDelUnbondingLockId, _amount);\\n\\n // Claim earnings for receiver before processing unbonding lock\\n uint256 currentRound = roundsManager().currentRound();\\n uint256 lastClaimRound = newDel.lastClaimRound;\\n if (lastClaimRound < currentRound) {\\n updateDelegatorWithEarnings(_delegator, currentRound, lastClaimRound);\\n }\\n\\n // Rebond lock for new owner\\n if (newDel.delegateAddress == address(0)) {\\n newDel.delegateAddress = oldDelDelegate;\\n }\\n\\n // Move to Pending state if receiver is currently in Unbonded state\\n if (delegatorStatus(_delegator) == DelegatorStatus.Unbonded) {\\n newDel.startRound = currentRound.add(1);\\n }\\n\\n // Process rebond using unbonding lock\\n processRebond(_delegator, newDelUnbondingLockId, _newDelegateNewPosPrev, _newDelegateNewPosNext);\\n }\\n\\n /**\\n * @notice Unbond an amount of the delegator's bonded stake and updates the transcoder pool using an optional list hint if needed\\n * @dev If the caller remains in the transcoder pool, the caller can provide an optional hint for its insertion position in the\\n * pool via the `_newPosPrev` and `_newPosNext` params. A linear search will be executed starting at the hint to find the correct position.\\n * In the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol details on list hints\\n * @param _amount Amount of tokens to unbond\\n * @param _newPosPrev Address of previous transcoder in pool if the caller remains in the pool\\n * @param _newPosNext Address of next transcoder in pool if the caller remains in the pool\\n */\\n function unbondWithHint(\\n uint256 _amount,\\n address _newPosPrev,\\n address _newPosNext\\n ) public whenSystemNotPaused currentRoundInitialized autoClaimEarnings {\\n require(delegatorStatus(msg.sender) == DelegatorStatus.Bonded, \\\"caller must be bonded\\\");\\n\\n Delegator storage del = delegators[msg.sender];\\n\\n require(_amount > 0, \\\"unbond amount must be greater than 0\\\");\\n require(_amount <= del.bondedAmount, \\\"amount is greater than bonded amount\\\");\\n\\n address currentDelegate = del.delegateAddress;\\n uint256 currentRound = roundsManager().currentRound();\\n uint256 withdrawRound = currentRound.add(unbondingPeriod);\\n uint256 unbondingLockId = del.nextUnbondingLockId;\\n\\n // Create new unbonding lock\\n del.unbondingLocks[unbondingLockId] = UnbondingLock({ amount: _amount, withdrawRound: withdrawRound });\\n // Increment ID for next unbonding lock\\n del.nextUnbondingLockId = unbondingLockId.add(1);\\n // Decrease delegator's bonded amount\\n del.bondedAmount = del.bondedAmount.sub(_amount);\\n\\n if (del.bondedAmount == 0) {\\n // Delegator no longer delegated to anyone if it does not have a bonded amount\\n del.delegateAddress = address(0);\\n // Delegator does not have a start round if it is no longer delegated to anyone\\n del.startRound = 0;\\n\\n if (transcoderPool.contains(msg.sender)) {\\n resignTranscoder(msg.sender);\\n }\\n }\\n\\n // If msg.sender was resigned this statement will only decrease delegators[currentDelegate].delegatedAmount\\n decreaseTotalStake(currentDelegate, _amount, _newPosPrev, _newPosNext);\\n\\n emit Unbond(currentDelegate, msg.sender, unbondingLockId, _amount, withdrawRound);\\n }\\n\\n /**\\n * @notice Rebond tokens for an unbonding lock to a delegator's current delegate while a delegator is in the Bonded or Pending status and updates\\n * the transcoder pool using an optional list hint if needed\\n * @dev If the delegate is in the transcoder pool, the caller can provide an optional hint for the delegate's insertion position in the\\n * pool via the `_newPosPrev` and `_newPosNext` params. A linear search will be executed starting at the hint to find the correct position.\\n * In the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol details on list hints\\n * @param _unbondingLockId ID of unbonding lock to rebond with\\n * @param _newPosPrev Address of previous transcoder in pool if the delegate is in the pool\\n * @param _newPosNext Address of next transcoder in pool if the delegate is in the pool\\n */\\n function rebondWithHint(\\n uint256 _unbondingLockId,\\n address _newPosPrev,\\n address _newPosNext\\n ) public whenSystemNotPaused currentRoundInitialized autoClaimEarnings {\\n require(delegatorStatus(msg.sender) != DelegatorStatus.Unbonded, \\\"caller must be bonded\\\");\\n\\n // Process rebond using unbonding lock\\n processRebond(msg.sender, _unbondingLockId, _newPosPrev, _newPosNext);\\n }\\n\\n /**\\n * @notice Rebond tokens for an unbonding lock to a delegate while a delegator is in the Unbonded status and updates the transcoder pool using\\n * an optional list hint if needed\\n * @dev If the delegate joins the transcoder pool, the caller can provide an optional hint for the delegate's insertion position in the\\n * pool via the `_newPosPrev` and `_newPosNext` params. A linear search will be executed starting at the hint to find the correct position.\\n * In the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol for details on list hints\\n * @param _to Address of delegate\\n * @param _unbondingLockId ID of unbonding lock to rebond with\\n * @param _newPosPrev Address of previous transcoder in pool if the delegate joins the pool\\n * @param _newPosNext Address of next transcoder in pool if the delegate joins the pool\\n */\\n function rebondFromUnbondedWithHint(\\n address _to,\\n uint256 _unbondingLockId,\\n address _newPosPrev,\\n address _newPosNext\\n ) public whenSystemNotPaused currentRoundInitialized autoClaimEarnings {\\n require(delegatorStatus(msg.sender) == DelegatorStatus.Unbonded, \\\"caller must be unbonded\\\");\\n\\n // Set delegator's start round and transition into Pending state\\n delegators[msg.sender].startRound = roundsManager().currentRound().add(1);\\n // Set delegator's delegate\\n delegators[msg.sender].delegateAddress = _to;\\n // Process rebond using unbonding lock\\n processRebond(msg.sender, _unbondingLockId, _newPosPrev, _newPosNext);\\n }\\n\\n /**\\n * @notice Mint token rewards for an active transcoder and its delegators and update the transcoder pool using an optional list hint if needed\\n * @dev If the caller is in the transcoder pool, the caller can provide an optional hint for its insertion position in the\\n * pool via the `_newPosPrev` and `_newPosNext` params. A linear search will be executed starting at the hint to find the correct position.\\n * In the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol for details on list hints\\n * @param _newPosPrev Address of previous transcoder in pool if the caller is in the pool\\n * @param _newPosNext Address of next transcoder in pool if the caller is in the pool\\n */\\n function rewardWithHint(address _newPosPrev, address _newPosNext)\\n public\\n whenSystemNotPaused\\n currentRoundInitialized\\n {\\n uint256 currentRound = roundsManager().currentRound();\\n\\n require(isActiveTranscoder(msg.sender), \\\"caller must be an active transcoder\\\");\\n require(\\n transcoders[msg.sender].lastRewardRound != currentRound,\\n \\\"caller has already called reward for the current round\\\"\\n );\\n\\n Transcoder storage t = transcoders[msg.sender];\\n EarningsPool.Data storage earningsPool = t.earningsPoolPerRound[currentRound];\\n\\n // Set last round that transcoder called reward\\n earningsPool.setCommission(t.rewardCut, t.feeShare);\\n\\n // If transcoder didn't receive stake updates during the previous round and hasn't called reward for > 1 round\\n // the 'totalStake' on its 'EarningsPool' for the current round wouldn't be initialized\\n // Thus we sync the the transcoder's stake to when it was last updated\\n // 'updateTrancoderWithRewards()' will set the update round to 'currentRound +1' so this synchronization shouldn't occur frequently\\n uint256 lastUpdateRound = t.lastActiveStakeUpdateRound;\\n if (lastUpdateRound < currentRound) {\\n earningsPool.setStake(t.earningsPoolPerRound[lastUpdateRound].totalStake);\\n }\\n\\n // Create reward based on active transcoder's stake relative to the total active stake\\n // rewardTokens = (current mintable tokens for the round * active transcoder stake) / total active stake\\n uint256 rewardTokens = minter().createReward(earningsPool.totalStake, currentRoundTotalActiveStake);\\n\\n updateTranscoderWithRewards(msg.sender, rewardTokens, currentRound, _newPosPrev, _newPosNext);\\n\\n // Set last round that transcoder called reward\\n t.lastRewardRound = currentRound;\\n\\n emit Reward(msg.sender, rewardTokens);\\n }\\n\\n /**\\n * @notice Returns pending bonded stake for a delegator from its lastClaimRound through an end round\\n * @param _delegator Address of delegator\\n * @param _endRound The last round to compute pending stake from\\n * @return Pending bonded stake for '_delegator' since last claiming rewards\\n */\\n function pendingStake(address _delegator, uint256 _endRound) public view returns (uint256) {\\n // Silence unused param compiler warning\\n _endRound;\\n\\n uint256 endRound = roundsManager().currentRound();\\n (uint256 stake, ) = pendingStakeAndFees(_delegator, endRound);\\n return stake;\\n }\\n\\n /**\\n * @notice Returns pending fees for a delegator from its lastClaimRound through an end round\\n * @param _delegator Address of delegator\\n * @param _endRound The last round to compute pending fees from\\n * @return Pending fees for '_delegator' since last claiming fees\\n */\\n function pendingFees(address _delegator, uint256 _endRound) public view returns (uint256) {\\n // Silence unused param compiler warning\\n _endRound;\\n\\n uint256 endRound = roundsManager().currentRound();\\n (, uint256 fees) = pendingStakeAndFees(_delegator, endRound);\\n return fees;\\n }\\n\\n /**\\n * @notice Returns total bonded stake for a transcoder\\n * @param _transcoder Address of transcoder\\n * @return total bonded stake for a delegator\\n */\\n function transcoderTotalStake(address _transcoder) public view returns (uint256) {\\n return delegators[_transcoder].delegatedAmount;\\n }\\n\\n /**\\n * @notice Computes transcoder status\\n * @param _transcoder Address of transcoder\\n * @return registered or not registered transcoder status\\n */\\n function transcoderStatus(address _transcoder) public view returns (TranscoderStatus) {\\n if (isRegisteredTranscoder(_transcoder)) return TranscoderStatus.Registered;\\n return TranscoderStatus.NotRegistered;\\n }\\n\\n /**\\n * @notice Computes delegator status\\n * @param _delegator Address of delegator\\n * @return bonded, unbonded or pending delegator status\\n */\\n function delegatorStatus(address _delegator) public view returns (DelegatorStatus) {\\n Delegator storage del = delegators[_delegator];\\n\\n if (del.bondedAmount == 0) {\\n // Delegator unbonded all its tokens\\n return DelegatorStatus.Unbonded;\\n } else if (del.startRound > roundsManager().currentRound()) {\\n // Delegator round start is in the future\\n return DelegatorStatus.Pending;\\n } else {\\n // Delegator round start is now or in the past\\n // del.startRound != 0 here because if del.startRound = 0 then del.bondedAmount = 0 which\\n // would trigger the first if clause\\n return DelegatorStatus.Bonded;\\n }\\n }\\n\\n /**\\n * @notice Return transcoder information\\n * @param _transcoder Address of transcoder\\n * @return lastRewardRound Trancoder's last reward round\\n * @return rewardCut Transcoder's reward cut\\n * @return feeShare Transcoder's fee share\\n * @return lastActiveStakeUpdateRound Round in which transcoder's stake was last updated while active\\n * @return activationRound Round in which transcoder became active\\n * @return deactivationRound Round in which transcoder will no longer be active\\n * @return activeCumulativeRewards Transcoder's cumulative rewards that are currently active\\n * @return cumulativeRewards Transcoder's cumulative rewards (earned via its active staked rewards and its reward cut)\\n * @return cumulativeFees Transcoder's cumulative fees (earned via its active staked rewards and its fee share)\\n * @return lastFeeRound Latest round that the transcoder received fees\\n */\\n function getTranscoder(address _transcoder)\\n public\\n view\\n returns (\\n uint256 lastRewardRound,\\n uint256 rewardCut,\\n uint256 feeShare,\\n uint256 lastActiveStakeUpdateRound,\\n uint256 activationRound,\\n uint256 deactivationRound,\\n uint256 activeCumulativeRewards,\\n uint256 cumulativeRewards,\\n uint256 cumulativeFees,\\n uint256 lastFeeRound\\n )\\n {\\n Transcoder storage t = transcoders[_transcoder];\\n\\n lastRewardRound = t.lastRewardRound;\\n rewardCut = t.rewardCut;\\n feeShare = t.feeShare;\\n lastActiveStakeUpdateRound = t.lastActiveStakeUpdateRound;\\n activationRound = t.activationRound;\\n deactivationRound = t.deactivationRound;\\n activeCumulativeRewards = t.activeCumulativeRewards;\\n cumulativeRewards = t.cumulativeRewards;\\n cumulativeFees = t.cumulativeFees;\\n lastFeeRound = t.lastFeeRound;\\n }\\n\\n /**\\n * @notice Return transcoder's earnings pool for a given round\\n * @param _transcoder Address of transcoder\\n * @param _round Round number\\n * @return totalStake Transcoder's total stake in '_round'\\n * @return transcoderRewardCut Transcoder's reward cut for '_round'\\n * @return transcoderFeeShare Transcoder's fee share for '_round'\\n * @return cumulativeRewardFactor The cumulative reward factor for delegator rewards calculation (only used after LIP-36)\\n * @return cumulativeFeeFactor The cumulative fee factor for delegator fees calculation (only used after LIP-36)\\n */\\n function getTranscoderEarningsPoolForRound(address _transcoder, uint256 _round)\\n public\\n view\\n returns (\\n uint256 totalStake,\\n uint256 transcoderRewardCut,\\n uint256 transcoderFeeShare,\\n uint256 cumulativeRewardFactor,\\n uint256 cumulativeFeeFactor\\n )\\n {\\n EarningsPool.Data storage earningsPool = transcoders[_transcoder].earningsPoolPerRound[_round];\\n\\n totalStake = earningsPool.totalStake;\\n transcoderRewardCut = earningsPool.transcoderRewardCut;\\n transcoderFeeShare = earningsPool.transcoderFeeShare;\\n cumulativeRewardFactor = earningsPool.cumulativeRewardFactor;\\n cumulativeFeeFactor = earningsPool.cumulativeFeeFactor;\\n }\\n\\n /**\\n * @notice Return delegator info\\n * @param _delegator Address of delegator\\n * @return bondedAmount total amount bonded by '_delegator'\\n * @return fees amount of fees collected by '_delegator'\\n * @return delegateAddress address '_delegator' has bonded to\\n * @return delegatedAmount total amount delegated to '_delegator'\\n * @return startRound round in which bond for '_delegator' became effective\\n * @return lastClaimRound round for which '_delegator' has last claimed earnings\\n * @return nextUnbondingLockId ID for the next unbonding lock created for '_delegator'\\n */\\n function getDelegator(address _delegator)\\n public\\n view\\n returns (\\n uint256 bondedAmount,\\n uint256 fees,\\n address delegateAddress,\\n uint256 delegatedAmount,\\n uint256 startRound,\\n uint256 lastClaimRound,\\n uint256 nextUnbondingLockId\\n )\\n {\\n Delegator storage del = delegators[_delegator];\\n\\n bondedAmount = del.bondedAmount;\\n fees = del.fees;\\n delegateAddress = del.delegateAddress;\\n delegatedAmount = del.delegatedAmount;\\n startRound = del.startRound;\\n lastClaimRound = del.lastClaimRound;\\n nextUnbondingLockId = del.nextUnbondingLockId;\\n }\\n\\n /**\\n * @notice Return delegator's unbonding lock info\\n * @param _delegator Address of delegator\\n * @param _unbondingLockId ID of unbonding lock\\n * @return amount of stake locked up by unbonding lock\\n * @return withdrawRound round in which 'amount' becomes available for withdrawal\\n */\\n function getDelegatorUnbondingLock(address _delegator, uint256 _unbondingLockId)\\n public\\n view\\n returns (uint256 amount, uint256 withdrawRound)\\n {\\n UnbondingLock storage lock = delegators[_delegator].unbondingLocks[_unbondingLockId];\\n\\n return (lock.amount, lock.withdrawRound);\\n }\\n\\n /**\\n * @notice Returns max size of transcoder pool\\n * @return transcoder pool max size\\n */\\n function getTranscoderPoolMaxSize() public view returns (uint256) {\\n return transcoderPool.getMaxSize();\\n }\\n\\n /**\\n * @notice Returns size of transcoder pool\\n * @return transcoder pool current size\\n */\\n function getTranscoderPoolSize() public view returns (uint256) {\\n return transcoderPool.getSize();\\n }\\n\\n /**\\n * @notice Returns transcoder with most stake in pool\\n * @return address for transcoder with highest stake in transcoder pool\\n */\\n function getFirstTranscoderInPool() public view returns (address) {\\n return transcoderPool.getFirst();\\n }\\n\\n /**\\n * @notice Returns next transcoder in pool for a given transcoder\\n * @param _transcoder Address of a transcoder in the pool\\n * @return address for the transcoder after '_transcoder' in transcoder pool\\n */\\n function getNextTranscoderInPool(address _transcoder) public view returns (address) {\\n return transcoderPool.getNext(_transcoder);\\n }\\n\\n /**\\n * @notice Return total bonded tokens\\n * @return total active stake for the current round\\n */\\n function getTotalBonded() public view returns (uint256) {\\n return currentRoundTotalActiveStake;\\n }\\n\\n /**\\n * @notice Return whether a transcoder is active for the current round\\n * @param _transcoder Transcoder address\\n * @return true if transcoder is active\\n */\\n function isActiveTranscoder(address _transcoder) public view returns (bool) {\\n Transcoder storage t = transcoders[_transcoder];\\n uint256 currentRound = roundsManager().currentRound();\\n return t.activationRound <= currentRound && currentRound < t.deactivationRound;\\n }\\n\\n /**\\n * @notice Return whether a transcoder is registered\\n * @param _transcoder Transcoder address\\n * @return true if transcoder is self-bonded\\n */\\n function isRegisteredTranscoder(address _transcoder) public view returns (bool) {\\n Delegator storage d = delegators[_transcoder];\\n return d.delegateAddress == _transcoder && d.bondedAmount > 0;\\n }\\n\\n /**\\n * @notice Return whether an unbonding lock for a delegator is valid\\n * @param _delegator Address of delegator\\n * @param _unbondingLockId ID of unbonding lock\\n * @return true if unbondingLock for ID has a non-zero withdraw round\\n */\\n function isValidUnbondingLock(address _delegator, uint256 _unbondingLockId) public view returns (bool) {\\n // A unbonding lock is only valid if it has a non-zero withdraw round (the default value is zero)\\n return delegators[_delegator].unbondingLocks[_unbondingLockId].withdrawRound > 0;\\n }\\n\\n /**\\n * @notice Return an EarningsPool.Data struct with cumulative factors for a given round that are rescaled if needed\\n * @param _transcoder Storage pointer to a transcoder struct\\n * @param _round The round to fetch the cumulative factors for\\n */\\n function cumulativeFactorsPool(Transcoder storage _transcoder, uint256 _round)\\n internal\\n view\\n returns (EarningsPool.Data memory pool)\\n {\\n pool.cumulativeRewardFactor = _transcoder.earningsPoolPerRound[_round].cumulativeRewardFactor;\\n pool.cumulativeFeeFactor = _transcoder.earningsPoolPerRound[_round].cumulativeFeeFactor;\\n\\n return pool;\\n }\\n\\n /**\\n * @notice Return an EarningsPool.Data struct with the latest cumulative factors for a given round\\n * @param _transcoder Storage pointer to a transcoder struct\\n * @param _round The round to fetch the latest cumulative factors for\\n * @return pool An EarningsPool.Data populated with the latest cumulative factors for _round\\n */\\n function latestCumulativeFactorsPool(Transcoder storage _transcoder, uint256 _round)\\n internal\\n view\\n returns (EarningsPool.Data memory pool)\\n {\\n pool = cumulativeFactorsPool(_transcoder, _round);\\n\\n uint256 lastRewardRound = _transcoder.lastRewardRound;\\n // Only use the cumulativeRewardFactor for lastRewardRound if lastRewardRound is before _round\\n if (pool.cumulativeRewardFactor == 0 && lastRewardRound < _round) {\\n pool.cumulativeRewardFactor = cumulativeFactorsPool(_transcoder, lastRewardRound).cumulativeRewardFactor;\\n }\\n\\n uint256 lastFeeRound = _transcoder.lastFeeRound;\\n // Only use the cumulativeFeeFactor for lastFeeRound if lastFeeRound is before _round\\n if (pool.cumulativeFeeFactor == 0 && lastFeeRound < _round) {\\n pool.cumulativeFeeFactor = cumulativeFactorsPool(_transcoder, lastFeeRound).cumulativeFeeFactor;\\n }\\n\\n return pool;\\n }\\n\\n /**\\n * @notice Return a delegator's cumulative stake and fees using the LIP-36 earnings claiming algorithm\\n * @param _transcoder Storage pointer to a transcoder struct for a delegator's delegate\\n * @param _startRound The round for the start cumulative factors\\n * @param _endRound The round for the end cumulative factors\\n * @param _stake The delegator's initial stake before including earned rewards\\n * @param _fees The delegator's initial fees before including earned fees\\n * @return cStake , cFees where cStake is the delegator's cumulative stake including earned rewards and cFees is the delegator's cumulative fees including earned fees\\n */\\n function delegatorCumulativeStakeAndFees(\\n Transcoder storage _transcoder,\\n uint256 _startRound,\\n uint256 _endRound,\\n uint256 _stake,\\n uint256 _fees\\n ) internal view returns (uint256 cStake, uint256 cFees) {\\n // Fetch start cumulative factors\\n EarningsPool.Data memory startPool = cumulativeFactorsPool(_transcoder, _startRound);\\n\\n // If the start cumulativeRewardFactor is 0 set the default value to PreciseMathUtils.percPoints(1, 1)\\n if (startPool.cumulativeRewardFactor == 0) {\\n startPool.cumulativeRewardFactor = PreciseMathUtils.percPoints(1, 1);\\n }\\n\\n // Fetch end cumulative factors\\n EarningsPool.Data memory endPool = latestCumulativeFactorsPool(_transcoder, _endRound);\\n\\n // If the end cumulativeRewardFactor is 0 set the default value to PreciseMathUtils.percPoints(1, 1)\\n if (endPool.cumulativeRewardFactor == 0) {\\n endPool.cumulativeRewardFactor = PreciseMathUtils.percPoints(1, 1);\\n }\\n\\n cFees = _fees.add(\\n PreciseMathUtils.percOf(\\n _stake,\\n endPool.cumulativeFeeFactor.sub(startPool.cumulativeFeeFactor),\\n startPool.cumulativeRewardFactor\\n )\\n );\\n\\n cStake = PreciseMathUtils.percOf(_stake, endPool.cumulativeRewardFactor, startPool.cumulativeRewardFactor);\\n\\n return (cStake, cFees);\\n }\\n\\n /**\\n * @notice Return the pending stake and fees for a delegator\\n * @param _delegator Address of a delegator\\n * @param _endRound The last round to claim earnings for when calculating the pending stake and fees\\n * @return stake , fees where stake is the delegator's pending stake and fees is the delegator's pending fees\\n */\\n function pendingStakeAndFees(address _delegator, uint256 _endRound)\\n internal\\n view\\n returns (uint256 stake, uint256 fees)\\n {\\n Delegator storage del = delegators[_delegator];\\n Transcoder storage t = transcoders[del.delegateAddress];\\n\\n fees = del.fees;\\n stake = del.bondedAmount;\\n\\n uint256 startRound = del.lastClaimRound.add(1);\\n address delegateAddr = del.delegateAddress;\\n bool isTranscoder = _delegator == delegateAddr;\\n\\n // Make sure there is a round to claim i.e. end round - (start round - 1) > 0\\n if (startRound <= _endRound) {\\n (stake, fees) = delegatorCumulativeStakeAndFees(t, startRound.sub(1), _endRound, stake, fees);\\n }\\n // cumulativeRewards and cumulativeFees will track *all* rewards/fees earned by the transcoder\\n // so it is important that this is only executed with the end round as the current round or else\\n // the returned stake and fees will reflect rewards/fees earned in the future relative to the end round\\n if (isTranscoder) {\\n stake = stake.add(t.cumulativeRewards);\\n fees = fees.add(t.cumulativeFees);\\n }\\n\\n return (stake, fees);\\n }\\n\\n /**\\n * @dev Increase the total stake for a delegate and updates its 'lastActiveStakeUpdateRound'\\n * @param _delegate The delegate to increase the stake for\\n * @param _amount The amount to increase the stake for '_delegate' by\\n */\\n function increaseTotalStake(\\n address _delegate,\\n uint256 _amount,\\n address _newPosPrev,\\n address _newPosNext\\n ) internal {\\n if (isRegisteredTranscoder(_delegate)) {\\n uint256 currStake = transcoderTotalStake(_delegate);\\n uint256 newStake = currStake.add(_amount);\\n uint256 currRound = roundsManager().currentRound();\\n uint256 nextRound = currRound.add(1);\\n\\n // If the transcoder is already in the active set update its stake and return\\n if (transcoderPool.contains(_delegate)) {\\n transcoderPool.updateKey(_delegate, newStake, _newPosPrev, _newPosNext);\\n nextRoundTotalActiveStake = nextRoundTotalActiveStake.add(_amount);\\n Transcoder storage t = transcoders[_delegate];\\n\\n // currStake (the transcoder's delegatedAmount field) will reflect the transcoder's stake from lastActiveStakeUpdateRound\\n // because it is updated every time lastActiveStakeUpdateRound is updated\\n // The current active total stake is set to currStake to ensure that the value can be used in updateTranscoderWithRewards()\\n // and updateTranscoderWithFees() when lastActiveStakeUpdateRound > currentRound\\n if (t.lastActiveStakeUpdateRound < currRound) {\\n t.earningsPoolPerRound[currRound].setStake(currStake);\\n }\\n\\n t.earningsPoolPerRound[nextRound].setStake(newStake);\\n t.lastActiveStakeUpdateRound = nextRound;\\n } else {\\n // Check if the transcoder is eligible to join the active set in the update round\\n tryToJoinActiveSet(_delegate, newStake, nextRound, _newPosPrev, _newPosNext);\\n }\\n }\\n\\n // Increase delegate's delegated amount\\n delegators[_delegate].delegatedAmount = delegators[_delegate].delegatedAmount.add(_amount);\\n }\\n\\n /**\\n * @dev Decrease the total stake for a delegate and updates its 'lastActiveStakeUpdateRound'\\n * @param _delegate The transcoder to decrease the stake for\\n * @param _amount The amount to decrease the stake for '_delegate' by\\n */\\n function decreaseTotalStake(\\n address _delegate,\\n uint256 _amount,\\n address _newPosPrev,\\n address _newPosNext\\n ) internal {\\n if (transcoderPool.contains(_delegate)) {\\n uint256 currStake = transcoderTotalStake(_delegate);\\n uint256 newStake = currStake.sub(_amount);\\n uint256 currRound = roundsManager().currentRound();\\n uint256 nextRound = currRound.add(1);\\n\\n transcoderPool.updateKey(_delegate, newStake, _newPosPrev, _newPosNext);\\n nextRoundTotalActiveStake = nextRoundTotalActiveStake.sub(_amount);\\n Transcoder storage t = transcoders[_delegate];\\n\\n // currStake (the transcoder's delegatedAmount field) will reflect the transcoder's stake from lastActiveStakeUpdateRound\\n // because it is updated every time lastActiveStakeUpdateRound is updated\\n // The current active total stake is set to currStake to ensure that the value can be used in updateTranscoderWithRewards()\\n // and updateTranscoderWithFees() when lastActiveStakeUpdateRound > currentRound\\n if (t.lastActiveStakeUpdateRound < currRound) {\\n t.earningsPoolPerRound[currRound].setStake(currStake);\\n }\\n\\n t.lastActiveStakeUpdateRound = nextRound;\\n t.earningsPoolPerRound[nextRound].setStake(newStake);\\n }\\n\\n // Decrease old delegate's delegated amount\\n delegators[_delegate].delegatedAmount = delegators[_delegate].delegatedAmount.sub(_amount);\\n }\\n\\n /**\\n * @dev Tries to add a transcoder to active transcoder pool, evicts the active transcoder with the lowest stake if the pool is full\\n * @param _transcoder The transcoder to insert into the transcoder pool\\n * @param _totalStake The total stake for '_transcoder'\\n * @param _activationRound The round in which the transcoder should become active\\n */\\n function tryToJoinActiveSet(\\n address _transcoder,\\n uint256 _totalStake,\\n uint256 _activationRound,\\n address _newPosPrev,\\n address _newPosNext\\n ) internal {\\n uint256 pendingNextRoundTotalActiveStake = nextRoundTotalActiveStake;\\n\\n if (transcoderPool.isFull()) {\\n address lastTranscoder = transcoderPool.getLast();\\n uint256 lastStake = transcoderTotalStake(lastTranscoder);\\n\\n // If the pool is full and the transcoder has less stake than the least stake transcoder in the pool\\n // then the transcoder is unable to join the active set for the next round\\n if (_totalStake <= lastStake) {\\n return;\\n }\\n\\n // Evict the least stake transcoder from the active set for the next round\\n // Not zeroing 'Transcoder.lastActiveStakeUpdateRound' saves gas (5k when transcoder is evicted and 20k when transcoder is reinserted)\\n // There should be no side-effects as long as the value is properly updated on stake updates\\n // Not zeroing the stake on the current round's 'EarningsPool' saves gas and should have no side effects as long as\\n // 'EarningsPool.setStake()' is called whenever a transcoder becomes active again.\\n transcoderPool.remove(lastTranscoder);\\n transcoders[lastTranscoder].deactivationRound = _activationRound;\\n pendingNextRoundTotalActiveStake = pendingNextRoundTotalActiveStake.sub(lastStake);\\n\\n emit TranscoderDeactivated(lastTranscoder, _activationRound);\\n }\\n\\n transcoderPool.insert(_transcoder, _totalStake, _newPosPrev, _newPosNext);\\n pendingNextRoundTotalActiveStake = pendingNextRoundTotalActiveStake.add(_totalStake);\\n Transcoder storage t = transcoders[_transcoder];\\n t.lastActiveStakeUpdateRound = _activationRound;\\n t.activationRound = _activationRound;\\n t.deactivationRound = MAX_FUTURE_ROUND;\\n t.earningsPoolPerRound[_activationRound].setStake(_totalStake);\\n nextRoundTotalActiveStake = pendingNextRoundTotalActiveStake;\\n emit TranscoderActivated(_transcoder, _activationRound);\\n }\\n\\n /**\\n * @dev Remove a transcoder from the pool and deactivate it\\n */\\n function resignTranscoder(address _transcoder) internal {\\n // Not zeroing 'Transcoder.lastActiveStakeUpdateRound' saves gas (5k when transcoder is evicted and 20k when transcoder is reinserted)\\n // There should be no side-effects as long as the value is properly updated on stake updates\\n // Not zeroing the stake on the current round's 'EarningsPool' saves gas and should have no side effects as long as\\n // 'EarningsPool.setStake()' is called whenever a transcoder becomes active again.\\n transcoderPool.remove(_transcoder);\\n nextRoundTotalActiveStake = nextRoundTotalActiveStake.sub(transcoderTotalStake(_transcoder));\\n uint256 deactivationRound = roundsManager().currentRound().add(1);\\n transcoders[_transcoder].deactivationRound = deactivationRound;\\n emit TranscoderDeactivated(_transcoder, deactivationRound);\\n }\\n\\n /**\\n * @dev Update a transcoder with rewards and update the transcoder pool with an optional list hint if needed.\\n * See SortedDoublyLL.sol for details on list hints\\n * @param _transcoder Address of transcoder\\n * @param _rewards Amount of rewards\\n * @param _round Round that transcoder is updated\\n * @param _newPosPrev Address of previous transcoder in pool if the transcoder is in the pool\\n * @param _newPosNext Address of next transcoder in pool if the transcoder is in the pool\\n */\\n function updateTranscoderWithRewards(\\n address _transcoder,\\n uint256 _rewards,\\n uint256 _round,\\n address _newPosPrev,\\n address _newPosNext\\n ) internal {\\n Transcoder storage t = transcoders[_transcoder];\\n EarningsPool.Data storage earningsPool = t.earningsPoolPerRound[_round];\\n EarningsPool.Data memory prevEarningsPool = cumulativeFactorsPool(t, t.lastRewardRound);\\n\\n t.activeCumulativeRewards = t.cumulativeRewards;\\n\\n uint256 transcoderCommissionRewards = MathUtils.percOf(_rewards, earningsPool.transcoderRewardCut);\\n uint256 delegatorsRewards = _rewards.sub(transcoderCommissionRewards);\\n // Calculate the rewards earned by the transcoder's earned rewards\\n uint256 transcoderRewardStakeRewards = PreciseMathUtils.percOf(\\n delegatorsRewards,\\n t.activeCumulativeRewards,\\n earningsPool.totalStake\\n );\\n // Track rewards earned by the transcoder based on its earned rewards and rewardCut\\n t.cumulativeRewards = t.cumulativeRewards.add(transcoderRewardStakeRewards).add(transcoderCommissionRewards);\\n // Update cumulative reward factor with new rewards\\n // The cumulativeRewardFactor is used to calculate rewards for all delegators including the transcoder (self-delegated)\\n // Note that delegatorsRewards includes transcoderRewardStakeRewards, but no delegator will claim that amount using\\n // the earnings claiming algorithm and instead that amount is accounted for in the transcoder's cumulativeRewards field\\n earningsPool.updateCumulativeRewardFactor(prevEarningsPool, delegatorsRewards);\\n // Update transcoder's total stake with rewards\\n increaseTotalStake(_transcoder, _rewards, _newPosPrev, _newPosNext);\\n }\\n\\n /**\\n * @dev Update a delegator with token pools shares from its lastClaimRound through a given round\\n * @param _delegator Delegator address\\n * @param _endRound The last round for which to update a delegator's stake with earnings pool shares\\n * @param _lastClaimRound The round for which a delegator has last claimed earnings\\n */\\n function updateDelegatorWithEarnings(\\n address _delegator,\\n uint256 _endRound,\\n uint256 _lastClaimRound\\n ) internal {\\n Delegator storage del = delegators[_delegator];\\n uint256 startRound = _lastClaimRound.add(1);\\n uint256 currentBondedAmount = del.bondedAmount;\\n uint256 currentFees = del.fees;\\n\\n // Only will have earnings to claim if you have a delegate\\n // If not delegated, skip the earnings claim process\\n if (del.delegateAddress != address(0)) {\\n (currentBondedAmount, currentFees) = pendingStakeAndFees(_delegator, _endRound);\\n\\n // Check whether the endEarningsPool is initialised\\n // If it is not initialised set it's cumulative factors so that they can be used when a delegator\\n // next claims earnings as the start cumulative factors (see delegatorCumulativeStakeAndFees())\\n Transcoder storage t = transcoders[del.delegateAddress];\\n EarningsPool.Data storage endEarningsPool = t.earningsPoolPerRound[_endRound];\\n if (endEarningsPool.cumulativeRewardFactor == 0) {\\n uint256 lastRewardRound = t.lastRewardRound;\\n if (lastRewardRound < _endRound) {\\n endEarningsPool.cumulativeRewardFactor = cumulativeFactorsPool(t, lastRewardRound)\\n .cumulativeRewardFactor;\\n }\\n }\\n if (endEarningsPool.cumulativeFeeFactor == 0) {\\n uint256 lastFeeRound = t.lastFeeRound;\\n if (lastFeeRound < _endRound) {\\n endEarningsPool.cumulativeFeeFactor = cumulativeFactorsPool(t, lastFeeRound).cumulativeFeeFactor;\\n }\\n }\\n\\n if (del.delegateAddress == _delegator) {\\n t.cumulativeFees = 0;\\n t.cumulativeRewards = 0;\\n // activeCumulativeRewards is not cleared here because the next reward() call will set it to cumulativeRewards\\n }\\n }\\n\\n emit EarningsClaimed(\\n del.delegateAddress,\\n _delegator,\\n currentBondedAmount.sub(del.bondedAmount),\\n currentFees.sub(del.fees),\\n startRound,\\n _endRound\\n );\\n\\n del.lastClaimRound = _endRound;\\n // Rewards are bonded by default\\n del.bondedAmount = currentBondedAmount;\\n del.fees = currentFees;\\n }\\n\\n /**\\n * @dev Update the state of a delegator and its delegate by processing a rebond using an unbonding lock and update the transcoder pool with an optional\\n * list hint if needed. See SortedDoublyLL.sol for details on list hints\\n * @param _delegator Address of delegator\\n * @param _unbondingLockId ID of unbonding lock to rebond with\\n * @param _newPosPrev Address of previous transcoder in pool if the delegate is already in or joins the pool\\n * @param _newPosNext Address of next transcoder in pool if the delegate is already in or joins the pool\\n */\\n function processRebond(\\n address _delegator,\\n uint256 _unbondingLockId,\\n address _newPosPrev,\\n address _newPosNext\\n ) internal {\\n Delegator storage del = delegators[_delegator];\\n UnbondingLock storage lock = del.unbondingLocks[_unbondingLockId];\\n\\n require(isValidUnbondingLock(_delegator, _unbondingLockId), \\\"invalid unbonding lock ID\\\");\\n\\n uint256 amount = lock.amount;\\n // Increase delegator's bonded amount\\n del.bondedAmount = del.bondedAmount.add(amount);\\n\\n // Delete lock\\n delete del.unbondingLocks[_unbondingLockId];\\n\\n increaseTotalStake(del.delegateAddress, amount, _newPosPrev, _newPosNext);\\n\\n emit Rebond(del.delegateAddress, _delegator, _unbondingLockId, amount);\\n }\\n\\n /**\\n * @dev Return LivepeerToken interface\\n * @return Livepeer token contract registered with Controller\\n */\\n function livepeerToken() internal view returns (ILivepeerToken) {\\n return ILivepeerToken(controller.getContract(keccak256(\\\"LivepeerToken\\\")));\\n }\\n\\n /**\\n * @dev Return Minter interface\\n * @return Minter contract registered with Controller\\n */\\n function minter() internal view returns (IMinter) {\\n return IMinter(controller.getContract(keccak256(\\\"Minter\\\")));\\n }\\n\\n /**\\n * @dev Return RoundsManager interface\\n * @return RoundsManager contract registered with Controller\\n */\\n function roundsManager() internal view returns (IRoundsManager) {\\n return IRoundsManager(controller.getContract(keccak256(\\\"RoundsManager\\\")));\\n }\\n\\n function _onlyTicketBroker() internal view {\\n require(msg.sender == controller.getContract(keccak256(\\\"TicketBroker\\\")), \\\"caller must be TicketBroker\\\");\\n }\\n\\n function _onlyRoundsManager() internal view {\\n require(msg.sender == controller.getContract(keccak256(\\\"RoundsManager\\\")), \\\"caller must be RoundsManager\\\");\\n }\\n\\n function _onlyVerifier() internal view {\\n require(msg.sender == controller.getContract(keccak256(\\\"Verifier\\\")), \\\"caller must be Verifier\\\");\\n }\\n\\n function _currentRoundInitialized() internal view {\\n require(roundsManager().currentRoundInitialized(), \\\"current round is not initialized\\\");\\n }\\n\\n function _autoClaimEarnings() internal {\\n uint256 currentRound = roundsManager().currentRound();\\n uint256 lastClaimRound = delegators[msg.sender].lastClaimRound;\\n if (lastClaimRound < currentRound) {\\n updateDelegatorWithEarnings(msg.sender, currentRound, lastClaimRound);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xe1bbb7de3d413515bb96cd745429e4bbb3f68f7fcc1a275dc31827472df9162d\",\"license\":\"MIT\"},\"contracts/bonding/IBondingManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\n/**\\n * @title Interface for BondingManager\\n * TODO: switch to interface type\\n */\\ninterface IBondingManager {\\n event TranscoderUpdate(address indexed transcoder, uint256 rewardCut, uint256 feeShare);\\n event TranscoderActivated(address indexed transcoder, uint256 activationRound);\\n event TranscoderDeactivated(address indexed transcoder, uint256 deactivationRound);\\n event TranscoderSlashed(address indexed transcoder, address finder, uint256 penalty, uint256 finderReward);\\n event Reward(address indexed transcoder, uint256 amount);\\n event Bond(\\n address indexed newDelegate,\\n address indexed oldDelegate,\\n address indexed delegator,\\n uint256 additionalAmount,\\n uint256 bondedAmount\\n );\\n event Unbond(\\n address indexed delegate,\\n address indexed delegator,\\n uint256 unbondingLockId,\\n uint256 amount,\\n uint256 withdrawRound\\n );\\n event Rebond(address indexed delegate, address indexed delegator, uint256 unbondingLockId, uint256 amount);\\n event TransferBond(\\n address indexed oldDelegator,\\n address indexed newDelegator,\\n uint256 oldUnbondingLockId,\\n uint256 newUnbondingLockId,\\n uint256 amount\\n );\\n event WithdrawStake(address indexed delegator, uint256 unbondingLockId, uint256 amount, uint256 withdrawRound);\\n event WithdrawFees(address indexed delegator, address recipient, uint256 amount);\\n event EarningsClaimed(\\n address indexed delegate,\\n address indexed delegator,\\n uint256 rewards,\\n uint256 fees,\\n uint256 startRound,\\n uint256 endRound\\n );\\n\\n // Deprecated events\\n // These event signatures can be used to construct the appropriate topic hashes to filter for past logs corresponding\\n // to these deprecated events.\\n // event Bond(address indexed delegate, address indexed delegator);\\n // event Unbond(address indexed delegate, address indexed delegator);\\n // event WithdrawStake(address indexed delegator);\\n // event TranscoderUpdate(address indexed transcoder, uint256 pendingRewardCut, uint256 pendingFeeShare, uint256 pendingPricePerSegment, bool registered);\\n // event TranscoderEvicted(address indexed transcoder);\\n // event TranscoderResigned(address indexed transcoder);\\n\\n // External functions\\n function updateTranscoderWithFees(\\n address _transcoder,\\n uint256 _fees,\\n uint256 _round\\n ) external;\\n\\n function slashTranscoder(\\n address _transcoder,\\n address _finder,\\n uint256 _slashAmount,\\n uint256 _finderFee\\n ) external;\\n\\n function setCurrentRoundTotalActiveStake() external;\\n\\n // Public functions\\n function getTranscoderPoolSize() external view returns (uint256);\\n\\n function transcoderTotalStake(address _transcoder) external view returns (uint256);\\n\\n function isActiveTranscoder(address _transcoder) external view returns (bool);\\n\\n function getTotalBonded() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6406378868b556ca91b1ab6cccd036695c8984d30a225f75a5979cb9aa7c1df2\",\"license\":\"MIT\"},\"contracts/bonding/libraries/EarningsPool.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\nimport \\\"../../libraries/MathUtils.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\n\\n/**\\n * @title EarningsPool\\n * @dev Manages reward and fee pools for delegators and transcoders\\n */\\nlibrary EarningsPool {\\n using SafeMath for uint256;\\n\\n struct Data {\\n uint256 totalStake; // Transcoder's total stake during the earnings pool's round\\n uint256 transcoderRewardCut; // Transcoder's reward cut during the earnings pool's round\\n uint256 transcoderFeeShare; // Transcoder's fee share during the earnings pool's round\\n // LIP-36 (https://github.com/livepeer/LIPs/blob/master/LIPs/LIP-36.md) fields\\n // See EarningsPoolLIP36.sol\\n uint256 cumulativeRewardFactor;\\n uint256 cumulativeFeeFactor;\\n }\\n\\n /**\\n * @dev Sets transcoderRewardCut and transcoderFeeshare for an EarningsPool\\n * @param earningsPool Storage pointer to EarningsPool struct\\n * @param _rewardCut Reward cut of transcoder during the earnings pool's round\\n * @param _feeShare Fee share of transcoder during the earnings pool's round\\n */\\n function setCommission(\\n EarningsPool.Data storage earningsPool,\\n uint256 _rewardCut,\\n uint256 _feeShare\\n ) internal {\\n earningsPool.transcoderRewardCut = _rewardCut;\\n earningsPool.transcoderFeeShare = _feeShare;\\n }\\n\\n /**\\n * @dev Sets totalStake for an EarningsPool\\n * @param earningsPool Storage pointer to EarningsPool struct\\n * @param _stake Total stake of the transcoder during the earnings pool's round\\n */\\n function setStake(EarningsPool.Data storage earningsPool, uint256 _stake) internal {\\n earningsPool.totalStake = _stake;\\n }\\n}\\n\",\"keccak256\":\"0x0a281920caf1429fc6afe7de303b8067c182190a450a190c8b9dc282aa7edfa0\",\"license\":\"MIT\"},\"contracts/bonding/libraries/EarningsPoolLIP36.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\nimport \\\"./EarningsPool.sol\\\";\\nimport \\\"../../libraries/PreciseMathUtils.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\n\\nlibrary EarningsPoolLIP36 {\\n using SafeMath for uint256;\\n\\n /**\\n * @notice Update the cumulative fee factor stored in an earnings pool with new fees\\n * @param earningsPool Storage pointer to EarningsPools.Data struct\\n * @param _prevEarningsPool In-memory EarningsPool.Data struct that stores the previous cumulative reward and fee factors\\n * @param _fees Amount of new fees\\n */\\n function updateCumulativeFeeFactor(\\n EarningsPool.Data storage earningsPool,\\n EarningsPool.Data memory _prevEarningsPool,\\n uint256 _fees\\n ) internal {\\n uint256 prevCumulativeFeeFactor = _prevEarningsPool.cumulativeFeeFactor;\\n uint256 prevCumulativeRewardFactor = _prevEarningsPool.cumulativeRewardFactor != 0\\n ? _prevEarningsPool.cumulativeRewardFactor\\n : PreciseMathUtils.percPoints(1, 1);\\n\\n // Initialize the cumulativeFeeFactor when adding fees for the first time\\n if (earningsPool.cumulativeFeeFactor == 0) {\\n earningsPool.cumulativeFeeFactor = prevCumulativeFeeFactor.add(\\n PreciseMathUtils.percOf(prevCumulativeRewardFactor, _fees, earningsPool.totalStake)\\n );\\n return;\\n }\\n\\n earningsPool.cumulativeFeeFactor = earningsPool.cumulativeFeeFactor.add(\\n PreciseMathUtils.percOf(prevCumulativeRewardFactor, _fees, earningsPool.totalStake)\\n );\\n }\\n\\n /**\\n * @notice Update the cumulative reward factor stored in an earnings pool with new rewards\\n * @param earningsPool Storage pointer to EarningsPool.Data struct\\n * @param _prevEarningsPool Storage pointer to EarningsPool.Data struct that stores the previous cumulative reward factor\\n * @param _rewards Amount of new rewards\\n */\\n function updateCumulativeRewardFactor(\\n EarningsPool.Data storage earningsPool,\\n EarningsPool.Data memory _prevEarningsPool,\\n uint256 _rewards\\n ) internal {\\n uint256 prevCumulativeRewardFactor = _prevEarningsPool.cumulativeRewardFactor != 0\\n ? _prevEarningsPool.cumulativeRewardFactor\\n : PreciseMathUtils.percPoints(1, 1);\\n\\n earningsPool.cumulativeRewardFactor = prevCumulativeRewardFactor.add(\\n PreciseMathUtils.percOf(prevCumulativeRewardFactor, _rewards, earningsPool.totalStake)\\n );\\n }\\n}\\n\",\"keccak256\":\"0xbcdc25cc40f8c62d38ed116d67b6c05469cc32e1fc97846e853f7860f29ac8e7\",\"license\":\"MIT\"},\"contracts/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\nimport \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\n\\nlibrary MathUtils {\\n using SafeMath for uint256;\\n\\n // Divisor used for representing percentages\\n uint256 public constant PERC_DIVISOR = 1000000;\\n\\n /**\\n * @dev Returns whether an amount is a valid percentage out of PERC_DIVISOR\\n * @param _amount Amount that is supposed to be a percentage\\n */\\n function validPerc(uint256 _amount) internal pure returns (bool) {\\n return _amount <= PERC_DIVISOR;\\n }\\n\\n /**\\n * @dev Compute percentage of a value with the percentage represented by a fraction\\n * @param _amount Amount to take the percentage of\\n * @param _fracNum Numerator of fraction representing the percentage\\n * @param _fracDenom Denominator of fraction representing the percentage\\n */\\n function percOf(\\n uint256 _amount,\\n uint256 _fracNum,\\n uint256 _fracDenom\\n ) internal pure returns (uint256) {\\n return _amount.mul(percPoints(_fracNum, _fracDenom)).div(PERC_DIVISOR);\\n }\\n\\n /**\\n * @dev Compute percentage of a value with the percentage represented by a fraction over PERC_DIVISOR\\n * @param _amount Amount to take the percentage of\\n * @param _fracNum Numerator of fraction representing the percentage with PERC_DIVISOR as the denominator\\n */\\n function percOf(uint256 _amount, uint256 _fracNum) internal pure returns (uint256) {\\n return _amount.mul(_fracNum).div(PERC_DIVISOR);\\n }\\n\\n /**\\n * @dev Compute percentage representation of a fraction\\n * @param _fracNum Numerator of fraction represeting the percentage\\n * @param _fracDenom Denominator of fraction represeting the percentage\\n */\\n function percPoints(uint256 _fracNum, uint256 _fracDenom) internal pure returns (uint256) {\\n return _fracNum.mul(PERC_DIVISOR).div(_fracDenom);\\n }\\n}\\n\",\"keccak256\":\"0x1df26c159dc63d804d3fda28e41b18487e8619009082c56e013aa6c9a58de253\",\"license\":\"MIT\"},\"contracts/libraries/PreciseMathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\nimport \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\n\\nlibrary PreciseMathUtils {\\n using SafeMath for uint256;\\n\\n // Divisor used for representing percentages\\n uint256 public constant PERC_DIVISOR = 10**27;\\n\\n /**\\n * @dev Returns whether an amount is a valid percentage out of PERC_DIVISOR\\n * @param _amount Amount that is supposed to be a percentage\\n */\\n function validPerc(uint256 _amount) internal pure returns (bool) {\\n return _amount <= PERC_DIVISOR;\\n }\\n\\n /**\\n * @dev Compute percentage of a value with the percentage represented by a fraction\\n * @param _amount Amount to take the percentage of\\n * @param _fracNum Numerator of fraction representing the percentage\\n * @param _fracDenom Denominator of fraction representing the percentage\\n */\\n function percOf(\\n uint256 _amount,\\n uint256 _fracNum,\\n uint256 _fracDenom\\n ) internal pure returns (uint256) {\\n return _amount.mul(percPoints(_fracNum, _fracDenom)).div(PERC_DIVISOR);\\n }\\n\\n /**\\n * @dev Compute percentage of a value with the percentage represented by a fraction over PERC_DIVISOR\\n * @param _amount Amount to take the percentage of\\n * @param _fracNum Numerator of fraction representing the percentage with PERC_DIVISOR as the denominator\\n */\\n function percOf(uint256 _amount, uint256 _fracNum) internal pure returns (uint256) {\\n return _amount.mul(_fracNum).div(PERC_DIVISOR);\\n }\\n\\n /**\\n * @dev Compute percentage representation of a fraction\\n * @param _fracNum Numerator of fraction represeting the percentage\\n * @param _fracDenom Denominator of fraction represeting the percentage\\n */\\n function percPoints(uint256 _fracNum, uint256 _fracDenom) internal pure returns (uint256) {\\n return _fracNum.mul(PERC_DIVISOR).div(_fracDenom);\\n }\\n}\\n\",\"keccak256\":\"0x89ebb6e1db8b184d655c6c2726e3fd862a239767f8d249ca376b286ade675a9d\",\"license\":\"MIT\"},\"contracts/libraries/SortedDoublyLL.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\nimport \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\n\\n/**\\n * @title A sorted doubly linked list with nodes sorted in descending order. Optionally accepts insert position hints\\n *\\n * Given a new node with a `key`, a hint is of the form `(prevId, nextId)` s.t. `prevId` and `nextId` are adjacent in the list.\\n * `prevId` is a node with a key >= `key` and `nextId` is a node with a key <= `key`. If the sender provides a hint that is a valid insert position\\n * the insert operation is a constant time storage write. However, the provided hint in a given transaction might be a valid insert position, but if other transactions are included first, when\\n * the given transaction is executed the provided hint may no longer be a valid insert position. For example, one of the nodes referenced might be removed or their keys may\\n * be updated such that the the pair of nodes in the hint no longer represent a valid insert position. If one of the nodes in the hint becomes invalid, we still try to use the other\\n * valid node as a starting point for finding the appropriate insert position. If both nodes in the hint become invalid, we use the head of the list as a starting point\\n * to find the appropriate insert position.\\n */\\nlibrary SortedDoublyLL {\\n using SafeMath for uint256;\\n\\n // Information for a node in the list\\n struct Node {\\n uint256 key; // Node's key used for sorting\\n address nextId; // Id of next node (smaller key) in the list\\n address prevId; // Id of previous node (larger key) in the list\\n }\\n\\n // Information for the list\\n struct Data {\\n address head; // Head of the list. Also the node in the list with the largest key\\n address tail; // Tail of the list. Also the node in the list with the smallest key\\n uint256 maxSize; // Maximum size of the list\\n uint256 size; // Current size of the list\\n mapping(address => Node) nodes; // Track the corresponding ids for each node in the list\\n }\\n\\n /**\\n * @dev Set the maximum size of the list\\n * @param _size Maximum size\\n */\\n function setMaxSize(Data storage self, uint256 _size) public {\\n require(_size > self.maxSize, \\\"new max size must be greater than old max size\\\");\\n\\n self.maxSize = _size;\\n }\\n\\n /**\\n * @dev Add a node to the list\\n * @param _id Node's id\\n * @param _key Node's key\\n * @param _prevId Id of previous node for the insert position\\n * @param _nextId Id of next node for the insert position\\n */\\n function insert(\\n Data storage self,\\n address _id,\\n uint256 _key,\\n address _prevId,\\n address _nextId\\n ) public {\\n // List must not be full\\n require(!isFull(self), \\\"list is full\\\");\\n // List must not already contain node\\n require(!contains(self, _id), \\\"node already in list\\\");\\n // Node id must not be null\\n require(_id != address(0), \\\"node id is null\\\");\\n // Key must be non-zero\\n require(_key > 0, \\\"key is zero\\\");\\n\\n address prevId = _prevId;\\n address nextId = _nextId;\\n\\n if (!validInsertPosition(self, _key, prevId, nextId)) {\\n // Sender's hint was not a valid insert position\\n // Use sender's hint to find a valid insert position\\n (prevId, nextId) = findInsertPosition(self, _key, prevId, nextId);\\n }\\n\\n self.nodes[_id].key = _key;\\n\\n if (prevId == address(0) && nextId == address(0)) {\\n // Insert as head and tail\\n self.head = _id;\\n self.tail = _id;\\n } else if (prevId == address(0)) {\\n // Insert before `prevId` as the head\\n self.nodes[_id].nextId = self.head;\\n self.nodes[self.head].prevId = _id;\\n self.head = _id;\\n } else if (nextId == address(0)) {\\n // Insert after `nextId` as the tail\\n self.nodes[_id].prevId = self.tail;\\n self.nodes[self.tail].nextId = _id;\\n self.tail = _id;\\n } else {\\n // Insert at insert position between `prevId` and `nextId`\\n self.nodes[_id].nextId = nextId;\\n self.nodes[_id].prevId = prevId;\\n self.nodes[prevId].nextId = _id;\\n self.nodes[nextId].prevId = _id;\\n }\\n\\n self.size = self.size.add(1);\\n }\\n\\n /**\\n * @dev Remove a node from the list\\n * @param _id Node's id\\n */\\n function remove(Data storage self, address _id) public {\\n // List must contain the node\\n require(contains(self, _id), \\\"node not in list\\\");\\n\\n if (self.size > 1) {\\n // List contains more than a single node\\n if (_id == self.head) {\\n // The removed node is the head\\n // Set head to next node\\n self.head = self.nodes[_id].nextId;\\n // Set prev pointer of new head to null\\n self.nodes[self.head].prevId = address(0);\\n } else if (_id == self.tail) {\\n // The removed node is the tail\\n // Set tail to previous node\\n self.tail = self.nodes[_id].prevId;\\n // Set next pointer of new tail to null\\n self.nodes[self.tail].nextId = address(0);\\n } else {\\n // The removed node is neither the head nor the tail\\n // Set next pointer of previous node to the next node\\n self.nodes[self.nodes[_id].prevId].nextId = self.nodes[_id].nextId;\\n // Set prev pointer of next node to the previous node\\n self.nodes[self.nodes[_id].nextId].prevId = self.nodes[_id].prevId;\\n }\\n } else {\\n // List contains a single node\\n // Set the head and tail to null\\n self.head = address(0);\\n self.tail = address(0);\\n }\\n\\n delete self.nodes[_id];\\n self.size = self.size.sub(1);\\n }\\n\\n /**\\n * @dev Update the key of a node in the list\\n * @param _id Node's id\\n * @param _newKey Node's new key\\n * @param _prevId Id of previous node for the new insert position\\n * @param _nextId Id of next node for the new insert position\\n */\\n function updateKey(\\n Data storage self,\\n address _id,\\n uint256 _newKey,\\n address _prevId,\\n address _nextId\\n ) public {\\n // List must contain the node\\n require(contains(self, _id), \\\"node not in list\\\");\\n\\n // Remove node from the list\\n remove(self, _id);\\n\\n if (_newKey > 0) {\\n // Insert node if it has a non-zero key\\n insert(self, _id, _newKey, _prevId, _nextId);\\n }\\n }\\n\\n /**\\n * @dev Checks if the list contains a node\\n * @param _id Address of transcoder\\n * @return true if '_id' is in list\\n */\\n function contains(Data storage self, address _id) public view returns (bool) {\\n // List only contains non-zero keys, so if key is non-zero the node exists\\n return self.nodes[_id].key > 0;\\n }\\n\\n /**\\n * @dev Checks if the list is full\\n * @return true if list is full\\n */\\n function isFull(Data storage self) public view returns (bool) {\\n return self.size == self.maxSize;\\n }\\n\\n /**\\n * @dev Checks if the list is empty\\n * @return true if list is empty\\n */\\n function isEmpty(Data storage self) public view returns (bool) {\\n return self.size == 0;\\n }\\n\\n /**\\n * @dev Returns the current size of the list\\n * @return current size of the list\\n */\\n function getSize(Data storage self) public view returns (uint256) {\\n return self.size;\\n }\\n\\n /**\\n * @dev Returns the maximum size of the list\\n */\\n function getMaxSize(Data storage self) public view returns (uint256) {\\n return self.maxSize;\\n }\\n\\n /**\\n * @dev Returns the key of a node in the list\\n * @param _id Node's id\\n * @return key for node with '_id'\\n */\\n function getKey(Data storage self, address _id) public view returns (uint256) {\\n return self.nodes[_id].key;\\n }\\n\\n /**\\n * @dev Returns the first node in the list (node with the largest key)\\n * @return address for the head of the list\\n */\\n function getFirst(Data storage self) public view returns (address) {\\n return self.head;\\n }\\n\\n /**\\n * @dev Returns the last node in the list (node with the smallest key)\\n * @return address for the tail of the list\\n */\\n function getLast(Data storage self) public view returns (address) {\\n return self.tail;\\n }\\n\\n /**\\n * @dev Returns the next node (with a smaller key) in the list for a given node\\n * @param _id Node's id\\n * @return address for the node following node in list with '_id'\\n */\\n function getNext(Data storage self, address _id) public view returns (address) {\\n return self.nodes[_id].nextId;\\n }\\n\\n /**\\n * @dev Returns the previous node (with a larger key) in the list for a given node\\n * @param _id Node's id\\n * address for the node before node in list with '_id'\\n */\\n function getPrev(Data storage self, address _id) public view returns (address) {\\n return self.nodes[_id].prevId;\\n }\\n\\n /**\\n * @dev Check if a pair of nodes is a valid insertion point for a new node with the given key\\n * @param _key Node's key\\n * @param _prevId Id of previous node for the insert position\\n * @param _nextId Id of next node for the insert position\\n * @return if the insert position is valid\\n */\\n function validInsertPosition(\\n Data storage self,\\n uint256 _key,\\n address _prevId,\\n address _nextId\\n ) public view returns (bool) {\\n if (_prevId == address(0) && _nextId == address(0)) {\\n // `(null, null)` is a valid insert position if the list is empty\\n return isEmpty(self);\\n } else if (_prevId == address(0)) {\\n // `(null, _nextId)` is a valid insert position if `_nextId` is the head of the list\\n return self.head == _nextId && _key >= self.nodes[_nextId].key;\\n } else if (_nextId == address(0)) {\\n // `(_prevId, null)` is a valid insert position if `_prevId` is the tail of the list\\n return self.tail == _prevId && _key <= self.nodes[_prevId].key;\\n } else {\\n // `(_prevId, _nextId)` is a valid insert position if they are adjacent nodes and `_key` falls between the two nodes' keys\\n return\\n self.nodes[_prevId].nextId == _nextId &&\\n self.nodes[_prevId].key >= _key &&\\n _key >= self.nodes[_nextId].key;\\n }\\n }\\n\\n /**\\n * @dev Descend the list (larger keys to smaller keys) to find a valid insert position\\n * @param _key Node's key\\n * @param _startId Id of node to start ascending the list from\\n */\\n function descendList(\\n Data storage self,\\n uint256 _key,\\n address _startId\\n ) private view returns (address, address) {\\n // If `_startId` is the head, check if the insert position is before the head\\n if (self.head == _startId && _key >= self.nodes[_startId].key) {\\n return (address(0), _startId);\\n }\\n\\n address prevId = _startId;\\n address nextId = self.nodes[prevId].nextId;\\n\\n // Descend the list until we reach the end or until we find a valid insert position\\n while (prevId != address(0) && !validInsertPosition(self, _key, prevId, nextId)) {\\n prevId = self.nodes[prevId].nextId;\\n nextId = self.nodes[prevId].nextId;\\n }\\n\\n return (prevId, nextId);\\n }\\n\\n /**\\n * @dev Ascend the list (smaller keys to larger keys) to find a valid insert position\\n * @param _key Node's key\\n * @param _startId Id of node to start descending the list from\\n */\\n function ascendList(\\n Data storage self,\\n uint256 _key,\\n address _startId\\n ) private view returns (address, address) {\\n // If `_startId` is the tail, check if the insert position is after the tail\\n if (self.tail == _startId && _key <= self.nodes[_startId].key) {\\n return (_startId, address(0));\\n }\\n\\n address nextId = _startId;\\n address prevId = self.nodes[nextId].prevId;\\n\\n // Ascend the list until we reach the end or until we find a valid insertion point\\n while (nextId != address(0) && !validInsertPosition(self, _key, prevId, nextId)) {\\n nextId = self.nodes[nextId].prevId;\\n prevId = self.nodes[nextId].prevId;\\n }\\n\\n return (prevId, nextId);\\n }\\n\\n /**\\n * @dev Find the insert position for a new node with the given key\\n * @param _key Node's key\\n * @param _prevId Id of previous node for the insert position\\n * @param _nextId Id of next node for the insert position\\n */\\n function findInsertPosition(\\n Data storage self,\\n uint256 _key,\\n address _prevId,\\n address _nextId\\n ) private view returns (address, address) {\\n address prevId = _prevId;\\n address nextId = _nextId;\\n\\n if (prevId != address(0)) {\\n if (!contains(self, prevId) || _key > self.nodes[prevId].key) {\\n // `prevId` does not exist anymore or now has a smaller key than the given key\\n prevId = address(0);\\n }\\n }\\n\\n if (nextId != address(0)) {\\n if (!contains(self, nextId) || _key < self.nodes[nextId].key) {\\n // `nextId` does not exist anymore or now has a larger key than the given key\\n nextId = address(0);\\n }\\n }\\n\\n if (prevId == address(0) && nextId == address(0)) {\\n // No hint - descend list starting from head\\n return descendList(self, _key, self.head);\\n } else if (prevId == address(0)) {\\n // No `prevId` for hint - ascend list starting from `nextId`\\n return ascendList(self, _key, nextId);\\n } else if (nextId == address(0)) {\\n // No `nextId` for hint - descend list starting from `prevId`\\n return descendList(self, _key, prevId);\\n } else {\\n // Descend list starting from `prevId`\\n return descendList(self, _key, prevId);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xdd26a77d6b76a7885f1a59c4b8cc6b8c1e21382012cbd9da136529160370e216\",\"license\":\"MIT\"},\"contracts/rounds/IRoundsManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\n/**\\n * @title RoundsManager interface\\n */\\ninterface IRoundsManager {\\n // Events\\n event NewRound(uint256 indexed round, bytes32 blockHash);\\n\\n // Deprecated events\\n // These event signatures can be used to construct the appropriate topic hashes to filter for past logs corresponding\\n // to these deprecated events.\\n // event NewRound(uint256 round)\\n\\n // External functions\\n function initializeRound() external;\\n\\n function lipUpgradeRound(uint256 _lip) external view returns (uint256);\\n\\n // Public functions\\n function blockNum() external view returns (uint256);\\n\\n function blockHash(uint256 _block) external view returns (bytes32);\\n\\n function blockHashForRound(uint256 _round) external view returns (bytes32);\\n\\n function currentRound() external view returns (uint256);\\n\\n function currentRoundStartBlock() external view returns (uint256);\\n\\n function currentRoundInitialized() external view returns (bool);\\n\\n function currentRoundLocked() external view returns (bool);\\n}\\n\",\"keccak256\":\"0xfc453a476bb68b874c21678a128b46ffcad0af69008e0e3e857d46499214f75f\",\"license\":\"MIT\"},\"contracts/snapshots/IMerkleSnapshot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\ninterface IMerkleSnapshot {\\n function verify(\\n bytes32 _id,\\n bytes32[] calldata _proof,\\n bytes32 _leaf\\n ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xdc35b4faac2739b596a0773123dfe4dadfe3ecabc2ac48325b4732146cd90180\",\"license\":\"MIT\"},\"contracts/token/ILivepeerToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface ILivepeerToken is IERC20 {\\n function mint(address _to, uint256 _amount) external;\\n\\n function burn(uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xe9f35b4fd415a199993ac13e273149f9f8f2cf3d14c06927f05c40a9d6d048e1\",\"license\":\"MIT\"},\"contracts/token/IMinter.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\nimport \\\"../IController.sol\\\";\\n\\n/**\\n * @title Minter interface\\n */\\ninterface IMinter {\\n // Events\\n event SetCurrentRewardTokens(uint256 currentMintableTokens, uint256 currentInflation);\\n\\n // External functions\\n function createReward(uint256 _fracNum, uint256 _fracDenom) external returns (uint256);\\n\\n function trustedTransferTokens(address _to, uint256 _amount) external;\\n\\n function trustedBurnTokens(uint256 _amount) external;\\n\\n function trustedWithdrawETH(address payable _to, uint256 _amount) external;\\n\\n function depositETH() external payable returns (bool);\\n\\n function setCurrentRewardTokens() external;\\n\\n function currentMintableTokens() external view returns (uint256);\\n\\n function currentMintedTokens() external view returns (uint256);\\n\\n // Public functions\\n function getController() external view returns (IController);\\n}\\n\",\"keccak256\":\"0x3fbb7a4239a8b5979fb4c45a41495e9694a9f454de82dca3cf6a14dfe71255c7\",\"license\":\"MIT\"},\"contracts/zeppelin/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\n/**\\n * @title Ownable\\n * @dev The Ownable contract has an owner address, and provides basic authorization control\\n * functions, this simplifies the implementation of \\\"user permissions\\\".\\n */\\ncontract Ownable {\\n address public owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev The Ownable constructor sets the original `owner` of the contract to the sender\\n * account.\\n */\\n constructor() {\\n owner = msg.sender;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(msg.sender == owner);\\n _;\\n }\\n\\n /**\\n * @dev Allows the current owner to transfer control of the contract to a newOwner.\\n * @param newOwner The address to transfer ownership to.\\n */\\n function transferOwnership(address newOwner) public onlyOwner {\\n require(newOwner != address(0));\\n emit OwnershipTransferred(owner, newOwner);\\n owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x64f114689f2f161c4a4b8fc8442ab914436a33e6021bf17401eaeac73319a419\",\"license\":\"MIT\"},\"contracts/zeppelin/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.9;\\n\\nimport \\\"./Ownable.sol\\\";\\n\\n/**\\n * @title Pausable\\n * @dev Base contract which allows children to implement an emergency stop mechanism.\\n */\\ncontract Pausable is Ownable {\\n event Pause();\\n event Unpause();\\n\\n bool public paused;\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is not paused.\\n */\\n modifier whenNotPaused() {\\n require(!paused);\\n _;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is paused.\\n */\\n modifier whenPaused() {\\n require(paused);\\n _;\\n }\\n\\n /**\\n * @dev called by the owner to pause, triggers stopped state\\n */\\n function pause() public onlyOwner whenNotPaused {\\n paused = true;\\n emit Pause();\\n }\\n\\n /**\\n * @dev called by the owner to unpause, returns to normal state\\n */\\n function unpause() public onlyOwner whenPaused {\\n paused = false;\\n emit Unpause();\\n }\\n}\\n\",\"keccak256\":\"0xe9635fcac46c22547a08f6977a8c75e7341411f1201f60bdd4c79c26e6c286ef\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60806040523480156200001157600080fd5b50604051620049753803806200497583398101604081905262000034916200005a565b600080546001600160a01b0319166001600160a01b03929092169190911790556200008c565b6000602082840312156200006d57600080fd5b81516001600160a01b03811681146200008557600080fd5b9392505050565b6148d9806200009c6000396000f3fe608060405234801561001057600080fd5b506004361061027f5760003560e01c80635c50c3561161015c57806392eefe9b116100ce578063b78d27dc11610087578063b78d27dc14610751578063eaffb3f914610764578063ee4e804a14610777578063f10d1de11461078a578063f595f1cc1461079d578063f77c4791146107b057600080fd5b806392eefe9b146106545780639500ed9b146106675780639d0b2c7a1461067a5780639ef9df941461068d578063a64ad595146106a0578063ad3b1b471461073e57600080fd5b80636cf6d675116101205780636cf6d675146105d1578063713f2216146105fe5780637fc4606f14610606578063818710561461061957806388a6c7491461062c5780638b2f16521461063457600080fd5b80635c50c356146104de5780635dce9948146104e6578063673a456b1461059857806368ba170c146105ab5780636bd9add4146105be57600080fd5b806327de9e32116101f5578063412f83b6116101b9578063412f83b6146104515780634196ee75146104a857806343d3461a146104b1578063465501d3146104c457806351720b41146104cd5780635a2a75a9146104d657600080fd5b806327de9e32146103ef5780632a4e0d55146104025780633550aa10146104185780633a080e931461042b5780633aeb512c1461043e57600080fd5b8063228cb73311610247578063228cb7331461030757806322bf9d7c1461030f578063235c96031461032257806324454fc41461034d57806324b1babf146103c957806325d5971f146103dc57600080fd5b80630584a37314610284578063062e98b81461029957806308802374146102ac5780630fd02fc1146102d45780631544fc67146102e7575b600080fd5b6102976102923660046143c7565b6107c3565b005b6102976102a736600461441a565b610913565b6102bf6102ba366004614493565b610b8e565b60405190151581526020015b60405180910390f35b6102bf6102e23660046144b0565b610c40565b6102fa6102f5366004614493565b610c71565b6040516102cb91906144f2565b610297610d2d565b61029761031d36600461450c565b610d3a565b610335610330366004614493565b611111565b6040516001600160a01b0390911681526020016102cb565b6103a161035b3660046144b0565b6001600160a01b03909116600090815260046020818152604080842094845260039485019091529091208054600182015460028301549483015492909301549094929392565b604080519586526020860194909452928401919091526060830152608082015260a0016102cb565b6102976103d7366004614552565b6111ac565b6102976103ea366004614552565b6111c7565b6102976103fd366004614552565b611407565b61040a611413565b6040519081526020016102cb565b61029761042636600461456b565b61149f565b6102976104393660046144b0565b6118d3565b61029761044c36600461459a565b6118e4565b61049361045f3660046144b0565b6001600160a01b03919091166000908152600360209081526040808320938352600790930190522080546001909101549091565b604080519283526020830191909152016102cb565b61040a60055481565b6102976104bf3660046145cf565b611beb565b61040a60065481565b61040a60015481565b61040a611bf8565b60055461040a565b61054e6104f4366004614493565b6001600160a01b031660009081526004602081905260409091208054600182015460028301549383015460058401546006850154600786015460088701546009880154600a90980154969995989794969395929491939092565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e0840152610100830152610120820152610140016102cb565b6102976105a6366004614552565b611c33565b6102bf6105b9366004614493565b611d06565b6102976105cc3660046145f1565b611d3e565b6002546105e59067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102cb565b610297611d55565b61029761061436600461462c565b611d65565b61029761062736600461466e565b611df0565b610335612093565b610647610642366004614493565b612119565b6040516102cb91906146a7565b610297610662366004614493565b612139565b61029761067536600461462c565b61218f565b61040a6106883660046144b0565b6124e8565b61040a61069b366004614493565b61257b565b6106fb6106ae366004614493565b6001600160a01b0390811660009081526003602081905260409091208054600182015460028301549383015460048401546005850154600690950154939792969590951694909390929091565b6040805197885260208801969096526001600160a01b03909416948601949094526060850191909152608084015260a083019190915260c082015260e0016102cb565b61029761074c3660046144b0565b61259a565b61029761075f3660046146bb565b612731565b610297610772366004614552565b612741565b6102976107853660046146e0565b61274d565b61029761079836600461476d565b612b30565b61040a6107ab3660046144b0565b612ba9565b600054610335906001600160a01b031681565b6107cb612c3c565b6107d3612d00565b6107db612dc4565b60026107e633610c71565b60028111156107f7576107f76144dc565b146108495760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206d75737420626520756e626f6e64656400000000000000000060448201526064015b60405180910390fd5b6108cc6001610856612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561088e57600080fd5b505afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c69190614797565b90612ee0565b3360008181526003602052604090206004810192909255600290910180546001600160a01b0319166001600160a01b03871617905561090d90848484612eec565b50505050565b61091b612c3c565b610923612d00565b61092b612dc4565b33600090815260036020526040902060028101546001600160a01b031661095387878761218f565b6001600160a01b0388166000908152600360205260408120600684015490919061097e906001612ffc565b905060008460070160008381526020019081526020016000206001015490508460070160008381526020019081526020016000206000808201600090556001820160009055505060008360060154905060405180604001604052808c8152602001838152508460070160008381526020019081526020016000206000820151816000015560208201518160010155905050610a2760018560060154612ee090919063ffffffff16565b600685015560408051848152602081018390529081018c90526001600160a01b038d169033907ff136b986590e86cf1abd7b6600186a7a1178ad3cbbdf0f3312e79f6214a2a5679060600160405180910390a36000610a84612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610abc57600080fd5b505afa158015610ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af49190614797565b600586015490915081811015610b0f57610b0f8e8383613008565b60028601546001600160a01b0316610b3f576002860180546001600160a01b0319166001600160a01b0389161790555b6002610b4a8f610c71565b6002811115610b5b57610b5b6144dc565b1415610b7257610b6c826001612ee0565b60048701555b610b7e8e848c8c612eec565b5050505050505050505050505050565b6001600160a01b038116600090815260046020526040812081610baf612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610be757600080fd5b505afa158015610bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1f9190614797565b905080826005015411158015610c385750816006015481105b949350505050565b6001600160a01b03919091166000908152600360209081526040808320938352600790930190522060010154151590565b6001600160a01b03811660009081526003602052604081208054610c985750600292915050565b610ca0612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610cd857600080fd5b505afa158015610cec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d109190614797565b81600401541115610d245750600092915050565b50600192915050565b610d38600080611df0565b565b610d42612c3c565b610d4a613194565b6001600160a01b03841660009081526003602052604090208054156110b6576001600160a01b038516600090815260036020526040812054610d8c908561328f565b60405163b0138c4760e01b8152600760048201526001600160a01b038816602482015290915073C45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb9063b0138c479060440160206040518083038186803b158015610de957600080fd5b505af4158015610dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2191906147b0565b15610e2f57610e2f866132a8565b8154610e3b9082612ffc565b82556001610e4887610c71565b6002811115610e5957610e596144dc565b1415610eac5760028201546001600160a01b031660009081526003602081905260409091200154610e8a9082612ffc565b60028301546001600160a01b0316600090815260036020819052604090912001555b806001600160a01b03861615610ffb576000610ec8838661328f565b9050610ed26133a1565b60405163e7a49c2b60e01b81526001600160a01b03898116600483015260248201849052919091169063e7a49c2b90604401600060405180830381600087803b158015610f1e57600080fd5b505af1158015610f32573d6000803e3d6000fd5b50505050610f3e6133a1565b6001600160a01b031663c7ee98c2610f568484612ffc565b6040518263ffffffff1660e01b8152600401610f7491815260200190565b600060405180830381600087803b158015610f8e57600080fd5b505af1158015610fa2573d6000803e3d6000fd5b5050604080516001600160a01b038b8116825260208201889052918101859052908b1692507ff4b71fed8e2c9a8c67c388bc6d35ad20b9368a24eed6d565459f2b277b6c0c22915060600160405180910390a2506110af565b6110036133a1565b6001600160a01b031663c7ee98c2826040518263ffffffff1660e01b815260040161103091815260200190565b600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b5050604080516000808252602082018790528183015290516001600160a01b038b1693507ff4b71fed8e2c9a8c67c388bc6d35ad20b9368a24eed6d565459f2b277b6c0c2292509081900360600190a25b505061110a565b604080516001600160a01b03868116825260006020830181905292820192909252908616907ff4b71fed8e2c9a8c67c388bc6d35ad20b9368a24eed6d565459f2b277b6c0c22906060015b60405180910390a25b5050505050565b60405163e189dedb60e01b8152600760048201526001600160a01b038216602482015260009073C45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb9063e189dedb9060440160206040518083038186803b15801561116e57600080fd5b505af4158015611182573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a691906147d2565b92915050565b6111b4612c3c565b6111bc612d00565b6111c4612dc4565b50565b6111cf612c3c565b6111d7612d00565b3360008181526003602090815260408083208584526007810190925290912090916112029084610c40565b61124a5760405162461bcd60e51b81526020600482015260196024820152781a5b9d985b1a59081d5b989bdb991a5b99c81b1bd8dac81251603a1b6044820152606401610840565b611252612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561128a57600080fd5b505afa15801561129e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c29190614797565b8160010154111561133b5760405162461bcd60e51b815260206004820152603b60248201527f776974686472617720726f756e64206d757374206265206265666f7265206f7260448201527f20657175616c20746f207468652063757272656e7420726f756e6400000000006064820152608401610840565b805460018083015460008681526007860160205260408120818155909201919091556113656133a1565b60405163e7a49c2b60e01b8152336004820152602481018490526001600160a01b03919091169063e7a49c2b90604401600060405180830381600087803b1580156113af57600080fd5b505af11580156113c3573d6000803e3d6000fd5b505060408051888152602081018690529081018490523392507f1340f1a8f3d456a649e1a12071dfa15655e3d09252131d0f980c3b405cc8dd2e9150606001611101565b6111c48160008061218f565b604051631665d9cb60e31b81526007600482015260009073C45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb9063b32ece58906024015b60206040518083038186803b15801561146257600080fd5b505af4158015611476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a9190614797565b905090565b6114a7612c3c565b6114af612d00565b6114b7612e67565b6001600160a01b0316636841f2536040518163ffffffff1660e01b815260040160206040518083038186803b1580156114ef57600080fd5b505afa158015611503573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152791906147b0565b1561159a5760405162461bcd60e51b815260206004820152603760248201527f63616e277420757064617465207472616e73636f64657220706172616d732c2060448201527f63757272656e7420726f756e64206973206c6f636b65640000000000000000006064820152608401610840565b6115a784620f4240101590565b6115f35760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964207265776172644375742070657263656e74616765000000006044820152606401610840565b61160083620f4240101590565b61164c5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c69642066656553686172652070657263656e7461676500000000006044820152606401610840565b61165533611d06565b6116a15760405162461bcd60e51b815260206004820152601d60248201527f7472616e73636f646572206d75737420626520726567697374657265640000006044820152606401610840565b336000908152600460205260408120906116b9612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156116f157600080fd5b505afa158015611705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117299190614797565b905061173433610b8e565b15806117405750815481145b6117ca5760405162461bcd60e51b815260206004820152604f60248201527f63616c6c65722063616e277420626520616374697665206f72206d757374206860448201527f61766520616c72656164792063616c6c65642072657761726420666f7220746860648201526e194818dd5c9c995b9d081c9bdd5b99608a1b608482015260a401610840565b600182018690556002820185905560405163b0138c4760e01b81526007600482015233602482015273C45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb9063b0138c479060440160206040518083038186803b15801561182957600080fd5b505af415801561183d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186191906147b0565b6118905733600081815260036020819052604090912001546118909190611889846001612ee0565b87876133f2565b604080518781526020810187905233917f7346854431dbb3eb8e373c604abf89e90f4865b8447e1e2834d7b3e4677bf544910160405180910390a2505050505050565b6118e082826000806107c3565b5050565b6118ec612c3c565b6118f4613709565b6118fd83611d06565b6119495760405162461bcd60e51b815260206004820152601d60248201527f7472616e73636f646572206d75737420626520726567697374657265640000006044820152606401610840565b6000611953612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561198b57600080fd5b505afa15801561199f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c39190614797565b6001600160a01b03851660009081526004602090815260408083208054600782015486865260038301909452918420949550939092611a0c85611a07886001612ffc565b613804565b905083861115611a565760018581015460028088015492850191909155830155600485015486811015611a4d57600081815260038701602052604090205483555b85600801549350505b81546060820151158015611a6957508685145b15611b7b576000611a786133a1565b90506000611b35611b2c836001600160a01b0316632de22cdb6040518163ffffffff1660e01b815260040160206040518083038186803b158015611abb57600080fd5b505afa158015611acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af39190614797565b846001600160a01b0316639ae6309a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561088e57600080fd5b846005546138a9565b90506000611b4782876001015461328f565b90506000611b558383612ffc565b6003880154909150611b719086611b6c8482612ee0565b6138a9565b6060870152505050505b6000611b8b8a856002015461328f565b90506000611b998b83612ffc565b90506000611ba88388866138a9565b9050611bc5826108c6838c60090154612ee090919063ffffffff16565b60098a0155611bd58686856138cf565b50505050600a9094019490945550505050505050565b6118e0828260008061149f565b6040516339ade16560e11b81526007600482015260009073C45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb9063735bc2ca9060240161144a565b611c3b61394a565b60405163a176adaf60e01b8152600760048201526024810182905273C45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb9063a176adaf9060440160006040518083038186803b158015611c8d57600080fd5b505af4158015611ca1573d6000803e3d6000fd5b505050507f9f5033568d78ae30f29f01e944f97b2216493bd19d1b46d429673acff3dcd674604051611cfb906020808252601490820152736e756d4163746976655472616e73636f6465727360601b604082015260600190565b60405180910390a150565b6001600160a01b0380821660008181526003602052604081206002810154919390929116148015611d375750805415155b9392505050565b611d4d8633878787878761274d565b505050505050565b611d5d613a2e565b600654600555565b611d6d612c3c565b611d75612d00565b611d7d612dc4565b6002611d8833610c71565b6002811115611d9957611d996144dc565b1415611ddf5760405162461bcd60e51b815260206004820152601560248201527418d85b1b195c881b5d5cdd08189948189bdb991959605a1b6044820152606401610840565b611deb33848484612eec565b505050565b611df8612c3c565b611e00612d00565b6000611e0a612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e4257600080fd5b505afa158015611e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7a9190614797565b9050611e8533610b8e565b611edd5760405162461bcd60e51b815260206004820152602360248201527f63616c6c6572206d75737420626520616e20616374697665207472616e73636f6044820152623232b960e91b6064820152608401610840565b33600090815260046020526040902054811415611f5b5760405162461bcd60e51b815260206004820152603660248201527f63616c6c65722068617320616c72656164792063616c6c65642072657761726460448201527508199bdc881d1a194818dd5c9c995b9d081c9bdd5b9960521b6064820152608401610840565b3360009081526004602090815260408083208484526003810190925290912060018083015460028085015492840191909155820155600482015483811015611fb157600081815260038401602052604090205482555b6000611fbb6133a1565b8354600554604051637dbedad560e01b8152600481019290925260248201526001600160a01b039190911690637dbedad590604401602060405180830381600087803b15801561200a57600080fd5b505af115801561201e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120429190614797565b90506120513382878a8a613b29565b84845560405181815233907f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc9906020015b60405180910390a250505050505050565b604051632ebb2fed60e01b81526007600482015260009073C45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb90632ebb2fed9060240160206040518083038186803b1580156120e157600080fd5b505af41580156120f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a91906147d2565b600061212482611d06565b1561213157506001919050565b506000919050565b612141613beb565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f7090602001611cfb565b612197612c3c565b61219f612d00565b6121a7612dc4565b60016121b233610c71565b60028111156121c3576121c36144dc565b146122085760405162461bcd60e51b815260206004820152601560248201527418d85b1b195c881b5d5cdd08189948189bdb991959605a1b6044820152606401610840565b336000908152600360205260409020836122705760405162461bcd60e51b8152602060048201526024808201527f756e626f6e6420616d6f756e74206d75737420626520677265617465722074686044820152630616e20360e41b6064820152608401610840565b80548411156122cd5760405162461bcd60e51b8152602060048201526024808201527f616d6f756e742069732067726561746572207468616e20626f6e64656420616d6044820152631bdd5b9d60e21b6064820152608401610840565b60028101546001600160a01b031660006122e5612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561231d57600080fd5b505afa158015612331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123559190614797565b60025490915060009061237390839067ffffffffffffffff16612ee0565b60068501546040805180820182528a81526020808201858152600085815260078b01909252929020905181559051600191820155919250906123b6908290612ee0565b600686015584546123c79089612ffc565b808655612484576002850180546001600160a01b0319169055600060048087019190915560405163b0138c4760e01b815260079181019190915233602482015273C45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb9063b0138c479060440160206040518083038186803b15801561243e57600080fd5b505af4158015612452573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247691906147b0565b1561248457612484336132a8565b61249084898989613c45565b60408051828152602081018a905290810183905233906001600160a01b038616907f2d5d98d189bee5496a08db2a5948cb7e5e786f09d17d0c3f228eb41776c24a069060600160405180910390a35050505050505050565b6000806124f3612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561252b57600080fd5b505afa15801561253f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125639190614797565b905060006125718583613ea8565b5095945050505050565b6001600160a01b03166000908152600360208190526040909120015490565b6125a2612c3c565b6125aa612d00565b6125b2612dc4565b6001600160a01b0382166125fc5760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610840565b336000908152600360205260409020600101548181101561265f5760405162461bcd60e51b815260206004820152601d60248201527f696e73756666696369656e74206665657320746f2077697468647261770000006044820152606401610840565b6126698183612ffc565b336000908152600360205260409020600101556126846133a1565b6040516320283da960e01b81526001600160a01b0385811660048301526024820185905291909116906320283da990604401600060405180830381600087803b1580156126d057600080fd5b505af11580156126e4573d6000803e3d6000fd5b5050604080516001600160a01b0387168152602081018690523393507f4f1b51dd7a2fcb861aa2670f668be66835c4ee12b4bbbf037e4d0018f39819e492500160405180910390a2505050565b6118e08282600080600080611d3e565b6111c481600080611d65565b612755612c3c565b61275d612d00565b612765612dc4565b6001600160a01b038616600090815260036020526040812090612786612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127be57600080fd5b505afa1580156127d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f69190614797565b60028084015484549293508b926001600160a01b03909116916128188c610c71565b6002811115612829576128296144dc565b14156128445761283a846001612ee0565b600486015561290f565b6000811180156128665750896001600160a01b0316826001600160a01b031614155b1561290f576128748b611d06565b156128e75760405162461bcd60e51b815260206004820152603d60248201527f72656769737465726564207472616e73636f646572732063616e27742064656c60448201527f656761746520746f7761726473206f74686572206164647265737365730000006064820152608401610840565b6128f2846001612ee0565b60048601556129018382612ee0565b925061290f82828b8b613c45565b6001600160a01b038a16600090815260046020908152604080832087845260038082019093529220908101546129575761294d828360000154613f6d565b6060015160038201555b60048101546129785761296e8283600a0154613f6d565b6080015160048201555b5050600083116129db5760405162461bcd60e51b815260206004820152602860248201527f64656c65676174696f6e20616d6f756e74206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608401610840565b6002850180546001600160a01b0319166001600160a01b038c16179055612a02818d612ee0565b8555612a108a848989613fd0565b8b15612abe57612a1e61422e565b6001600160a01b03166323b872dd33612a356133a1565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018f9052606401602060405180830381600087803b158015612a8457600080fd5b505af1158015612a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abc91906147b0565b505b8a6001600160a01b0316826001600160a01b03168b6001600160a01b03167fe5917769f276ddca9f2ee7c6b0b33e1d1e1b61008010ce622c632dd20d168a238f8960000154604051612b1a929190918252602082015260400190565b60405180910390a4505050505050505050505050565b612b3861394a565b6002805467ffffffffffffffff831667ffffffffffffffff199091161790556040517f9f5033568d78ae30f29f01e944f97b2216493bd19d1b46d429673acff3dcd67490611cfb906020808252600f908201526e1d5b989bdb991a5b99d4195c9a5bd9608a1b604082015260600190565b600080612bb4612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bec57600080fd5b505afa158015612c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c249190614797565b90506000612c328583613ea8565b9695505050505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015612c8857600080fd5b505afa158015612c9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc091906147b0565b15610d385760405162461bcd60e51b815260206004820152601060248201526f1cde5cdd195b481a5cc81c185d5cd95960821b6044820152606401610840565b612d08612e67565b6001600160a01b031663219bc76c6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d4057600080fd5b505afa158015612d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7891906147b0565b610d385760405162461bcd60e51b815260206004820181905260248201527f63757272656e7420726f756e64206973206e6f7420696e697469616c697a65646044820152606401610840565b6000612dce612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b158015612e0657600080fd5b505afa158015612e1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3e9190614797565b33600090815260036020526040902060050154909150818110156118e0576118e0338383613008565b60008054604051631c2d8fb360e31b81527fe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe860048201526001600160a01b039091169063e16c7d98906024015b60206040518083038186803b158015612ecc57600080fd5b505afa1580156120f5573d6000803e3d6000fd5b6000611d378284614805565b6001600160a01b038416600090815260036020908152604080832086845260078101909252909120612f1e8686610c40565b612f665760405162461bcd60e51b81526020600482015260196024820152781a5b9d985b1a59081d5b989bdb991a5b99c81b1bd8dac81251603a1b6044820152606401610840565b80548254612f749082612ee0565b835560008681526007840160205260408120818155600101556002830154612fa7906001600160a01b0316828787613fd0565b600283015460408051888152602081018490526001600160a01b038a81169316917f9f5b64cc71e1e26ff178caaa7877a04d8ce66fde989251870e80e6fbee690c17910160405180910390a350505050505050565b6000611d37828461481d565b6001600160a01b03831660009081526003602052604081209061302c836001612ee0565b82546001840154600285015492935090916001600160a01b031615613106576130558787613ea8565b60028601546001600160a01b031660009081526004602090815260408083208b84526003808201909352922090810154939550919350916130b0578154888110156130ae576130a48382613f6d565b6060015160038301555b505b60048101546130dc57600a820154888110156130da576130d08382613f6d565b6080015160048301555b505b60028601546001600160a01b038a8116911614156131035760006009830181905560088301555b50505b600284015484546001600160a01b03808a169216907fd7eab0765b772ea6ea859d5633baf737502198012e930f257f90013d9b21109490613148908690612ffc565b6001880154613158908690612ffc565b6040805192835260208301919091528101879052606081018a905260800160405180910390a36005840195909555825550600101919091555050565b600054604051631c2d8fb360e31b81527f121833d5ee4fda5e1a4034c2b7be8155c158142541dea26f39122c796649233f60048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b1580156131f757600080fd5b505afa15801561320b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061322f91906147d2565b6001600160a01b0316336001600160a01b031614610d385760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206d7573742062652056657269666965720000000000000000006044820152606401610840565b6000611d37620f42406132a2858561427f565b9061428b565b604051635d35e00760e01b8152600760048201526001600160a01b038216602482015273C45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb90635d35e0079060440160006040518083038186803b15801561330257600080fd5b505af4158015613316573d6000803e3d6000fd5b5050505061332f6133268261257b565b60065490612ffc565b60065560006133416001610856612e67565b6001600160a01b0383166000818152600460205260409081902060060183905551919250907ffee3e693fc72d0a0a673805f3e606c551f4c677b9072444b90dd2d0406bc995c906133959084815260200190565b60405180910390a25050565b60008054604051631c2d8fb360e31b81527f6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e994060048201526001600160a01b039091169063e16c7d9890602401612eb4565b6006546040516304aa129960e41b81526007600482015273C45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb90634aa129909060240160206040518083038186803b15801561344057600080fd5b505af4158015613454573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347891906147b0565b1561360357604051633972059360e11b81526007600482015260009073C45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb906372e40b269060240160206040518083038186803b1580156134cb57600080fd5b505af41580156134df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350391906147d2565b905060006135108261257b565b90508087116135215750505061110a565b604051635d35e00760e01b8152600760048201526001600160a01b038316602482015273C45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb90635d35e0079060440160006040518083038186803b15801561357b57600080fd5b505af415801561358f573d6000803e3d6000fd5b5050506001600160a01b0383166000908152600460205260409020600601879055506135bb8382612ffc565b9250816001600160a01b03167ffee3e693fc72d0a0a673805f3e606c551f4c677b9072444b90dd2d0406bc995c876040516135f891815260200190565b60405180910390a250505b6040516327dd54d360e11b815273C45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb90634fbaa9a690613643906007908a908a9089908990600401614834565b60006040518083038186803b15801561365b57600080fd5b505af415801561366f573d6000803e3d6000fd5b505050506136868582612ee090919063ffffffff16565b6001600160a01b03871660009081526004602081815260408084209283018990556005830189905560001960068401558884526003830190915290912087905590915060068290556040518581526001600160a01b038816907f65d72d782835d64c3287844a829608d5abdc7e864cc9affe96d910ab3db665e990602001612082565b600054604051631c2d8fb360e31b81527fbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee23960048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b15801561376c57600080fd5b505afa158015613780573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a491906147d2565b6001600160a01b0316336001600160a01b031614610d385760405162461bcd60e51b815260206004820152601b60248201527f63616c6c6572206d757374206265205469636b657442726f6b657200000000006044820152606401610840565b6138366040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6138408383613f6d565b835460608201519192509015801561385757508281105b15613871576138668482613f6d565b606090810151908301525b600a840154608083015115801561388757508381105b156138a1576138968582613f6d565b608090810151908401525b505092915050565b6000610c386b033b2e3c9fd0803ce80000006132a26138c88686614297565b879061427f565b608082015160608301516000906138f0576138eb600180614297565b6138f6565b83606001515b905084600401546000141561392d5761391e613917828588600001546138a9565b8390612ee0565b85600401819055505050505050565b61391e61393f828588600001546138a9565b600487015490612ee0565b60008054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561399657600080fd5b505afa1580156139aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ce91906147d2565b6001600160a01b0316336001600160a01b031614610d385760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206d75737420626520436f6e74726f6c6c6572206f776e6572006044820152606401610840565b600054604051631c2d8fb360e31b81527fe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe860048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b158015613a9157600080fd5b505afa158015613aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ac991906147d2565b6001600160a01b0316336001600160a01b031614610d385760405162461bcd60e51b815260206004820152601c60248201527f63616c6c6572206d75737420626520526f756e64734d616e61676572000000006044820152606401610840565b6001600160a01b0385166000908152600460209081526040808320868452600381019092528220815491929091613b61908490613f6d565b9050826008015483600701819055506000613b8088846001015461328f565b90506000613b8e8983612ffc565b90506000613ba582876007015487600001546138a9565b9050613bc2836108c6838960080154612ee090919063ffffffff16565b6008870155613bd28585846142b3565b613bde8b8b8a8a613fd0565b5050505050505050505050565b6000546001600160a01b03163314610d385760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206d75737420626520436f6e74726f6c6c6572000000000000006044820152606401610840565b60405163b0138c4760e01b8152600760048201526001600160a01b038516602482015273C45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb9063b0138c479060440160206040518083038186803b158015613c9f57600080fd5b505af4158015613cb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cd791906147b0565b15613e5b576000613ce78561257b565b90506000613cf58286612ffc565b90506000613d01612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b158015613d3957600080fd5b505afa158015613d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d719190614797565b90506000613d80826001612ee0565b604051631c11bf7f60e11b815290915073C45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb906338237efe90613dc3906007908c9088908c908c90600401614834565b60006040518083038186803b158015613ddb57600080fd5b505af4158015613def573d6000803e3d6000fd5b5050600654613e019250905088612ffc565b6006556001600160a01b038816600090815260046020819052604090912090810154831115613e3e57600083815260038201602052604090208590555b600481018290556000918252600301602052604090209190915550505b6001600160a01b03841660009081526003602081905260409091200154613e829084612ffc565b6001600160a01b0390941660009081526003602081905260409091200193909355505050565b6001600160a01b03808316600090815260036020908152604080832060028101549094168352600490915281206001808401548454600586015490959194919392613ef39190612ee0565b60028401549091506001600160a01b039081169088168114878311613f2f57613f2984613f21856001612ffc565b8a8a8a614301565b90975095505b8015613f61576008840154613f45908890612ee0565b9650613f5e846009015487612ee090919063ffffffff16565b95505b50505050509250929050565b613f9f6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000828152600393840160208181526040832095860154606085015293909152909152600490910154608082015290565b613fd984611d06565b15614207576000613fe98561257b565b90506000613ff78286612ee0565b90506000614003612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561403b57600080fd5b505afa15801561404f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140739190614797565b90506000614082826001612ee0565b60405163b0138c4760e01b8152600760048201526001600160a01b038a16602482015290915073C45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb9063b0138c479060440160206040518083038186803b1580156140df57600080fd5b505af41580156140f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061411791906147b0565b156141f557604051631c11bf7f60e11b815273C45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb906338237efe9061415c906007908c9088908c908c90600401614834565b60006040518083038186803b15801561417457600080fd5b505af4158015614188573d6000803e3d6000fd5b505060065461419a9250905088612ee0565b6006556001600160a01b0388166000908152600460208190526040909120908101548311156141d757600083815260038201602052604090208590555b60008281526003820160205260409020849055600401819055614202565b61420288848389896133f2565b505050505b6001600160a01b03841660009081526003602081905260409091200154613e829084612ee0565b60008054604051631c2d8fb360e31b81527f3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba760048201526001600160a01b039091169063e16c7d9890602401612eb4565b6000611d378284614862565b6000611d378284614881565b6000611d37826132a2856b033b2e3c9fd0803ce800000061427f565b60008260600151600014156142d2576142cd600180614297565b6142d8565b82606001515b90506142f36142ec828487600001546138a9565b8290612ee0565b846003018190555050505050565b60008060006143108888613f6d565b90508060600151600014156143305761432a600180614297565b60608201525b600061433c8988613804565b905080606001516000141561435c57614356600180614297565b60608201525b61438f6143888761437e85608001518560800151612ffc90919063ffffffff16565b85606001516138a9565b8690612ee0565b92506143a486826060015184606001516138a9565b935050509550959350505050565b6001600160a01b03811681146111c457600080fd5b600080600080608085870312156143dd57600080fd5b84356143e8816143b2565b93506020850135925060408501356143ff816143b2565b9150606085013561440f816143b2565b939692955090935050565b60008060008060008060c0878903121561443357600080fd5b863561443e816143b2565b9550602087013594506040870135614455816143b2565b93506060870135614465816143b2565b92506080870135614475816143b2565b915060a0870135614485816143b2565b809150509295509295509295565b6000602082840312156144a557600080fd5b8135611d37816143b2565b600080604083850312156144c357600080fd5b82356144ce816143b2565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b6020810160038310614506576145066144dc565b91905290565b6000806000806080858703121561452257600080fd5b843561452d816143b2565b9350602085013561453d816143b2565b93969395505050506040820135916060013590565b60006020828403121561456457600080fd5b5035919050565b6000806000806080858703121561458157600080fd5b843593506020850135925060408501356143ff816143b2565b6000806000606084860312156145af57600080fd5b83356145ba816143b2565b95602085013595506040909401359392505050565b600080604083850312156145e257600080fd5b50508035926020909101359150565b60008060008060008060c0878903121561460a57600080fd5b86359550602087013561461c816143b2565b94506040870135614455816143b2565b60008060006060848603121561464157600080fd5b833592506020840135614653816143b2565b91506040840135614663816143b2565b809150509250925092565b6000806040838503121561468157600080fd5b823561468c816143b2565b9150602083013561469c816143b2565b809150509250929050565b6020810160028310614506576145066144dc565b600080604083850312156146ce57600080fd5b82359150602083013561469c816143b2565b600080600080600080600060e0888a0312156146fb57600080fd5b87359650602088013561470d816143b2565b9550604088013561471d816143b2565b9450606088013561472d816143b2565b9350608088013561473d816143b2565b925060a088013561474d816143b2565b915060c088013561475d816143b2565b8091505092959891949750929550565b60006020828403121561477f57600080fd5b813567ffffffffffffffff81168114611d3757600080fd5b6000602082840312156147a957600080fd5b5051919050565b6000602082840312156147c257600080fd5b81518015158114611d3757600080fd5b6000602082840312156147e457600080fd5b8151611d37816143b2565b634e487b7160e01b600052601160045260246000fd5b60008219821115614818576148186147ef565b500190565b60008282101561482f5761482f6147ef565b500390565b9485526001600160a01b03938416602086015260408501929092528216606084015216608082015260a00190565b600081600019048311821515161561487c5761487c6147ef565b500290565b60008261489e57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122084ef728ebfb0333127dbaf5c1958d15f6c7667ad0536c0afa147b43b535ef28b64736f6c63430008090033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061027f5760003560e01c80635c50c3561161015c57806392eefe9b116100ce578063b78d27dc11610087578063b78d27dc14610751578063eaffb3f914610764578063ee4e804a14610777578063f10d1de11461078a578063f595f1cc1461079d578063f77c4791146107b057600080fd5b806392eefe9b146106545780639500ed9b146106675780639d0b2c7a1461067a5780639ef9df941461068d578063a64ad595146106a0578063ad3b1b471461073e57600080fd5b80636cf6d675116101205780636cf6d675146105d1578063713f2216146105fe5780637fc4606f14610606578063818710561461061957806388a6c7491461062c5780638b2f16521461063457600080fd5b80635c50c356146104de5780635dce9948146104e6578063673a456b1461059857806368ba170c146105ab5780636bd9add4146105be57600080fd5b806327de9e32116101f5578063412f83b6116101b9578063412f83b6146104515780634196ee75146104a857806343d3461a146104b1578063465501d3146104c457806351720b41146104cd5780635a2a75a9146104d657600080fd5b806327de9e32146103ef5780632a4e0d55146104025780633550aa10146104185780633a080e931461042b5780633aeb512c1461043e57600080fd5b8063228cb73311610247578063228cb7331461030757806322bf9d7c1461030f578063235c96031461032257806324454fc41461034d57806324b1babf146103c957806325d5971f146103dc57600080fd5b80630584a37314610284578063062e98b81461029957806308802374146102ac5780630fd02fc1146102d45780631544fc67146102e7575b600080fd5b6102976102923660046143c7565b6107c3565b005b6102976102a736600461441a565b610913565b6102bf6102ba366004614493565b610b8e565b60405190151581526020015b60405180910390f35b6102bf6102e23660046144b0565b610c40565b6102fa6102f5366004614493565b610c71565b6040516102cb91906144f2565b610297610d2d565b61029761031d36600461450c565b610d3a565b610335610330366004614493565b611111565b6040516001600160a01b0390911681526020016102cb565b6103a161035b3660046144b0565b6001600160a01b03909116600090815260046020818152604080842094845260039485019091529091208054600182015460028301549483015492909301549094929392565b604080519586526020860194909452928401919091526060830152608082015260a0016102cb565b6102976103d7366004614552565b6111ac565b6102976103ea366004614552565b6111c7565b6102976103fd366004614552565b611407565b61040a611413565b6040519081526020016102cb565b61029761042636600461456b565b61149f565b6102976104393660046144b0565b6118d3565b61029761044c36600461459a565b6118e4565b61049361045f3660046144b0565b6001600160a01b03919091166000908152600360209081526040808320938352600790930190522080546001909101549091565b604080519283526020830191909152016102cb565b61040a60055481565b6102976104bf3660046145cf565b611beb565b61040a60065481565b61040a60015481565b61040a611bf8565b60055461040a565b61054e6104f4366004614493565b6001600160a01b031660009081526004602081905260409091208054600182015460028301549383015460058401546006850154600786015460088701546009880154600a90980154969995989794969395929491939092565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e0840152610100830152610120820152610140016102cb565b6102976105a6366004614552565b611c33565b6102bf6105b9366004614493565b611d06565b6102976105cc3660046145f1565b611d3e565b6002546105e59067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102cb565b610297611d55565b61029761061436600461462c565b611d65565b61029761062736600461466e565b611df0565b610335612093565b610647610642366004614493565b612119565b6040516102cb91906146a7565b610297610662366004614493565b612139565b61029761067536600461462c565b61218f565b61040a6106883660046144b0565b6124e8565b61040a61069b366004614493565b61257b565b6106fb6106ae366004614493565b6001600160a01b0390811660009081526003602081905260409091208054600182015460028301549383015460048401546005850154600690950154939792969590951694909390929091565b6040805197885260208801969096526001600160a01b03909416948601949094526060850191909152608084015260a083019190915260c082015260e0016102cb565b61029761074c3660046144b0565b61259a565b61029761075f3660046146bb565b612731565b610297610772366004614552565b612741565b6102976107853660046146e0565b61274d565b61029761079836600461476d565b612b30565b61040a6107ab3660046144b0565b612ba9565b600054610335906001600160a01b031681565b6107cb612c3c565b6107d3612d00565b6107db612dc4565b60026107e633610c71565b60028111156107f7576107f76144dc565b146108495760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206d75737420626520756e626f6e64656400000000000000000060448201526064015b60405180910390fd5b6108cc6001610856612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561088e57600080fd5b505afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c69190614797565b90612ee0565b3360008181526003602052604090206004810192909255600290910180546001600160a01b0319166001600160a01b03871617905561090d90848484612eec565b50505050565b61091b612c3c565b610923612d00565b61092b612dc4565b33600090815260036020526040902060028101546001600160a01b031661095387878761218f565b6001600160a01b0388166000908152600360205260408120600684015490919061097e906001612ffc565b905060008460070160008381526020019081526020016000206001015490508460070160008381526020019081526020016000206000808201600090556001820160009055505060008360060154905060405180604001604052808c8152602001838152508460070160008381526020019081526020016000206000820151816000015560208201518160010155905050610a2760018560060154612ee090919063ffffffff16565b600685015560408051848152602081018390529081018c90526001600160a01b038d169033907ff136b986590e86cf1abd7b6600186a7a1178ad3cbbdf0f3312e79f6214a2a5679060600160405180910390a36000610a84612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610abc57600080fd5b505afa158015610ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af49190614797565b600586015490915081811015610b0f57610b0f8e8383613008565b60028601546001600160a01b0316610b3f576002860180546001600160a01b0319166001600160a01b0389161790555b6002610b4a8f610c71565b6002811115610b5b57610b5b6144dc565b1415610b7257610b6c826001612ee0565b60048701555b610b7e8e848c8c612eec565b5050505050505050505050505050565b6001600160a01b038116600090815260046020526040812081610baf612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610be757600080fd5b505afa158015610bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1f9190614797565b905080826005015411158015610c385750816006015481105b949350505050565b6001600160a01b03919091166000908152600360209081526040808320938352600790930190522060010154151590565b6001600160a01b03811660009081526003602052604081208054610c985750600292915050565b610ca0612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610cd857600080fd5b505afa158015610cec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d109190614797565b81600401541115610d245750600092915050565b50600192915050565b610d38600080611df0565b565b610d42612c3c565b610d4a613194565b6001600160a01b03841660009081526003602052604090208054156110b6576001600160a01b038516600090815260036020526040812054610d8c908561328f565b60405163b0138c4760e01b8152600760048201526001600160a01b038816602482015290915073__$d23c89be677d40ab24c636937040b6165f$__9063b0138c479060440160206040518083038186803b158015610de957600080fd5b505af4158015610dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2191906147b0565b15610e2f57610e2f866132a8565b8154610e3b9082612ffc565b82556001610e4887610c71565b6002811115610e5957610e596144dc565b1415610eac5760028201546001600160a01b031660009081526003602081905260409091200154610e8a9082612ffc565b60028301546001600160a01b0316600090815260036020819052604090912001555b806001600160a01b03861615610ffb576000610ec8838661328f565b9050610ed26133a1565b60405163e7a49c2b60e01b81526001600160a01b03898116600483015260248201849052919091169063e7a49c2b90604401600060405180830381600087803b158015610f1e57600080fd5b505af1158015610f32573d6000803e3d6000fd5b50505050610f3e6133a1565b6001600160a01b031663c7ee98c2610f568484612ffc565b6040518263ffffffff1660e01b8152600401610f7491815260200190565b600060405180830381600087803b158015610f8e57600080fd5b505af1158015610fa2573d6000803e3d6000fd5b5050604080516001600160a01b038b8116825260208201889052918101859052908b1692507ff4b71fed8e2c9a8c67c388bc6d35ad20b9368a24eed6d565459f2b277b6c0c22915060600160405180910390a2506110af565b6110036133a1565b6001600160a01b031663c7ee98c2826040518263ffffffff1660e01b815260040161103091815260200190565b600060405180830381600087803b15801561104a57600080fd5b505af115801561105e573d6000803e3d6000fd5b5050604080516000808252602082018790528183015290516001600160a01b038b1693507ff4b71fed8e2c9a8c67c388bc6d35ad20b9368a24eed6d565459f2b277b6c0c2292509081900360600190a25b505061110a565b604080516001600160a01b03868116825260006020830181905292820192909252908616907ff4b71fed8e2c9a8c67c388bc6d35ad20b9368a24eed6d565459f2b277b6c0c22906060015b60405180910390a25b5050505050565b60405163e189dedb60e01b8152600760048201526001600160a01b038216602482015260009073__$d23c89be677d40ab24c636937040b6165f$__9063e189dedb9060440160206040518083038186803b15801561116e57600080fd5b505af4158015611182573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a691906147d2565b92915050565b6111b4612c3c565b6111bc612d00565b6111c4612dc4565b50565b6111cf612c3c565b6111d7612d00565b3360008181526003602090815260408083208584526007810190925290912090916112029084610c40565b61124a5760405162461bcd60e51b81526020600482015260196024820152781a5b9d985b1a59081d5b989bdb991a5b99c81b1bd8dac81251603a1b6044820152606401610840565b611252612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561128a57600080fd5b505afa15801561129e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c29190614797565b8160010154111561133b5760405162461bcd60e51b815260206004820152603b60248201527f776974686472617720726f756e64206d757374206265206265666f7265206f7260448201527f20657175616c20746f207468652063757272656e7420726f756e6400000000006064820152608401610840565b805460018083015460008681526007860160205260408120818155909201919091556113656133a1565b60405163e7a49c2b60e01b8152336004820152602481018490526001600160a01b03919091169063e7a49c2b90604401600060405180830381600087803b1580156113af57600080fd5b505af11580156113c3573d6000803e3d6000fd5b505060408051888152602081018690529081018490523392507f1340f1a8f3d456a649e1a12071dfa15655e3d09252131d0f980c3b405cc8dd2e9150606001611101565b6111c48160008061218f565b604051631665d9cb60e31b81526007600482015260009073__$d23c89be677d40ab24c636937040b6165f$__9063b32ece58906024015b60206040518083038186803b15801561146257600080fd5b505af4158015611476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a9190614797565b905090565b6114a7612c3c565b6114af612d00565b6114b7612e67565b6001600160a01b0316636841f2536040518163ffffffff1660e01b815260040160206040518083038186803b1580156114ef57600080fd5b505afa158015611503573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152791906147b0565b1561159a5760405162461bcd60e51b815260206004820152603760248201527f63616e277420757064617465207472616e73636f64657220706172616d732c2060448201527f63757272656e7420726f756e64206973206c6f636b65640000000000000000006064820152608401610840565b6115a784620f4240101590565b6115f35760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964207265776172644375742070657263656e74616765000000006044820152606401610840565b61160083620f4240101590565b61164c5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c69642066656553686172652070657263656e7461676500000000006044820152606401610840565b61165533611d06565b6116a15760405162461bcd60e51b815260206004820152601d60248201527f7472616e73636f646572206d75737420626520726567697374657265640000006044820152606401610840565b336000908152600460205260408120906116b9612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156116f157600080fd5b505afa158015611705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117299190614797565b905061173433610b8e565b15806117405750815481145b6117ca5760405162461bcd60e51b815260206004820152604f60248201527f63616c6c65722063616e277420626520616374697665206f72206d757374206860448201527f61766520616c72656164792063616c6c65642072657761726420666f7220746860648201526e194818dd5c9c995b9d081c9bdd5b99608a1b608482015260a401610840565b600182018690556002820185905560405163b0138c4760e01b81526007600482015233602482015273__$d23c89be677d40ab24c636937040b6165f$__9063b0138c479060440160206040518083038186803b15801561182957600080fd5b505af415801561183d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186191906147b0565b6118905733600081815260036020819052604090912001546118909190611889846001612ee0565b87876133f2565b604080518781526020810187905233917f7346854431dbb3eb8e373c604abf89e90f4865b8447e1e2834d7b3e4677bf544910160405180910390a2505050505050565b6118e082826000806107c3565b5050565b6118ec612c3c565b6118f4613709565b6118fd83611d06565b6119495760405162461bcd60e51b815260206004820152601d60248201527f7472616e73636f646572206d75737420626520726567697374657265640000006044820152606401610840565b6000611953612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561198b57600080fd5b505afa15801561199f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c39190614797565b6001600160a01b03851660009081526004602090815260408083208054600782015486865260038301909452918420949550939092611a0c85611a07886001612ffc565b613804565b905083861115611a565760018581015460028088015492850191909155830155600485015486811015611a4d57600081815260038701602052604090205483555b85600801549350505b81546060820151158015611a6957508685145b15611b7b576000611a786133a1565b90506000611b35611b2c836001600160a01b0316632de22cdb6040518163ffffffff1660e01b815260040160206040518083038186803b158015611abb57600080fd5b505afa158015611acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af39190614797565b846001600160a01b0316639ae6309a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561088e57600080fd5b846005546138a9565b90506000611b4782876001015461328f565b90506000611b558383612ffc565b6003880154909150611b719086611b6c8482612ee0565b6138a9565b6060870152505050505b6000611b8b8a856002015461328f565b90506000611b998b83612ffc565b90506000611ba88388866138a9565b9050611bc5826108c6838c60090154612ee090919063ffffffff16565b60098a0155611bd58686856138cf565b50505050600a9094019490945550505050505050565b6118e0828260008061149f565b6040516339ade16560e11b81526007600482015260009073__$d23c89be677d40ab24c636937040b6165f$__9063735bc2ca9060240161144a565b611c3b61394a565b60405163a176adaf60e01b8152600760048201526024810182905273__$d23c89be677d40ab24c636937040b6165f$__9063a176adaf9060440160006040518083038186803b158015611c8d57600080fd5b505af4158015611ca1573d6000803e3d6000fd5b505050507f9f5033568d78ae30f29f01e944f97b2216493bd19d1b46d429673acff3dcd674604051611cfb906020808252601490820152736e756d4163746976655472616e73636f6465727360601b604082015260600190565b60405180910390a150565b6001600160a01b0380821660008181526003602052604081206002810154919390929116148015611d375750805415155b9392505050565b611d4d8633878787878761274d565b505050505050565b611d5d613a2e565b600654600555565b611d6d612c3c565b611d75612d00565b611d7d612dc4565b6002611d8833610c71565b6002811115611d9957611d996144dc565b1415611ddf5760405162461bcd60e51b815260206004820152601560248201527418d85b1b195c881b5d5cdd08189948189bdb991959605a1b6044820152606401610840565b611deb33848484612eec565b505050565b611df8612c3c565b611e00612d00565b6000611e0a612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e4257600080fd5b505afa158015611e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7a9190614797565b9050611e8533610b8e565b611edd5760405162461bcd60e51b815260206004820152602360248201527f63616c6c6572206d75737420626520616e20616374697665207472616e73636f6044820152623232b960e91b6064820152608401610840565b33600090815260046020526040902054811415611f5b5760405162461bcd60e51b815260206004820152603660248201527f63616c6c65722068617320616c72656164792063616c6c65642072657761726460448201527508199bdc881d1a194818dd5c9c995b9d081c9bdd5b9960521b6064820152608401610840565b3360009081526004602090815260408083208484526003810190925290912060018083015460028085015492840191909155820155600482015483811015611fb157600081815260038401602052604090205482555b6000611fbb6133a1565b8354600554604051637dbedad560e01b8152600481019290925260248201526001600160a01b039190911690637dbedad590604401602060405180830381600087803b15801561200a57600080fd5b505af115801561201e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120429190614797565b90506120513382878a8a613b29565b84845560405181815233907f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc9906020015b60405180910390a250505050505050565b604051632ebb2fed60e01b81526007600482015260009073__$d23c89be677d40ab24c636937040b6165f$__90632ebb2fed9060240160206040518083038186803b1580156120e157600080fd5b505af41580156120f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a91906147d2565b600061212482611d06565b1561213157506001919050565b506000919050565b612141613beb565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f7090602001611cfb565b612197612c3c565b61219f612d00565b6121a7612dc4565b60016121b233610c71565b60028111156121c3576121c36144dc565b146122085760405162461bcd60e51b815260206004820152601560248201527418d85b1b195c881b5d5cdd08189948189bdb991959605a1b6044820152606401610840565b336000908152600360205260409020836122705760405162461bcd60e51b8152602060048201526024808201527f756e626f6e6420616d6f756e74206d75737420626520677265617465722074686044820152630616e20360e41b6064820152608401610840565b80548411156122cd5760405162461bcd60e51b8152602060048201526024808201527f616d6f756e742069732067726561746572207468616e20626f6e64656420616d6044820152631bdd5b9d60e21b6064820152608401610840565b60028101546001600160a01b031660006122e5612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561231d57600080fd5b505afa158015612331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123559190614797565b60025490915060009061237390839067ffffffffffffffff16612ee0565b60068501546040805180820182528a81526020808201858152600085815260078b01909252929020905181559051600191820155919250906123b6908290612ee0565b600686015584546123c79089612ffc565b808655612484576002850180546001600160a01b0319169055600060048087019190915560405163b0138c4760e01b815260079181019190915233602482015273__$d23c89be677d40ab24c636937040b6165f$__9063b0138c479060440160206040518083038186803b15801561243e57600080fd5b505af4158015612452573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247691906147b0565b1561248457612484336132a8565b61249084898989613c45565b60408051828152602081018a905290810183905233906001600160a01b038616907f2d5d98d189bee5496a08db2a5948cb7e5e786f09d17d0c3f228eb41776c24a069060600160405180910390a35050505050505050565b6000806124f3612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561252b57600080fd5b505afa15801561253f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125639190614797565b905060006125718583613ea8565b5095945050505050565b6001600160a01b03166000908152600360208190526040909120015490565b6125a2612c3c565b6125aa612d00565b6125b2612dc4565b6001600160a01b0382166125fc5760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610840565b336000908152600360205260409020600101548181101561265f5760405162461bcd60e51b815260206004820152601d60248201527f696e73756666696369656e74206665657320746f2077697468647261770000006044820152606401610840565b6126698183612ffc565b336000908152600360205260409020600101556126846133a1565b6040516320283da960e01b81526001600160a01b0385811660048301526024820185905291909116906320283da990604401600060405180830381600087803b1580156126d057600080fd5b505af11580156126e4573d6000803e3d6000fd5b5050604080516001600160a01b0387168152602081018690523393507f4f1b51dd7a2fcb861aa2670f668be66835c4ee12b4bbbf037e4d0018f39819e492500160405180910390a2505050565b6118e08282600080600080611d3e565b6111c481600080611d65565b612755612c3c565b61275d612d00565b612765612dc4565b6001600160a01b038616600090815260036020526040812090612786612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127be57600080fd5b505afa1580156127d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f69190614797565b60028084015484549293508b926001600160a01b03909116916128188c610c71565b6002811115612829576128296144dc565b14156128445761283a846001612ee0565b600486015561290f565b6000811180156128665750896001600160a01b0316826001600160a01b031614155b1561290f576128748b611d06565b156128e75760405162461bcd60e51b815260206004820152603d60248201527f72656769737465726564207472616e73636f646572732063616e27742064656c60448201527f656761746520746f7761726473206f74686572206164647265737365730000006064820152608401610840565b6128f2846001612ee0565b60048601556129018382612ee0565b925061290f82828b8b613c45565b6001600160a01b038a16600090815260046020908152604080832087845260038082019093529220908101546129575761294d828360000154613f6d565b6060015160038201555b60048101546129785761296e8283600a0154613f6d565b6080015160048201555b5050600083116129db5760405162461bcd60e51b815260206004820152602860248201527f64656c65676174696f6e20616d6f756e74206d75737420626520677265617465604482015267072207468616e20360c41b6064820152608401610840565b6002850180546001600160a01b0319166001600160a01b038c16179055612a02818d612ee0565b8555612a108a848989613fd0565b8b15612abe57612a1e61422e565b6001600160a01b03166323b872dd33612a356133a1565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018f9052606401602060405180830381600087803b158015612a8457600080fd5b505af1158015612a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abc91906147b0565b505b8a6001600160a01b0316826001600160a01b03168b6001600160a01b03167fe5917769f276ddca9f2ee7c6b0b33e1d1e1b61008010ce622c632dd20d168a238f8960000154604051612b1a929190918252602082015260400190565b60405180910390a4505050505050505050505050565b612b3861394a565b6002805467ffffffffffffffff831667ffffffffffffffff199091161790556040517f9f5033568d78ae30f29f01e944f97b2216493bd19d1b46d429673acff3dcd67490611cfb906020808252600f908201526e1d5b989bdb991a5b99d4195c9a5bd9608a1b604082015260600190565b600080612bb4612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bec57600080fd5b505afa158015612c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c249190614797565b90506000612c328583613ea8565b9695505050505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015612c8857600080fd5b505afa158015612c9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc091906147b0565b15610d385760405162461bcd60e51b815260206004820152601060248201526f1cde5cdd195b481a5cc81c185d5cd95960821b6044820152606401610840565b612d08612e67565b6001600160a01b031663219bc76c6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d4057600080fd5b505afa158015612d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7891906147b0565b610d385760405162461bcd60e51b815260206004820181905260248201527f63757272656e7420726f756e64206973206e6f7420696e697469616c697a65646044820152606401610840565b6000612dce612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b158015612e0657600080fd5b505afa158015612e1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3e9190614797565b33600090815260036020526040902060050154909150818110156118e0576118e0338383613008565b60008054604051631c2d8fb360e31b81527fe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe860048201526001600160a01b039091169063e16c7d98906024015b60206040518083038186803b158015612ecc57600080fd5b505afa1580156120f5573d6000803e3d6000fd5b6000611d378284614805565b6001600160a01b038416600090815260036020908152604080832086845260078101909252909120612f1e8686610c40565b612f665760405162461bcd60e51b81526020600482015260196024820152781a5b9d985b1a59081d5b989bdb991a5b99c81b1bd8dac81251603a1b6044820152606401610840565b80548254612f749082612ee0565b835560008681526007840160205260408120818155600101556002830154612fa7906001600160a01b0316828787613fd0565b600283015460408051888152602081018490526001600160a01b038a81169316917f9f5b64cc71e1e26ff178caaa7877a04d8ce66fde989251870e80e6fbee690c17910160405180910390a350505050505050565b6000611d37828461481d565b6001600160a01b03831660009081526003602052604081209061302c836001612ee0565b82546001840154600285015492935090916001600160a01b031615613106576130558787613ea8565b60028601546001600160a01b031660009081526004602090815260408083208b84526003808201909352922090810154939550919350916130b0578154888110156130ae576130a48382613f6d565b6060015160038301555b505b60048101546130dc57600a820154888110156130da576130d08382613f6d565b6080015160048301555b505b60028601546001600160a01b038a8116911614156131035760006009830181905560088301555b50505b600284015484546001600160a01b03808a169216907fd7eab0765b772ea6ea859d5633baf737502198012e930f257f90013d9b21109490613148908690612ffc565b6001880154613158908690612ffc565b6040805192835260208301919091528101879052606081018a905260800160405180910390a36005840195909555825550600101919091555050565b600054604051631c2d8fb360e31b81527f121833d5ee4fda5e1a4034c2b7be8155c158142541dea26f39122c796649233f60048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b1580156131f757600080fd5b505afa15801561320b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061322f91906147d2565b6001600160a01b0316336001600160a01b031614610d385760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206d7573742062652056657269666965720000000000000000006044820152606401610840565b6000611d37620f42406132a2858561427f565b9061428b565b604051635d35e00760e01b8152600760048201526001600160a01b038216602482015273__$d23c89be677d40ab24c636937040b6165f$__90635d35e0079060440160006040518083038186803b15801561330257600080fd5b505af4158015613316573d6000803e3d6000fd5b5050505061332f6133268261257b565b60065490612ffc565b60065560006133416001610856612e67565b6001600160a01b0383166000818152600460205260409081902060060183905551919250907ffee3e693fc72d0a0a673805f3e606c551f4c677b9072444b90dd2d0406bc995c906133959084815260200190565b60405180910390a25050565b60008054604051631c2d8fb360e31b81527f6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e994060048201526001600160a01b039091169063e16c7d9890602401612eb4565b6006546040516304aa129960e41b81526007600482015273__$d23c89be677d40ab24c636937040b6165f$__90634aa129909060240160206040518083038186803b15801561344057600080fd5b505af4158015613454573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347891906147b0565b1561360357604051633972059360e11b81526007600482015260009073__$d23c89be677d40ab24c636937040b6165f$__906372e40b269060240160206040518083038186803b1580156134cb57600080fd5b505af41580156134df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350391906147d2565b905060006135108261257b565b90508087116135215750505061110a565b604051635d35e00760e01b8152600760048201526001600160a01b038316602482015273__$d23c89be677d40ab24c636937040b6165f$__90635d35e0079060440160006040518083038186803b15801561357b57600080fd5b505af415801561358f573d6000803e3d6000fd5b5050506001600160a01b0383166000908152600460205260409020600601879055506135bb8382612ffc565b9250816001600160a01b03167ffee3e693fc72d0a0a673805f3e606c551f4c677b9072444b90dd2d0406bc995c876040516135f891815260200190565b60405180910390a250505b6040516327dd54d360e11b815273__$d23c89be677d40ab24c636937040b6165f$__90634fbaa9a690613643906007908a908a9089908990600401614834565b60006040518083038186803b15801561365b57600080fd5b505af415801561366f573d6000803e3d6000fd5b505050506136868582612ee090919063ffffffff16565b6001600160a01b03871660009081526004602081815260408084209283018990556005830189905560001960068401558884526003830190915290912087905590915060068290556040518581526001600160a01b038816907f65d72d782835d64c3287844a829608d5abdc7e864cc9affe96d910ab3db665e990602001612082565b600054604051631c2d8fb360e31b81527fbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee23960048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b15801561376c57600080fd5b505afa158015613780573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a491906147d2565b6001600160a01b0316336001600160a01b031614610d385760405162461bcd60e51b815260206004820152601b60248201527f63616c6c6572206d757374206265205469636b657442726f6b657200000000006044820152606401610840565b6138366040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6138408383613f6d565b835460608201519192509015801561385757508281105b15613871576138668482613f6d565b606090810151908301525b600a840154608083015115801561388757508381105b156138a1576138968582613f6d565b608090810151908401525b505092915050565b6000610c386b033b2e3c9fd0803ce80000006132a26138c88686614297565b879061427f565b608082015160608301516000906138f0576138eb600180614297565b6138f6565b83606001515b905084600401546000141561392d5761391e613917828588600001546138a9565b8390612ee0565b85600401819055505050505050565b61391e61393f828588600001546138a9565b600487015490612ee0565b60008054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561399657600080fd5b505afa1580156139aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ce91906147d2565b6001600160a01b0316336001600160a01b031614610d385760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206d75737420626520436f6e74726f6c6c6572206f776e6572006044820152606401610840565b600054604051631c2d8fb360e31b81527fe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe860048201526001600160a01b039091169063e16c7d989060240160206040518083038186803b158015613a9157600080fd5b505afa158015613aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ac991906147d2565b6001600160a01b0316336001600160a01b031614610d385760405162461bcd60e51b815260206004820152601c60248201527f63616c6c6572206d75737420626520526f756e64734d616e61676572000000006044820152606401610840565b6001600160a01b0385166000908152600460209081526040808320868452600381019092528220815491929091613b61908490613f6d565b9050826008015483600701819055506000613b8088846001015461328f565b90506000613b8e8983612ffc565b90506000613ba582876007015487600001546138a9565b9050613bc2836108c6838960080154612ee090919063ffffffff16565b6008870155613bd28585846142b3565b613bde8b8b8a8a613fd0565b5050505050505050505050565b6000546001600160a01b03163314610d385760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206d75737420626520436f6e74726f6c6c6572000000000000006044820152606401610840565b60405163b0138c4760e01b8152600760048201526001600160a01b038516602482015273__$d23c89be677d40ab24c636937040b6165f$__9063b0138c479060440160206040518083038186803b158015613c9f57600080fd5b505af4158015613cb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cd791906147b0565b15613e5b576000613ce78561257b565b90506000613cf58286612ffc565b90506000613d01612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b158015613d3957600080fd5b505afa158015613d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d719190614797565b90506000613d80826001612ee0565b604051631c11bf7f60e11b815290915073__$d23c89be677d40ab24c636937040b6165f$__906338237efe90613dc3906007908c9088908c908c90600401614834565b60006040518083038186803b158015613ddb57600080fd5b505af4158015613def573d6000803e3d6000fd5b5050600654613e019250905088612ffc565b6006556001600160a01b038816600090815260046020819052604090912090810154831115613e3e57600083815260038201602052604090208590555b600481018290556000918252600301602052604090209190915550505b6001600160a01b03841660009081526003602081905260409091200154613e829084612ffc565b6001600160a01b0390941660009081526003602081905260409091200193909355505050565b6001600160a01b03808316600090815260036020908152604080832060028101549094168352600490915281206001808401548454600586015490959194919392613ef39190612ee0565b60028401549091506001600160a01b039081169088168114878311613f2f57613f2984613f21856001612ffc565b8a8a8a614301565b90975095505b8015613f61576008840154613f45908890612ee0565b9650613f5e846009015487612ee090919063ffffffff16565b95505b50505050509250929050565b613f9f6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000828152600393840160208181526040832095860154606085015293909152909152600490910154608082015290565b613fd984611d06565b15614207576000613fe98561257b565b90506000613ff78286612ee0565b90506000614003612e67565b6001600160a01b0316638a19c8bc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561403b57600080fd5b505afa15801561404f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140739190614797565b90506000614082826001612ee0565b60405163b0138c4760e01b8152600760048201526001600160a01b038a16602482015290915073__$d23c89be677d40ab24c636937040b6165f$__9063b0138c479060440160206040518083038186803b1580156140df57600080fd5b505af41580156140f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061411791906147b0565b156141f557604051631c11bf7f60e11b815273__$d23c89be677d40ab24c636937040b6165f$__906338237efe9061415c906007908c9088908c908c90600401614834565b60006040518083038186803b15801561417457600080fd5b505af4158015614188573d6000803e3d6000fd5b505060065461419a9250905088612ee0565b6006556001600160a01b0388166000908152600460208190526040909120908101548311156141d757600083815260038201602052604090208590555b60008281526003820160205260409020849055600401819055614202565b61420288848389896133f2565b505050505b6001600160a01b03841660009081526003602081905260409091200154613e829084612ee0565b60008054604051631c2d8fb360e31b81527f3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba760048201526001600160a01b039091169063e16c7d9890602401612eb4565b6000611d378284614862565b6000611d378284614881565b6000611d37826132a2856b033b2e3c9fd0803ce800000061427f565b60008260600151600014156142d2576142cd600180614297565b6142d8565b82606001515b90506142f36142ec828487600001546138a9565b8290612ee0565b846003018190555050505050565b60008060006143108888613f6d565b90508060600151600014156143305761432a600180614297565b60608201525b600061433c8988613804565b905080606001516000141561435c57614356600180614297565b60608201525b61438f6143888761437e85608001518560800151612ffc90919063ffffffff16565b85606001516138a9565b8690612ee0565b92506143a486826060015184606001516138a9565b935050509550959350505050565b6001600160a01b03811681146111c457600080fd5b600080600080608085870312156143dd57600080fd5b84356143e8816143b2565b93506020850135925060408501356143ff816143b2565b9150606085013561440f816143b2565b939692955090935050565b60008060008060008060c0878903121561443357600080fd5b863561443e816143b2565b9550602087013594506040870135614455816143b2565b93506060870135614465816143b2565b92506080870135614475816143b2565b915060a0870135614485816143b2565b809150509295509295509295565b6000602082840312156144a557600080fd5b8135611d37816143b2565b600080604083850312156144c357600080fd5b82356144ce816143b2565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b6020810160038310614506576145066144dc565b91905290565b6000806000806080858703121561452257600080fd5b843561452d816143b2565b9350602085013561453d816143b2565b93969395505050506040820135916060013590565b60006020828403121561456457600080fd5b5035919050565b6000806000806080858703121561458157600080fd5b843593506020850135925060408501356143ff816143b2565b6000806000606084860312156145af57600080fd5b83356145ba816143b2565b95602085013595506040909401359392505050565b600080604083850312156145e257600080fd5b50508035926020909101359150565b60008060008060008060c0878903121561460a57600080fd5b86359550602087013561461c816143b2565b94506040870135614455816143b2565b60008060006060848603121561464157600080fd5b833592506020840135614653816143b2565b91506040840135614663816143b2565b809150509250925092565b6000806040838503121561468157600080fd5b823561468c816143b2565b9150602083013561469c816143b2565b809150509250929050565b6020810160028310614506576145066144dc565b600080604083850312156146ce57600080fd5b82359150602083013561469c816143b2565b600080600080600080600060e0888a0312156146fb57600080fd5b87359650602088013561470d816143b2565b9550604088013561471d816143b2565b9450606088013561472d816143b2565b9350608088013561473d816143b2565b925060a088013561474d816143b2565b915060c088013561475d816143b2565b8091505092959891949750929550565b60006020828403121561477f57600080fd5b813567ffffffffffffffff81168114611d3757600080fd5b6000602082840312156147a957600080fd5b5051919050565b6000602082840312156147c257600080fd5b81518015158114611d3757600080fd5b6000602082840312156147e457600080fd5b8151611d37816143b2565b634e487b7160e01b600052601160045260246000fd5b60008219821115614818576148186147ef565b500190565b60008282101561482f5761482f6147ef565b500390565b9485526001600160a01b03938416602086015260408501929092528216606084015216608082015260a00190565b600081600019048311821515161561487c5761487c6147ef565b500290565b60008261489e57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122084ef728ebfb0333127dbaf5c1958d15f6c7667ad0536c0afa147b43b535ef28b64736f6c63430008090033", + "libraries": { + "SortedDoublyLL": "0xC45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb" + }, + "devdoc": { + "kind": "dev", + "methods": { + "bond(uint256,address)": { + "params": { + "_amount": "The amount of tokens to stake", + "_to": "The address of the transcoder to stake towards" + } + }, + "bondForWithHint(uint256,address,address,address,address,address,address)": { + "details": "If the caller is decreasing the stake of its old delegate in the transcoder pool, the caller can provide an optional hint for the insertion position of the old delegate via the `_oldDelegateNewPosPrev` and `_oldDelegateNewPosNext` params. If the caller is delegating to a delegate that is in the transcoder pool, the caller can provide an optional hint for the insertion position of the delegate via the `_currDelegateNewPosPrev` and `_currDelegateNewPosNext` params. In both cases, a linear search will be executed starting at the hint to find the correct position. In the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol for details on list hints", + "params": { + "_amount": "The amount of tokens to stake.", + "_currDelegateNewPosNext": "The address of the next transcoder in the pool for the current delegate", + "_currDelegateNewPosPrev": "The address of the previous transcoder in the pool for the current delegate", + "_oldDelegateNewPosNext": "The address of the next transcoder in the pool for the old delegate", + "_oldDelegateNewPosPrev": "The address of the previous transcoder in the pool for the old delegate", + "_owner": "The address of the owner of the bond", + "_to": "The address of the transcoder to stake towards" + } + }, + "bondWithHint(uint256,address,address,address,address,address)": { + "details": "If the caller is decreasing the stake of its old delegate in the transcoder pool, the caller can provide an optional hint for the insertion position of the old delegate via the `_oldDelegateNewPosPrev` and `_oldDelegateNewPosNext` params. If the caller is delegating to a delegate that is in the transcoder pool, the caller can provide an optional hint for the insertion position of the delegate via the `_currDelegateNewPosPrev` and `_currDelegateNewPosNext` params. In both cases, a linear search will be executed starting at the hint to find the correct position. In the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol for details on list hints", + "params": { + "_amount": "The amount of tokens to stake.", + "_currDelegateNewPosNext": "The address of the next transcoder in the pool for the current delegate", + "_currDelegateNewPosPrev": "The address of the previous transcoder in the pool for the current delegate", + "_oldDelegateNewPosNext": "The address of the next transcoder in the pool for the old delegate", + "_oldDelegateNewPosPrev": "The address of the previous transcoder in the pool for the old delegate", + "_to": "The address of the transcoder to stake towards" + } + }, + "claimEarnings(uint256)": { + "params": { + "_endRound": "The last round for which to claim token pools shares for a delegator" + } + }, + "constructor": { + "details": "This constructor will not initialize any state variables besides `controller`. The following setter functions should be used to initialize state variables post-deployment: - setUnbondingPeriod() - setNumActiveTranscoders() - setMaxEarningsClaimsRounds()", + "params": { + "_controller": "Address of Controller that this contract will be registered with" + } + }, + "delegatorStatus(address)": { + "params": { + "_delegator": "Address of delegator" + }, + "returns": { + "_0": "bonded, unbonded or pending delegator status" + } + }, + "getDelegator(address)": { + "params": { + "_delegator": "Address of delegator" + }, + "returns": { + "bondedAmount": "total amount bonded by '_delegator'", + "delegateAddress": "address '_delegator' has bonded to", + "delegatedAmount": "total amount delegated to '_delegator'", + "fees": "amount of fees collected by '_delegator'", + "lastClaimRound": "round for which '_delegator' has last claimed earnings", + "nextUnbondingLockId": "ID for the next unbonding lock created for '_delegator'", + "startRound": "round in which bond for '_delegator' became effective" + } + }, + "getDelegatorUnbondingLock(address,uint256)": { + "params": { + "_delegator": "Address of delegator", + "_unbondingLockId": "ID of unbonding lock" + }, + "returns": { + "amount": "of stake locked up by unbonding lock", + "withdrawRound": "round in which 'amount' becomes available for withdrawal" + } + }, + "getFirstTranscoderInPool()": { + "returns": { + "_0": "address for transcoder with highest stake in transcoder pool" + } + }, + "getNextTranscoderInPool(address)": { + "params": { + "_transcoder": "Address of a transcoder in the pool" + }, + "returns": { + "_0": "address for the transcoder after '_transcoder' in transcoder pool" + } + }, + "getTotalBonded()": { + "returns": { + "_0": "total active stake for the current round" + } + }, + "getTranscoder(address)": { + "params": { + "_transcoder": "Address of transcoder" + }, + "returns": { + "activationRound": "Round in which transcoder became active", + "activeCumulativeRewards": "Transcoder's cumulative rewards that are currently active", + "cumulativeFees": "Transcoder's cumulative fees (earned via its active staked rewards and its fee share)", + "cumulativeRewards": "Transcoder's cumulative rewards (earned via its active staked rewards and its reward cut)", + "deactivationRound": "Round in which transcoder will no longer be active", + "feeShare": "Transcoder's fee share", + "lastActiveStakeUpdateRound": "Round in which transcoder's stake was last updated while active", + "lastFeeRound": "Latest round that the transcoder received fees", + "lastRewardRound": "Trancoder's last reward round", + "rewardCut": "Transcoder's reward cut" + } + }, + "getTranscoderEarningsPoolForRound(address,uint256)": { + "params": { + "_round": "Round number", + "_transcoder": "Address of transcoder" + }, + "returns": { + "cumulativeFeeFactor": "The cumulative fee factor for delegator fees calculation (only used after LIP-36)", + "cumulativeRewardFactor": "The cumulative reward factor for delegator rewards calculation (only used after LIP-36)", + "totalStake": "Transcoder's total stake in '_round'", + "transcoderFeeShare": "Transcoder's fee share for '_round'", + "transcoderRewardCut": "Transcoder's reward cut for '_round'" + } + }, + "getTranscoderPoolMaxSize()": { + "returns": { + "_0": "transcoder pool max size" + } + }, + "getTranscoderPoolSize()": { + "returns": { + "_0": "transcoder pool current size" + } + }, + "isActiveTranscoder(address)": { + "params": { + "_transcoder": "Transcoder address" + }, + "returns": { + "_0": "true if transcoder is active" + } + }, + "isRegisteredTranscoder(address)": { + "params": { + "_transcoder": "Transcoder address" + }, + "returns": { + "_0": "true if transcoder is self-bonded" + } + }, + "isValidUnbondingLock(address,uint256)": { + "params": { + "_delegator": "Address of delegator", + "_unbondingLockId": "ID of unbonding lock" + }, + "returns": { + "_0": "true if unbondingLock for ID has a non-zero withdraw round" + } + }, + "pendingFees(address,uint256)": { + "params": { + "_delegator": "Address of delegator", + "_endRound": "The last round to compute pending fees from" + }, + "returns": { + "_0": "Pending fees for '_delegator' since last claiming fees" + } + }, + "pendingStake(address,uint256)": { + "params": { + "_delegator": "Address of delegator", + "_endRound": "The last round to compute pending stake from" + }, + "returns": { + "_0": "Pending bonded stake for '_delegator' since last claiming rewards" + } + }, + "rebond(uint256)": { + "params": { + "_unbondingLockId": "ID of unbonding lock to rebond with" + } + }, + "rebondFromUnbonded(address,uint256)": { + "params": { + "_to": "Address of delegate", + "_unbondingLockId": "ID of unbonding lock to rebond with" + } + }, + "rebondFromUnbondedWithHint(address,uint256,address,address)": { + "details": "If the delegate joins the transcoder pool, the caller can provide an optional hint for the delegate's insertion position in the pool via the `_newPosPrev` and `_newPosNext` params. A linear search will be executed starting at the hint to find the correct position. In the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol for details on list hints", + "params": { + "_newPosNext": "Address of next transcoder in pool if the delegate joins the pool", + "_newPosPrev": "Address of previous transcoder in pool if the delegate joins the pool", + "_to": "Address of delegate", + "_unbondingLockId": "ID of unbonding lock to rebond with" + } + }, + "rebondWithHint(uint256,address,address)": { + "details": "If the delegate is in the transcoder pool, the caller can provide an optional hint for the delegate's insertion position in the pool via the `_newPosPrev` and `_newPosNext` params. A linear search will be executed starting at the hint to find the correct position. In the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol details on list hints", + "params": { + "_newPosNext": "Address of next transcoder in pool if the delegate is in the pool", + "_newPosPrev": "Address of previous transcoder in pool if the delegate is in the pool", + "_unbondingLockId": "ID of unbonding lock to rebond with" + } + }, + "rewardWithHint(address,address)": { + "details": "If the caller is in the transcoder pool, the caller can provide an optional hint for its insertion position in the pool via the `_newPosPrev` and `_newPosNext` params. A linear search will be executed starting at the hint to find the correct position. In the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol for details on list hints", + "params": { + "_newPosNext": "Address of next transcoder in pool if the caller is in the pool", + "_newPosPrev": "Address of previous transcoder in pool if the caller is in the pool" + } + }, + "setController(address)": { + "params": { + "_controller": "Controller contract address" + } + }, + "setNumActiveTranscoders(uint256)": { + "params": { + "_numActiveTranscoders": "Number of active transcoders" + } + }, + "setUnbondingPeriod(uint64)": { + "params": { + "_unbondingPeriod": "Rounds between unbonding and possible withdrawal" + } + }, + "slashTranscoder(address,address,uint256,uint256)": { + "params": { + "_finder": "Finder that proved a transcoder violated a slashing condition. Null address if there is no finder", + "_finderFee": "Percentage of penalty awarded to finder. Zero if there is no finder", + "_slashAmount": "Percentage of transcoder bond to be slashed", + "_transcoder": "Transcoder address" + } + }, + "transcoder(uint256,uint256)": { + "details": "Percentages are represented as numerators of fractions over MathUtils.PERC_DIVISOR", + "params": { + "_feeShare": "% of fees paid to delegators by a transcoder", + "_rewardCut": "% of reward paid to transcoder by a delegator" + } + }, + "transcoderStatus(address)": { + "params": { + "_transcoder": "Address of transcoder" + }, + "returns": { + "_0": "registered or not registered transcoder status" + } + }, + "transcoderTotalStake(address)": { + "params": { + "_transcoder": "Address of transcoder" + }, + "returns": { + "_0": "total bonded stake for a delegator" + } + }, + "transcoderWithHint(uint256,uint256,address,address)": { + "details": "Percentages are represented as numerators of fractions over MathUtils.PERC_DIVISOR. If the caller is going to be added to the pool, the caller can provide an optional hint for the insertion position in the pool via the `_newPosPrev` and `_newPosNext` params. A linear search will be executed starting at the hint to find the correct position - in the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol for details on list hints", + "params": { + "_feeShare": "% of fees paid to delegators by a transcoder", + "_newPosNext": "Address of next transcoder in pool if the caller joins the pool", + "_newPosPrev": "Address of previous transcoder in pool if the caller joins the pool", + "_rewardCut": "% of reward paid to transcoder by a delegator" + } + }, + "transferBond(address,uint256,address,address,address,address)": { + "details": "If the original delegate is in the transcoder pool, the caller can provide an optional hint for the insertion position of the delegate via the `_oldDelegateNewPosPrev` and `_oldDelegateNewPosNext` params. If the target delegate is in the transcoder pool, the caller can provide an optional hint for the insertion position of the delegate via the `_newDelegateNewPosPrev` and `_newDelegateNewPosNext` params. In both cases, a linear search will be executed starting at the hint to find the correct position. In the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol for details on list hints", + "params": { + "_amount": "Portion of the bond to transfer to receiver", + "_delegator": "Receiver of the bond", + "_newDelegateNewPosNext": "Address of next transcoder in pool if the delegate is in the pool", + "_newDelegateNewPosPrev": "Address of previous transcoder in pool if the delegate is in the pool", + "_oldDelegateNewPosNext": "Address of next transcoder in pool if the delegate remains in the pool", + "_oldDelegateNewPosPrev": "Address of previous transcoder in pool if the delegate remains in the pool" + } + }, + "unbond(uint256)": { + "params": { + "_amount": "Amount of tokens to unbond" + } + }, + "unbondWithHint(uint256,address,address)": { + "details": "If the caller remains in the transcoder pool, the caller can provide an optional hint for its insertion position in the pool via the `_newPosPrev` and `_newPosNext` params. A linear search will be executed starting at the hint to find the correct position. In the best case, the hint is the correct position so no search is executed. See SortedDoublyLL.sol details on list hints", + "params": { + "_amount": "Amount of tokens to unbond", + "_newPosNext": "Address of next transcoder in pool if the caller remains in the pool", + "_newPosPrev": "Address of previous transcoder in pool if the caller remains in the pool" + } + }, + "updateTranscoderWithFees(address,uint256,uint256)": { + "params": { + "_fees": "Fees to be added to the fee pool", + "_transcoder": "Transcoder address" + } + }, + "withdrawStake(uint256)": { + "params": { + "_unbondingLockId": "ID of unbonding lock to withdraw with" + } + } + }, + "title": "BondingManager", + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "bond(uint256,address)": { + "notice": "Delegate stake towards a specific address" + }, + "bondForWithHint(uint256,address,address,address,address,address,address)": { + "notice": "Delegates stake \"on behalf of\" another address towards a specific address and updates the transcoder pool using optional list hints if needed" + }, + "bondWithHint(uint256,address,address,address,address,address)": { + "notice": "Delegates stake towards a specific address and updates the transcoder pool using optional list hints if needed" + }, + "claimEarnings(uint256)": { + "notice": "Claim token pools shares for a delegator from its lastClaimRound through the end round" + }, + "constructor": { + "notice": "BondingManager constructor. Only invokes constructor of base Manager contract with provided Controller address" + }, + "delegatorStatus(address)": { + "notice": "Computes delegator status" + }, + "getDelegator(address)": { + "notice": "Return delegator info" + }, + "getDelegatorUnbondingLock(address,uint256)": { + "notice": "Return delegator's unbonding lock info" + }, + "getFirstTranscoderInPool()": { + "notice": "Returns transcoder with most stake in pool" + }, + "getNextTranscoderInPool(address)": { + "notice": "Returns next transcoder in pool for a given transcoder" + }, + "getTotalBonded()": { + "notice": "Return total bonded tokens" + }, + "getTranscoder(address)": { + "notice": "Return transcoder information" + }, + "getTranscoderEarningsPoolForRound(address,uint256)": { + "notice": "Return transcoder's earnings pool for a given round" + }, + "getTranscoderPoolMaxSize()": { + "notice": "Returns max size of transcoder pool" + }, + "getTranscoderPoolSize()": { + "notice": "Returns size of transcoder pool" + }, + "isActiveTranscoder(address)": { + "notice": "Return whether a transcoder is active for the current round" + }, + "isRegisteredTranscoder(address)": { + "notice": "Return whether a transcoder is registered" + }, + "isValidUnbondingLock(address,uint256)": { + "notice": "Return whether an unbonding lock for a delegator is valid" + }, + "pendingFees(address,uint256)": { + "notice": "Returns pending fees for a delegator from its lastClaimRound through an end round" + }, + "pendingStake(address,uint256)": { + "notice": "Returns pending bonded stake for a delegator from its lastClaimRound through an end round" + }, + "rebond(uint256)": { + "notice": "Rebond tokens for an unbonding lock to a delegator's current delegate while a delegator is in the Bonded or Pending status" + }, + "rebondFromUnbonded(address,uint256)": { + "notice": "Rebond tokens for an unbonding lock to a delegate while a delegator is in the Unbonded status" + }, + "rebondFromUnbondedWithHint(address,uint256,address,address)": { + "notice": "Rebond tokens for an unbonding lock to a delegate while a delegator is in the Unbonded status and updates the transcoder pool using an optional list hint if needed" + }, + "rebondWithHint(uint256,address,address)": { + "notice": "Rebond tokens for an unbonding lock to a delegator's current delegate while a delegator is in the Bonded or Pending status and updates the transcoder pool using an optional list hint if needed" + }, + "reward()": { + "notice": "Mint token rewards for an active transcoder and its delegators" + }, + "rewardWithHint(address,address)": { + "notice": "Mint token rewards for an active transcoder and its delegators and update the transcoder pool using an optional list hint if needed" + }, + "setController(address)": { + "notice": "Set controller. Only callable by current controller" + }, + "setCurrentRoundTotalActiveStake()": { + "notice": "Called during round initialization to set the total active stake for the round. Only callable by the RoundsManager" + }, + "setNumActiveTranscoders(uint256)": { + "notice": "Set maximum number of active transcoders. Only callable by Controller owner" + }, + "setUnbondingPeriod(uint64)": { + "notice": "Set unbonding period. Only callable by Controller owner" + }, + "slashTranscoder(address,address,uint256,uint256)": { + "notice": "Slash a transcoder. Only callable by the Verifier" + }, + "transcoder(uint256,uint256)": { + "notice": "Sets commission rates as a transcoder and if the caller is not in the transcoder pool tries to add it" + }, + "transcoderStatus(address)": { + "notice": "Computes transcoder status" + }, + "transcoderTotalStake(address)": { + "notice": "Returns total bonded stake for a transcoder" + }, + "transcoderWithHint(uint256,uint256,address,address)": { + "notice": "Sets commission rates as a transcoder and if the caller is not in the transcoder pool tries to add it using an optional list hint" + }, + "transferBond(address,uint256,address,address,address,address)": { + "notice": "Transfers ownership of a bond to a new delegator using optional hints if needed If the receiver is already bonded to a different delegate than the bond owner then the stake goes to the receiver's delegate otherwise the receiver's delegate is set as the owner's delegate" + }, + "unbond(uint256)": { + "notice": "Unbond an amount of the delegator's bonded stake" + }, + "unbondWithHint(uint256,address,address)": { + "notice": "Unbond an amount of the delegator's bonded stake and updates the transcoder pool using an optional list hint if needed" + }, + "updateTranscoderWithFees(address,uint256,uint256)": { + "notice": "Update transcoder's fee pool. Only callable by the TicketBroker" + }, + "withdrawFees(address,uint256)": { + "notice": "Withdraws fees to the caller" + }, + "withdrawStake(uint256)": { + "notice": "Withdraws tokens for an unbonding lock that has existed through an unbonding period" + } + }, + "notice": "Manages bonding, transcoder and rewards/fee accounting related operations of the Livepeer protocol", + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 2670, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "controller", + "offset": 0, + "slot": "0", + "type": "t_contract(IController)2645" + }, + { + "astId": 2852, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "targetContractId", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + }, + { + "astId": 2962, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "unbondingPeriod", + "offset": 0, + "slot": "2", + "type": "t_uint64" + }, + { + "astId": 3025, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "delegators", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(Delegator)3011_storage)" + }, + { + "astId": 3030, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "transcoders", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(Transcoder)2988_storage)" + }, + { + "astId": 3032, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "currentRoundTotalActiveStake", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 3034, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "nextRoundTotalActiveStake", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 3037, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "transcoderPool", + "offset": 0, + "slot": "7", + "type": "t_struct(Data)7357_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IController)2645": { + "encoding": "inplace", + "label": "contract IController", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_struct(Delegator)3011_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct BondingManager.Delegator)", + "numberOfBytes": "32", + "value": "t_struct(Delegator)3011_storage" + }, + "t_mapping(t_address,t_struct(Node)7343_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct SortedDoublyLL.Node)", + "numberOfBytes": "32", + "value": "t_struct(Node)7343_storage" + }, + "t_mapping(t_address,t_struct(Transcoder)2988_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct BondingManager.Transcoder)", + "numberOfBytes": "32", + "value": "t_struct(Transcoder)2988_storage" + }, + "t_mapping(t_uint256,t_struct(Data)6607_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => struct EarningsPool.Data)", + "numberOfBytes": "32", + "value": "t_struct(Data)6607_storage" + }, + "t_mapping(t_uint256,t_struct(UnbondingLock)3020_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => struct BondingManager.UnbondingLock)", + "numberOfBytes": "32", + "value": "t_struct(UnbondingLock)3020_storage" + }, + "t_struct(Data)6607_storage": { + "encoding": "inplace", + "label": "struct EarningsPool.Data", + "members": [ + { + "astId": 6598, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "totalStake", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 6600, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "transcoderRewardCut", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 6602, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "transcoderFeeShare", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 6604, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "cumulativeRewardFactor", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 6606, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "cumulativeFeeFactor", + "offset": 0, + "slot": "4", + "type": "t_uint256" + } + ], + "numberOfBytes": "160" + }, + "t_struct(Data)7357_storage": { + "encoding": "inplace", + "label": "struct SortedDoublyLL.Data", + "members": [ + { + "astId": 7345, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "head", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 7347, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "tail", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 7349, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "maxSize", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 7351, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "size", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 7356, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "nodes", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_address,t_struct(Node)7343_storage)" + } + ], + "numberOfBytes": "160" + }, + "t_struct(Delegator)3011_storage": { + "encoding": "inplace", + "label": "struct BondingManager.Delegator", + "members": [ + { + "astId": 2993, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "bondedAmount", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 2995, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "fees", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 2997, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "delegateAddress", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 2999, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "delegatedAmount", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 3001, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "startRound", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 3003, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "lastClaimRound", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 3005, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "nextUnbondingLockId", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 3010, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "unbondingLocks", + "offset": 0, + "slot": "7", + "type": "t_mapping(t_uint256,t_struct(UnbondingLock)3020_storage)" + } + ], + "numberOfBytes": "256" + }, + "t_struct(Node)7343_storage": { + "encoding": "inplace", + "label": "struct SortedDoublyLL.Node", + "members": [ + { + "astId": 7338, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "key", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 7340, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "nextId", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 7342, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "prevId", + "offset": 0, + "slot": "2", + "type": "t_address" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Transcoder)2988_storage": { + "encoding": "inplace", + "label": "struct BondingManager.Transcoder", + "members": [ + { + "astId": 2964, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "lastRewardRound", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 2966, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "rewardCut", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 2968, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "feeShare", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 2973, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "earningsPoolPerRound", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_uint256,t_struct(Data)6607_storage)" + }, + { + "astId": 2975, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "lastActiveStakeUpdateRound", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 2977, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "activationRound", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 2979, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "deactivationRound", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 2981, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "activeCumulativeRewards", + "offset": 0, + "slot": "7", + "type": "t_uint256" + }, + { + "astId": 2983, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "cumulativeRewards", + "offset": 0, + "slot": "8", + "type": "t_uint256" + }, + { + "astId": 2985, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "cumulativeFees", + "offset": 0, + "slot": "9", + "type": "t_uint256" + }, + { + "astId": 2987, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "lastFeeRound", + "offset": 0, + "slot": "10", + "type": "t_uint256" + } + ], + "numberOfBytes": "352" + }, + "t_struct(UnbondingLock)3020_storage": { + "encoding": "inplace", + "label": "struct BondingManager.UnbondingLock", + "members": [ + { + "astId": 3017, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "amount", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 3019, + "contract": "contracts/bonding/BondingManager.sol:BondingManager", + "label": "withdrawRound", + "offset": 0, + "slot": "1", + "type": "t_uint256" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + } + } + } +} \ No newline at end of file diff --git a/backend/src/index.js b/backend/src/index.js new file mode 100644 index 0000000..d6f96c5 --- /dev/null +++ b/backend/src/index.js @@ -0,0 +1,4 @@ +//Starting point of backend. Simply imports ESM and calls the actual server.js to be loaded. + +require = require("esm")(module) +module.exports = require("./server.js") diff --git a/backend/src/models/event.js b/backend/src/models/event.js new file mode 100644 index 0000000..5cf6bac --- /dev/null +++ b/backend/src/models/event.js @@ -0,0 +1,31 @@ +import mongoose from 'mongoose'; + + +//database schema for users +const EventSchema = new mongoose.Schema({ + address: { + type: String, + required: true + }, + transactionHash: { + type: String, + required: true + }, + transactionUrl: { + type: String, + required: true + }, + name: { + type: String, + required: true + }, + data: { + type: Object, + required: true + }, +}, { timestamps: true }); + +//define variable User, which corresponds with the schema +const Event = mongoose.model('Event', EventSchema); +//export for use outside of this file +export default Event; \ No newline at end of file diff --git a/backend/src/models/timelapse.js b/backend/src/models/timelapse.js new file mode 100644 index 0000000..5cb0a22 --- /dev/null +++ b/backend/src/models/timelapse.js @@ -0,0 +1,31 @@ +import mongoose from 'mongoose'; + +const timelapseSchema = new mongoose.Schema({ + ownerId: { + type: mongoose.ObjectId, + ref: 'User', + required: true + }, + OwnerIp: { + type: String, + required: true + }, + fullFilename: { + type: String, + required: true + }, + upvotes: { + type: Number, + required: false, + default: 0 + }, + downvotes: { + type: Number, + required: false, + default: 0 + } +}, { timestamps: true }); + + +const timelapseObj = mongoose.model('timelapseSchema', timelapseSchema); +export default timelapseObj; \ No newline at end of file diff --git a/backend/src/models/user.js b/backend/src/models/user.js new file mode 100644 index 0000000..8567edd --- /dev/null +++ b/backend/src/models/user.js @@ -0,0 +1,34 @@ +import mongoose from 'mongoose'; + + +//database schema for users +const UserSchema = new mongoose.Schema({ + ip: { + type: String, + required: true + }, + upvotedTimelapses: { + type: [mongoose.ObjectId], + ref: 'timelapseSchema', + required: false, + default: [] + }, + downvotedTimelapses: { + type: [mongoose.ObjectId], + ref: 'timelapseSchema', + required: false, + default: [] + } +}, { timestamps: true }); + + +//takes a database field as input, returns T/F if entry already exists. +//iterates through entire user DB, any field +UserSchema.statics.doesNotExist = async function (field) { + return await this.where(field).countDocuments() === 0; +}; + +//define variable User, which corresponds with the schema +const User = mongoose.model('User', UserSchema); +//export for use outside of this file +export default User; diff --git a/backend/src/routes/index.js b/backend/src/routes/index.js new file mode 100644 index 0000000..8737861 --- /dev/null +++ b/backend/src/routes/index.js @@ -0,0 +1,7 @@ +//In this document all used routes are defined. +//(in this case this is just user.js and session.js) +import userRouter from './user'; +import sessionRouter from './session'; +import livepeerRouter from './livepeer'; + +export { userRouter, sessionRouter, livepeerRouter }; \ No newline at end of file diff --git a/backend/src/routes/livepeer.js b/backend/src/routes/livepeer.js new file mode 100644 index 0000000..9868d17 --- /dev/null +++ b/backend/src/routes/livepeer.js @@ -0,0 +1,233 @@ +import express from "express"; +import Event from '../models/event'; +const fs = require('fs'); +const apiRouter = express.Router(); +import { + API_CMC, API_L1_HTTP, API_L2_HTTP, API_L2_WS +} from "../config"; + +// Get ETH price & LPT coin prices +const CoinMarketCap = require('coinmarketcap-api'); +const cmcClient = new CoinMarketCap(API_CMC); +// Get gas price on ETH (L2 already gets exported by the O's themselves) +const { createAlchemyWeb3 } = require("@alch/alchemy-web3"); +const web3layer1 = createAlchemyWeb3(API_L1_HTTP); +const web3layer2 = createAlchemyWeb3(API_L2_HTTP); +const web3layer2WS = createAlchemyWeb3(API_L2_WS); + +// Update CMC related api calls every 5 minutes +const timeoutCMC = 300000; +let cmcPriceGet = 0; +let ethPrice = 0; +let lptPrice = 0; +let cmcQuotes = {}; +let cmcCache = {}; + +// Update alchemy related API calls every 2 seconds +const timeoutAlchemy = 2000; +let l2Gwei = 0; +let l1Gwei = 0; +let l2block = 0; +let l1block = 0; +let arbGet = 0; + +// Gas limits on common contract interactions +const redeemRewardGwei = 1053687; +const claimTicketGwei = 1333043; +const withdrawFeeGwei = 688913; +let redeemRewardCostL1 = 0; +let redeemRewardCostL2 = 0; +let claimTicketCostL1 = 0; +let claimTicketCostL2 = 0; +let withdrawFeeCostL1 = 0; +let withdrawFeeCostL2 = 0; + + +// Listen to smart contract emitters. Resync with DB every 5 minutes +const timeoutEvents = 300000; +let eventsCache = []; +let eventsGet = 0; +// https://arbiscan.io/address/0x35Bcf3c30594191d53231E4FF333E8A770453e40#events +const BondingManagerTargetJson = fs.readFileSync('src/abi/BondingManagerTarget.json'); +const BondingManagerTargetAbi = JSON.parse(BondingManagerTargetJson); +const BondingManagerProxyAddr = "0x35Bcf3c30594191d53231E4FF333E8A770453e40"; +const contractInstance = new web3layer2WS.eth.Contract(BondingManagerTargetAbi.abi, BondingManagerProxyAddr); +var BondingManagerProxyListener = contractInstance.events.allEvents(async (error, event) => { + try { + if (error) { + throw error + } + console.log('New event emitted on', BondingManagerProxyAddr); + // Push obj of event to cache and create a new entry for it in the DB + const eventObj = { + address: event.address, + transactionHash: event.transactionHash, + transactionUrl: "https://arbiscan.io/tx/" + event.transactionHash, + name: event.event, + data: event.returnValues + } + const dbObj = new Event(eventObj); + await dbObj.save(); + eventsCache.push(eventObj); + } + catch (err) { + console.log("FATAL ERROR: ", err); + } +}); +console.log("listening for events on", BondingManagerProxyAddr) + +// Splits of the big CMC object into separate datas +const parseCmc = async function () { + try { + cmcCache = await cmcClient.getTickers({ limit: 200 }); + for (var idx = 0; idx < cmcCache.data.length; idx++) { + const coinData = cmcCache.data[idx]; + // Handle specific coins only for the grafana endpoint + if (coinData.symbol == "ETH") { + ethPrice = coinData.quote.USD.price; + } else if (coinData.symbol == "LPT") { + lptPrice = coinData.quote.USD.price; + } + // Sort by name->quotes for quotes endpoint + cmcQuotes[coinData.symbol] = coinData.quote.USD; + } + } + catch (err) { + res.status(400).send(err); + } +} + +// Queries Alchemy for block info and fees +const parseL1Blockchain = async function () { + const l1Wei = await web3layer1.eth.getGasPrice(); + l1block = await web3layer1.eth.getBlockNumber(); + l1Gwei = l1Wei / 1000000000; + redeemRewardCostL1 = (redeemRewardGwei * l1Gwei) / 1000000000; + claimTicketCostL1 = (claimTicketGwei * l1Gwei) / 1000000000; + withdrawFeeCostL1 = (withdrawFeeGwei * l1Gwei) / 1000000000; +} +const parseL2Blockchain = async function () { + const l2Wei = await web3layer2.eth.getGasPrice(); + l2block = await web3layer2.eth.getBlockNumber(); + l2Gwei = l2Wei / 1000000000; + redeemRewardCostL2 = (redeemRewardGwei * l2Gwei) / 1000000000; + claimTicketCostL2 = (claimTicketGwei * l2Gwei) / 1000000000; + withdrawFeeCostL2 = (withdrawFeeGwei * l2Gwei) / 1000000000; +} +const parseEthBlockchain = async function () { + await Promise.all([parseL1Blockchain(), parseL2Blockchain()]); +} + +// Export livepeer and eth coin prices and L1 Eth gas price +apiRouter.get("/grafana", async (req, res) => { + try { + const now = new Date().getTime(); + // Update blockchain data if the cached data has expired + if (now - arbGet > timeoutAlchemy) { + await parseEthBlockchain(); + arbGet = now; + } + // Update coin prices once their data has expired + if (now - cmcPriceGet > timeoutCMC) { + await parseCmc(); + cmcPriceGet = now; + } + res.send({ + timestamp: now, + cmcTime: cmcPriceGet, + blockchainTime: arbGet, + l1GasFeeInGwei: l1Gwei, + l2GasFeeInGwei: l2Gwei, + ethPriceInDollar: ethPrice, + lptPriceInDollar: lptPrice, + redeemRewardCostL1, + redeemRewardCostL2, + claimTicketCostL1, + claimTicketCostL2, + withdrawFeeCostL1, + withdrawFeeCostL2, + quotes: cmcQuotes + }); + } catch (err) { + res.status(400).send(err); + } +}); + +apiRouter.get("/cmc", async (req, res) => { + try { + const now = new Date().getTime(); + // Update cmc once their data has expired + if (now - cmcPriceGet > timeoutCMC) { + await parseCmc(); + cmcPriceGet = now; + } + res.send(cmcCache); + } catch (err) { + res.status(400).send(err); + } +}); + +apiRouter.get("/blockchains", async (req, res) => { + try { + const now = new Date().getTime(); + // Update blockchain data if the cached data has expired + if (now - arbGet > timeoutAlchemy) { + await parseEthBlockchain(); + arbGet = now; + } + res.send({ + timestamp: now, + l1block, + l2block, + blockchainTime: arbGet, + l1GasFeeInGwei: l1Gwei, + l2GasFeeInGwei: l2Gwei, + redeemRewardCostL1, + redeemRewardCostL2, + claimTicketCostL1, + claimTicketCostL2, + withdrawFeeCostL1, + withdrawFeeCostL2 + }); + } catch (err) { + res.status(400).send(err); + } +}); + + +apiRouter.get("/quotes", async (req, res) => { + try { + const now = new Date().getTime(); + // Update cmc once their data has expired + if (now - cmcPriceGet > timeoutCMC) { + cmcCache = await cmcClient.getTickers({ limit: 200 }); + await parseCmc(); + cmcPriceGet = now; + } + res.send(cmcQuotes); + } catch (err) { + res.status(400).send(err); + } +}); + +apiRouter.get("/getEvents", async (req, res) => { + try { + const now = new Date().getTime(); + // Update cmc once their data has expired + if (now - eventsGet > timeoutEvents) { + eventsCache = await Event.find({}, { + address: 1, + transactionHash: 1, + transactionUrl: 1, + name: 1, + data: 1, + _id: 0}); + eventsGet = now; + } + res.send(eventsCache); + } catch (err) { + res.status(400).send(err); + } +}); + +export default apiRouter; \ No newline at end of file diff --git a/backend/src/routes/session.js b/backend/src/routes/session.js new file mode 100644 index 0000000..41b6a27 --- /dev/null +++ b/backend/src/routes/session.js @@ -0,0 +1,51 @@ +import express from "express"; +import User from "../models/user"; +import { SESS_NAME } from "../config"; + +const sessionRouter = express.Router(); + +sessionRouter.post("", async (req, res) => { + try { + const username = req.headers['x-forwarded-for'] || req.socket.remoteAddress; + const user = await User.findOne({ ip: username }); + if (user) { + console.log("User logged in as " + user.ip); + req.session.user = {ip: user.ip}; + res.send({ip: user.ip}); + } else { + const newUser = new User({ ip: username}); + await newUser.save(); + console.log("User logged in as " + user.ip); + req.session.user = {ip: newUser.ip}; + res.send({ip: newUser.ip}); + } + } catch (err) { + res.status(401).send(err); + } +}); + +//on delete request +sessionRouter.delete("", ({ session }, res) => { + try { + const user = session.user; + if (user) { + console.log(user.username + " is logging out"); + session.destroy(err => { + if (err) throw (err); + res.clearCookie(SESS_NAME); + res.send(user); + }); + } else { + throw new Error('Sessie kon niet worden verwijderd'); + } + } catch (err) { + res.status(422).send(err); + } +}); + +//on get request +sessionRouter.get("", ({ session: { user } }, res) => { + res.send({ user }); +}); + +export default sessionRouter; diff --git a/backend/src/routes/user.js b/backend/src/routes/user.js new file mode 100644 index 0000000..4e4ed2f --- /dev/null +++ b/backend/src/routes/user.js @@ -0,0 +1,106 @@ +//The userRouter is used to handle user related functions +import express from 'express'; +import User from '../models/user'; +import timelapseObj from '../models/timelapse'; + +const userRouter = express.Router(); + +userRouter.post("/getVisitorStats", async (req, res) => { + try { + const totalUserCount = await User.countDocuments(); + const activeUserCount = await User.countDocuments({ $or: [ + {"upvotedTimelapses.0": { "$exists": true }}, + {"downvotedTimelapses.0": { "$exists": true }} + ]}); + res.send({totalVisitorCount: totalUserCount, + activeVisitorCount: activeUserCount}); + } catch (err) { + res.status(400).send(err); + } +}); + +userRouter.post("/getCurrentUserVotes", async (req, res) => { + console.log(req.session); + try { + const userObj = await User.findOne({ip: req.session.user.ip}, {upvotedTimelapses: 1, downvotedTimelapses: 1, _id: 0}); + res.send(userObj); + } catch (err) { + res.status(400).send(err); + } +}); + +userRouter.post("/getScoreByTimelapeFilename", async (req, res) => { + try { + const filename = req.body.fullFilename; + const scoreObj = await timelapseObj.findOne({ fullFilename: filename }, { upvotes: 1, downvotes: 1, _id: 1 }); + if (scoreObj) { + res.send(scoreObj); + } else { + res.send({upvotes: 0, downvotes: 0}); + } + } catch (err) { + res.status(400).send(err); + } +}); + +userRouter.post("/setVoteOnTimelapse", async (req, res) => { + try { + var voteValue = req.body.voteValue; + const fullFilename = req.body.fullFilename; + const username = req.session.user.ip; + console.log("voteValue="+voteValue); + console.log("fullFilename="+fullFilename); + console.log("username="+username); + const currentUserObj = await User.findOne({ip: username}); + console.log(currentUserObj); + if (!currentUserObj){ + throw new Error("User not logged in"); + } + var currentTimelapseObj = await timelapseObj.findOne({fullFilename: fullFilename}); + if(!currentTimelapseObj){ + currentTimelapseObj = new timelapseObj({ ownerId: currentUserObj._id, OwnerIp: currentUserObj.ip, fullFilename: fullFilename}); + await currentTimelapseObj.save(); + }else{ + console.log(currentTimelapseObj); + if(currentUserObj.upvotedTimelapses.length && currentUserObj.upvotedTimelapses.includes(currentTimelapseObj._id)){ + currentTimelapseObj.upvotes = currentTimelapseObj.upvotes - 1; + await currentTimelapseObj.save() + await User.updateOne({ip: username},{ + $pullAll: { + upvotedTimelapses: [currentTimelapseObj._id], + }, + }); + } else if(currentUserObj.downvotedTimelapses.length && currentUserObj.downvotedTimelapses.includes(currentTimelapseObj._id)){ + currentTimelapseObj.downvotes = currentTimelapseObj.downvotes - 1; + await currentTimelapseObj.save() + await User.updateOne({ip: username},{ + $pullAll: { + downvotedTimelapses: [currentTimelapseObj._id], + }, + }); + } + } + if (voteValue == 1){ + await User.updateOne( + { ip: username }, + { $push: { upvotedTimelapses: currentTimelapseObj._id } } + ); + currentTimelapseObj.upvotes = currentTimelapseObj.upvotes + 1; + }else if (voteValue == -1){ + await User.updateOne( + { ip: username }, + { $push: { downvotedTimelapses: currentTimelapseObj._id } } + ); + currentTimelapseObj.downvotes = currentTimelapseObj.downvotes + 1; + } + await currentTimelapseObj.save(); + console.log(currentTimelapseObj); + res.send(currentTimelapseObj); + } catch (err) { + res.status(400).send(err); + } +}); + + + +export default userRouter; diff --git a/backend/src/server.js b/backend/src/server.js new file mode 100644 index 0000000..af407e0 --- /dev/null +++ b/backend/src/server.js @@ -0,0 +1,89 @@ +//Server logic. Imports all necessary routes, models, etc +import express from 'express'; +import mongoose from 'mongoose'; +import session from "express-session"; +import connectStore from "connect-mongo"; +import { userRouter, sessionRouter, livepeerRouter } from './routes/index'; +import { + PORT, NODE_ENV, MONGO_URI, SESS_NAME, SESS_SECRET, SESS_LIFETIME , MONGO_URI_DEV, MONGO_URI_LOCAL +} from "./config"; + +const { NODE_ENV: mode } = process.env; + +(async () => { + try { + //first connect with DB + if (mode == "production"){ + await mongoose.connect(MONGO_URI, { useNewUrlParser: true, useFindAndModify: false}); + }else if (mode == "development"){ + await mongoose.connect(MONGO_URI_DEV, { useNewUrlParser: true, useFindAndModify: false}); + }else if (mode == "local"){ + await mongoose.connect(MONGO_URI_LOCAL, { useNewUrlParser: true, useFindAndModify: false}); + }else{ + await mongoose.connect(MONGO_URI, { useNewUrlParser: true, useFindAndModify: false}); + } + console.log('MongoDB connected on ' + mode); + //web application framework + const app = express(); + //disable powered by message, which contains information on + app.disable('x-powered-by'); + //parses and validates requests to make things harder for malicious actors + app.use(express.urlencoded({ extended: true })); + app.use(express.json()); + //import session module + const MongoStore = connectStore(session); + + //define session data + app.use(session({ + name: SESS_NAME, + //TODO: change secret in config file + secret: SESS_SECRET, + //define where to store them + store: new MongoStore({ + mongooseConnection: mongoose.connection, + collection: 'session', + ttl: parseInt(SESS_LIFETIME) / 1000, + }), + saveUninitialized: false, + proxy: NODE_ENV === "production", + resave: false, + //cookie to send to users + cookie: { + sameSite: true, + secure: NODE_ENV === 'production', + maxAge: parseInt(SESS_LIFETIME) + } + })); + //define default router + const apiRouter = express.Router(); + //which handles any request starting with /api + app.use('/api', apiRouter); + //but changes to a different router for different paths + apiRouter.use('/users', userRouter); + apiRouter.use('/session', sessionRouter); + apiRouter.use('/livepeer', livepeerRouter); + + // error handler + app.use(function(err, req, res, next) { + + res.locals.message = err.message; + // set locals, only providing error in development + //res.locals.error = req.app.get('env') === 'development' ? err : {}; + + // add this line to include winston logging + console.log(`${err.status || 500} - ${err.message} - ${req.originalUrl} - ${req.method} - ${req.ip}`); + + // render the error page + res.status(err.status || 500); + res.render('error'); + }); + + //actually start server + app.listen(PORT, "0.0.0.0", function () { + console.log(`Listening on port ${PORT}`); + }); + //and log any errors to the console + } catch (err) { + console.log(err); + } +})(); \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..aea0b3f --- /dev/null +++ b/package.json @@ -0,0 +1,46 @@ +{ + "name": "LivepeerEvents", + "version": "0.1.0", + "private": true, + "dependencies": { + "@testing-library/jest-dom": "^4.2.4", + "@testing-library/react": "^9.3.2", + "@testing-library/user-event": "^7.1.2", + "ethers": "^5.4.4", + "http": "^0.0.1-security", + "https": "^1.0.0", + "md5": "^2.3.0", + "react": "^16.12.0", + "react-dom": "^16.12.0", + "react-indiana-drag-scroll": "^2.1.0", + "react-markdown": "^7.1.1", + "react-redux": "^7.2.6", + "react-router-dom": "^6.0.2", + "react-scripts": "3.2.0", + "redux": "^4.1.2", + "redux-thunk": "^2.4.1", + "styled-components": "^5.3.3" + }, + "proxy": "http://localhost:42609", + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": "react-app" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/public/50x.html b/public/50x.html new file mode 100755 index 0000000..9071e0a --- /dev/null +++ b/public/50x.html @@ -0,0 +1,21 @@ + + + +Error + + + +

An error occurred.

+

Sorry, the page you are looking for is currently unavailable.
+Please try again later.

+

If you are the system administrator of this resource then you should check +the error log for details.

+

Faithfully yours, nginx.

+ + diff --git a/public/background.jpg b/public/background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e6a6405b916f4a37f28239856c95cdae0eeac2f GIT binary patch literal 3803462 zcmeFZd010fwl{nj1qE9M5fHnPNrr%#AyKMD0SP1&VF)A)ZO8y&CIbj%f0t538Lu)E zhC(1ghEOt3Qm-Y7G9+MtARt&Oqe=~;)otCrx85Dp>Z-og_jzwW_x|*ta`YLLW3ZRsy zsfxzVJps@M-_t38wtZhm70?J3RY(`y|37dd0c{BGdEhKRuL|u2_gZjrE~)SI(+21j zaKb?6%KksxPZLOf=13<5+zAB-y}*%3JRFHf;LPD@JPLtFVIY5cY7*xxE6$wAXF5UZ z5Oigi@(O{f2$kBua;#eW?oGD(5Ty1q8dQa}q5lAFK8y`gc}ItWCo1o0lo_l?AfDZqHpjU!$YRO`|Tl9Gc$85rz7STFiSHtTW32M9Dzooe|H4u z>ViD(ghC^gov3JQYwPUMG1k>JMjkdhjQnpOKi-1$v;aq;YAP0xs-B9Pp30ARpx*&L zHI#Cq0v^3PR8-Z}H8gi=Y46?xDs=BtBBiFPuBM@(4rW5-kKj3^uBV}Y7~!UAK&J1q zNH#=%di9!?<;nIh_xnHi)(RELJ+Hmn=zy__skO}!TRVF+2J7sC!=G~Z@I38B@D2zJ zq6CLfX$&Td9Tm-q;qe72sb|yDFJxZKx^y`^r?9BFq_nKOLReSdAQCrTZ))!7?CS36 z?du=7J$&cx$i4fcWAf>lS;gGL`GqG>pRKH}t#52T|L)cH>o?#3>CbO}P>xFlOzMZ@ zSI4CX#-*yRuBN_AIW85|RB)>4scRfYXzII>chQp#ERdgS8J@g)t^G@FOO*e&`y;sz zb{kotpICpV9NNyv{@(_6{vR6IPXqhwxE3HCH5D*Gqq*?V}0zrP-MW;>W( zl&IRBW8mn)z90!J7{P7@`G=)8DK>0hgx)JIOqpifi)nHc9`&}Kxt+&u`lum9UR-Nh zc=g6?xk+e_)YzpIbN+n&Io77`d({X13oaOguw$v$qYdAdha_9QL7$n@ zaPe2^6O9_aB!a|4n*V`~KGZ4Tzr8-iq^2to(jM>+AaR zQc2CMSx@C$Bc|T;0_7v=)vL5uVZk^YJ-SjonYdpb_VCiKocqE%^=1^Lcxu|dsj1BH zap#Rjt%$-t{U&mNwx<2(rMJt3Eg8K!#zFWS!>-R=yY*)n_`vr2f!}@n%J$W*Yc?4} z@n_vkB$ct}zl!YtGxmbKr?vb%y!!#EgW6!8c6#YLQ_f77mBg$^-&d7%em4{BFBZ<^ zRt<7AaP%OXUcHsbfn$v>t`3?Tg(Q}XsGU&Z|5Z?MOfPcQ*%&i6X6Z;6xY|@wJreC> zUr+)~*J~m7v!`tz zZx#M9eeq>Ycf_NxMi1*3z3C#@iXwW5p(xurAs09q9l82tbDM`zgk* zC6&gjF6i&eqObczR#ZJmGLwaDpDVXbI zx^YvP#I^2`Jq!tPZcS5n*FV-~-e`|6M zWC|0a`}RUjYZ8wO{yzFOC6I<`vqJC8;-&q2LV9ER6D@jBG{4(co0Qsy1GsP6eKviK zkg5A;+iF7oxNy)n`7fA=TVeN{U?Bq0zuD533rFX=14>o9s*h<*bQn-B`8eA zZ))tNU5RC&pwblf_H|nAY_k776UJTiqUwwW;YBFLi(nix(bH*lK9;@ksMZ+sfP|zD z#$?)#YD$oYhFWxdzx~%CztI-&|8qCoyUxcS#tA?CWvfH28^$u`=I(V=Cy^0 z8~YhsE@qVA%7QnBbDtde9P_#B#mIk`e(N^6)?xES6eFhvCbeV=&$P10?F}EVw~Gug z?seiY|6mpOJWg8U^?(3%gT4(1~Pk=B;aR*v%)W zY1dyJI6f11H(#}=pn@1n0Xr#mS>v6Y0#S?3s3wW&8{f&IUlVuwg;;b zeM-|XFeT+~r4?l$^gDTXruzKpv8VsqIlGp3G-5WW(eF-Bcl@2mYolvz!@o`2{~6^> zpKYvhM}_$6CxI_w`}oZdA`Y9)_I-0T_Ux-d52teDsQum~XO4tDQ-3d}#qnvcw^gla z#oCOu-mUO&H9}Scm-gKhFR7!@PJ*k&H-rDj!koi&wFt(L;H0EetZ0r`I+qoY?isVJvJZq!i(4u?AmM;=8Y9YGC8URna5e%3L8 zXZfKAcNUMqg=b;*&_EpE~|k4C3RJ-0sxo@jX&N!?4Amnh&eSRN^?1is~8oBOl=I*MO?*)N-e>OVDRGJbk-l7JhxGkPZDC@YQ? z58lB8(}nnnPo3@PYZHpH09o zs)GlhBI>UdqZ9dwyy(QFU++EX!{cA{4*2@@>K`Og$p)Azyn7-;pd2v4-PHn=I59a) zJQIyVvsoCVqcau}>4=77k&cm(Sd=4-?cTA%VxICoota+H*jA3>|@C z;7~Y6IvvOmnt?_*Mxu~tM+DskLx&>}7&sjMq5a2P4$uR7+|T(C2$Y?;BjGMMBpQc0 z>FItFfxscqZY~%c+#LnlyPR_Q(1AZIfyq&dadf`2uB!!+lOQu4fZ<}&`Sic(2p5Qe$I&5antC zSK6$1Qtrj!@e{de@2y|}EBQSY$1&frL3lbtDMGFmJbDU?Y4N_05lv5sVgcI>bn#s^ z&aX&20vpLd(HUq*3wENw7|AsFx$6$Mpz@y>+AYaP0N;%~p`u{aNo#_a+i%TTN5yN(20VZ*gjxKB$ zxFa$W6A5QC(2+QopYZ(8{GpUGi2UE=56Qrwv1}F{FoXj9Vc9sxNHzjkHzt;jcBbPP zNF30hU&YTQ5P`#^QU5r8ANu_@+~_XOa5@@Jcf?>_TpZC%AdxPN$Vf*99pmC0iDj}e z3}Cf>m9PJ#a{rU^=7PWhd1GK4opH`sM>Gb5aipVIk&ak8OUV;hB5*(P^*8!)8Z5Ir z!6kFs9kUGV+AsM>A{-G&N92yapfPxivjdP$V0->2`3G9;!axE6WV6^{HKZfKy5^!( zccr$V*bElZ`6qe&2l+?t=#|Tk$@?GYAMS!cB3$5DMaHE`e}hG*BRH`MwW%ACw=jLxpfAM~p`QJSKCF_6l@NY))w@*{Rh!eSgXGni{6gyD= zY=`*)eXwm+l0WT&KQjO4@lOQ)iNHS*_$LDYMBtwY{QnPuzsAvl!{=&|3ZmpcK2^N| zVq$;r^Z(eBK=c5a0pP2CZ5$(>rw%d`;uH8>Wqb^Lq&DBR2B|^@AXPvY+DB*blHC0K zh#x+c|L6Pnik-v*XxdTP*MENgUzX@HLA)G%VmAl1PB4FMZ3yB_ zOhC5+8pZ_-0{Wq{Jn|j=Qb|Yc(8{b0$dDW8e+rCEnXX|T^)ov1XEY<48xQKBK^-e* zd;;iSHRK)5RMO{^bbOou@V0X(Qw4Nb2|)qiZUs&==rlxtNRS_74n;x&hy%qze8>^p z6F>|x^I^g&#wmdcpxl^Q~a}t6y zmVf+l+Zuv)6+zIyU-|LJf4lbMkN;i=vN|3?(5-~Owoj~uAeT3w{K{X;tUiOF-(*5i z&z--PMV3KO?84={xUHCV;52LH^9EMhMcSLXg1}1nmxehZ}gNd=AymK~NyT ziYSGk3Lym9M1j7;{?53SnIk{p_FvX{kKd15P_y5MIIua&2@biOB#@LT8Q>@|Q=vg> z2dz(=sQ^YHbu(2yr2C6p8Z%XANK2V<14kloW~wHT#*UY-q;!7nyDJNHf8nq1l>EZ^ zH&fMsH2k=n1il%Nv7Of)hxWkHC&4u5 zPm-DnNci}W^qoTvU3%}CtPt54lZiRp7gQbt)z^`{$g8+X zsf132$c_Js3ZOpv7hq7|AG)m841nAev^TS~@4Qf)QTM5*A`yKbeJV8hlQn02(==QB z3^N&5*DM@t?ia_{V`zh+Tu~5NEF^n}&zcSfp(rtdmF)SJ(tM+rIrEwqm@_KTYK|sx z4^GUZz4W86M0e4%JdN#)KXr04v7 zTe6HjNc0MNW;ul6tIG>Z^Pzg8l^OxJsU`dBVpYg^jafku($nk}!^{`eU?%R1IzBPR zYmza1&u)%IRUWH;MZ6ayvpkn?s-~T|U+2mPXq5M#LuDyemegfvn9{x7;-6pXiN+fj zls_a-QTl^qk|<8A;=n;xkk2$t-j+bJr?e^Nn}h(TV*jnd1YuXPOcb^y42mBZq&ZHL zRQ5r8_)xSaSi+2T;HJ88<1_GK%iUKhOojB)``OvOIwi)}cYD@4`Q+wY%TV*v-B)%p zUK)Fli>@bxI>Pg};)PUEVF+IBv)ZGTKIl$2QE9@=$6+*1)Co%2l}>N_mNo*dGz7uX zET`M(Gg}{(M$%y;szi&98=es7e1^QEmLnGGpl=Zx^coB*)tzx4JHz_-ojmRAGO?b= z6Rym`mQlwiZrgNtbs(nmCUL@Q7crx4!nfZPt*M9YLV`u;r{m)9ey>~y-yO~uGl22+ zfmA1K)hLS)RU~efDpK*)@`(PpCA%sGdZu|}c5$GRmke<6DT$A#iVTAkl?f7S6mdy5 zPub{=-=84loT!a4%<=O(2qn;JBV#UBP|p|-K!N5=j=3=eH>Q6IcLIprQm-(vIbkDK zaZ*!VF;wZ%V_zVl<-rvB70+&=qI7S@h8w$-bvkKt0ybT%VMrY$yC!o))w&Y-w?-WH z^Te=+9b>k0r_>=GtKq|#!ZEKrY1KS@SOQzi?RGgJ^hjVx+ZDEDQ{d>MBv!~)e*B=TnX!Fch$?VNhvoe2&hw{2>a_y%d zv5rdU_MjoM*ia?@c?RAn8iSo*Ot632ITyE>gIsGJZ0l*`*zub~rsByS`{P4>dX&#|)$swWwuADoEe)Iuua3;+iw>r*uy=u0;>jWcj9Pm4f$mcEXrDpBA2 zDYGvwb7mer3@X(VH8Z+|#X3hm8TSy9Js`5Eq9MgntX7MMf&%%@q}CTXB)m~PdNWH% zW`B)mh&U|6LpuBB-L$l`vph+}K2j!ICO{xEfH46s!ZZ;+t*fb~eZAGv$w8N$_>ph& zE>ua;=or!$ffz|FHS^cL%@*%S&pnscdWus!#HGIfCRO?0qXl=CMb6E`grV|vE04w&CoHQ4?O zu)I9@uu7IO{rm}c=t{Icr25EcwLe;(kG?^+HYB@mxq5A8Z0yb0A9P5!xoIok8*h}5 zvw5+c>>(K0Od)#+4KwCb9W#)nECT}r>rr+X@kU>Tll$6AADG|+G^PQ6;enGIA{iN` zeqk@utRUVuj@Mphv6u3(v&(wLM3v0ob67v|70OOpVbTBWbGykZ>x)%yn#ynHM62jB zPAFm7muarNK|j+k%d`+sU|XvqD%`Cp>49c8diJ1B`wEiEBukWtv?HG1q;>VRq+ax()Y z5bJ-1@G3FUx<72G1HVPc9MLzoAR=!}WC49Mre{Gq5EOk9iPL!DQ=KwQg-L&|exCVy*fZgs_VIu+%d6x5X|l9AoQ2oKGd%b1%A_SSZ~idu zS)*M|+)BGsl*9^WIHgKaW)TCq*>_)g`0m*P6s) z;UHVsV5*^uHZ?cbL8}oV=*<3-ERA8E^UOZNm9Q|Bvn4om^59p9^pX-Atzo36rRep zSZ6vN3>@}Vn1q~x4nhuYwOY4hy^2|R^U^$OvD^M#E-N!U1$_i()_p`Dk!H4SiOSm? zcP^epa;qL*?yO1Y%F-sJ%+7)tpVGs1pXTZ+w;N!kFER($pTX3hs4Sq?s!qUf0GM{; z!)7GjVe;O4akI}Aq9Z7D;7Ox4+fGwg8X|) zov|@RByS0@zWL~fQ=F`FU1%y=^-c@q)8#&RN?iv6Fc{kt;kOBSh@`v2)}ve`(u9t% z(We6i#AKP6Xia48c^}7;Tual=~Vq6h9;RYnF)~QJ=u%BzC&vfq`Pu8c)YS+yc)~lnOVSQE2 zHc{12J)@4x0?zT;c*ie~qarQt%l^E^D~y|X&Qp|zwO?RCKK>#A2#_cfb8tQPA7{W- zd4w!0uVDEyt%h~1ZWF_(NGg&-E%h|fC)fZTG@w$Ak*8pAV-+x7Q3hXq%Qf`kO0#X< zr`^dcqo}kpLq4o79}jV&d~>m@H(%@8v^Yv$ei1*B%||ABNfK zZxm~o>t4fJIuSC93@|P?zhf3v^9p?1{CjmrNMA^&_xvN(Ez4S54S)gd?~w za8>i=B%+*;aPrKD;HB-gN^BraV#d#1ru-)-0E|li+uAf{npR8W&peDVU1GnP^eqx3 ze^Tw6OWCSy3JUTFr7R8Eq=&uk8>G#Kdd$-jihE7T9>tW(Q1Nq4Fgk|pVao9oMq{PT zl1^_)XLKda53TX=LG38p3r3<^7j3ft(s#!{%Ve=INmhnq3?%|G%pTJYP zRKNLb0>B6km4joqz*Us78(o->;Yi4$`II=!fuJ@)E5EW+P|!Uav(((bh+N6cuBHo)0uYnc?zD^(-!O9?6laU_&WWOphL10 zdyQ5p3L5t?q6X0@l}(fwf2xNm*zWja97u|o1pwaE!1ei;nJeW zvhT(Lh!d;1W4O^t=YrI6RE|3$%GQ_iYP`7UAf^;Gi^)4xp=%0hQ=@B@ul)j!)!j5u7D!H?{hX5i;sEPKP@?-% ziw`Xawh^9C(lbwq#R3R9BGdTFrqIeJ4-bVfrewdPPxk<2O;KE2$-cZWO=^~4uTOEh z4AG`>x>)ormJa*`SRC{W^qF)U9|wml_fqvFC%PoqfR4gy)ytjHgNhf`aQE6;4vv z5PDN&4ETyh*SlH8W3on8+e>bMH41)9CoeC*6$@UP73kyW{bbT^VuX&n_fhD2bU>mT--@sZ$ToiTt6$_<~!?2W6d#0f2KlEUv~#X2OOd*c|7Pe^Gi+#2ksm6FrveA17E7L+-+1c&SQ zEVa>c@rQO#r$|U06&=!M+w0TbGfSkIMf+x3c?&6k)@>R@5zkVJ%h(U>yXuM}r3+F$0sqoiCnJ-tu1_QqnUSM~+oh-|SV!EQJC{eJun0C4UZibPXPw+c z&CW6@b-zLY>oUa5WU)&!AZXsJxpoiQh#ENG9Y&+lN_$I-Ia4ta)v%>CX)LeBx#MYJ z8@e;Lt=e`sOrCvR&cE4=yfMW(1D~ev_8c)j^J!)|2$awfSFFk_SWOlYX+_0hgz=jG z?VAdR?6KI-TzP9>ajzGB=4`xf#ZKE^EKR<@elXX>qe>PKwrvsCuk$*pcI5EHMYNx$ z{<19q4^l^-_yFgJb=g+#jTSf6;;AWd64H!>E9!W;)ySG%@_y9Zv9&3P3TL!+vR;Ji z_d2JF;IQ`lW-0Dk&sJN4ZG5V5`Wmf- zg`v(KoR2zL^?EwCr`ncWDHx8ikB;Y@nTFsHaF{q3S#@Z4#fU+jUY4=;Wvlyn4O#tb z+hZn~msiKnZAbRanJtGr;wItD3e%R=i6ciob3MDp^~xgWYESx7+jCLmHU?^FlAP^y z_7*xCvTll2LJFPy=wCn(4IJ$^!9@k^5F3g)@%iC+>X`&eCvDw-iQn1H5ARhnd72bk z_quTMbf>*C`NIiyI&fN(aqG=Lq(b0Ce>?jEpmi%WVQ1d%C0vG^EH5I8`1 zr@Ocn3k2BF&MuWw7QZO4oiWWc)zv~n-k&-$y;qqmqC4@b)fM0vuJ&8(C0n`Q!$o0} zo5o<3M&1OZEG}{+uAGoL=W=DHd!n3P4uU^~%t9~t{o8mA9tDCP)B-QG-rKgWD}FHc zkij*9hlemi{58KrI@1~DTYhZ3w=TeN?_fBU%{i93lCP;y6vxvh$~pY23D2Jv5+?2! zsbma8SiKTVS^|wAyL!pxa$ZAG6fn*0^CQftkJ9D} zqU>-b(yYkM{r?i<#q&8TYq~?c}F;(RsNRWLf3htdq#vq zu)Y}d(DtIR6i98PNK#ow;rEK>0yo?Kh~A7}l&|%Ox;vZXE%p2sA$z>Jt%7`Vta+w+ zVbRXMYj$=q1-p8b@}Lqjk2JGrPxrGwN2*CL3VSA8(+<> zR+UI-U^1C~eI1c2?pLh{qe+FNafW4ux`BaSv5(2j(=V|snU#qNX0kf(A-s?vw_qGB zInQNXwQ*my*+-6&e)!gx#x(IxdbhY}l!)=^dQH|N^YK6(9_FUEx^kvq#vykL|^Ts2=I?uU+ z=ZcMs^eIJxC5-O)G(!pT+y6*X-t=xNEe7X|DcRaI^bBpOOxIKLO~HKQsRxZG=Ter& zVVf=TZ(0r|;5oFpz#-}EW~E?e6Z}O=Fj`vD=(TCc>EWcuQ^fNWvbc*z8>^2MICER; z14s_u%`LVM>b>)Ax;k>@irk8Y#i5?U!Xi>sKr9E?2@sJ0J2}mA7FfXa33i3d%cIGx zrm#|*G=jSO6-(~@LM;m@>h=LKGuWSykumZebvzvY&BXB4SoUP#K%BocPn=JlV(wWZx$$x8DX zFYRA@HJzC}@~q^EnQtmWwq1bpjMDxB$1T(}>!e%MuIJwTf!E<=#7;*Ik)60}yW^C> zE+x#r`@Kwg`#IV@Q${^ypM{F##(%al z-n7&|7G2_#GTTM+|tchA815Ozha2am-bj;xQ& zfytY@>Ux$Og;Ce0K=^)W{Lv=QCrA>J=+*X@9}d|D38tF{d@m2k$8BE>E!kjSZ^*7; zFs7po<(%v1^EA<6VHVaRW;t(ys1?>j%-)xmR}h7&342xy!mMeh%ov|JZcA6g_TnCY zH4wf|a;_C`?7G^%GM`9|HBQxaNe&&xV_ zQGox;!IY&Qscn6L04tqYSPTr$4}^@)cwDgd$;N?|Pyb6BV_zNuVbv2Wbg$xOo1eG; z_EG;8`nVI7P!zUMWkKwq7FiZ|P6kxk>|=RWeLM2i-SP>sjWG{c8)v&#IrV+ zU?yw&gVnN9%@U2Da{CK{tCBCv&iYny*N>o(RX77b_o$DGDknomd@437)yrVagSM)) z(hPw3J0qj}|dKP}66p#JovIJq~+8>27QE zaiF|tni^{HnQ6g?DXO`BwdC~5{((vFjtt>EWriFySkgqiaB{wR3FU|#2=;zJZ46oO z9uZPmvx_}Tv_<@g^=2?Fyob!%&z)KFo=zxyIcO@YyA9KJ3m~*2C;FsJ@hhU&NTZSU zd7^oCwv>?TR8?fXnwLy9f7D`!+eeq-o@gG$KGPb9jhGJ?cjg{{1LlDzhmTzI(WE2b z!&kG+q(?L#h2oFQz}_rNH>c|L}F$WD><2Yn|Zk;+k%jd ziypm%Dh=bMVaBy&X-CXr%UpSFdbbl?mi6weOz>`&)kMK$sB@iZ#BG$_-L)b=UiP{; zbv*3bSzz!z^w*uvJg8M~?E%<-^e6TkGBWGkCkl&0RD;OVV)S^2@fz{NdH;axf3~HF-4T*gETLnyvW-PZ_G&-8(B2+-H>>>&U9W;2mbc52VQJ5QSY>akPY~^{$(xD@KD65wOohBl zj7OzBBC`%myJGM$RLSyD-+oDKiz}uYzd0qr3HZ0iY+p)WG=|5_H@fzSV?Dcl#KqCr zvC@2HI2Xi3KD8M|5+ldPE(aFQ96i2Xb>+l3a)nzEa+9`NIq9-em7KqETDk;77VM-LH8DL__ zCyeOg(uYSpy9TR)W_UYOzY$D_yl{+J?xay;r)gVhf9i`3mhkbZ+9d)UCxZVms&tES#?pW5- z!R6sb^xbUe-G>g2B0Th{kglyfMcU&8*5#mdN=Z|yVMHTQ5?$XI#-ElHE7o4m3@w)^ zo_^nXO)%amHsXM#u($0`4`gjd%RHJQHhhmQa9d{omNzC*&vSBgcUzHp`06)?Z12lL71#sFg2zj8s&bDH}Fnnyur-P zre3UIaPx~lb_~Vz3grc*uN8y1@B5Zw-n2E6?Ar#Ey5f+wG3hRexSCu$=+G83-VB>E zB}MG-*&HwsO>h-=zwa~YNxHGSZIJ4b^JIQ{kF61T1}usLvd*~0V-m+E2U>^hV#xB* zPZs85_n59IZ1I(ZfP+;rz&F-bbW)?@-c)9X;g(|+yu9`P>lKU%u~~*JzJBp8=_n zJiq2g7*Sb@P5z_JWI?)M>}js|R!t+xr?M$sAPpDz4&I$RIk6!h!yno!oFm0NlH@3w zJ-aFMGqvF*{R5*0KG>d(1D1LwIum7<)+L2rR-+~pMFFK42VL*)WNBY4X5!x8oD@{qSmzT(d;*5oR_5%<3?eAB!f>*KUMFh?yISf8d1 zMYITlf)oQK!9Cx&CZrz-Hj0KVKODpkn1<|5xN)7bHDqx2lS*06*Q!-7r&J!-<-)4_ zUq={`&uj=3ZDRvsj$Og!<-4P_+3G#cXC-5EZfD~vzX){H>35PfA86M1U_YSk;up8VvA^(tNjvyf17v+8no0hK<%Xhb1% z5tonPK_Kd-nihP`EfY`QcU$MS1reupf2;^Tef3Py3HUS#-CWb0lM8zuM9G&4?|Bd5 z>8t~+H}`zf=hK!r({-{Q{&M=EJ-9b~5CYjdF#96htf~4arMnr{d2LX(_VwG=#n@2d zONBJhiQ5s>A9BIu4qN6EWmjr_o>@qgu@5)J(4JL{<5rjnW(9ipelbbGTC2|E)z2EVD|;!^MR#cL^V6ay1)<~|b6c@L%^5Cwa0@Qlas~8 zlzMTZe=holIJZ5dBJS&mwy$nW8zWm4j_8BbLqEVeE^kyj*aOF>?zN(gw0df%c23x|brqk;P>anFHaYua`0(ZUUlkBv8 zZkERDXsa?`F5Bhp67C9JefAa40(bBDjf)liHWtW8ecp9xUWA{zv74;paBFP&+U>)a zkX|+@Skod7e*QiL(M2Hq{!(JQ!G}qD6NHoQL%tP!+m@p}_&JaM!Ns;l&vXzB^3B@B zgD8Nna4tON(Pl}tqa-4iRSo-M-hH$wbZL9mG`cUgCM5BIm0L15hCg0>!0L9|Ls|b7 zH=K;1KkPqeclMdt{rusI^#UAM_^cXyzUmx4Q0Dl`1%%rozgv4|w(WA~=yin z^az({6Tu~5b{&uKXHwF$=UgT!f)Li77gq!7{j{lZI}U;6&K_G;s$m*!CkYRSwK#-O zQ@(Cj#B^=-$IYi>H~2ko+Ca4G-#F>riKiq9OM5S!5+!U8p&o9EtGR}IoYMqSu*^ED zqodb5seG)%?xXGAJs9G=STRT2q;L)yh@NzNRAV<&J=SYph(x%c5>do?*+nD%!L`1H zp*NWR2%qY{X+geTKu~ptf3Zq-=Ji51yzjLUZq?Rg!$Y7y=XZUSbYs)TS;i{(DAku~ z%sb+HGfb9zPiL32Z?c*YJ$l(IPxf~E<}(%ZHJ+SX7`oO*pP=hmRZWcBr^sMdayRf{ zR>N>N_`c-1DIX{fPYfpEQR$Ol;~HMJc&K?n0>X0CjY;3!W5FS--Lt>Vd67tpt;fqA zEqC{Pk1t^zI(GZ(pi=&N$gIIIR6ULoX2sGa zOcN}EX~M_;(YLoO)B)JKO9APy=hT@^=J)q#8Tv4UV+;K5EV~uw`+xm-`FN-O3z09gR9=;WK%#8`=P}~JaQz}cy84Ty+ z4}?DWq?$U2KV(r*S&fg9l%!6lcJLYEvc`ZL)9B}=LobJ3Z%7fRNhHM&)xMRoZ!igq z)LCNp*mnzst&5YS*;q#0!u?SmG8wtXajtk&#C$>J<;emj&vi0a+>0uZx3?=-tCEX~ z2QzC^4MJjIkMy#=tvtS3Pm8yaPyyaB0WEEZF+&>MA1GT0O( zANZV0KkY6esbs0? z93f7P=4Ic#%bRJv;xE83(4myxmO}yJC5QH@)dw@L!>0d;!G{NwU}p0-zj!fKH^^(L9>T_a2dkS) z=d~3D>p~jpCN`12%!Va)N~t}19D#c}>FR#dtB_|A5)r>W;zE#xjag2bC9TYvv{5JR zYK-STqOBykNVo4klipdsgu}rIE|Vs0q*s?^X;=3bM}@612o{!31_XFas5B@z==mJUci|aD z(Jf!TL^^bcyFs2KJsMh5%*$WjynaJPbZ{EeG$0JLrHhQBck3E;JZgyn8*28a9vl$= z=)5-B5}9xNJeB^%TzqB^CTmX6A}S>hNK>T6f$<_I;>v}1aSKv3MbAB-wR_l(jy&m` zpe0K$Dcl={sCt6)9#3*Bzh{zmg+8%aT4xcqmNTABD2>EeI^$lTn8Ou^ z_9ifaYlma&`6jUS37LTb4r?p)OK^8qTy^`W=5>Om-gtSw)93MHU7bxcZTZW`sPcho zi-Mse5#>Ffr*HA*g>8c=$Mm}AQqmI}-3ME^T?0cgTQB+TbB8b&B#dCA%GQX4Z>ssr zQ-+bx(xr#N2k}C7oDXa*PRi>L=<*7aqiXu98miW;OZ%NCjh`H`OLa=#S(ct)CQVi* z_olB;zE`FGK6lm#uE;9tcxRgPSVY={-ofIv?LzyQy=k6t1nP^1Fwb;R>jAipaGa`F z&G^IbkKY1wbTZ@Nz%)to{Nk+qb-yz;B2_}|bq;sNAEHUTXBM6dVnsuOaf$4k)WlOw zLkGhd*W?3n%PEV#mwl$iG-@rx2}cc~#Fb7qK?j`XJxmS7mqW3i$FeJC>sp5fRL3pr z(VHc!LO%Y;C(hvsOWF_4$4eba_H_!`~j5UOgNI;?9XZHZa3tt%)QAPZ(T{^0q|q1G4Sk+RB3l1x~A zaC30sSsj16r#iQ3vFWj|aPt8MkBg8jro28z9cq{7FFW21>z-^_e)NZM!vSged^JfC z?9wC_WM`gdRn1paMZ}t}=Z_kH?D`#!;Bp6}%S$Xp+{Ss(?>sSsuRPXHdv?6y*<@J% zi;7#oyE{+@J}a56JcALyy42r$_luA_VDU^&yF*orVB~S5l9qGbUr3c09MA-f-Whg2;4pvA&63dCq za)$pS7;*bfkLVUGOAR4 zpOz(2GS+XtwwGG40KfbE)?lUQ_xho9%JY{KfHvSh9oZ zu!GIFHdf`#_Di^mk!Su6T5DB_pNUe(K;hzhDHYD;!T1zmJE*1OsI z_MB3YR6NwY(GZ_+L@6Dn)^*h>dJBZ5g78NJ&7Gp5gf^e$W9>tD^2|n5aCFBwK7c(( z2~gh@d2*<6WRN(iSqyd@>{Ow>eOKqH*wDZ~Shk3yosHfSSTo3=Z9_K3!(K=PlAeO> z)@g@50T|#Ld4k+zA;>O_ue7BOWT+IbXqRcLmlstO5*)G%BcFxLVDu(&=dB90_l;Xt zSlv6`P+qcL&4#fKGSmyTtu7ZF8+9+-o9@BZcT;^hO1_=Um5aG%hq z`f9%7b4JrAlfL~5;QzFShl*Zct|$7>YyQCh%C?rt?1xDi{tY9{;m?lAqEK>^d}>GX zk($4}+Ad5kNF`%Nr%Q3)7Lfb71tv-3mFJKk$D-hP_oQ>h?f&(1$!Q?VY<1Gpo}n7UWB5=ig@cPuz9e@6ryt%V>+$gOR=tE-ut;f3=g(Y3QeM;e=gtjMQglDT>-l zQrOFiLcjPUcI$$;ZLMpA`pIJgr)FS%j`AjYBVvZ%47L`|r#&~P#KZ@Y!rl4#`L-ZU zshBfZ*>sA!(2=9t8vY0C`0yhX4IyVP1|&L-9f^~`I^MLEZjo6i;=Y)#yIVotusj1j z6|GsU3l-^T8Z#?w2w4<;tI<|!46Tq+Rb)k&xO%YkG*a6Jw|3`7M}-w|9mLeUCleJs z@cr9{oM}wR+Q+lHvawcGZwJ?RGofE(Og#0{Nt}#FEFy``6(-2W?rMZ;BfR z*ICW0XicGN8$`FNtF86}lcxNnE6&)PFMmLx+~`=cAL&oI7wn5^jM;Sh`s+@?OiMb3 zvUsR_GWCm+nYsb{0S`m!RQuFMUB%2yz4v~hgU?t;{RuSiFeDD-n_H!1H=oYni{Dc^ zIRx>AwlZ<`Zd;Bp&_2g$LD9Bg+n^9sM+J&gMudtsVVscFasu+R0)I)NUS3YWQg*-y z1mxGP8rbev+^)9wyG;~ES|Bf$T)co2+e{D%7RZ>i=T;R-!#Xx%^FjiAq@Cvs&ojS8 zuqq^6$AQ7+rlShxEdUH zwT=7ArE0D3S=hJF%8vKnGpMMTh&nEQi{};9@OGh+CZ03bcpb6URk6iV#*Ipgn8;V| zpV=u>zQ`vG{UFn!gY8iy7SD5l(l6hVK6*3zvLux@vKbWRv6&ha{8?!3^49}Gek1G2 zlo8*)g)}d|mX8)q`(Jd3$;lrFY0tXAqD4p<0^54;=sqiO^1-uO_$^^@@z_gnN#6@fotDk2(XmeVhXA!85d#2zqWW?rta@nu#RM;N=Q zpLPKsBhy-a)JND1mn%f3B2pITe%`C8H80yLLxHg??BKZ}pxfH!)hO?^unB`xa`AevZ{tB*>^4jy?G*w2nf6J^qyJlXUE1OqSPwS z^)H`I29eN}m7AAk)Jc=+qU0mTK|c2XW+%Rw%H!wtS6w%R|^H`aaxt!bu#4#6g0ZI`K)Sjly1qBxrbM2HVnwc|cb(%TP zdESd={?Grs?^VHlqo3}Z>%Ok*w|&3gi!ANn8ofv2IAgRMhsH$`L&rU2;?*n{tw#;$ z40?q5b!m8OmLa#FwCXF7X{LIqQ;{=K?RJf2Lc_p(pJ3a;xGg{)kPr5O=zv1N(uqvb|Ld5PZoK0f6A@IWPzSPmPg zc;c_PRlBGd@dIQSEbLaz;A&zVI}w-Y?{eKA!SB3(JKi54Dx}IJmv0%jBF-tq46Y89tw>_Oxl_@4RT*ia^gYWJC0G&=_ub^xynGWU?GyeaMuZ zP7rcmSj^E7O+uwGW7)0saub@Q$x&8aHn602AVZx36|Gnt{L-@`50hS`*=UsbJ15QA z*EcnFwFxE6fm(L9(j#4=;e9(=Zk@deusW!A9N+Kos#zHScC+VFuS}}I ztL`TG_V$YTQc^~byXa;Gh#`BptmX=;q=Q7K+qaY^3poKGj78#wW387bE}|NfC5|Gy z&ZqI>%dF_&lucW?DtYuSIV>ZnvJ&7<0b#5A11ovyyjdLGnPX;*56;!|E^r8muZER{ z+9tALWwHKG4Ub-rC!}QyoUk?JTnlndxvA8NY$e`hb>_x;`CnfH^ z<~sm!DLDxTc_-~ccJvj~W29!tURCh|Q=7mZOH{C1YF^>V1k8JO(fl|Tc4L*f2GKr} z1G#|nV?n8GO`);pKX8?tXPY*n&F{7py$eJJaYEHR8`xguJ%m=W`frtQWTYvOJ|=BSX%p)BDZHXyo)#>Zx4(G^_6yhH6d7nArk_i zm)q<4G1;HF2rT~*hR;Yo7JSn+7|+Eh7(KI3>plii)(*)*E{l(jWQbg7xpjDziMwg7EQUf{fzM z(wdtpQ%m!i$iU{P@WHux4#4JBOCm0G%rbb$WlhKQ#=@VA13BBNG3#fGlrhvlGsr@m}QmT zI$c85Jo=L@vo0O?!s%h)V32Q|{ET&nDCB2_hOGc@*$}k6U|`kVvhU}Y6=c)2m?V$d zfmL2Q&tuMN>>vd<$6=S~PgmDrM-jjJ%U7|$@W-O29;4|U4fkmYQ3`c)o2F?N zPx+7&6@%Y)FS!|UAy9pv)Q5?QMi;uNKYe|^Oma#nP$dMSCibJIWCN=Yz(UqdcL6@WkgvU{WI z@7EJgjQ}t^LeI$rU3&72#>~nzV61~{D#sO`fUV(z&}XDhH2@r2lj!YOcsr^n9|w22 z;}3g+h3O_|E}kxP8W?GX*=@>o#DyLk8^A_%&jPQ63f!aChvzUY7AGopA;SV@)##Jr>4E zBk<+#5(OC?-km3CQ1df%_|4N{4wKtCWoFNVbd>ePD zCX~k{UZTW%4Bt|I-bA)5u`7>4eun!inaZ`B zn&;;pZk1)QqbgoRGv|bA2Tkvz-IwGwnJ0xg|EAC>VZO})U=Nx1Ne%XX?rhpvb7Elb_4_GsQ|ys*v9 ztqU6LcZAr`2IIK_FU|!(^oCW(_ay2Y6?qH{lv^DPP^Kh>vSEv>WjHWtl%ZzM;K`H) z3`cQlhKGmA`Fh6g_fVdS0w=}%NaD`4smX4!&$QBi94A;%P9tVf$ zP&SDtgwatvv|O;+PMVGHIUO-+lesy?dbn#7)C(TZn||h_CFU$~`yT#uGKMF)LY<_` z+j`nT?wv307t{C28$MysR}_~R&+n$<-*?^ym0Krvl6&ogWf*M8IlFe78}(`Qh(@kN zKYoR*%kJ!Z|FYVw^r6qUB_4fD5q8w#((36yXVsyHf=-^@tYeKI_%7|1+^n{*B*e7@ zdCzH+gR30@k7krT?yzDOfeCw2m;Tur1$lyVngBeIE_I6qYJ({dx$W9irJhsgpchC> z%!eCjStxQ+jSz_GOWPtcS#>pscnY0Lc)dW~?|X>S^bSpJlgsTU_SrR3yNkO8d}F0`tM%X55*qeI}#dJjnA zE{R*am!=U$O9zer;LnaSy%b$MgWsa>cAY+~4I^{A+cR_2zh0xGZYp zpZ^W{vF52EfYAFwB6I4AH|H|Z*KJa-rk*=_Rpc2Xc@!Dl$>($r?6RJ^P08I!8?5Z; z)to_xH@Bzc<@CsAbFScxCbDxmjOwe0cWR{aRSkE#H4+lBL*-xxF`jjCe`(%7ZU+r+iB6mBZ!dWa9kU;D`)ii*L36|! z#UPmtv!v$f;rBpUG_P zzpGxJXZ5tBG$i$A^nMHv&D-S4ki>8vRMsCYU64`A>AlKok+|OSvdeX5lIPkwb1e>F zY=iKAJB8NUAQP5;(nG`DuXuE6+{&ZW$iup^#2PMTb|iUtBt$(ZxcXZgI%kpmne8e~ zHgonI=0h=aJ>yArRvRS?v)V*Yx&Y=&6C)yfOTH9I*==?9lVH?UL_)|oA)Fjc;p|6s z-sTr`LhTuAJ#Ml?RjXvcOG+j*Z+ikGG$Ct?Y_OCZ3J*_Lr4TAYE<@(ew*k8Ykfymh zt{}N=Wg7o#Fw|*H9uVgi;1iUxrc4=yn_R@2j+liyQz$8`AfnGx`>0phu`oYNGjk)r zY6JLWmk9#1O7YOB{J42yB@%|d;WU1J)$jJ0=>@$S7pQkG2&T+~uPhz5VU0ejOvPhn z@!$Be*84RRZwdVw+^wGPlSCSl2w(<;TlWHUTm{QQ8UYjzTl>=@ND2xub0##R zZ%bXJP%ozRvv}Hh0&*rhDPwSx;`DKkAx5O8I%F(u)@id;jvb6^q1E=emIRKC-E%&9 zX7vZ7?UIo3v&(=j7yA;dSS9GQi;bn@h9y4M1xlvJYF%xl25HK48Lp*P;dWFdQ7f-L z|9Tl>e$fEBKb7#)iApk!^R#)pWXd76YkhNwg{iE@_3-mk&wVSdTZrC&WXW8jzmY8$ zyd64!8#=uiMx<2zZ=YR4c;#R?l;~@LS~@}xxfHO$vFmf&W3I!WlW|)~9EW1NMx4ux zigbjrDv6|1JDQ2!cLE%`EBOuxT(QutqNr6KD|?77bS*_FLt%4O0a#O|6L=yuzP{eB zhyk(FAVnE^&>Ie@fm#Bqq07_6C-f0lzk2=illdgb5%@@_k%3to;NfgBn4JMn-UekA zmWOtmnI%|0!5Kik^B~k_D+ za2oNLby{(K@!!6Rx`i|>fsu#Y^U^H}G%)fa? zeSYI1wT@4}_1asG9bm zUG|3gk%gy>1MuEeZwny05qK|`z6~ z(PvhmTJ~mFEV}ZVr5e~>u^awW#!(1{u91KxSlIGNk3(7 z35j=_AV`{>lXnXT+Ne!^~)$;c+#+bfIs6~?CvM;EHtu`5H>;>baOBl zsWNtpm~|>+VGr~oYNB~@sVbifEg-q0R8*=f3K}neU0{NE{V<+x&!oeHr zZxxV}EXYNC_|aR#<%lOhg9Q9}di=z&-eIF6L=^3mB_}x-Z_=e}L03N4Mfu^)Z=^&O zamTieCdi3JlSc7CYr@dQ)ZhJ-OUrW(516*Qw4B+*csbWfozV}?6 z&EEZ>P<))(?)$iWg|Ic%vYt7!b8(BweHrfhZ1$){V$lapD<{xo=qfYY45m5z%I3tQ(6h)oSAg*aP(i0<5bk>{rk9-k zG;R@uVU8AwhoZ=@e3+dcceAZK+!88g-DA>y*e4N&`7})J%I9%+JOtoRbN8nP-JUCR z)=;=lRK?NipE1ns$?S}mv+2qoaPFj}Q&eH-IjgX(<{GLmEiidO{+@P7@F9W4mr$-N zP>oqX;8S`kIS2BqBQ4xQ>w|HV{(-0zM~7TgqZeeVO@f*M)LRQ3P-pS3zt&cbFJ6qi zQ(W3jG9XY~2>S-$umLC`EU{}m4iaib~y%=M*Y247uaE(;cH6hP%+(`A&TuPzlz$74tu&N6N=N}77j zW2}i1`0a+`JIz^S4FCpukmVkM)*lA)&wTxrXF>Mt@ghI8^@k@OfViH(TkCtRxmH5l zRBqNWP2<-}WgF^B~qjBKHW%KkN`ioPfp_uletC)AJDJ4)PdY5n| z!p~_{0tmp(-2Um_h(k5Y$r`coHoY?dV;aVl!dY7SL{!ze9FN#vsF2bW+I5*h)!CF;lh4aCh zz}O~cW-#z~z-bg2Y>6$4kAv#~6@%g;U6h{h9;12y&j!pGbmolID<#FusQIof&eRJw z;pKAeaDI7IS77#YXvLGRd4_f}7I(j)QWTi&mlZXQzfU(p}x zWW0 z(4$sRwC4IK-7gXAI(kmJG48>JT{kLz_OFDYJ{OR>2Z8`V+UX|8LeoG6h5^y=v zt$TPk3>g}8gm$Idg6^C=IXncIyJ_3J{3P2t|K-(2uf)&eO%V9xaHY zB&XNff;FiOC%1(aQb4C8!DqJdA!dMK{M^sbrzTcl!spsOO@Tt1%^Z#0x?1*WWm2g1 zdOG=>xO`nK&;mLtaBx{|m#SNgR+IDZ`DNkSMLp59{@3b$iwt$|;T}fGuNlkdEHX>F zb379|Kcx2HJ}u|W;@ulwDSv3p*&tLXD_dn<{ehT6ecQMt8aCCv@ksoda6?F_pQ?&D z?0x%!?zft8*VdZt@k_k(J8}su-b5k=EmCVTg+9~Gh zhq2YDl_K%z)y}mvkEWgUC}p}*7^Q_d>1m<(3dgss1H}DXsHYSWa>6KwX^At1@ zC!doj9o0|?GyDbJ5zak)(@xs4t^zs>Idp(7If|uL)_VN+jkFTql(Ol)sA|FC0m=ZQk&wK zL=MQj-;&!J79ebG;r>V2wkO@78YiC-!#uVX&{-G+Wj;8Bnk%=08k@BF0)Deav0Ftm znG@X6P+1ST>@sl~DADAa`a3!dpI?cECE4q$yLyP-mzUbW@)OjX5j?Ef{X`yQ#khf$gou$!8}+m}RKaL?pyo>=g0&Zz90>|s^nwz#72 zPX@LvT&8+|dneZqZCU%FVDQx@x~MAt%=R_?73+~|=np~6v&u{3y8i8JFRQJkLmr~5 zsi)v8Md_=Lvip>v*r-mMwOmVU9V?1S4`Q08af)^|sR(Al(OWhDN_{#30RjaV_dvaz zI*X8enyce?J<-l<4CEyno%Qw3{l#taN}&o`o8x4&57nTEq<2@}xcW}h?&jA$vrbJq zU+jy{{K1Qw5P({8aHyD!D+?txhK5|H({&_%gM)(=#wds}%C@pzMTG)eT!R!8i%$R* zACMa43}0uqRxv4XTVRWauiGZB`6Sl9qDUoHcYMlli8w(gY(UN#Nr!=laB=wY3Cmpi zz7X?DMj;yQ)&dRgtfZ*b{K2*{fv_GZ8RY7vx5&%v5>vwBM`IJm#QBFSy&@}RGbhBo z;aTcm?*)$Yx9KtWNSk09^zuZW8w<`$%#G!or0+AgRp(N+_`Bg5g`SZMq;`z?2-=;= zk6>()SdJkdIMWNPWD5UNlq?cI11RwI5Tjc|{$1xIb6ZYU;=Q z0g?VM+S3Uge5jXEK;+TK8BSBErTC8eW&5eyvmOsG*){T)s!}Wn5#?7RL#<_ahnDq= zb`1*)kum1aQmfA^jz>Fp%PgpVa~v5x*sCG`c0;jS*L=uhAqlYsdgJ>$BXWBP#*Hp(w~c8 zZ9Za8l5K*zKhDUS`M8jG%_BMLNMNd~7{7$e=#|BD5r-&Cp;stx=p3U0<=Q2Whe+nR z#wK>bswjIFSpZ68XEPI`meM>VLqJ*&aUka#*w@^>w^Hj)S|_tgLed7MJF`gkz^c>E z3n!0SeuO> zb1A~0YF4^9sPsEDX~84aK`vXrxTm6Pd8;Ek<{!~jMCh_`gHmPO*@z+i#Gio%pReo) zZl-#LR7{fgp^l-^b}BrSyzh2#E(!{2#y~d?(h3{q43`lijw8kvpIr}1G_x`@JD7OK zr__Y2Og>!eQ&wtbeE-km>oft_BEGW#k9Ba|Hf(%38z%7`bfjUKz72)zOP9UaR zLMP0%cBfD~+S?@!t%j8yRjcKZr^qdWstCK@GM~bb#PV(e#K@q!GC(p(QdFm25xvb& z=cGo{q*pQ*9xb{5=sV7A(;A3f?$+$N4|SCR5ixg_0ye@>-JyR1VjqwMFcNvt47)Gj1GNseP}Ey}_1J zqK;P`?3>rf-}@&NGglsEKS&oLb~q*OMa(lQZUqx*xnj*!L)VlhwIgHyVrqVcK;kdx zwP*G{24rQA-N?F~h3rc)#Y-Mkxmx+GMqm4e%1-hKi0n|4kw8E~g*P{;IP}1!)O&Ba zMTAA-vvR~3vEbIxnz962Tca{q4X_7z=A~Qgvf~Hjwi=|2uecUPEU4y6jiJI8lwz? zjaUv@iIDd_lg_YVH$LD0aUEhvA=*IsO?rX4f?{QnYxmDa3q3w1wQf-sVd}-*1-|Dy zsig4qzTD-hP|vO{%CiX@gD$n~&`t4`70Ueb+vjcdRDi+a)bvJbOB%+Y-%*o%AQaTl zbAlars2L8N0TsSEB@WH!#IYw`^+j-JXFTA#Q-UkXu&%CbtiA~xi}2|h#CO`4WzPfdS#7sXqiy$r2~hct`5EB38PJ+CDjoieBy;2IK<7wxY7=2W z99ikRzetTx(8zvCA=4>>ni8g~s&woIFag|H!olIRv4y0qM(DA{>WJ?W(^E6UVr<->rYtZ?fQ_;b zWkK~doAe|^0+pOxke?53$epiGp;k;r0(BgHXHK5J-L!Mdvu6WOjSd!7rTYx}m}1ec z>>!W?^aeqZhlm-BR#Hs;3yKtD&4A@_()|P;Cx)BWB&tX6aGn~vy7~c&b1cmj0!c1L zXH3{pyF*eA#a9(NtWusRgm}`l@ciW>=Wce7vpTBv$Ue>;WBoy$NHpSgD~siySTU1& zm?*`vrnmY(mOqjbKF#;qWNh}(WxL~9Pxc_0 zSu9TgE^O69iS^>^s_$waZq`0X^EeGWDxmgfospJyv^JsQ+i^yYxX97dOKNGM17WA2XLkJ*!=Z?I>9I1SLWC_`d0SNmC?Wm6aH%l?dtaB`7 z)&u7SyC=7S{DL3V=KT8>6>x*8ULYT?Tg>MgyCHzdo^pHgvfzR1#k(D)cMwSX0)RUx zXf^S`;qG{w;@DheYHi0sP%;kXvID%8(t)+tQfGVsu5*Ma1-hef%UH<3fMsqxpa^!> z=+p!6BKgfEpH1SV91cynEXJ$dk z%0mb|zW&k3qvu&tVO@vGsQceed5^sUtC8rt^w9!+W*UOx`r}tQJF?dl*WrI9Y3%|8 zBKFer<0v{Ih``h=MR-X=)-X}UsM+p)<*Yc(^%HGI)>69EjBaFrofxDqvMcFpnX@)i z?j6k)05uX|r(%Skb66_AU5rxc_yORd9^TQLzk0og4w-+NknXonmu8d~S88AymuF>F zWp)r(4)cLib~ptsx02WZQMDFoTDw{6#|SJZI*l0EhDp(-j&RGHU{2QL{-GQQ28Unn z<>=_>5aa!R6(qC;S*ccw3C*LGyu*}_@+SISCTI9L6xUnFNkBX<2U-)jzXQqZiB z#*5@CA`&G1ERhm$72fRjOk@E2oD(D)Z%|HZlS|{+oSp?fhRAxsxJjUfClMHnG9WhM zP30tnCa-0xKl$uAx52pPw=)~;NkrcRJV(UaCMkwiw*Z}* zw`<6?YYb^;khsnY$~(H0aKy_PRUhZ23P3&H=T>0=y?n69VBatY2!6tS)K+F%JtKtQ zrBbfh#c8Y=f@zB&m}z@n%tgFTT*TVjRXPKGQ*6E-Q1U#elW%FH9U7qN)f?z}*$aaU z+M7>7>BVTCg&6}aB=DQ@&7(ZAbKoS^$HlzJba6hsJgqA3W)ce>N~*_eFwclzM=u1G z<29LYS!&sA)>qtq^c9l7@wRWbMr-LFS1#%+`-rp%KbfN&{Lk_E{&9uHD0%4>IUMIL2L z)whD9AfILgZ?%WR1O)o^|k?2ZwTr1Ao_Qf-%iX$Bmir50Dum$1B4c(-ne zg%jV1tKJnRg@)Z6I7E&ta4ox8$W^{cHIiyXan2%JMRiyLCOktW;vu@Z3i@LIcJH~G zN7cf9B_|6gCb)YpW{O5$bbHS9ya?h{jpIG3l&uCqJFgRW^T<`5dA8s z-E`$T!Ab5?&K?_!hjE+6BnQeKjE%Yn7ct9>kLLPDz(G;Y^upCCPEY zfzt#la2?f&kUX2eJLFO>OV&Qt)sKQ_QtqCjurQxzWQwE-SK<-Q5&qOOyi$> zfgm_CB8*X`+~62HSuiB@P|tf`pDPnIq5;iC>Nby>*r!Fi!RJ+O;p7LSez`!!&lq(_ zr`|HI{;5tWRNpqSrsi3>kun{Wo@uo&JmPA~e1bxq27HK)R?}-^xbtHHv5Jw_YD1UD z@$rF20p}m|@gJ)TN)NA%uInL?8PGt+>5`-sx9Pbj8mi7BF7N`lflZs1dCsjCDQXR0 zL6%1cS0hE(%v4GjxANI8pb7900H2Z?G=$&m(^5M!d!#DHeCGN_->=SBc%lD!HPbn@ z$9Ha$E9zxA;!g&k8b*5(8+sm9O$w$$oZWf|RaFY0QD|ow2T;DY*dis__`*HZQ`eH5 zP0Imm1?+mK0?FNb=B3Gg<6q>kf?JB$%-=D#d@VHXRoYZG$o!res!QcwZTx(i`y6~T zK#y^3Vy>G%I|}(}>eG0NfYti&1ynl4dHWWsk!dKa*?78ocv4ke7`OnG?pvd6y5G8w`T{+1=a=PUU2P-FspiYFMPC zB*PnsxBRh1MGAIoKFGEq0Yeh&Uu3$*zypkc5e|DEh$Vts`u$bg>wJ*U0}98Mp!%Q| zwde&1n=2{&;pi&KIvA_4NH5RW}2Zf)#cc@lVm1O_O_`e~?cQCmSfcJwKJ83#4+(byCq?vYvx16Jt zN|e{ua}1FEXXZLoMuHiE->2?K4-h9cdQ%pdk+cBmhR2cuN|Cs2b%D~GF$ia2=5fsx zmytNZBB;o)&SDdCy|meitq;Y+h=*t3gASa zDe#lBQ1kfsfP-;);Fcc8f%NDfO$$jhMor=DR9=voQ_d|GmxVxtfOlIt3yZ9RE}*k8 zA+N8IeVpo5=1oH8g4IOS^eo_##rKqSq^oCJr(}_{5xu;30Ee9^>djiXhn-*P&noF> zzQ|smQGD|?tq}0BctJOhL}4&m#Lr>+W;h+$O70Bk6m?fk0%thipG}F|?;eS?FCM+L zSbp;Cj>ZY#M-IkB0~(@7ZD&za)#t!*XQl}dwo(qJA`700zMK7u;W`ZTRza%GRl{9- z@ymZA9{`9$6%Y#>Ua;d?LJlgIdmh=R+EfMoJc;NCqd#naiho>;m0f z9ZGdpXE#yJZ0hCMZlVe6AWj1PYzF}t3+*6uv4kK7>d7_74T&(ol(5B?FhkLbR=7XA zeDBfPrKh&0(1Ikp0vO2Qgc7-qa8vCP?VWE5`V}CE{;g@@7e+vIs2+lCmf!)R4MpHr z$Z-K(yP7fCO$;nV#z=|a?YmISQQnZK{n zS)yN5-JWlvmhK0M#cq}NqMc+96&_n@eii$i7HA|{=M;OIe<3TGGoh1v9J%*;Q{`Ys zE3wRQ(8Cma)LLHhJYD}Fc8F^jLw|ou4)^%_?DAE?Y2>w$M_2EkJ!74mtwanm$B`vj z|BO)Vf^R{M1v?+`PI{*#Lk=YUm3Lg=9(`|I_{43YZNT`=+~`Rf zO6=t{_3lI1l-ThE<3VQ;>aBur)sLTOxK{tg^RCx=4S<|^l^SWN-!3D`BBh%Os}-Ozd(ad|h43^))M;I;jG0{}E24`~j8J*jRaH3p!L z1jvcO58IK!{^pN9>pfH9EKF+j>&?EH56|CeoxJXi zzN{qK2l4%stTt|MP6m$+G;U-T!5q|+Vw8EX?_psyX^RvJ9la=N4;fFQce-g zBJx?m@w031m^B_{hIZF!J??g$hDUE{@=a&mq&_3#XI4);XS#}#kk^#Ii}aKh4k9gg zG~Wzd9ryozl-d}!J`Y6=L)J32a(3fB?NuFq_i0_t%e5&}pDQtuDXVSW&lSi(Ab?4! zm{N<>&&aJ2hto2te$e2&O=9v?$OHrg_E00>0swA1sti}IUo=vXe58QlUlsyZ+bV~+ zil);C$ zuQ}O1veJv#bIK?A?+x&a9dZ7_?Lt*fWg_U%%^bq#4}smk24ZY_L}M8XqWerCYoVJb z!_fX*@fPSi?2hNm_4eGyPL|x<3MZR0N`a7>Gm20V93IHZoSNY%`TWH#X=&K`qelks z3N9gkJa9^p0=Px~1p+0&8WcHrcpRo>8Hy<+B=rcfF5 z-O$hfaT=I2pa2Zna~)$KPRTt$0oqaHlzc^yboWoReqz}tPG_6gODX%*_oXucJ zT@V>oovIkltCFtDvE_%%%y@7y=2;mQ=j!UJUlZ%{#0wN=|KC9hx>xK4(KCWg72Bx{ zQ4&>{aWsGf1=kaZUcP%P4+#XMi|jc^JUuP!VcWaS$W?W~(nf1ISWlxr$Uo&QEN%dT z6kXM{owkkvB>4Nd4-P&Va28I5%{4lUFW1 zoE8AWt@UdKaTuF-$FOxWToLtjFRa|wrE=|sZMFhjH$;!F#nY zomT$W0bcDGwcBuwpUQLqkS917&b7sLvjTJH+ zN(inT4!dKUJ~kIsAm)`jjav29lsb(dI=U7|^UC6!Ud01n3>Yi0TePc1OY9FIrm>`Y=@B?Hz=)~5>lOKI-3E5Dld~eFSFlwa-%!n}n{D2%j+$TJ zAkRjp$}(piHy#b;^n=obwp{(AcT$jaORyCAy?f3ac9J`_+ZgBsLL_LMCpp-wQS8{S z1};IpO6L|jjqI9qc5SOJN=Z+|`qYjc$4x}Iy?pQ|M7*(} z0znQS4_JNt_Sf!~z{7o=;{^oe!9T5e%3wmQe_HSVdBH7gYHf}4c)PdMBV%4rAEV1+ zY{A9h#&iX?Yrb<{ZV}hL+*Kwd+4+($2FzmAy7LAk80oeD>T+~fu)E&u{tHta3r5 zw)WH5&i%97KOWYrOa}_hpEW~T+XOaP&}lAjT0b@JWpr?h^b9yxt4g7Qu8dmh&pK{Q zS`>SKcicVsE$s*e&)^Tcd;6&?_VmJwsr0pX4by~heNYL#jH8*;!xSgrHEqw}BgSU9 z>Jv}sl~tvs_IV@rwpLgq(XyPoe>^0yAi>T@Y-NQ~HbfC!D!@Ye1P4fz5QuHNkuD*l z0*K$M3BPwBpb|hJ_5u6$?Snvm0$r(X2B0bgm32+%d1*`G^7(y&Hox~`@+e0pWHxV{ zN@gu?o=D!EZrf~MAiZ1t{&eIO9*w{BE9MR08u0?f_oJ3rosvhKenfv#P*n{7Jcb(X zYf0p@LmRrl>e3+ZVF`Oe@g{k=fjDI#<*H=X7aP{) zBKeFk5OwJ01rp6WT^%x46&KF0xD4Xs<&R6K$wQUiZkkg8MdFljWCW_lNMDht#>c;u zjg6L#)dZfw!Umtfil#fu(PPCFW_nEM88{y#9g>(%W%1aeS74g|?lI{jnBdpkRC@q;GQJV#5M7V%BE~Z$oTbjx(OWcE5bdl|`TR~?(j9Z*o13DB#j!&Jx zKJpj0f5hAY_Y0o;9&_d#VXz*uma=hWrJI0Jeg-&~$;3r^<{XSnB2-*-+?U^_zIJ59 zDXh|*O!d1FfZ9)*TDpyb9(M#q@{?nE zFj9ets!Du{6mZyyTvX(X1tEy>$Fho1ja#JEucVsUCRiY20T|JVy9Mexxa$*(S#UHmgCE zQHdqtcI~kiV$63wfj=IvKD9Gi+o$}~+3jkeSR1kS&3^FEAt>O$PYtV3e0zw2f0mFb zWG-$KSmXShFg2|%YM1e;s6hS^>^0)&)#x^)6Gy1)Vo5$V?LU$A7Bh0I$edlCEBT6Ec}{$JkAD-@Cr?ZZj0` zr`@dKaV*L*&Vc7q9uH^>Isk%QG>UH-)w$wldEwh2C$a**Qqd=+)ukd!pJgXpm7e)u z)&Km97q~ea@DFe!>6AHrdn22`E34fxo@m2SKJtNIr6r=fy6?js_wA zkSCCn_QQnoJGx!9c}@}&c3)>z_Tqa`knUSu10o6_Ib!wKh@ZdI6tpWIrS>CnGBBXx)QS>N*rmMJzHNWG+50BH8u$+$?x`a!XV)yz^y(7i_a-N z$74rTS}IAYG?6)FUnq@d3NBS4G;n7hK0eX*6rRFzHGso`+5@OT17o3ocMsT!bMG<% zM5q;NuP@yLwsG7L=0YI(-uU=r@cyOg9~=JT5P7$0=b$OLXu;k!`*0Z4Q!aH%KIva}Y_cX*B5V+Zi%1C`{t4OI{=!Dg6mog*H%lH?h#!T`CXwYU@J~@;dpIdz z-ywI2OaTX4rzk^8CW(J5MYGG zx_}4~gd*Y)U{xWym{{=od(&MIb%7mJ*vE`{`yj{m?)CBlj*59b-#_+`U(jx)0y0Nh ztdm}H+gxk9LXFQ*+btz@*Ol{ybFz$?O<~Sy?d06G0rqwCp6?r$bob=>!uHL=>GiNV zM&ND2`wbprsvM8o6VfF_J)e40d?>hH&(VG_1Z!aZUUO%De)#t__5?YO$y;Nxxpg7$ zfiwL&{mkjFuKe?FJO9cBH=|w7EcPy>bnD!R%|GxPdHa^&tvLJRI8{2ZaJ#2@BQ$Yf z>6eQZmv77K!NAHNn^9i>sY2zb5wuqshp73f&} zTFlM^rH=srFTTf#0EM0Qn**^A?c0|Iox!}hZiR@2q^uj=$^U%;`{L0(_0s-aF96Kp zJscw!bI2Yv9JsS%_^BMC!KVCRj zh}s~t#sfCU_H7D5%YyseUOx_}OkqwZR9-k9*p4c@jRFPXa_^=x=B*JuBNx%n%Ty`@c=y~T3|FjpM`0y5N?og@6q7MvPSX$`H zPE263*tmcIGb1pJj9?H*o(feDE(OtD6|_Kf!-RkM5wx()w%DKUKn#Ze$Fb1<7HB%! zJiVnqaFg|Gz*pEuiwH9oaViEEZ8DXd!Nm`r8}o18_Jg#RWLeX_qawY{a%_~&1}^Y- z)|2j1cwqCzHyP6tQ>5zjHWq_((Y_pGY}YmqiH*FZKeGdmvY& zAPZLG8-lW|l~;R4Ee@cc{N>O8d;vy}*8PD%9{7!7T#TUhMirY^R$BJASEJDdRmA44 zu4+Pgif%)T?dsxViSQJB@eM!+Q^ODM<;XcYdI<>$hmRvhUDJtbN@p@c0~;;(DT8-< zvq4-qFk)}dKUf2Sfwb%Su&ImSN?-s9B%plE(@HRXIftmXCe{*je?R`eUiX022yjn; zxA+7HV%|MHZF|CrIfEUdnMYxjNy+bKqcKtMmK;Sr>slK~f5&QHkg5VVJZa|y57!S= zeG~P;G1R*)xg+@q#)Q8SEcO&kpjoIkt0UpzkztozOf2K>fZbjPn{h__4C?pj1Cy(} zH<_#?IC5Q?R5kky#Tc(7+HW2Y(9cdF1II5}C|M1LUW+ zsVc$5{!uOLxg{}NO9Ih+P9T%2ZP}>4P5v@{_3M_&@>r(Ds zT80!{in@hOI@lRt1bO21|926jLjW8s0_x(j#g`7z<<$Sa4tzQLw-*reLv-?LbodoU zM?uyPL{WRVWU-9Py0Qw`G&#<_zFSk8%uUvO?{?+(_sVBLJ_ry!1Y2op8Q6oNd6(zZ zj)Eq?V}-m$DUbm|x!5s8QkncR5V!8uT^Zg0KYolv4QA)DEUM{79S3k{vteHD_|mq^n5KifxtSI3ogoN}O9!r=bEL4@7cCVaNh| zuv1AcsD1y>_<`sS{tVGE+CcrW56+j&hxXbKfGz*On$}4KPYx{b!Cp^5$_ebJMvYxB z*0Ab06}+6F&o3gm)BPgZ=J(rQ^#WkXP(tQ*bP)HOsH^~$C@h%7!vu;`1Yo<88wq4= zLr<2=M*aq%H}IW#W<;n22;+MsChnoS=H*`aE>U{q#$G+V-8|u)BcZH}4LScb)M{{N zida}j?2|H%SN`?n=likRn+x^=3%1z7ZMxe4e$xO~EE8(Hz_zYatWhUDauUTrc zlqa{nSK&v!Ipp3_l+&BIj(ozPCbZQp4o)_K2ew<_QYN?nmSN>2&=BDVLEIAygZS&3 zHV6DZ!@ySFhpCojYX`Br}{GBha#a2LJvui}j5FYk ztkKHypZ^=8_)U9v+KC2n0->NiC-GqY!N>DLH?XmzCvOK5He>r!a|lZJV_PGo>}|PV z3xX!Q7=~iwp~D4m96Xxygb`3}i>-7HbbIN6i;puJ$$jEoe+L=T{Kar-|8t0rKyt@Q zh0(rgPj!n8a<%WjHx%SD1PC1gFx~Ixy2U7Pa6>D7ln1yIr_gOqHpbG_AMwsIs#*s0 zV3w5kK=hY`R`!UxKVTy8y*9~!ek`8u$B_N1$r+X5z9>4m0`f#InGc~-+1#;Zj9ElmR#mi>c$9NL7YZ<!&(?IsXE&{{1I<-hdbI$1g#& zz(#EYpcXLG%E6d2I%+|szuEA!Ily^J?7hO68Nw%ZNv2|WC9)R{?>AdjSJpF62XV4Q zoKzf3+)B!j7uyMe0+mBJm)QlGDh|2Ryg>6ia-i6)EuhCccVN)F;itU6uTkC1^MSw6 z`PR0fotBW}h_63-O>xGzT;M$l)r@|V|3`;>87C<5-Z`Ic@RW?GIa8~#hJ=)vq zttHVP(=+v!Jg~Sg>iSzXqJyGG#y4^i$pvMhC)j;=Y6`kpWr_fw8Y6!|sgG+wuv?qz zjkIH-+(_$Afu_@EfVwE9Iea4*MnHO<hhoOs$)ogqFTP_uMut!z;g6Rq1+CVSq>@zs1OIp`n z1cd%p6Tfd%{reSv|M1IX`EvNji`I05rj>U4GF}W}>)I8VyonYpeD7W&qicX_MHXf@ z@OvmvQn>sZ7)Kc@sfvc*EV&o39!B+Q_&;>L30zZGzBqnEFa-@hM9>iG8_*Eh1;SE7 zZQ}wZkTC2L7KgBhwGx&}otdaeMZkwF0Rpj+B?<%zghg-}1VvdAS%Zk+RLdqVZPj)< z|9SI%-+KeL_Pzi4z+KKgH}{@%zvsK1@6v6U@FF?ob;!Mv$R@T!e|e}$Cc7-KAyip$ zm8JUot-6%~ODn29q2d6n?Om#Q$w|2r6A~DInX$apT-Kg){IboL|JwWGzsJzG0A?NV zpvb#Kf)0)DV5fI)Z^uTnvUN97uh$dI{~#cs74^Xc4BkTV(NZR2;$sV z%eETPE1YVnoM$VA$s(@%sTmgAugv<8zjNAY>w(P$w1ZK)J`_@f-t%kxPWLl}{A2Zy zLe=HG_Fms;uv`EBufzXeAH0H^;UoLj@kAP-WT2+!QbYA1Msic5$O|H9Q^R8AJrAb6 zF8M7g!xrzcx9{9(f)kb`sVtrMn3ibAK}tefV95-%r98%fHo81ChG>#D#sVRW1iKsxyT0tPP zqf-+;u+P=oLI=T2gGtx-SVyA>qP3up_IaWY>-oFkz|MZNLB${t_d(Iy53|UZtsOfD z2|~PzAGTDN@Bi8Lh*uWBGlQP^m#UF2>8n3`PlxY{x-{c8nN2r17Fu4;%7q&dNF10! zW2qns0yvPkpN0h+29Mi6+HL;dN>zwkZL}HKPM`I%g0;f4BtJ#Yd>C>uYCn%z2ZSJIst04G! zun?F52YDhN&}rEY;Og-ZLVnD1ko18uO_n4GU~SJ1yN+rj zP-3qefr93A*GhBallB|K?Qbvs_uk;)Fm;19)L!OD96MDs4uLV_gA8fJo z2TyNoaPeNobNgg-VyA9rtA}#%1Bdx#R}WUDMdd``gaboj<<}GtmSn zFQXs-$^hVne+&{3hj_$&DM;Q0AJ3xipf1_SX4$h!Pab475Jr^wX*}14(Lo* zS;F8#w7Oh1ucRAcHTDkv)%h$i#s&JcJ^*lpmV{@|3e}jB2=Wh9phy6V?WTp=0e}ak zJc}MiT5Gn+ehDhN(3On{PYh2Qp5R(^G1zML=)lPCfm|2va*d$HP)RT&{Z%Li1-b25sPfe#Kl zA4${J309kf6apU4c9|a=i(gwDk4qfBz9B;##)vqyiw&6*{&9 zo7sMm7dW!!(MJlfkkZ5D}z(o{WN+jqVz@`|0uoldd4;bjL!*7fnhb=(0 zy1VbFA9fMj;2Iq>G8izqDDtyt1-gy}1;{7F@(u6}RW4*Tj5n&jA+(p91 zLYoV1H5N!KPNHu$$tc}+b;_%UXmpsf9|}W( zu!ws`<3K%lRkc*!tZYB$FsW_)uYDM*LbO5K1}lP^#V`^Me%q)u(GwO$GfM!f_uwIE>!8Wk+=Y!nF>tZLM z=51MrV08-;b6Vz^pcHw4gy?>N_^9|NE6dqXmY%kZT^ z&Vs(`xLxyj(9b}~FnLgfiH6)qM;sxffLf9(6)}xbI9K1o%M}7&E|Q?<>xrw~(Boef zCF(PT+*^Aj06Qj~){P`GpgFqW^kn@q>?mD%dC6~%=B5NLPNw8O`g!i=kqOo1kQdEA zMRfttq5;CM-O#am?$GQU<11y&E5YXkv@ZVa{DS(Up=z3d@b|D!mQ^y(ARdhqh3AF~ z9Sp8NW_BedbM5|-we*P~LZC)Rh`u&F(QE=Xk&(m$O?hV_?=PAZ3(?e^@U{O|FjWsc zCtO7fA2=o|NIRGm2|z!%ML(_USF`SaL{*r7SpVI_kcnCuiJQrM$XAWmAo`N0(k zUj@I@&)UNp-!8mM!%aQeY}Ux@>^T|~zv)@f--&-3_?zns+$ne>MF0(9c~MJA8w5<>mwasX8h~oe(YdAxhm~}4N@=oL za(S@Qc#@5apEKYjC-ER9vqV20xH~%ARwRlckaP&{S%T4 z5A0um=%!-SRYmCDq6zbq#4OS{6_k(&#^@|UDX=%N{*IGYM4+lLxM3I06z*EV?o?+U zS;sf1DEqDeTw)Uj7SN@jiRi;F;9*hvT?;tawDJIdDK>SNqh;`%>wM-y_R_*)GUU4Y zsidnX=q;LJfjyxbrt7B^TDcE+8d>-ZIZTKM>5UKcd2Ru#t%Za>#J#d^@j{WUpq}8B zE9w*xhb=Bs0cT}1WU?+RvE1ZTW@vmRRA{0S|&6rDLa9-qH2R`QCgaG&?pz z3)DshYq&8~8lI7nP=Ra2*kFX{*iwjCtvJ$y-aKu8D{oomOPlJzueG=H;SZ~wiQ(R7 z)~uh^UUJj-?RDTD>yVxe`ff#W(C=AcbPkwP8XmHY;z}MYOSNUgoI8VWiX-w33!WFo zgeE&SuqFai$_&axynlSX{NDoP7LdDQ>`h1&rDGbL+~`^+MVHGM(4?OFu7Pv4cC%&$ zSE8qulhkjlV~Z^&sa0|af+Yt-A?ohn7)}L z$HZ!q)okD8L^u_4C+Ad9smD^hdr5w908ivS7aF9Xxj`-f-?o4J4ejVq5%AdP!w^lo zWP$0$q@f7-rhO53M@wJrIteaUPsg?ora1#`vR*KWUdT7pk)Bb;Al7&$)-txx^#fgxH6$$G6hB|hxIt63EOdu+UfoPiY{-0L zm3}l7;M9%8>)mr0LeIsXjlWb+)>Rmz?7f%Y6iL%Ws1;3Z?|9e;D6@k_UZLv{+5r7GbeK$4c0ZtDs zH3DphZKMqn*rSnfel0Lm*a_wrhFIV5u|wyJw(ZLm@GiHSU(QbJX;itsct}rpxr_!8 zIyxhM8Q7hA=u%X|NajR7IC)I6?``r8<+j#41l?;d=NJ?6B~+7|Z;?YdNh zkmfu4<$HRX{VVnLzxxoPE=Ka;v0n6EiPy)K6K6rnMzlPYrL6J*rZLIGY!Y37{7u2W zothutV$=s0)ZJRAkyt~_=nfOP0pAF)Ds+RR2vGJG0Wi%w3&;bPM}%)jbanPb+Vib4 zpSn%2eNu=)=+@quLpOUMrt@6fL0N5}R3&EHj`-m@YUCP|qg!*Jo#N+`f!jT%WEi9?${6xt< zAj}fO^7@!X1ya!Jk-+!d)1o`hBg*qr3YcTIB6unT0lzg=q6cKU)%){w<3250azt67 zELhok8Ym)8s(zo1E!LHFtf>mQ2i0;0dQCkO(Iad<{XNtIb-)smQAT&eHW=q#SD~*J zrAsu%d%qOmVs>!EJ$~WkAbGSelubYquOq2hHlp&Bgg2pdgFvGL^?|^!4G;mRSOvPD zl&==C>~m$Dywxh^<2hgIHqV^uTkFgy?O_I1G8 z9%3L9&OPLvnK-3!>Xe~NPEb$`QtYXzhq~&zk->Al`@8=^J{SYWITs@f1ekg4$VWXx zW2X_9(=6S)ZaG6&KClH9e|yKdp)~|D)>1v=%%I}E!p#wY zegtSfOf)DU(;Uc=Tb;}i-KauvF{K>w@oDAk#C`Yq`Ww#tdNdI|I|`CtCC?``x1X~L zN(KihLIu|y0!)f{HD#TF62y#PxSgbBt9zinDB@&?gT^^4gFls>NM#_J=>uBWL-;WE z$cK-95o=Qhydx$x?Z(r>ghUS?1i#z%Mwb9Lig2y0&_|XM9@I*v>MZ5`5+pk+YoI8lEtKR*3R|Rygfgcm9OePz8b!z zckOcMNDU|GMQ3w7eTR8RQu9cp1XbC=g21Nu$tZ?~M$WfXU4**Vq>3B7$GoNk#EjZM zj(+l~1T2%d6ahQ~p2?2pE8lR}t)OXbYVjThbNZIFk0@5Zg@P%g|8Z-Kz`)KqLDR zf??@*d)l=6%)Pd>wfVY#Ejj_ZN1gnE3he0!o;T{1i+I`J`*4&((xg^S2FHDIfPf%- zt@0nJTdZ%fNyLM9gMmjC?dy6*_4Gq)fiVB7ZpB-s`=FI*(H%m!5d=IN-J{PR-b=Ph{0_U&XR#THBTav9(Gm`bUnAIK-dCztYzUFm+ zgqC|sf%tV>6GY5W0LZfg_KFMp4eqo_Ml@$d`I+J2pMLa@e+v*J;i576FaR|Do*u{+v)(JHROce=0D8?@TDlUL}^jEzM(I|Q2KImKDug4f2 z@O9TkObQst%4%$RjLpj9Pl}g*$+lkYnbTQqR%IVKR2!aQv+qQ&5wPV}lU@#h+<77s z9fLNBKCceq&WQkX5sgcTxrXB+wu`5t#yk47e?m)uJjU|K>u(BI5nOPI8B73?2RxUo zJfMjWOvnj^d;n${)tVO{Zrg*AxZMg{1BZ3P_HIOK_dwQE#i_*{bp@Kbv6@E zY@UoqbaV7NMXhj&Xm`x(9PHI*bPk&l3K=JC_0h z+j-!c0ZVotEI-~ih7c>UnF9fk#qE{$h(o})#&|sv%!z(hZu(T*VYZfS|7Q04y~M;i zwMmKE1P8?_;2x&NoM`9Kskfo`M?WFplrou0f?m?RV&mx}(8xvh5Row=qEiZ0CPfI- z7`=$gYeZ_!(fIXB$C=@xKv*7JSKxA0Ggh%PT8&w!X&| z1l&H&vNJiEBVbaAyekS%UjpfXn{EX95*r1Zbm`a`M$Ofd0t%UGW*Gz2bx8wjjh{jAIFYviZXy<~3z|S~PNz3V`KP}SFa46a(y_MJ?Z$B9#QEO& zgvXAr%0u&#z{QO(ns@~E=4Sl|q{0eGvJ(9ShGQ zv%lQ}Z@=h!pks({&hNwJyeLKRY1eZ}9u$O`XZ1uIDP|fr8BWA&Q~D1?yF&-wl@Azj z=!8=+4+TT1>Pfgh71#Oc^^ZxUd5(cTD_N1~ z$}o*BGsABBb<>|Y3@13^1&TmJAFZ|;ODSu~?u_Gf_58dVbH7W>PdrjTl1NVsP5y>+ zU)nQXeuVn0v)N&Q0glgLo-U~AywE&GDy2E4+0!RDNrSnRa^4rcZ_ z^un*W70kOfM0h-5jzM4vnqxbQHmp`Reg)lY@-P6-^(bZ#s8^r@=J-No7yIoDU35dC zqR+;~Tr&b=%<1sZ{ohzXAc3sT-mrWI0zQY@o5&%k=C`szXr;}W;JEBKkVD!`i87>C z5IcDP`fT{E0EkyS^iTFIieqH$eo61iu%$zY290RR+G~Ys4nIGQ!_&j+%N9xYTV zgF}u)r{%S(DR`wfYhIDI7H)szs4!NQ?i{)TCh&JmXC;a3MD~SvG8b%3z*5(NjDx#A zu-CEekK|SAsie#1kg>*Zc=cadBX0xJH8ew4zUT1+{f3;?TMG z`=UL8A}>HY5YdC}14s1&i*8YL`og~bsmE`4i|%|DHus2^?K{?-G7?*PBkG8c_s?BZ zTP{)Y(Q}Y!Q!*hye-W=`Rv?+JF4@V^JK(Zf;uc)+Y0)q9aA}qS|5ZKO9`HJ%vdBA# zeXvp*VqXI)3j0wKSGSBCtTF?G8GT<0v{n~%f??lqU16`Da1(tSmjTbh<&gmK_W!0NlER zLS87s*d1k@8$r=aFEZr*#O_TJ2(qDLHlRZ|%|L)#iE&AE8ZGuXn&`5k%r*4%_T&!ob7_d6{NO7qt#1IEUwKP4(mVFi-ts8KG07?}Yw4QdO?3m#{zUwv<X1Mka9ET+*l%&z@keG7N&3%F(cOz>RqGU|_F=Q;l;-P-vb44<=Jd9jaX(OY za7Vrjg*ZcCzab$p&lsA<*+*9#C{|`iKU$@8ceBg>F#NBVz+3N~4s=o> zcnP|Nf--dL!+>`eXxeJtSWb$Sx2iAxZc85UA!N|}(J|8P10^C44jfv2CSKYv`@MX& z)Uj3{mTuOy_Qkwe`?=878_pIZ2OY_My(`0Pu;Fm~P?aHV#_gU5lLIg_X%FI)$D&9F ziU(aI2Zx7D5}fSp<95|y!ty)e{+K9cO8Dp6Dj+U|Er)n z<2cr{gmfQFFtIIRqA(*0jI9qNt-R`8F5mTX?ZiJz!#W!m5@a>!R81k541`0Cs>HC4 zhepN{uGCucWX^MXGFrBrTooiBkdu^4TB_m{evYA4RF_rKrOL|EM|JpL{tAH%eLKl! z2%*09%q<-}>pya==#YV$RWHCRVh00E&%8&=fl@Av8bTv#Uq{`~(esaudJrVLV|16vII zb&&_6aZ569kYr=tIO!_`xBBuOp&7EJWd_GBRVvK)^=<2RKF+Qw@qtHhbz-hb%cvK4 z0Z4-$&*@1@!~kU|YS*zVvm7HKlL$E=e)-$iD|j!>DNuTMIT2etlMrD2F8eb8O?)`Q z&f^nGqJ>?7x8uIFA*ID~G*}b?jZeP=D5_t*5`h~9BwGT$4(G6!cRnLnr>W~!;()HY z8#nX>=B*^c*|~DVYC%daGgh&=+Moff+-9lLz@ghn(m%l%F}z51STut%2n) zWSyHgn>a7*Yz#SLcGPHhe~B;C;F8mF(j>J$D4pF{#8>^;mRW2~UE&G{dZ^uFYEP_d@Nw%GD-%rS;+1 zQm(=j(vayfPZ_G%@x}w%wx}o#iyt`mBDe+qpg?5s4Me?yRY12<!MoXrbNTq9tP^K8OG%N`&?vivUwITvV{nAtN)4p|FLo02A9?u*qr1vh3Nk z>XG9`)xxrWR7-M7x9Cz#sq;0(13ytppilsUb@JdN+2||s+{JP+Cx0_!rX)e^?=(@R ztZKROiY@<^CW)K#^?gtxy9<#$tTCMI(Y>P)4}EH>42N_Fug7~#hnlZGM2Ll#JKpbTi)64y*;4;O3MqDTi64_hdvSJwG`wdD@hU340t1=o}; zSYIZ95hhk9m&uX|PNj$z%wKMq$ObIW4ap6hdZf@TUwwxXSSxh8X#2@McQ_05+FA+Q zyL>Q#3mV{Kj`Dkll&``pPxLxYdW)104(uC_qOqg)l60>9*|Ub4E?t;fx()61vb>Px zBQB1X-4@hR0kK?1UcIV()6arDCZL)<_378&XPY5hBQuRqBhidKnVr;gWN7uu2SsD&pnDFV&d;1hq?DM9u!$8bq0?1&-%46%26 z>#f=b#ytN9-_s2z54>3AfRIXVa?%iO&Pvtc9))7LQxWhTo&$beKZsTLy7bAl*ImMiw$=yk#DUeG-JFdzeR%Hz6 za(fR5{OATO2A*w;CTT#?pT=!{OnHcLZ13=&d1L&B)l-rLPmOtH#IWm-pu%3ilMm*9 zf%Q$j!FrFfdPr<15(NQ5v}QrD%B_G3!dYJ1ac4!E=e1`3!(AP#N5Vg!YntL*+k!@D zlFCCApvt}%QTHRmzo+OE5RZ;#Z z_0|5poDt$Kol|>$E2bQ)!G!`YOtxV;;dWpV@d!u69;b&a>ly;1_ZT3_HV_l5Xm0_ zE|IXUJ-5D9-SdqtdI?+1!6t?7;4ngRF9iGvYAcX|e0C~&M}qA_uBALWpFfj!zJBrA zJZqVWhIAm5`Yl~~a2wZ5D-~ELhR{kA3ddx*ybh-^`-AS0@bR<=XNQXq{P6F;NHn5*24#04rnRd&Li zW&7wT9%o{iT5~kwcCK+h)2!%n0FBB-NWKDe)ls6BC&>e@YArc7Dku|=7ToyQy6zPL zK(M?zhiv`Q3?+l`LA;_ESethn6!O)q12`Ckb(YG2K$o!fb^Cnl02p*iH*x*w5kplA zUElE@KI^<#cKildqAWEX09h+m0D5RdC9I26KUvSiR*)35t)t|?AO3J_#n87Ec=Tm< znn~)ew!Ozq#w0@{A?m&_cPUW6jy@pfr8>KZ5Qt-tqJ4Z#&ToPEs@~~Uo^6HvV2H-T z)ztMhrk7Q^6ystmm;x}LT2Vu|O%SbhmkT_8EBtQ|eF#6;)d$}nlTxI8ngNPLWAr1R z0lmP~bL}L6p!W*i$Wtwk!-0EynFE5aFfy}`wweG8=;ULx^YjT7X|8F3u`1Nv2Gx0i1*fta7 zEJ%{vf{w?)NB8>TMY)SC<{rkK!U_e%tA@FdZuP2EP8y%Ie;C<6WKNN58J93|W0O|O z2#s?P=O72~H-&Mtxa+2IjPvLWo$i2*ni0Yu(Zx6bAPs0qk`RWn5M&VE3PD_+*M!p1 zgWncS5Zf@@c1^pnO~ZZyf-a#DuenuFXs@eLg=~7A(mLfL{Ao__zuY^n-k{%QO*aA? zWHvm}hay|O2nPvjvqumR(Y4dVB?nut-22C0{&*M#tQe0OdsTKyhEacEso_U!LC>!y zRs=hR!L(CbS@b2vg!+l5XqD6KC*D1yvDr^4QFS(lsk)<5(0>WWXQ@%}`;e}wm;tMb zC~$2t8X&XP6kpm<1iip|iDP>iW6a(P)-ND~I|d~=N5I9Li3$bbakT8-$beaRoqq z@!ABm4_qlI=Wq~%w?3w|;J;1}jDc5a5-s#Qrwmzw^BDl1W2)xaW4--hD)i|nq0BoA znWuu3Jx?Hb_}23kMT2_L*BsiTM}I1(xm+w(#oo#zKH*YMX#4lq+P z=Q9P#X4tZ&#+>@+81S2$x&b(M?b=vr05rGP9l?od61WD+FMoXj9K2sVPhD~_>hA-* z4l^CKcGDjxo)N{kLygwz=@TS@T)h^U-nL#h5!_8msve;;x}n95Yz!X zDQOd%Cm`VjfE}-DHy0EPcXPk_YWbNX1bc9rG02U^tg!m zEO8mu>+4Y+C@72&@R|MaC!d8Q#-MqT*(1<@vC8G`gh*gIRC%(o~Q%*q~-^1uJbPf}iyvY>Nx{%PHs3%8arbT?>T z2wq6^rA^CO;>GIDp@ZkpAf1iNR!xb!G6yV-Z77eDId-<@Ev)Bl`<#56xo3s65@yff z-;4eA{QM4#Zla5#v{CDRjNb)Q-=e#W&g+KIbNVC*W$T>2`6Ui#K13I18 zlBRg~Yx*_~9&~bmVLCSwnP_QgZh&alLqvPcpg`o{Q@5xsLGseCjlO2%9mVv|ojD8C z1iZxLu2<%Ct)ntybZf=xMEY_IB;P?@>5#_NdLMW)*;jM1NH!TWnp(A~wDgdxFg9Qz z%BLL^{=*DP(d9!)i`Cy!0ak_3me4w-9sD3Q@ivgWY}XH=M!mMXsT(!+h3?k~&^jDj zpaIdJP0pidMD{AW``?AAOEzcV?#IBDe)#7|x3vp^f&DR6^!L-Lp^qt@;x}QBT_>gW zcf;&OK#-$zFGwM^&KE#CR*V^&eI7jOLcoSr0C7|v;CF=F@lXaSs|ud8Ph1R#{&x;t z5zX>_zB*X+gzlO!OJAlheGrz>b2DU-JczO`I!C)RZbpDL(@AhP+P%k0FfLs_@wzHC z5?PNzhnHg_0v0}gud%@W!1uLTG`v`c9WFOMx*k-Hw* zokdyRb%~fTjBGt0p~i6Ug#>{c-W3fJDji^|9vql>x@+8`dkfIks*t7VUHiV6+qWz8 z&Yfoquj9fjcHDP+b`+HlYo&oj{VaUM5MF28<4%dGk-oAb9wD_~op4XvaVO{cUhnJ^ zk3V&H5be2a|GbA=a!K;}ju&3hYt?HNpC$b?dpuPbHZB35p=|om+AvVCfvq*Dy?lM0 zSsAy*{E_O0Vf*HUw#kCg#Oh_Y>b#1Da8?@$RmW;mb@oLUEE;34Plmt?c5?Rf|NI<5 zLT|S6(Ml9YAkv1Gln9gvZfLY5i1xTZ-AM#f2BA%VUu+pLZ2-9d$QXmBtjGtLBS46! z7O#^?)6Z0GJ@a1aszfk=*dyJn2wS5=Y*aI3pGAQH@nQ5sGMVVk3-06u9adOam> z_yV1M)VJoVksp3GgD<9asP&`D?(ERLVas9tu5qo4EujE-gsNm^>9w1QMHu=vfwX1p zhU-E{MMSkUu=4(K=euFY>g3w|9m#Bdo}Ebri?EF_6U!+WLth>A>Nw)tL@y8Mz4?TA zt0r2Bb-(NF@g7i#LJS2IHv(@yhIJo!dN{#NqWr@DQF37_n)|i2LKD=~w<6xQ5G3Z+ z+_0BF@-;dqIu+J&e-0`9VKwha~CaRQfm^#I8G1)XL)6_ts&>Yp{Qd7hD|u4 zaaieIQm48d=<|ntcURy=HEpxZPm6me17drWJvo{8d9lvQLWJyB64KOLbu^jpgF-fn zM7ScbbQ(Bd=|r^OYo!yLF;p4dCcaeVNb|3v)X5dLBv$mp7oS%~xuG2ZOLE-B!gS;- zlnN#vI*Zm}1F*7+TKfHd05pP}&=zX;7(M!3L09CBEH4g2lNxgy@;$wdc&ZUwwSp zYHVuhb>;2B%j8E7+QVt)XTgw=ZF}0T-m#Qg)F#%4$axFM!SqB4&i* zp`E=fO%%_D@5mVbF;pa<*}wby!Y1uGi&n9v_1Remr9j*8o;E%tqyr3-BBOI|F_M@D z^<-_zFaQ4Z;NbVTQ@aXDb(g)|MpKJm{*P47?AMi;NrI*s2%$9IwglHUV@ zItu&QeZjs?te$2|#s{qQ`6u9|SzfkS7BcfmrChqb#%i%Xdau`z?kvM&5PqjKfyI&` zWKEudL7BUVOC`Qq{w2Hnj9{o(JlHc=AC@q9wPBZhPA_ZZu-RraG#&)lBb^30UV21$ zTBkE%S`z8q?i5;C=vR9MV92+L9wCAKoVb9tNot%P`Gz%gS zLO{Hwbs>O|z4S6TvvaA3_WS?!)AJ$sOa$q4y_rsJ#%rR`Q!Mi1Gmi2-ake6x;pp%`L2o zTJg*WA;pwzk~1_bs${Afy;aWC+iydXO@ke3-n7422{LFtDN1RZ#NAJ+NdLf=7@V}N zpbm+N;g(83y#U%%Jc~li7|QtO>-!Z1*6FsUo{5%Y)vC`}Z?3;|z7v6P>cO5wIl>GX z#3Qyl%N8XgasFmus=knpQiZWdY>-oBU>%by8&)3M!=xr&jP2e@BOShQv7tc7ZxEGK z*(>$9xfKjFwhlURs+AGQ7VpvrCb!REbO03(f&Og;GKj3Kth=Rb1-f2Qw>}Xz96bN` z0HAihP&8$4*aAQ^_F?DzETT-C<9K3Pvz79C)^Y93M8|VN*{;mq$(BINFCRU149%w- zeYM|mE4-2ISDvwz%cGe36w)6vz`JW(r&Ld~N34tqANb^xh^-Nq|9rJ4bWzUv{L+LZU;Fp5t z)XG8xm?NBQ&I(kXSizr|QXl+oiz_ikYebVahj#f#Ah7g>AfAKy?zP|SR|TbH$oV(J z$+Y@inR4$6$EK-m=?j~xgxkVfC20;H&P_=75IVYI_cBnIa0s+Zf*@{t_Rx-5yveJG zyMJF|BFJ$3a#7CaqftYTW?fM+$i5JzDmPnptx&E7m=SY`QYFOgA?{_)dF79=sdDBe z2&`LIRd##CdJi?mv_Y6yU99ZB`%(3q+e5VdH2Nt$!`oQ03_xbR=rV@Je5dzer>zla zFHl=17y-;_%RgXj-GmZW1~k&Sg;asM$>8_c{`Z@8E%46!H^Y=Yxvm0a&lf&8k;v0( z(%Jcou%PUOrJl?iCi&r4n_ac8%qIuke)hborX!kKx4O%I*`q&Xu$Yo~c&QK23R#)}AvB0vZn@W7yxm0S zIl0y*{mmn3W7fEM&8cQWCCAtIpkkk8UPE)U87TrO+Ov7Ug8Yb8OkQpPW$0 zoYanXT)gDdTGR(1aryui?aG!+2vVl*6Cep-7S2ZLBFH}XzID+V6bMLwVqGVwb`*Yp z1kf{Jtq8CfiykI*pZ_~}H&!<4OSHH&|BOr(d6~27&u__UnC`j$^4T~0n}$V{mz*($ z0jR1$Z)vsqm5#GbNcvrd*78Zm`#c2JIwlf{QHEjCPOqj8x#7}iG@^atAG4=+Z7siP z6mj#JJ#W*yfkX+@94V;(+2U4i98qNXU*(iKBV7X?V3PqVCX8EA0DZ? z@#7U)r*Tww>;BjP>6vciC|IO6CYUIRjWaq-NSvi>{w3`x;kJ6lAn zVd9UUe11^;)6&m(jGQ6we3(4AM&Ouq?Z)GeokH1HY-bY`SR}-0GrYe)XS>udx0IJl z+U$Vx(#+fnP)!|ZBRmbYiFLp1P*BdiNvl4*>`yDay%2l*jPQ6JfV-d{K=4v7`u0$O zb%sUp+qp0_uzt4AJff8JD5gjQ&@t-68vbsBEjMa}EsjFHj`G!h27;q|w?+){degUv zED}D|8U_a7q+~9mL<^}9EhTjq%7y&0T%G}#=Q;(b6iKQp z5R`-nJe)>I)uWe==d+jZS6ucFJ-+Zu{_^7^Hc=5!Ns@&Yvv;utP*|w(` z8>%yu7e(+}3(rOXq6Bk@bz=#9%&)Su(UJr@`M(Oes{`r=WA1}i1_2Ct1;5=UZP_Mh zN7ZG9qsW)O*sGX+HZ}d|;n9$5jZ+HG#==I(vFY@v2o`mETtL+sv&|wee?I?y*wT0WC3=-XOQ0+zVfM?oj;Hd8331g*^mepJu|HI(wXZ%_koi%CZ z%_}INfUlfh#3r)3Q`pLSG205xP)~^UwG%=iqR}oBU`;T4JayyWZV4j*Co42qNkCqCwDa5O* zrg4GdSiAPEUs@1dVhnK|_6XQWJgc9cy_8439Tp=nT`t_kfDrKezW#GqPvH*}eILXn z@LH1j6Qjm*&wh#H5wBxAA(mWlj9Fm3hLZtgH|>zv_Ip8C2}mY@^nn8_GnW(_TB`7l zPT*69t|-2{JwjTEqPC}`l`Sc$#zkBK+6A;=u2x`*c@9AUAs~p|#r#IJ9#t&;f_`f_ z#C-0t!{2W3F*O1>2R8i_7^`gtsUjprjL^J-A|Ymed0>5D`OdP?-fOW5fxH;<*208m z#Xnc{mObcivt1fB*5&r_TLR8ktSC97JTf;Y2Ijy35hi-#k(gQDrJdXPB15-u*c{$U3XY5)F#4zHQmF6Ggf^_Uxr##2k2`zf{qnHMtV zQDhKk6T~X81yA2whQ-0d(aRl&y$r9K0t04*xEvO@I=Rz-s@N9 zQz}!EeJ>w8(;KFGcBTASJ8LD(zVxh;%5*rT8FVzcRhA$RzPsOLwQZXrgP@C8BuE<* zW2UPru2xmIYF=}c2Rb{`T2B1%K=0?fUU!pGkl2NM5EqhsbBmdTZ*{%NSS4&WwS_be zMj;4-g*`{cU^O8*(d*!Wb`>You&(`racD7@s>{7_l_jsd?_s=Lb)U9#haF40>{|JG zPVO-R>TQV=^xUC*4o1W-W_ zHgBfS%MvdNiN-5O$#tm^FRYB7>?;8s-)RO!zmp1x4qGzkRag3mB{2_4_RO;~nes3g z6%AM^Mr)MW+<~pfuX0^fFc?NlyAwh!H5aZs^?_cnk|uvr53ZFV@VgQx(DBM*w$caCI* z?|$+yQOxlTWQV*MU^iQ>q;z&o@w`~`cfHPBjqN-W=SbDqS;bo0VVa=iUl^)3zW(vU zpoHZ67q@pD`RJ*@Ev|dl4~XgXNRh734#a-1GgVQ3`HvsT-pJnIFaE=77cTj2dTQPg zda$jV`&yv+&cj_yBj12c2t-KWNf7IhPB#ywZ#{UpCvyUb@{ChU=>aj`0%LYDQ5nfH z)=jZm=2Y`1wjR4{PKfiTRX%!p*^zwElUvY-#RelH12_Q;X(`%U%$ONjUy{Y_6A;Zr zYsPy6v3?@$Q(wmu?F#tDNODk%!jvN|;df5oY<|tZmO0qw<`&8hwN^AcJPYdR8ZJ!; zzq97bX$*I`zEsDoE9MS0B<`klT`2fgLAh6Pmfco*p_{%~{_&Zp7RBeQeb`e_;>Q@H zO`iB>e`dVa;}6}0@vhfiw$9jEO?d9Ba!z=$dz|IxT@}iR2PYeMflhaFsPOOGq+75;eNt!`WQ<+TJFz=QAr~ulCoKL$bR^)4r{% zSdV(ZG=^udM-f?{Ghm}wh`tcUc54i_O3;(vmvITkhT(FlBnkc`L8VfS8Hsn=1f{1o zr44@L6|(4`UB+hzI*KPw#(8Ch)RafhCOr9BG-+K^7s?p2V0NVN{g_|b?}%e6YveSM zCu5|tXKKK3x#NhHOaIY|S9t@MQDX=sy2sh&ff>O&`i<+!JopyF>m~oWYLeBZiJNUgnd|LOC&kKQ1QPx3`y3 zmR+icC`I<8YrCn(SCuYLZhIy@VkuMD%JeYfJ}-MEAd_MS^!S~*3Pxn$T!an-HZj)2 zzM|*9DY*8NXxb%k6YfK_B5ql-nbgyu1s9<~!9L&wq-J{krM?fxc(rQ4;y*f0=nPF0+nr?%5lr7x^(Gjp~RIikw* z+5Gdttkx>$Z7#WBHpC==-x7kO2%y93k|`VkUh;vR8XD^1+MeUVaQ?r_xF<9rz{mhA zMkT5Mj5T{}ZQS<7v0O$odRH4l?!;vXAEk75_6|3m5nF@b?Nyngy~Q%NSs&KqAkG{& zw{nlm5apD|-IVO9r?y4K{2W?r*kDxcdEae2&kud^>O8e2*mm@?@n$W=!LK&pPe&O+ z>9U?$HvO8vSMD$1-oEu}7(IQqTA3Q(HEz@{*oAW=1$FkSSP#Rab>x1KkybGfl3?Oc zs@GX~b&g=QT(g|i(NP4CcJH(wy<{_ZFwr78pUP537c(Jo^K6N@TKQ4*lu49Rv_+Wm zNw6*0tTTWtlQ4FDV*obBM;|KCQQP5oX5-Rt_CS8X_ZqzyFfJ<@GTx3Mrbaf2dydGZ z)zxp-E_*gK3Z?Kl6I~htrQ$8BuDOt5@F>V|4l3+|Wm`av+#Eq#3BR<6b^Y~2>*Z?x zfzh)vlkSh*FQl5g#Bf%Ne|&5r53aZ%a3BgG3yZOt*tsw~jNN`Ra9kxFIB~>*ciFzS zYkO13JS!oY|FD)_56Q}SU$I|CcO|UtjGi+mJbIR3N*zPIGj~uMhvSkye3+Z}nL7`F z-LE^1O0{FQmea0trj}@?6_gU&%7)S9IGWI3e2`mmtl|)-kTpX?uqY0YWBfNAM|pYm zL_?8|hNBQY#fsl4K++~S9ClJ~o{r`kfMXrAx-hrp&JF|zSx|3zO;4Qnj=n(;R0PbA zTFoayBuYsQL^jq;`-asKYcRZ;(I|BKR$W}n8|~NyRy=T9cnt}QUM{`7%kSH)^d%YWz|e6 zr>35}a_O6V-G$7_FRPcED;5T4+n)!ubsNP(s#21U$?*=)I8U>xv_~DAy(?e^((brp zerGQ`sjMJ!7&4bi)6boxu!bmx!q~y2u-70|v@=V5#U#hdsW_jAjW}-Valp3gPy`uh zVT$1(iQW3O%~(@@8o{?=v>t+PjRp z@MZe+oOmjzG<{#le8Q9Vu6@Z+p_iIVU}7Yl#-6nDS_}B%hTko*I2! zS-e|knAT-S=C_b&6W-a&?F+8`o3fjD8JwAJ%&Enz)EdDY;lY^+viZc5i$XZ%xCY9`K{D;#G&G*?pJzrWb#9bTm$HK+%0 zqPxY2VjwWMbDLklw4GOdqHwkziRo#Mk-*ZQsfWWzP`)zDC6ulT(QuO>R{e+bvs~ir zwRb1Pd2~fa#u^u!**ck~zPOjNRreho2Yci*`OE(41kUYSu4`H0)$q^5JWjs3UA zQWMkLmuy&~8$am#=!X+Rotmd?E-|z%4xe_cuhl8pB!Mtr?gEJPkdihk&@)}WC~vaV zi{)!;8s)?eMkkNha9FK+v`MO`kbg7nTLA?6R)yi&PM%(zxEU-ReOv>5Rg99JPs7)s81u#GhPF6EL3Hlgr;GoJ?3dXn>TLS zo|1V-DenLPDsymj4}<9iF4DfzvifNQ10$V8$1MMp^gy9+=zOT}ak1lYOH!z4dX539 z&jvC?Qz5l<2j~g^NYk>+*Kn?{VVC#yY%S>{%QB@pMdO z)c%wAhG4Gaa=MFEfAX4HhQ(I0&ba{wE!(KlwWM=tX>n&+l~F5R(s^Swj#(gj(ehDM z@{pTGMnh*jD8JXS0VZaVxW={MbsB1~jG@x(Z?7tP+W8g59@M=%(yCnkA6M@I)^xh& z4gW(E5j;{v>b|H{i3mvuChEMPf>Od#1A)MyB@pUBKnF(mi;9fYr3MlbCQ>5OhK`~5 zGW3>!lmJp33xr}hW0_g!T>E|B9p>!0cHd{X5JpgQ^ZcLZF2CYFjpf*t5!SaAz4Mt| zJ-IsBf4yEvgOU-0?iKi4UMGYv0t8+jBefXebv2)S(Ll0~&Yxe4@$xRd`$k6xQN<5w z$IBnBa+)-2y5l=eN{3A{UJRtiI)el-OF7OS%V#ul%b0?Ob}?M{-R<3pA8YDLVBSx^ zn`3#zA$^0~CGzuQ2*8AHSY6+9;j|sv-E=Z=T)EgR`{`Mi9Nd3BQ@C0in`2Zw&3=;XkH8sWq8~W6}!~v<1zAE>NGzj)IZ=JX^v5+@h+jPY%53> zB6YR zITl!TE{}S}m(P^64j$+m$-nu}B`3)qbamBDIv$&{F;%qJX6b`+S76qJ$me$dO)d_ge+)4Qf4x&W~l`QW(-IgupspZ_NM^K>T_ef#rLTaYb%{hj)ONCrgbAM4NK=qT#|NR2v|zJ{ov=747Z z{mXg*&>dms z*MLj*?B-zkPFjdhI?G6)CA+WyMID2K`dDAfb0J`~XrcsL6>Z1+I2%ez;bfn(u&kVk ztXh9%E|S^Wt(88zYa|AfDNt$;H~(Le%d(aF736H3yQ9*gE7_AHG)T?QnZ}cKQ&sj8 zg7Cy}`A(u&HivViT+ruqgva$EUQ8`V-PfsT4}(*MUK|Fcxyg`+=_JOrI07r85NK9P znwphQnCD%Uu5!??zx%nryvhMu=xG@Ht}R8vX-fq%kDpzt#blo_>LStW;yc$1o1 zuf5M*+>HNO>FV}-YDs|?GrQEqAk$r(9 zEYpd>H`S1Ejf_UpLS*92M6S1dGtD=Nw;G#6{Xiz1gwsO_06_pE*7vHG5BR;U(QbbMph$HkaqS^026{D()JDnO=qlf*8zpnl)b7I^n;xOA{ZLF3@q39g`tIXSO=I$x8b;2XP2QqCNZT`&9DY14>5nC;fEk2NY02p zvm5A7B-}!rTW?LAuWvxm0-Ep97N8Sz+!+dyy2geEQoc0Kr?WAp#)+n*CJj3KIA+e< zh09hiao&Fh3h58jyFSn8I;^!aVu>`1&#`ts>2&HTmnq&%4~?{&sQ^;AG5 zAb;uEec9a{{MaMrxNu}~*FK$byvtE12B+g?9b)Z7A=5r&Enm(#+0;9LuV3(FQJa=l z4C=g8)uy!D8&OY4bRnn4FY!1_zxJ)l70tOFOj};D`gutae~8Jsdzus2 z|LOel#p+W&WAQV>w#WwQ5+JK^RUhU%(DSC2*noYW`}1gsORNPb7t=GIHs?XQ(u=8PU)po z&b(%?OVU$D`)|sg>bc;&^yXun;2{0|5^qqNz;j5@CqdM`?{4nibN9G#djrDX;Z1ZiD-_*gf20PmuVV(B)N^HFwoJ|ZPuW|mGdllpbi$y_~BO+ zD2Nde4QUbu`RgS~ON{#qjoPLgHtUPM0+bw`E7!u6Z#0x!h-$S)Os}B#;h7<{`HHI} zJ_|%X4f+giI1ytx$Ae;&LCLvV+R{UE&-ZBWvL-jYsYx)PxYUvJL-2BE*&6v2P2LNJ zL}&Q0X|eibsZl}HWsBgRMeHL7qx5|kc$Z-LgbzIrf&AZ_; zI?$N~2WbpWF)}jcS)#9VSrDW2Az-Bi2Hpw&%^_|j5ncBa-}#>~JL0TE=@m~M>0BTI zaSqByc*AreO5tV1lcj}DGvP%uZ(JoFlJxD5{PU9%&*Ue-BCSdrB5V;h#hzbXh;NP& zKFc8_5T`9ykF3f-OHc+-$0>T?1Tkm3+JsBxS;K+5Eg9@9WCuoU7CTV1v6a|$tKO$n z2O1(O+;G;^a3naeI6`tI7zQ~6JzBV(lD@gCQVC~r-madr&3k}VIj7;7tf}vLvv{Op z5&)~RK!yo4<%S&(A_VUaW`fXY%2E^{jCopr&e#&McHnQ%BOBtq9rffKuJ|5@g-eJA zGp=GVylyuLz6VCjj)+0LhNb{fiV4weghR{P$_-?yN)cQ;7gTM_49)fpBVD?jUFpx2 zOMMdSw)e88=JRm^Zx@!DDc44mcXlB z18Iy0^+gIR2zevD3$ zeC#NaoJLE2jkF3|mr*}GMzj7$Dg5V?r-1{Sq6RVQg?*?4e*1?@{U7`bUb`bB{9mW# zkoZ;=s^mX@K^D5#9RD$M%+JR|m}q@5sMs!h+#;ypk}%!(A;By4SqP3Jx#drN$q{Y1 zO4+OF;-F6G4^=*<^ftsaSn7BIPskZnT?$XJPvNm?)nh|Pqp_F?nbE{)cnI95jnh3o zx=t}8tvs()T3Q=NQn#Xw)qnVgbu>(VV*S4vQ`K1|f(|!aQQ~Ax(6iXww$_~ErOg1d zNDwFGm(qK>Uv|;?8Y-(^&&%=s_n}b@ur5%81JworK)gr@aveA1iaBO0exyEi{iI#` zge1}-Z(nRdc;iH%+fP4UH2<;w92}vp-pxS*u2Xv|$7BJP zZz6@g*f~n=K0mrPjva^Gl)dmfnz6+lW2q5iF!=iC4}%R(JLW53I`x#1o`5g}-z~P6 zpJY?uk%aG@gYDJZ+t=`r;^#k33a7_zcR5e`K#Qfu&C0S4)!sBm5md93x%5gmD8I?z zaEU5Go51*tP)HEm<7l~HXSS;P>$dD9ddx)TgTLaVPn&ng+MG7d18NCOAyL2I-n`XP zlrC>Rd0*Z4GhItd^>+L@2(~#TA(zkY8fzHsYxaK8z+rHVKaxLNUX7Xg|7DU;(i<4vRshpGd(v5zt z4>tYpm5!X@3k$@E;B`1igzfv5Zz49*+U6?rr0@fNgdD2*Q4o>x!b-FQH6J4*Bq53# zf7(%DeM#RDnQ;}6y~GOjHBN2bj#Ffx&IL!XHG=^y&a0^bFB6J3X4Z&Oc6?dlbMOP9 znYWPhL4K10Ll9gIP(w9z9>NS1a<9qK5_OYpCRUwrl{cS05nYgx!Y9mp>!OL?!lZ9M z!79IQN-F>6_6(5F)lDF3|M~R0wTHLF)%De4DSNSWj_h;haQlv?z$Dh5TijwUUk z{Hzm*UNaEW_k-OUYTV#>wbfCdXIziEBN&9&8*XL*`e(ql1WZGe>je&{q77Z>q(!$d z`kWi#nLdk&v};LWcJP=}cD3v7Hs5VtjigHNz%fSoXCvkxxddeO9WHI1mExl=0Hiin zT}D3v7rz;$r+GJxZjL3!!1=?+_fFnOGTSBWAqN<5^(NO+9ZV^1PU8%2#fvO&dH@gj zvEbR|_WCtq=*=ctNAr=Q#InRvFJ*Q@HnS$>d4mANP-2vItg2Ztbq69G_mFL)G2c?7 ziOF)JOv{BiZRtt*FiZGlW-MG1hpoasQX!bhe!7&Bmo{`t66|RQvu&rtdi}rF_h!oSQp~a7RSu25(ufXe zgx**?^hXx1Bl5}2Kh~eAE27K=!x9>h<+zWqe4?*l$3;YM>!75l$ZmJcC#EMA?i|4x zcl%zlzNGwQ|Fj0CCpZW(Gw%Qn?iq%oykQRe=f8p{XlgvUK>Z`GO1t@NzbviEaxH$r zsZJ+9I;e{Mx98O?O94fo<0Z^di+T9iT>$@%A!L%RMK^kN^a|JWD(}r}_Du3@s4taH zaM_Y1roS@2HIouee`ub_tg(!g_mdR=_)9e3yXW$qM^16y?}QpA2dIBY<8+wAk%3e6 zDM}1x=M=?nzexzKJD#8$c8K&Twx{pSx?w_~>aw{*O)+=}d`qmXZfq65-IXrZZcga*cAR6-*SA0Qr1yOn&j>RJ zv=pdW#>^?><***a*5I&G9!BZv%b7QHO8Kdy(Uy@$+fQUaSAz9C)#3)Fn__n_IRoX1n~+Bj$e^gou;zorQUlJ+x+COyX$+;8 z8{cO}eJ5UjmKEpcSJHg8I@eZ5&B}0UtW(-}X4)OZ|DD0ni_wb+2O%K=7(XgXFwj6l#&a|`=P?|&&J6!L@*PAO`od8x zmI5L^-a4rlcBb^9Nd4IHQrn52GmBkKjXu+(FHGF^q?BZ9-)i|PGkUX4*XLiIH71Os z_1~hIP zqc=uhf3srA=0Ms;UI{$mOX_sJ=Re$xvz~d%BO0qppLa5Z6{ZU$a1`kTl$x3fn^I}J zklIVW=YGiT8tK@IrLsw4&Vq-X?P2)mS|+NlOo@SBH)LL@a}0yAFm+O@V0K`cN24)E z(>c7cw9#eWxD|oJj`YS(dwNf!Wy@y8dJcpl{-h9+lLMgm!A?8S4h9SdZdf2nGQ%?o z3w1;V;tH%Ur3bJLCC^M=dQWD3{-nw&!Dr9fc}h677O+GA)rtBJNz+)G6&UpCryd3zH|f4q_6cIX+ZTV7uTB-M9wU zsw3WO2T}n*vQF9$5Jb7DckUIRi8xHq*Z<*^XS9`r-Y4;|l9yH9MSx%0UW}%4wm3uy z$>oARW^6vs1abQPKW}w6XO%pLV^%|Mb;@=p76fRoINHY;=-JzL5ue zBTXpknn8&+WKEC-%a5b9wC>?s)))a8!Lx)`79I`LH~woL3Dgn86ZDE+e)L62du&(k zvR%$*BjI6lD6`$=clI+OD^-b40vM}9`wRS%4k!pv1g#pYjzp+M;TCh=JbhAvwH)2@=8yDuRAmgxW}n!Om0VFpj@^C{P}Q>c zvW^TMG#g8NV#*%dPn+Okz$c(|~d1~XOnRyNyJ`OY)%GQpk~dZTE;d}^S* zEC2EivT#{pFWejfMQ&dcs7;}`)I&ljlyb~E##CmMM;LRtX8FbgZde=aPv>QJ6Axxq zhxt61)B;J25&o2r+!{U#5aV0 z?-t&D;vj&!p3CB1n5ZMwa8MzN-v{MRGXy8H1_5PiWY@y>yW9L&DUQ+%Piel%4yES1 zz=Zi_d)URgF+?QQ!fhJ=TrFM>*cpN|$pdVij^l?h>w+mLyD(UrWTj(-Pp|{|gxctf z4}Q2HK9#yvIZN1TQXQvO6549#Kui07MK8;CZ4z!I_*0gWf@^o5-nOo`Z$$4DaN>e( zIKkHktqyC&pSH#s)aZ~6*>|3WEvTWZa~?l`&8Ts6yZn47YC=tIWo0ltOVN*X2kDJP zzyetX+PHcV(@euGmunYA#ZH8%l!9n%m8tAv#~RE_(p{Cd&bLJqUzejDF40o1YwEWz zy2jO-TmCnznu9`L*;pMt>^z;0i+L4gu=94=ycOwBBVF^9Clp5|iwn1OQ@2rZ-;XRw znd!#1sVEacpd5p*Xx|LC=L8XHYBV`_OZUoc{hhlxDw+#*TtvC>=yq{{XS}p~XQls; zW4HjUO7F!n^tS}rTfOCeNFPGmnN zv~gxBBQvSlbHn!ha6?<88i<}c z=B|pD+B#m}ie$NS9o?R_c09Po`RJXqe4k@pbz!xBe)85ZW+)RSSkO35jF0zY;51o3 z*OpY~yB6nd=ZVIQB*~^UiOCj6pZ95jzkE@~W-8GtT6vvY3-E8^2On=YG5;;(y$&Iq9qz*Vr7mj7uF?Yo;k(--=>tJ}e5yKk#Bv?+)Yrbqvs{89kQVLQw-Q*Hbt zIztqC8CYV1Lyknetv?rNa`Gk}*kq2nO<1vysZU{!rRZa1(S&ce;7NMTzVPvRa)D2Z z!_oA935GeApVI%~$A43!anfI$wYX-B-2ThI{wVy3VYsv|DJ+ z!iiD8q8${k{&+qjHk==>sS%AEp(z<eJ(`P7hp=ydA4qYq4YbII}jAFX_`li*MaloA4eA-hiHp zVJ$?WSa52?QnWri?>a>*Hh*NFNjokfXz~7*oj!R;eRb@sQOAQ*76v@e44!A;)jnY2 z=h|oMNrSb5c1>BxKinaar4a?L5cm?NJB$lt1I>Q4t&gJLyE*Z%(}m}LOq)q6Pw33U zwUWycgme9PgL%)};Px&)blDYH_I0eoM^@X|i90Lnrt_oI>56?-rRwP1xbNrPOcxvv zIjULC&(yzfiJcU(VJ9AC`8pqX)5;rsnIu`FF=GRI=xOvfKiDD}|M@Tf#-(ibhLAsX&Fu{&exUxbp0?S& z`6#w(dRRa-R#VySwL}$8!?XkF7vK}eYR_6F$2@N&MN@>`m9rk*a<5Wl2%8>^Q%Nd_ zh6)QlQMXlaZJIxoa@T+()cyg>OEJwOzz~jCP54j-*+R-yPxMQOBZWEXP`vG+tA%|` z$+sMWw!IwC2wi~Q_6d2~2;HSKsr@*O@FsmEVMEgGDWbPJ5c_{iDu}yuBM)OKNPXUL zr|moYhsIbgrB26{R_uiU9Ab#ueUGM*rAMi`wRpCwDc5wq;QJTu-x@fDfly=z2|aX4 zW9V;;Iv^`9xFf#Kh{|1-W-H>Ts!#ECLuqE-Rk!7}o1F>-;AMnoH2UTi^%Go{n5x8# zlma{6AI#+ovKQQ8`?6@N}>mZ|S$-7Wheo@E08Wu>V^ zgQP1o%~LG5yX`aW7*3dqL72({sj=3oPRbPv!r(X z{C2CTlJ@~yMV)vs%$eDS)=-tmVTx|LrC)izb=F|3+;V*{fbf|+oh=c@dgLfU8w^w; z?OjX|dCjO z*yW>vKlDD#65@`ers@%KsI1XDPh*V(I}O6=ygyQRuH%Xa;gWJz$gh8Y&C})H!z^f6 z07I2!X=w$|o2ttLLp>TjM-ekop>_Sx`3ZgpFFPz!-vXQSarWQRW{rN?rc=b@p3#<) zOX*2vpFSMXiZA0cPkUsduGRDyOEcD%nYC#>H_!AL2fu5%ZC};Z_u|Uqfsj+v=-!4j zOYwCOE*-3+cU(a*nARzuZi5ib1~k^ywXU-ICk-^zG*FsWXdr{~55Oh_&Qe6d)$C+C zZ<1S;F(bNm>J;X|8z)G&a;H+aOg(iA9E^kD zvJNbkn1OJrj+e4_d(W9^=V_{+3h19?EJ~?kBJ^s*3Hxe{GB>MDBe z;l*{Ay~}EInsE2x;uGp@9_FK;KS^jy2c>rnkT9)$+?&m`*AI^H7JkL$C{Nl;NM$;5EGky$;6UdUex2`z*M1GG{ZVb3L_ z0rrkGzosTRUgvJUeA)y<+n;@%RDr0Yco=g!{t;S|b_f%-9$n0w^>nC>HhME$IAr#w zFnK!t#_Ok-2!9ZYINt4_2yZ8KyofhnHZr6ie)7C&oGR`!F0Wg@{p+rOb81gp$nlVB z$^C>rTxT~!g$sb2aO+%i8<#T*Jqlr6Zfjgp%p`igvtc2keJ5OCNOM!U7nkPXdm8&~ z;Ck$-I`peC*Vy_A#h3^O2XE`+mWK7~RAHNKLoAf%?RsW9fY*iCCC)(#NKAHc>&^dF4)!_slP6=$HvMc!xNZ90W z|3oCA6=u%&+>mmvz)S*;1Mka~_?4CfMKdcmMR03|E;nFBWv}mfLnOIQnIV=g#C;#0M(hc$tvEx9;ZKWGp0> zE$%medGf9)v}=Cz5s8~|s$j`)ueY|_)fp0m%NX0C0Cg(FBrL>Inkr3BU2M;3Rvtw( z+V^SA$a6zFr8~;ZN*C>=try-X>a(do^loe+_eexM&swUG-ZXPZ?9urPxRZKCgX?GZPH})^#aW5-;=h)n%AMOyx~(fQ}tV z?K8sS1^Gky2HVSaUEh<5AO=L6s-Hj7d?#VSUer}*pcY4VxWn{k2GSRPl+ zXnI)3f_&V3|3piq8%`(UV-o3kJ#Z0WtHNxqgOoEJW}>WYX{m9n872tOlflXP3gJar ze!Faf%&wkdk_|{w3-hn9AL(bCydqFbs(3S7Yk4E9-@Tid5$Bg@t$O@)7D?UuUMx3y;j?%^y!KeS-#pMY_N9e8;Mp}0(!O(}VYO@dsuW*e4UB7j3MCK}_rj=l-&!i! zH)-8*K0rt*=MocY(oNLn#h_CG{|*&ZGWRgjs-d8LJ&-Dz8oZt@uFBwitHpdwxY{G3 zZ09{0$MXNx!7}?a;Wa&D4EqrF@$ zuuM*g>6X3rt@iB-7pir7EJgOnZupsO86+mZyvoB}J9_tRD00XnVVrartXFSD*LBT@ zr1rFQEfxHJVj#8WaY#sHTiQa+O?0O)$u0K|JTO^$;r2vQR9Gg;F87Wy*WVA9rJet@;CyH$Pt(BI}f%UWmy%E77ekUex|WTZ|o!eDdgxe`h0O`4o2S0OjCG~Q1Gs5>@O>yL$PeWhOV zNxUM0D`Yh0=Dh@}CiE@ALwBz*A{^Xgplf34o>}P3Ea#3af0Ou~)5L?k^Ci4rOV~H3 zl6bTFr!4TaH?wHMh|^=q3S8RI*nAqPn8$G8XgrS+z@~ImOM@<-6 zmOajJ;J1s>K=)|IJ7Dr`-89R%^fh7B1gp=`P@f*CwOBs~I!LxkV)bIz>?XEdBpw^Z zl~LQb7bCsJQv_baw?Lt&D4={h8yby%T}1F$be-}HWSaXe7@NB;m`4*ik8NvQZRJ5d zSO%1=w}RYZ4br*~lbRFDuY4s!oqgT8uip}}mov}KZ4LLXE=rHL7dB&EvlvA9vCCVP zxS+0BApB`e)r2KT*58e-zz(%@u~8m1U+ZjuXP$(~72X5H7XsiR^gRkq=g65J;m!0pRF<}O zWrdW^f_xo>WPxN}cZ8S-{K?pSbnylN`r{WXxg;S6Ew;qW6erft6yD)l-x$WMY~V{B z&Ti{p(T=x4*H&j|Tb!Sa#M{v+gyqw`{!jI?^sSjK@A8WTSBYnO@~mgvRCHcRsn{bq znthG{Co7~+?iN;(x+vXnlRrZX@2l_QQ75vhXO`AHT~G}-nv>&9%=*8K@KYMesZh3A z)~M&;vqrH`*VBVKQahh+0}y3(TitMhZbHFI|Nc#`rA|x|jXZj}=V6d{y{es?et4O1 zgp3!;c6;o^3z*fvB$!dj^3a@ zI-f6iea~>1-FoiFe~Uv1ENg?u^_!TVXMZHwZ1uB$pW;&gNc>~pm^(o4-bs`GJ@oeb za~U7f=6gJs7T@`=orq3psCihoI=~DnrGyQJvr5#>u|!^ngBiR?xKPuEQ^Z7s(yZIc z-{gt;LEd%d+z8g?J6U?Mv2i95Z_L*Ga|Lr@(Z1?2f@5wHU$(wJ9V<4KX-_9tTAbNV z;mWkfsjrJB@}6u-JiVd7w-*zlFGgbNfu0!VFsHQ*xNrGZz*rS+5LIof^pm<*WmF;VR>0;NadOX%~*{Z=T%VwBaFkDQvJ#b z5qQ$;FlvNeyW9q_>J0BZ+uIWRc1@)eoTz)BOyW!o!p~^vn<%PVr7oR>XO6Gt^Xg@- z(3HN_!Qr@Lqj;~Y;+c!nht6!BBSfC~@xsh2X2EwUfT{ZQo$S_f>8!p5TJjJQSDR#v zu$?+qJt~s#TY!)U#@R z69hH;qf_0=rhCxq8%^($ZhN+GZZV{NA)gn&gkBi<(jy8^Z5bz>Yx$n~rP0Q6m;Ob( zN12n(6h6CtI6Jc<{1hgHJF}jbSJ>w-Ov0vsd4)T&gbQjoM`|6lC+V3T57N=RK4IvH zD2*w4r~tTY(5o3mkI5|dpisnBF^lYE6PeN1J-f#Q#ssK^=%(+(I0nW`bf;-7o0t;H zycqRhh7wm|lp-rt|DZy=LSSG{8;nBR8P>>%kOk>F7g=>o3@F~}FMU>0c<4$R2>Y-c zE;M}>N7@%i_y&BYIP7#pV+_;*YV7tPtTVSXo<^^bBV9G*Ffd@*-XnFzviJ64cQo7D z+JNE#1VRyP-?*;n2AL%H1M!;zXFNx$?&-@d@t?IkS?3?%-Y@P|YG z=HL1FowSy&1?D4<8|OSZ-t*#j1!d7!f-#J<*FAJ;$K*f6ESEEWVYTtiTQnU8o%QTt z-8=us9=lFJRcKf+QD@=Qo*OzUc|<9nj){swOQzxojqlmYgg>F%DA-yV2 zU<;`;Y}P>KbFSqa^C1m)<>rjeGrb5} z&Pll1igL=%c(tW;#4y6F26CovZ06eM2hnrz?f8ZkP-s92wNOQ!wks72sYn#4*LeCc zy1Kep6THlk3U>;hS&&?UWga@eHO;I%bb)XVy$Z15eoxrJG>K>=!1HY zPNak+x%v~n^^703&TShEzFJ;IVv1cAEYLy4hIDKd@kxIN&&1u@!J%NtezHIu-V%Ar z7MHf({wn}#1VsEfl~!r?_piII#eQa_EW4)7_l2bOJZo_nNbBi-L<)TrLJaWaykjoz zFmC)cKDFh3z5N0|m58`FPE?#!m9zX<&A4ikO4j_QVNJsxN9gWKdsjqAU4WgXa*u=? zMvy^y+aCdOEofLePUN)?1sKRGH3{x^%o$leQ$`O>n}BkL`fH2b1W0#nnYxYM5AvndHHXN}*ZjyNTGL%F!8|r~L>!cQnz|nd zr^dN}D}?0U1eCLzcUHAnh3gj|f5KTr5lmx7p&{UigZco13(4#P91a^nCH|LdS5}<> z4L2K)K=>UIc?$m|-X%lWIwi&wPOFMsi$NbvMN{~O%VC}$icXJai#)EXWH6U6Ng6Lj zQ-4cLG#J!J;a)FACH?r#?R$d1;%m}F5=K8%jk~=|iaQ(E)bJLP1?IzpLXA^;$s(g49G^CQt03j$wQ)f1wPYA`c<+WEYXd7H_i-Q417t)Hv2#XLD{4&n+a3cPb+q1u>W z`tHlIzT|L0>?Un3-H1%Y4IwNg$~0-5D4%&wg?$Su3)}qNjCQ{bB?V zQu)S()~%s)EW0Bnrn$I%#nOEJ9aI%8=(*U~kj$DR%|<6hkL#XbRwl-1JX;XA1KX!Q z`--XSYvy&)fgGl>*_66%A(^?c}O9Hp@_{-w*Vvk7P5ud zp4#1zfbOp6pWcaA+3DBQVb`p$T zJvVbpJM$4fef*p6Ww{ooizXx4qV2yG{MUgX-m2nB;8Npt;Az{lr_5xf+l#wcpBd3B zow}JlW)pB+Sir-AC?hy>rJ-?{OB9SW z4{9j8RI087cQ=deuwGn7CsIQ?z;iNO?ldPX(PKNktsPS4z!ohRaW8S!i*?AO_MAAO zZfaN|NwyvGuq{NX=xg=NdW11oeXbk*JwhTH$L;HR&=PO7p`*WldO2Cj-C)N3_~VZP zq@Y5jt%nlu^a4$sD!pxx%I`u2o6P|JYcK2U7{ zsB^~w+s{&w1)J{kC6&!A)55Zrv?lmXZ%4ymSjU5)@g~>0LA5y=9#>rpYJ4mbUuJXx zB}e`S;)X|pq-B-8mP*hebhd!F~TTt)FEkpu-GdwH7-hO0zLez)T_Pw~xEw5>1M zZt<$qa>l75SyPy1`o6VQ^_IP?5>XoxR6Z^bZVLT+y86rFXaBBX@w@1dxaN#=Hhs&n zPdjRtBfI&;bCh??m0g3>_5FoQ=KjQCA`PY*z;C3D;)nX-(rHJPk%aWL;V@VGqAY;t(e(SD zZ@U znU0~{sCngPt7)kafMG{Cn=JK;`YjQB$h7_a;8w)dq&cNI42Dz7UO=pX1&j(9-vBQ) z;06v%;=5w|$~4q+so@*W3%1FV(ddRPr+->wFnWYCA2tZoy1wE7<4enr2>cz|abH z7US%DkGOi|SRSuin%haBdfU&&K|fRogA6%(1$6OyT<7}OJn9J7%Vg(19uz0zc-jv&wLViW!x2!!7yzT|p> z(1LDHyUQmwH34EMH*FvyiGR=#l}a_a0%vzKw_wclb`A@*gj)_Q& zBxu&|3XNKaTIvX|_Lllrq90vKQD~dLIg|eN4-ld}j-qMzegFD#T>Niqy-QsSm(ED~ zUeGV>8>h8A4+x0ge3bB0_4^C^mpbAXT4bRWyTK0apC?x{D9>gc;fEHd>*%3{Vk_*} zB^1?_b^dbUU6-@3r-;U!7h6{6^f-0D>%0E!B*xs)WG4qu;My=o5~yW)|sLo zuvNb0_=oA?vsnI&`!t-YlT)H=Mk}%wO26mTh?Hrb{4SFu@px~xc^~PL_>SYpH8u64 zp44d3Ci}UDhG+0Nm^L8_NQbr!lVSpaHCQ6z%47&txw zrK6(WyG8W8`?V7+p3(WQI$}pbMhj$2HPDIyL1HSLAFx1F-SNm_mZAsTPe_rr<6rTt z@Y<$MDu;bTg-jadFpFl@7vie^<%fT>xmB_L{*%;x+D5)Lp+$5rel6PP_wo3B{`Ej59p@M%Ow5D(N>;Tk?Vse4|I+ z9q|2rqJXH_*l;^XPjtIn3pw+{mDGCKvo>d4#x+uGR|6=wLV=?d-mafF*%@Vh8U;eO zEMU7pU-yBwuYcCoAxl}Q`;l1(w$b|tI7e+V?v*jmZy9}=HTWf^ez=NSn@yliB~_(K z=-Nfc#5_B~uH6wW50C3Ahnu*QDLys+N+<1YO(+j^4}w8%w(q`ohRTwEqS*Hnd2r;H zUl2q8ZWfIAVFH*KP`dc`T%}8=w0&apoWTao5hP3gwA_nx3oh*h85J!hjtOY2!uJn> zo*4-NpMBUwWzPI>&yOF!JZ;&I&uPEoymrlPsS&>c0}T&k)GApkJU7ccBphT6&95VC z$rxKH!!9{x^?|9rrqGzsPB5yry)QdwbCc^li{8BTWfp(be~LgKH%<<{b_xJq^s78G z8UGVkW_RdRcx8o~tAUdy0rCw*J&y%~WQy?<^1vk^T1`%5_#nQ9CTug8p%u#K-!&j_ zw$wqdJ3$U>KIDkxc&7jc_Wu&wq>4oLs=EVV!75dWq zp(W(=Zgc7`F@Tc6?>$$$GakEdtk%)8;ZWHwd>{M+<63YIGVln^lK+jUAm~E`Dwq0G z8N)z&XqRL^a|m8*Xt1}lx3X7N^S+}-rFzKUyo=axGNTEGi9wk4lK53Svj}sO!6;Iq zfB9)Zfz!78(^npdwk$5jm0xm_NPK?H-g+v3%CCk4i>)f!s>SzKdscd}2R#n`z_lgn z>R^STJv4TY)y}zhIE8^$g2@p?@w8)ec>vAeNu^D_Ub#bq`F3K&YqWuHNbt_e$Osls zZ^g3!D+i@2u+>EIjLdgs6ta7e)NlX7*}z3P5CHZjDy%pkIAI4bjv*LCJKwQh#-j{;$&;q_$+w(r>@(>4N(g}Zul=UP^FP}2U2=cu0$mMDnpbi=q zVo;6(Z|9;Vih3iuw(jj{Na7zsdvUrFlLZZ2Ly&pa*kpF`FH~xrPQ;yD(5to`nR%_z zJ32(C6JS6X6@LHaA#4Hli+=xp(G=me_tdYU*W_bEV2epYvDA(y z*GqWCQBmeXvy&zj6BWZjlb6*>!$DZV-VsrXWvR57%m1r4w4AoX%y@_@aSF@i(uiZ+ z#2nB*fhM3zDMJM5kF6N9QIhhk+5WMJ($y^&aQIWL64&aQ1@V(Z)L>7Bn?N`r3qjz* z1R?gRoXMNKjf6ZB^Lat?tocM9#ntxHr_b=^Flp3Da9M(`P8#37s&ZDao7VehECZgk zTuRG`3%OY-?H!NoasJF6kA0`>y<9sWt1ELz*+|^pOQjE5yH0g#7b2)m<(Ot=kQ}Pc z;$>J{TXuACzwBcBc5loF8%(nAKet?nEss1qh?JO)MXmZw?Y)9Wy#?nJq3aV-o?woi z`FR#&s^xkLkF`2KZX_hwj~nnLH;rCb*-uvqWYn6xe?1G;zEMFkf%%{qTa})Y#9KGo zj>NcTYgI=cE{^rc&NH_~S^4Z`)>qa; zIrXjvy#AE5VTl7;B?nD^*pRRo5IR^8Y#7ZQL=(mU;jCeG1#8Qej8IUsv@6KK$+X$= z7AH~Sf*srz`*Lv4n@_9Frx-$ek-Q5GFwps-dK)@>I~!|PC-zc;mM>Qb zJ#ZUAaend{25T6_8X49$oe}$02p^!5za1SNU0fRS@hd7PU|db^k}{*11rVVE{q>09 zi|>J#E^A5e-{(vbB7JA6HANG=8k?)1uwN#UaD%%|e(wl0^+6c|9PmSwppnnbA| zgGW&1&ls>0VpQfk$t-mMr$fyPt-IFFvq1`1?9bJLheR5SkX@~;JyxpIjxHuOLCZlpCzzFazz;a^s_Op0rM znmgTH-ki2RK%8FL@9`{tPh6FT-sd}s;GAB2di~*W3;__f+4yH{y_q$iWum} zsIdO8F#Y){FxX>2o!9m*9BfC^+h{MRV+2^@^`pRG3!XM1hehGVEjOShplmA$oMsHr4EleX(c zQ4z^gR0xU37(YLd@3cK!l}Tt912Q>)HD| z-aCEv_uuzBdZ5RV_BdSk{k!h#KCkmS&%;HYQ|))&E*qWFlb$EmBVakf(3~4|y&{$$ zUq$wSRMuXMAD@`ycK8&r<4kJyUPLMzdEN#5aZ`H$iPv^kUo`M) z+w?)GB}nz>jR{Ud5eTBTu^YRk{7_S?i?*NML&05sqyzRPVf0L(3_)Q6XsIciDz79CdhGC=F?HR$CzNfLqLA664YpIJGj!KCz4;+y+F*wrznCL_o|i2Uk2C8^ZXxO@KV8$AllcRj?O{L~ z8-}j3+>JV*K&RozQZ%?ELbSDks~e;rLWEc=nL!{gb3Ed)>K*4FzPP=pRqT9P#a*F} z4nT!dw^g)s&t-$(-X5Zw1K#0p4`}j$dARJC5M3xl(+r}a%0zby`E$~4mRF<-YPx^u z|NVdd{TIb2L51k=DX*RQRN6ZrOa6S+l0d=m)A>As_~)C|B+Sk~3HRvXkE2_Hv3u*k zRt=v<(K)X5Rd-gf;VaxAE+3Dt^?0HN4CeXH=PP6Vn^zvrqfAj$DO0*8z0BEJp~QKJ zs{T$CAe!8glpc;0-_f%pl)^P8rqkAaD$r&U==h`AG^{SrxR^j_c@z*p-G)RmeP*Jo zh>h^fE7!w+@aBt<c%02HLKHGlbO~AN9mrPgFnJG+yIPKb-`-;Sf=XNA^8?Td zND*WWV)m^BQ#lpU@U#Kwxd5RO1&ITkn+ff`l~f~NCCfI1%bgrOy*tVM`QwJ!ia`A9 zQF|7uyx4b2@fU?F8W`VJS7rX)#dF@ipomLT^TyuaxseS~5+>qmlmn6qc*)O-pSPF_ zP2+rRiGRsALRSW>w$IkAV(tn5kfvlE2*ixO4hHHZe0M7yrSG4`$+(g!Xl?8Lqw&|5 z?X?onP2juVy3x|!2VHE;w-di!JRBxT`IMy`+PJF~xQpMFT}87#3(|*%sdniJJAd0(0O@_cFHM-I5<}61lQM5!oSg zc2*y`7S5PKA{JcWaq2)-ICsy>v&WsyzC_kYq&=&hn6dQsadI372QxSWM!+A%56+5B zrqr;g=?v(Ci^**(YcrSiixKoi?KX&+osBZY%?+ZI?*v&fZqj@atJ$E4+Ns;X)>Mt9 zh#+v!REI!3W7Tb0QFF_4m(p{T*z)76;7xVG#72OR0_zDZZue8(;t?vjGIbNzj$Z*4 zhrE+Cy!NRBFOWW`R-K?Ybh(tYaOZ$P=49b&=hu^$1xrD(e7}>;c%VUY#*uTw=dTJzd=C@0`)HY>OsrM~Ajx6U^MTVSwVviDHzMdm0%U zz~uNM= z6`8B?zyDr6=mpVPdXx=PsHxK;ZKF>ln6o$uZ@D2nN(oDBlcnz~$gOi3(kr3z6zuGZ z+!QB}w0)^B`ooTos|BYi#bpH%8bk^WGIdiwJA68$39Rod>WN!w`+hoe@2^(%b zgGYnb4>K6*0k|MnDJvH`JZ?%((wD^@#&MCmQ=CE*cA9-SeKC z2$#`>XO1KN7B*PooqnM+mT#chr^z+YXYWsH1F=u{ zxe@wn?X99H=hJ)tR{j3u@(bnPwrOC?0t1<>ZeGH@x4jmdH_l2j?_{jVW5a^42{?%M zzCqJ26m?~l;@Z?Pe0JqWQ&;${(*6OqO#s*Jw9={9H%~=$G$;ZHHl&IfJAUNb zj}UlOnqxM=G9%2Uj&gN(Yz@b2OkOH%N41Pq>91cUf=?-TcUCcISmE&RzNo&9PqmM| z2jok(!PFE?yL2FIy`;~Sk)i0ahz z!2HA%jUGl_69LY|TFenAo0({{ay1%z&H?j5JReD*pmep{O=A+ng@O zB3$OZ5|gc;tex>#;!QdGfC=I)*fzw=r@+aZ$7?W*aJtI|epxj+o)*&`HP#SdS@{12 z7Bc!Rs7e>uOo2f@cX*CJa)j}z$zJbUHJ)kcShd;jARlOu3>@Ng9^{R}+mGk)ND=P;} z>2%+i1PKldF%>&MX_GXZl2h6xzRm|VGolLV%Y6o_R`L@rrv*nA66J%kWNCE=kd9ey zHfBXdW>2R%k7H?~SR*N>*lYaI$ji0pt>a{iek>D>WW^Ni#Z+;h5ktT*VBDqX=t~NW z#scKeCUs%%9!(Zq&y5n6nQRo0iDTw$Cnwd(o0lb*&;^c)?HU2|Fpn7lO+7P6M1=u0 zpy*{YUdj$_vR_Q-Nj?YaoJT6)CL_3|hsqMg}I#dRSDu zfb~uM_-uFpo+KB9GTN*IlZ)D|Uj)$y#9y*5+9z;u9n`N?>uU$pKTi%&^ga6V&ON*! z_S1z3XNs@0WleTeWWHmiSsjm95C@$EbFe*0q>4G7QDNN|*lVcCINQ>1u4frhsH1m1 zy2A5Pv^o2Y^=vJ1SC)%*y)H^M=|c`pUlP7SRMttUkx)-v_p;KWA|S-7_@koAQe{DB zCJZ5^@oHhckIdr}bK4PIKE{+9MxxF=8q+g}>by}Z60Ws3Z zl`X}d1K3L}nXL$r1{4C+G$3dp8wNR(=3}R=lzTo`{sUUHRcq0$m&S&7*W6FBYJhBf zUL*FEf-P#~634f-Z0}J5?wrh!8*Z9|138wUE1PZBo3fQ2|A=52MpUEUX@cn zakhUO`ZAo@A(uc*5w-Eazw=TaHtM0a@8~anpuNO)vLqCVcsv=R(P+HfiB{i8Fng$D z1V=KLUC)%kO=5SofszW01*paRSD0Drxye|h$?tLXyb$P<{2VsmF-DF1MXG7XM3y=^ zvUT6R%>!g9v`a2K43dH2Gjq~()YGYQ zvw-^mbySERf-Nrx!Bp6I13ZBR(YcLYfk1uA%pkG-;06c<=;79LYq3@VK7J~6(lL1a zI18e6#U6B~KshxHxxBb0mxxUM`&=RC=WEMz1Hstvo;!mpOU6Ly{$SW}uvYxF9mP4l z$z`At?uGAmFCP%R03Q!%ac;D>ZSpuqy>xjC)=om7cb53t^&IsG91fc-FDKVpwO~-3 zGd%-QU(>0_RYLkg7@)!QCUjE&q-KQ+e@zm!_CmC4rpcD`gencnIX0|A#3Pi@?0P8r z^jdwRQNM}$tb&*vuvNQR1gbH>v{Gk~Y;8~2u8xlD407*yhESDR_YQeLBNHz1nyfEI z@*HBFps~3ubnd##?gPtMc8u`U#k(UQ34lsdfza?8HjE#*B^Hxl6%7!hFs7^hgUSkR z2+$eGedq@8_it0n=9kh`c?pWlX@oG`kB2}M7UD|KY^~xc+!Kuocqu3=fH*M}xQ{8F zueJ$#`_Q6eE>z@6`mYq%+mJyQAP@phG<78$FK;K~RRZAsB%pSs>txZu%Ha*i&9=kZ z^Na0Slpl#l^)>iUUi)-gjHFfCPOYt^t$={p%x?0y>p_9R?O_ZInR&>Q5^9M+RWsJq z{;)Htw&P18OX`XfB6x!313Z@~U1`1l7fE!;**lR_lI`d+E|`OnfcY4W$cSljJgdJa z*GPwRTy9B_V$sIrr<&7FtmWfnZTC4edwjf4%j0+sXzV=H%r62(RY4W#4tSdYp{r)h z)$UrOe)M_h8<;-12On5bu4CxqIGRY&Y=ln5mX+Rq@YLHFV6L$>Y~PTEAgyYTUlU$* zssV{>^)XFt=f%i}rMVE$*atW(*xuPH>S|-ibw^z=WStE$H%&`|Kx94HfXSwGzH0m+ z3aSAa(*WS2w=Td{K%R|0Jt^Q^9D3+f_IUjGFJN1zLZFxdZy06H6PLX&O?_oRohZJnE-*PhDWv6BppXDS85VV5=y{Gq(l-N7mC2P8Y<5mZ^W>vSQ-`TdO zgXWb4mA=^-WJ|$z+VudaW5oiFp(bNcjT9s`CROzb# z?kz)H?be+mzBXKrI-VcXu;iKL)VwD+fZZA6hqnBNopw06+UdN=R`TgXoa=bnro*cR z3>v`y838F3eDzUdMX0H0!nCIVV6EXe>JCmdAW1ArK^oHHYaW8*%c3abo4vW3HpCUy zGi#v>LjP@U<6rSqG1n}d)g&g`b?8}-z03S>2mo$MSm1z~`YzfHcyhX(k!{DM= zxU0#i_@z4_qcY@TQ9aSD+eAVBK~ zL91er8v#+%m-CDY7wn44t-xD_=XnOhd9>#pWZsJ;m5Qa^K${vypr%pl6y;6Mk$Q(%B4+g1y5`}74B zm_m~PT*e|m2F>#^@{Q$zic1#)%)lV)R}2kPQv%q4t7P)$S8EmZbvF&D(s_3I)oevR zg{ZijNx;;ld$u7u^N#oCyjJv0qn%7c+)o!~_dzRG;XkjUdg|H(fDM^xiT;Y~N~yl~ zfLxP7ANK9<=#{U!*gUZt{y|OWj%H-U$0+bV^m~j8A?p`L_Fl zL#Df}7Ol#0GL}_Edp04f$k8xITUk4$#>S=@nVZALR6)4FuGdn_@k-!HbKC`$jrl?G zE)|YOkc;KeQ^4^T=n`1!0`xcr3|M7TeSl^ns4_>D2=j55f(z;MFtZUr?oG=!r`aps zbaSMSqD2h>>W~_a%D$%zBLG$A!1KvPk75`bV_Yw4JlqY|KeCMcT`T#}$ z1!7RL%zt%z3aAtb#2-J|b+J$f>zrpzxJM~JS{!9E`a2U+!jks=@6o#iS%3H1+5~U= zIZ&mFDuZ3XOf4r#o+@Ch;_~FCrm#lQql%pc^9Blj=DxSrb<>rIdfKo27GgQ)if&Tz4b0`9n?7YF)_Fhi^_?!H~D}#IV9hVNN+`e!p320|f!|V=k#;n_*TbBYNvzhQz znhQR(;t{;;DsA2}F0I?YagMAr>tCE^wii=gU>|vwSvtgD0Jr`)KNz^@r|KZxwP-c@ zY&}PSk`g}`5rDpXCBibc(9(`6a=1{F%Uv5&d!l{;qr8Yv;{k@fmdi_gzB&YS*ug6u zRc)Z}m*+F4Sx}T44`up+<$(3LYCQmY*pN}Bx$||>G$cYR@LUc{HM$oI5pt%J&}N#u zbq{h`N+9)unFYskrEY<@VdSIOX6eI(^Xg+!&gVIBnD`wWwoteWU?{#DsIQbBLNXk- zcK!j#;6qgDx2I z3D0b8iUMdsNoyMFbH$i3+jp76-z3qc#@U8u-`#wQN_jG33sgB>f7s1biVga8@7JT6 zH<+UKz3qdKK^F+*3VNvY*S_xu-uP02Qf@v4lKfIo>Do3AqTu3zi3+;Bb|*{Pi6!+3 z#k1tYu5FCirN43Z8ex-UGf!Uc&A2xhf531B>}>!qu(l}%+?6A)gCJ>xkd7#BKONto z$a(PQeX|jb>bgO@SuOPCi&n1n3^*LlK15u2-4O*RGUfp~p8&%_UsCbVJsdJMh3zC! zN7fZsS}3|XY1z0}z+SvIOfrja1}-b0m$;^YnZG@TU>in) zp%S}}4pzU<>s)V7CIrZmLuxqfHNwY^?w-n;&~gxBT6prIi%462!EXWEKam3K+0j-@ z6M5?@c%wSq{*P~1W)BU-0(_g~WsWBK5#pN&#k&skNx~=>UDezP%aQ;1w}pL0yIk4z zk&30;<*jhxN8tm0aLMLS+E8{++aHnZE99MfL600hZaOt#?8Jp((vMi_H6k6m^T*C( zkC)FnQNe+{+NG=o@2uc}cc5-qy+)FnMpsR;f85Ps4nmUDo8TbJ7)0sQ zZF{d^Ni2CuHTkd_BObuoN#(V;N0y&1+(`uB2A)QklcNBZ5nU&SCF%$3D#r}{{wj$~ zj%z03extM5vX04y52+W~(-jE&@wqpsqB!QUt1VEuf9Nv|E^CIY;(a5UBy=*SsGB4sGc<);>pa~ z+R)2v4T|xs%Vp-wFLC6GM@^Ot4>v(wa~Km0f&ANJ8OR&r5eT^Ho{dm>DxszjS1*G6 zJd862`I){SyD}h>-KVzOOb>5Q*8S1eIB(b6o;5ThMQt&>zxJNk4O@2t;h?sSuMY1H zTg3qH8ss2qJ8Ohl$@l2wU)v5_0_pR1`}AvY$&WUj#SZg3&j2QKVbg%ejm`Yow~IAM zaZkW-`AZ3|nFKGjVu&t%^1B-qNLKtMZe8E@qP}X5|Ri8y;`Dn6dOF`aH;=i!TucyO{7Td|Y zg6+swuJO4ha=PO@u+jX^a00_#Mif9n$f@e=x~7oXp1HX+KIa%Yt?P9YS&X^8+;K%S z3R=#tl+;|(aFprfb}+pWh8}xQH3}>-mkXWpFl=GzsbvSt16!~7Vwc{DL~Ah3>Hd^{ z%HxT;M}*^)1EwJNfdjbc=>l<1ue2qgY-Kjba?Cj!q3eUpQQyCX10vp7XpXvLM^y8p z59=sLN#1d2WP?DLPjL5l;ZuDH8LHa17AoN8V(^3iL2uG!il(aP?e zwT)^7(%S;hmdVe6zIiqq0y2sA2xMt(0axdS`Qb>C`Bssyk6MTft+cjR$rrY_4!n!) zUiil%!dCs}SHJJO;Xiyde8zX9YPRdK$H@-!OD+GY)UJsO2oUc!1jAPXJL%HIf#91@ zFOUd}N5k~c9`?&Y+u-E=bbFAmGw}SZJ!!Wj{VTJk*Sd*egQ+T(;*-H-5a6spARpWe zH^M0emPST)akpixpJCLr6QZ}?0&(}DE*vRG&Z6?T{o!e;z)gJb4prA(lq!%CIycmz5JLE52h!1<}jDMhFpp<8HTJ@p@U{-*2;ETrlHO-W5 ztBO)sM6zj;Ldtku1W7G4lE`vVlE}NvSJiseu2#rS>51T zp~bWUK)qQ8CJ}jXC(g})tt&`moQ}3Tfg0d0G8KNm zWJ>XSYrD2imjPK;yJ&vq>F`mQkv}&`KY?4ZLJ2CleWjPt)AwY1Gd=OQ z!NM(hdvCI|)5*JS=84_%HWtX6M1rX{=m-r)coP;wQ#I7gmvt~>Wr$q4J}&io-}K#b zwl223fH@YhRc7*gNsM+(c!;074#LR^8KEjTlV@0~J{^q+iRaq-*LF7rQsTi3S4}+M z4L~vwr92f)qEpNmtn$(8I`*i#l}n&g>twT`+jm+msHw_{2jg&Svk|nV_St)9>vYj- z%t%!xIII^epLUYhnSRy!)Lhp>rnghOhM9`Gb-BiaA0ih#x4pWx=8_6jdGVIa3AS>( zX0d2jlhGWGw}&1tWSKUJv&wFp`s&-I22{-yWc6Qc5Pietg51K zy<*AnD-@FR0ml#=kD&)P>HCCD&^g);yOx?&ZC}|*Sh>QZ(302N=7m>6hBqbgQZC#Z z!R32zedMiyu?nuFmZy=0C=t^&I3_n!< zv^ZoHwLIo)J>ACs$Ijo~0JH&?-TViCO^DKlpk~!k_X`J=_~+JLeS9_7)Je)%Xnr!3 zcX%(BUuhiVPp?s(Za3k@AzaubVidMr>eSJ{X(kX^=UNd z)L4DKB+c8iT-PtM)aGHH5#-XdlrhQ!MD0&x|X=#_#p@#0chPS+r|L&~o?pZfy2H>L)%LqToRrlP! zLR$i#NJ?t=20m4!O(A zOC4Q7?5AWbE=!)IX$H_7XL9EB1Y6icZZ3vRi_&_m>V?2BpoTWL4q%Q%<4WLW1H8j7 zx#wNDpcjyogwA6nWP<`bpjYk5>yXorB6+tLfvjaxtVTysXP#ekxdzPYazS{qPh8z{ z40}9>og1}aKLstfWzVpeyX;aw_@n~b8B-TzQ!b>QEQfe zru_H+8U}JNAmk9>{_xNcq9UN2?|@V{%Qp@m?P?a%&vCR4klIaq&Q#X~=m^YX;X{jjX-GuLo{bIsMG+gKtdC-1s~uq-W>@tH2Ts_13$o3G21J$UAQw@zl8! z_?TKRFUFG^A3cTVp$oG?gX6VwkIaWP3PfDYHS@!hec!{cT-QX;F*V=5N-HuO#i7Uy zON5H(j;F4s857;Q@edtUV~}3PIZh?Xv_v-V?!(YZte4bI2Cq9Lvc;zzvk6m;e!1k* z82TIUG*Q^*RVHca8DvYElBn zPLfeP|7UpkFNzT%@a*V=TjnX$(flWty1agykr{q}?VSI;AmSjR&){^2i&TIQLr3nDsK1P_?Si9W)xb3!lk-Z+}gf!)UgrD*yPe3 z`h43_iC=nu-6zQgDpoPcS^A{ny)P~Y{7&KW)r5J2;@Ub z9=q80!roOKE0{Z!iALc#*X7W?gvW4oSLBc^=Lc}#(Y={KrZUoeCJ~uD-P6d2C0@qf zK^4iBYI{5BlNuu1s++prkO*}eL{Pm$=Dr+9LKl*fhW!7jJ4l z+lWf+ZmXfmP`K*cWVXDgZMWnp*7r1>fN$qAuK0@oXs?ZHUF@0NN#SJ$ zdx8Bg7cP}lDw5AWd6RT@W7y_sf8OcdVDgo~r?Dy5I?8<$Yo+OLgBe&ODPjp8y122) zX{^PKir_rRkK-~rQ6wx#NtC8n&x zKW_<<{=%d8<;t|$rk8PKUai@fJsY-^J+3*OUqm1#21DzP^Y@mS?$8O)sntar;ZiI= zZ0unR8`Qb%!Iom-s~i!*yEisWFf5m@(Q-eRiw1QqN(7Dy@5x;%flK`0%41C0U^1O zMa`_c)$~(Sz3_MywcxwpvuY=`9%3AJ-W^Jz@vb4B{EfYP#QnAmps>$tQ1i=HYGPzk zH?%|_=>zl8;9V#bzid1fRKpuOdZmKiK${@^igG7cz-_Ou)}NQA1SeO}dv-Sf?B(%C z=aqo2EUSQ7huOpW8jf#O&G1g&4TmiGDh3sVPgp!kA%%85a!SW{Z7%N9uVijx`IcT3 zE;i73W{;D2C%_>+E~cw$Al?Au-d>ytly0+uX`z-HCQk!xQ*BW>rl(PTksNhAH+Mkg z&GiIYOpQUO$*|k!v)#%gLz5F8y3BV%Ha%Xygcx1a3#`KAxyLZot&psV(P-l;p3lPf z0W+_mrFb1(v})PBR$3w&cYo6C1NyqaPztd08R4vB3hNggZ6C8Sb}l{G5)AS9AzAJ{ zc&FErfHm+o7;o)lgb{zw1$OflKB|WPA!goe&hgH7e)KrIJs0)aj;ff#nqJLulh*^` zS??Vujz2Bj&myHpYgOQ{{S9Y$mMu3>{(Xz~^QnqRDZQ|Ehi1UtzLGQl;(wwKJm>+* z?vx8{xHoSekJ=V={654zbqp3RN!l{=;z;E{gxRTP` z7CXTE>cH0RVlbRH(`Td<`Wa_LLTmN4Az-NIdkXkP8!BBQ7Fk3Q@ARO{3d#x#VSX$> zzEMc?YwJ^x2jthmm!I~;zldx@cn~Y>Eb)f1QTl<=7E?vxX|Lx13)>QA(NA@nt?+ma zExS-LuIrBUPOnW8!<@KAVEBDw&2JLfE?%ADv7xv|{ zyF-lPh;lM;s3mNru+}@UHM8}sk51%Bqh7345&um&#(?e&l4hJ^y{ z4S5!Rm6r4crB4Edeg^71LJU-qvgTVz*AkXH&j&3ZwoC9O9Y+(JUYqz6pyu<(1pZ|} zlAvmbE@&ffBWicj#mv=!d0}Eug};{y_OvrT+bmg==$<`Z9?KdH)Ff1qdx%bs(=jU0 zF$|T7IwJ|+2a=*^`1Z`7~Z<3`+6>yX-SCr8Ccj}Kdz^! zmimzi+U`zj8ZXWx!B_oC(D@ zbTC?nFk-}vk+FXe2>c2*sq(J#R^&?1>eOYIU&cu^t=-x(ImIW5iTO4@8}L5U7R zd${!XY2sjP@>*|vcL&0*amLzVvz50l5b$`ySw3$kfzyT90D|CJ*ojlpZL# zdz|msf66RYe_>$p8c|S&0P}wqR<4(5an^no{mZqiz51+2duh--xMuB#t!R^&M-SDF zK+hQpoZ!lD<6_9s*9(w)3#QY#M#RH!TV9n0ZqQJsi`VZo03tvQgRg^*{MzVQYU$4I zEIwZp5K|g?3TQ-JFvuP?RU;Tr{GOz=(1^CqpPCwOLQS)ZY)vyV=c9S|Jnp6qeN4hs zqlV$HvL@nEyP|&I40cFWqtwf|*dk%=0-`MTO6|fHpq+htT<6^&nr!eRuRW-Pnvr>+ zcIeacROQFKXFAULN zq?Z9=La1o#r2VpYjevaMALJEeJQ#ZULTIv0yLZoXs;DlM zSjtsAYVsfDE4uN||N8Hdf5l#vV(<2ig9cIR4B9y~#-k33 zt%&c5BjOoJV%uK(wM|YmB|2?0bcJ|SaXI)7Rgf;;n%^Q#*oO@WlBek?jmp%=KL_bVDjg4 z*x6`H;*`1dY=wsd}G(;<+UjWy|vm|WW zi4A@xe!0MKoQdY?YCtbk?&hMD3Wk1z%oH~>3(Ub}u9FlobGHoih-8_2fBwPvMRqyl zzzZk*m;tPQ--jHae|CiFz6%;e1g3T&>Ys3EE5ELmFD(Bn_&U#o3QiL!aezP5QJ+@S z@2jCIx{L)xwsqsnPUoS6y)T@8{O)bg$ro<>7IlheT(bt-3fc0^pb9~ow4>)>0LNTk zlm{=Rhx1oZRbXoKP-3c8doY}ZTQzk)YKi2ntTy2fJ6CVrkUD%UsRH9rfPkGWo$fiA zrP|`EgCwYcrKMVFMnK7I4!E(T0^sO57yX71?fwRJ6+vz zH#@^OB{v9%q_bslBoPMyInuv2H}=*Km(~t_JFg}F(RSc}zwNGY%XUiF$(sc2=Skg29Ve$VmY&mPBD11PL^Kj33eQ}&YxzFweZd)Hzd7L1 znrV_BjeNRV0?a2ca}T4^rXHTXzqR?{Mctp0I+Of@w_>Ha85xn^>PLm8M$VOMKp)!B zUtP|Jg13OJ^EmiAw7j+jxny$E=r3@)`rZbFwQ}i`J@*-kWfXKI+H3 zUm)_xR9DuAqLhO1T*Z4(*y3W@i)Fii_kBF2@OD{YxndFC_gBzh!aH%dSz8ew z%Gr6~LXZH;A7N>Psv!*ygYA#VY(#+_^YhpwU#ACi5HvUp2>5`WwP;nhQ51yf3$1IY zYkgHxXM!34RNRh}p_BKoPStXN?T+8O-AUqJPj%|510M09+`nXe)rQB%;!$sK8uxIo z!ch<%&k%0*|EvT=&BqO*64rOy;CyUc14L6;oJQ~hS|~Q*{YMwxr%@{(-3;9h>pzF% z*!uSN4ca=CkQh%~Ln$QOqvQd43D-1n5Z7nwd}taCCOtNJNpe?7#;fjx{rv+HwVKok zU^ntdRM2MnSAL71v=Wg-mkt;Vt@P4?tjT(;J(b=gZ7Zpv_liXWBogXEWt=C!5lk^9 z`wMu|np2Q-=N^=*sgIbOMP>tjiktPAhEpVTOdkz+YkU`5Sbje1y`6S>?k#xz6=ZC^ z)%BfBxz+XlV_LqnF$$SdF@%dl&KIYq%ZgIV*>ewa$4#cj>Q*g<%~2m@-(Avp+h48z zZ4sDTzkDcXL7BLigi1*cTMgn4H7fcrFj+?v3l>W5Ro6eLSepa`GEhJO+s*WyO)wk_ zjl1MBqpYZf-j}X?{3Of#3q=W!)5+X1L!e~9Vz2p7FO?T!w0XmuQuDU>;C;wk-au^! zPWbC8@yq9TI-ZJS;9t*0b#;)CHoIObzkLhfsjgxnqQ<~N+>18yf1!*v^2FCUs_^?+1+3 zPC5B=Vvt4D?qrJb(g1PQRO&DJ_y4@6;97or+`t2VKy*@TAr8hLo+^~rAckcUU~zFT znVOOA5dTb`ox+HPBNpd7^zmQQr6iMqLw(%W^e@)K?YN~lEQ*fjuhg%^`3%eY{Jyl; z4&I}4x=`|+=iZ!>jnyAf{LqO*Qne6t%@TKLk_<4vvt2dZx6oMuh^2t*4`xh)F{p&) z{h$=TkFvnV4MHsbAej)v5TFC@fV9-uyX`f=0!;6b$g*xhDeT3>m};yrB$iM0A;KJ| zSU|dCipA7`zFWqya7nSMx9pIJxjMz5w+Y4QU0QWL%7ZrlcINd${A6@B&Pv&+&W8i! zKxyxmO(ykBL@~PysCUayvMBTQ+}_`QYBqF7rJ1{E0_k`^5r+%~QGkOj}gO)9@ zGr1VBAorVY^fX~-qC(JWkh2j?H(Q%o{R=*#P>JD8akegcp*Hc4xAWP(EbVnY6bkKq;m{Z zWeW~;*WW~m9%FIC-HW}0SE%g6IMOvB-!$;=#gtx7$T0cK|8d`twIt9;A%}yKw3?3- zi419$y*!J{0xb0xpw~Z;5P?9@c+S*=90x4Q9-EQL( zy8Q;KiBO*cFp=jrHJXS|W~W-Dtrz6a_!P}VsS}V^$e~eM<}Q#5eQYTle-Cu<(?r~# zkS1T}`{Vx8K6SqMQuI%zpTkw5(R!%QHM=E5;~aLsr~A~@ZgFZz$P7(%HV$_EzoDb* zk}~9w#1ziX^;A(e%lXNRhHS{zG|Tz!`)HQvPuV?Md2>RIRVk_y@smmV;x3IYFRB2br^Wb!<=%3*n zTT1u7r1v>yf%iPDYkISJcn2sy0A)t|ea7ndQhM)Khk;dWcojp^%2>s2$%T0OHPh3+ zZ5t;|9h{h#%bm7ZX`gQ|Q_S8BZQCX}+vJUeOh;dQ2(#QGR;y|kI6}KTi^d}gz>_Z( zZWbbGC1lUHs-9s}U_OBV_^QmLsVW6_R|cO6zq-sHkrk)aR_qqv-IFm4>Qa9;`auU8 z2bKlscK&<%FN)K{ujJ|~VsGg4-0{P+{w64Nu1HdE-C$)}YgF zwr*uuSuuCQ#*`EP09^~iQHUydHNV}XmE9&`O%aaSw7rdC;qHPNBK7iMQf8e;P-Th0 zwcx_LZd=nyOXRM|H(o06M$WREo^96E9(LX5XMhU+7Wn^911#X zTDuFXkzJV);$r2nm3?{B{rJY;)+pG-HRzGxmYaXp3W+}R$pLUPGeS4B^n(cjCw7OV z^sYkMui>0Deji$rDNjxz{R)t}FUf-h@nG2g&VbWW{Xn{O*c2|Ihz53k90-#L-h`pn zm%2Dsl={MZjIM!n@yuqHsN)N+eJR;yW|Ox{f*uu}@Ud;18N4t42}#@3k6@Cq^1NlO zF&H3Kuk}p)7!cDRBdB|eaD`Lt_L|r03R;U`Mls%c+NnExTeDTfx%^QaMPs6MLRM?& zE<#35M420X80wC~-O}92{25W#PfJUw7rxQ@T>W4HW*L=Io4QcV>57BB$j>P=0!lp3 zEs9{Ey)a|`810x-U-vG$tQg*6fbvvftG@ZZ@Ez-+8{lpQcstqnEVv_g?C2NspiaEQ}l2WO!BV%m`3P;)fxU zcit2K*ekZRnWo&6CbQP@1RlqJu-#rHsBZ-YDn1|>9Xd?QGCf-p>~(m9a0Ht7m8-n0 zPtNjHYA++YtG?JamT|)+{byVWiGGyQxOrIeIH7Cv4X&$wmH5wtFcPDFgQMSf?|?4p z-so!_h-+k^o_jpm$pRyy1rnq@&UXXIsq_V90&2iO=VlM{*m`5*g70aS1Qk`Y2>8V^ zg#P@~sy%PMh88YEhcIK2DQC|ZdIwg+A7kH%fb|4f$K-=71p#FI|K@rLCaXS`E1RE^ zJw`@e{|C5ubi4&8d{){H^7BylbEM%M=FHi;?l-xsuuCuYXh@yM$jte)UMI`wvvDRN zyF-q9G;vxE+a~$7h<{NP6xFK}s-;TMG7IzqT+>H1F6+9JG+n{Bd!1)|Hexhw{?u_i zkSkPkWG1EqCMZa1YngxM$+&U%QFl8|wmzcns5=ue73an?lco?2? zzH^@`%v0gt8^OBBM_2Am6LVLIiGot&HKK!1ThZ`8I^bi$-3 z#MUHGGJ;aV-ZTa!4-V7qhGmQ_%p(737X8rSeOJr<4eLWOU0%|8XEnTQj!=2%#KO z-~f7m9ONKK$OEB)rmGt?mCCt!`vJFQ>(XR-|DMIS2v3G;Ge(EFA0ywls_&o!HWbsNGI zKF{X=b3+oT6ZX>o(omx@{T+=}JX9)OD<`SDjAia~UaZrV&u@KD6VS}yn;m!k-rbX` z>(WuSE|w0PDtd*;>-_uGUOg_DZ8Y|5xnrS*F0u3kJjM;Q59mn`%wYyWUAmCNJ+%B; zS;Ea)>(=2P4&y7IA3w6zCDR1`AJs_jk)XH-I$<(O*I9l~q(EEMn9XC(ZCK7~F+J3D zZDBdK5U2;_tOvvv@$YkPfteT;RnBegtgT3I^$odJBnfq)(CVMbte-wCw(a_s(YZET zo42_7qcTd;w#y@#P=!^1Y~|lans(alnHOS%yA`2bjS=jc3{iz!x?5;=*7g*;?|D&n zr6n;tSN?u1!Er(-O}bW0=dG7YA`Mv|07?F% zE%lcPj8YFRQ?Sz{s6uXZq}&2P((}K^?sF^Sb6r1Hrod=Tn3t`#NCB$GD(@wK6ot5i zH+?}LBU7;STs&NvRx1|X{M~qY#K9A{G2yBAGkuE^g(@x5&XE&GYXtQr>hvK-b%Cl* z^{(Vr>CYeCHmc0T)8a}0mmf>~QPUO|E9_UzDfDg>$H>6JvG2gYm4p$ z#jd5_aDU<#-~CA)n4pXHvjr_(0=qp*a&Kt3T>i~nr)dEj0*=axHwG;y8}HUh0{JR%1wiVAAjPh;ITenH=StMGSA8&UhskK#6% z-cPovRw59tE3_&*C7=mVoX($EpDC^UG;dxy?)vr>ML$kXS3aVYr`0G0w6fnUPTnP? zq)Bcy{DaOx6$&!X+dcza?X+og`>Q$$nAW&k|5P^F;*VZ*+o*wW2ubR;w#W(GH9xXG z9nR;fNC#CU=U7U@Pk1<=$$hpgiF{o$tgA!f-E}{S35omxdxQVQ&esF8ugVZ$a-ao+ zpj>uNq9KF!fGcVtDCnmrWS1(}VPsG{G{mJt{vFz@?r?K-dlIt1Ob5G0JJJK4=JbMe zhXjE>NxBdIcq*pK+{5DuM58J>!XNQ8a>=MBczQSBC)5>UK=6Gq#TV7}dPmvUoxF6V zGL=Z3wgf(KJ8cvo>io4l9W+)aeEJz%f^2!WyG>U`LjomkO3_HR|2*)q<3~{AEe3Cw zzPkA%wR7Tu8`WhxUDU^POPEh-^fwVKYzeAb(4E`UeI{adVbtk5VIKwC*U~#rEKd2M z?7pxUJ-+hz{_&y5riX8m3YHWS@gK<#?;t#I#@~Ma7&I0cu(dYvTUgak0z#&o?lCl> zxV2GM8`&Xkv`j5BuF0c|CnDKbjh`tar_(Sas+d(8Et)uQ_-HsY?!x|3r5akB_^23xO(g_mPKzp%C&*Mwl>uW=1M+p-RpzcR-Huc(HMvVaN?%*xKT9u$94 zZJ%{9g`VTS(bX>39Y1yAexBO%?x4#g$*I^Qd9&&-Y>n!!YX`IxK-6?0j$jt*8X6~R zv$G`P{p_i>ij=Oc8u>y+MJKQWsv(9l6Cb05J;4I&&bBW0uj!GDd$#WxOIeaQFnz!V zlTU;iS$F0DR{oVSmvoSjbvXpS(;s`WqpZmiij3a+vhL*;7w&?Q=dBuQ?pYW4H@mTJ8NtK#A&6uqA|s16ax93 z7(@&bCiJAQkKTLR0aL-m$87BNRHfy;v{hynlyN64e=j$7c}|tG%xwpaHu-G4ta&Yy z{QHolNg2)e)AVuD0QhA zEKd8+xH3N{WwU%Q*K2VK`Zrhggc>@;pnT&nVLi+%OP`~`k7-C&NEVIm(wwjN978*n zq;^F8Y*0dFhr8Pxi06!Y!D!euwD;lrXbFCd5{vI&+H%rJu#W#Ff-zUv)Q$DGE^f9w z5w3{nYoCt&Hu3Oq6tjyMWpdnUhdA%Q)50F3TpAZQ66cf+L5;p{DGVQRm!Rdz^wWdH zFLOUIUt_j!k zm<{ysD&3&?v;0{ZSe*QxZt4F11nO{cwAdK0{u_wYlF;pLe}n6K%8`cB0|lli6;@Vt@pJnWg481wYp8MCfA;r3t2>8IBFC?^8882! zs~8bVAm+A`YKZa6Zg%fv@u!zz8nS4&w6yZA_t$;-t2cx%knzINa+L6o_w$XdYM#C= z&6jLK4T8y!UMfOwXhY0yLXJ5?&Ujh^g`CzSibuor%BjRe%jD}$<8?k(3C*(!J(03h zlj=T7c89z&gx50dw8gaVe!3kp67*owB%_umK-)FTb{Cnx*hHqHo!Of%7X3)?TK<7r zqV~RL?y-v*W!-)UtG$hlk$)mSd|Q6cT_pi%E27Q0j#``?OL+&#}z&NV6VlZKT|B`YRud$SW6A*l*fb>&O#S+C9nAaAZl*8qPEBP; zW}(?diu%2%#4n<*EG*&GHXuKPrO6VLlCzkKRskXluXxZ9>JwcYU89`-$5O=3L?k6H z@#*5RYk^Jx0;;R~OX-<*+k{hc@0hY$@4_lnCjT@43E%ax-3M>>&t4#LFGzXtO>%2=IF^vozpmte-zek9RHq@# zEo;_i{I0rR;Yf`?0YE&&xY?SPt7(vFPjdD0R97=|#?k#e5r**CUO4Adaaq2b-wY%E z3aXM0&&8kDW;3SpBFeHPh7w_?t;9tp)SJqKcvhQNLk6`$`QHPC*$@c9c8t(~DrBkQ zimNp=RU=1|S5K?|xR{@F)7eSW=&bjoYAzrvoyzf2c>?NfCyv-H+N%YY1!=cAjgJRk z2`Nu*`%qN$a^TaFXkDlzSt_l!ctaaNLFP6bE(T(Vx_2O?%DzeUI790 zUi#d-6>YO(P~uMwe?QP!D?d&+0vb#Azb zuzccptTz~(Gtn_PmkU*o;o;A%ov|=J;2$VEdJa3qP}9~HOB7j8ND&I@gLB`&s^q_% z*~?SYgvEP6?i>R{ZyuPBxi2(uUhCTBn=1Y}s+v9OallXM*^iaWUfPgw)n%vS9w6QU zRX30O5Y96jrRHa@T-?mCJ0mRF?)@=$d ztCDfl*DZZq-qLo!7DO4ejrjMP_%tnn+M2MJ;Y%MNf9MSbIV*7cPw*=uEX zech%!6s`6$mIefD;Q?CW`s2a2#Zx+MLee;12tXgZII zZJq8|aPm;`9v2X2Id+0b339ZQ`%F$IgvaQebR`6pkGNASAD=6bngeIFv#z#{&fkhE zdJL*8H}Z_l;`o5UC&dsauu4H1)o|mkefCD0OB#Q~jux#x<~rg+NZ#k}zoQ|~>s&>Z z8se_eQ)^RbxP9o@Xl*!)ss%6Z;a0gC&lY1=&pRQ8zW=)`lP9Xn_>taO0| z9!^(+4N+fdpo+^JIlM zd;{~wpOl;s-bJKbPFh*C1ZcxAF4%TTtmJT2#<0OIncWLBJ4(evdE=$@-VYN|Uv^V* z*82kyZc*u=EwO=*8CealGs^)^ugG0U&Eym7)Aatv&fa=^(4#1X*1 z1Fk~T#lX4Y%;Jje>wcH80UC>$7(5XYv9dI&co34*Dcrsq)YLhkEtdwo?kKk1TROH& zvZG|o&h-Ll&A|@Sh%6v{jqXkFuB+U29!TCzjlh1Dcg~-l>Yw*J5RF9b@15>b(Az=9 za|8_3O{P!y6ACAH7|xF$c5Oup=r!kq8j_<|j-71k<@L2~K2;lf}>H8a0_ zzhPR5Cg$baytk$QUJ0CmA;{3@PM1nKsKyigQON{P-Rm60#@@r0ZtvRRV+%#A}O#s6F`iLJUvmqRX2e-u^%Tp9;rS8fE@vJ zN|xHJ``}lAAp@3g4JVGY-FzBs_RpDtPx`Y9Qx$C=A2bM#`yVQobn1K-x-K8gY88 zUl1HGg7L6!Jgv8wTI_WdWmOqS0RBLo^5~HH6B`zm%Dd)#g0bAfRhnqHao#qStDZJ; zj`d}u->+T1FMnnLS6U*kU|XK&v~elyNxD~6kc8a_I(CqhW|c@!1KNV zjw3*+22vA%+1FU?s+pO+d0zY8JkmF!_1g`*l@Ai9Ery!Uv>fU&1VY%lVP*_?|23AIk!*59YC{J?3NalqMone zK+Ey1W%^4taVe!C_zSOP0gIX=RL(VQGy9nAYC(1LijD8$xYO|{#%!a>rCoo9iYN3* z8Du!JLqk8I(Ut$u4CXl!?*EgB2}6>9w~}rGLV_PIg%%@y3kr@T3>|>l9&yXqXpjzu zOOJV`!pU0&JI`lvJ>(o6TlGWExek( z2sp23X^iotA05KM8Pp+3xqfhtuTtu%p~qf8Pt?JsjX1|VwQA?{nvWE;BH|Lvdvyb` z`Mskt1}wl>l>;4elHKY2zY8!5QK>W4aO=*2R0`yAPf>c+C$XrU0{- zkTZG139N+CP3K7skw|p!+UwS*ZFFD}**#&?rv@-DAf3?33E3kFe1x-I%U{S?3ebg{VzyBqZ-xv1mo&VbHb^!L?o^QT3P(LF%9QM)uk zOkDjF5cRr!Mc|jM)GHsN2FmK(gC2g^m`zalvY$t6;>ep$5=DZ+BSihotCdNv- zF>x#W4jh>B?z59$tr>rFePjL$M!I=9as?wDM!m{BQyyw(%%QWxeD+hq*x7}McX$gU zW%;|ow+Ov}fbygGO@67KIt-r&)x|8Y&**BIwr+}R$+`eH(wewgI&r3rF1Os&bU2-h z+0I2ILu1+uY8y!HXSCpV)DI=_s)t3#|2=$4y&+Z*pON(Mk5ue@BP!M*|2cX4FRq}% znxlRA=Bt5cfA|5Iq^47OxuQ;{M+onvS}Jz#IA+UldFI1#F%>QPwI*O@5^G!cU@|#8 zWp2c)b2}E0Tq+LvE)3_C4UxQQs>W9#66gpMI)f>5eI|~z3UqL1LO8<`f;~u1F}g$X zd*h*sguggyjDm1{O_jNr(mdOxk#N3Q50p!0j&U)@i<>>X$f+tb9Wb679gm;T!n};J zK(Sp08N)O}*qaMVURvhMzy1fG5J+$w>+xo?lx(^z)6lrNgH^x3kB4{5GWUI9v7VUu z3&dABF>+y}rRlKHrSc)tbQ5a2c{Zn*9EZ4{L)VXXL>P}%Mp>K@h*9v(8cs|e@E|fy z??){2;CH;sF98HC156s&eeGE~4>h)~NTsWqGF>RMD^&YDO*#sx96R&2aBdmL(S1 z4z=G1*}HoA0Vr0aH2N0V_J&3RSU~*%xuq$HnS8*E7jcjpVOc^4J& zCL)_T616nki+a;KfNf0P--|l8J)I#I?yY2@YipP`;ug1-+1jRsl$F&i9rj41QbcD) zgj6&Jd7KgT%_Ybq7MhuTB_7X%(;o_g5ceZdhRB2kAfGU+-VakK7g9 zDFwxj&(+|kpp1{x^^_RBb+IYC(5@(7GiZ$*)|nubfK5^;Uxxn7&XSa9lntyZ^rxfM9+AbpTiaEFG-C z-+fD7hZjQ>2Go|akL z%sk9Mr?+kq!DM@i(zghEQaIv0J^jNbvk!aHC9At>dXpnr>Lm82fa#x)ZRs=hUFWm5 zQ*SH(j&EZQ{XH^TVE0jUyAvx>)PIb!-5&Vbv)h;j3ijxhS*&;=IYXEgviEwM^^Lo7 z-hZjRvo5&Jc>xs~n)nF5a*b7LX{ZP76!^WYhSA|9S6n1hMD6&gm(_^RH@Is~u(0qZ zlePyxV|3Fbe6fXX&jv711L3BuP=vY`PaFP2?ueC1X>|D?W$-oQn#u>F*DxO40`Iu4*p4;;^=OSGEAj`jFFyqg8c2`4{@5?x?bLmq!-|A z|LsAm&w3AVj5Kk8{AK526&eEaXj5%X;4XGd17dkYHDAROjB!C!JdOZFf$!emT_d>E^u2>r_txiCkKNOEri-ua6`{b5t$hT6sw_>3$`tEPf1ADyvT0 z7Ws#uhF{AB7#6AqiaCF(ha>yv8`n*|M8_a-!gfKLs}t6)&nK~{_Xg#W`_BnM?9v`X zY1$hB8JMxU*vLe*Pi3|Aqh{1brxAV4AwJ#lIclXakGjT)nbS06{6< zl#ahgEdwQ{kgUUlN$odBf7s!2q{%#vCHJI+-#q%|x2vU2rU9y*{HP}?IS@egiGOzD zoQkFOF%6Z=kOw)}UK}yCgjm&z`EgHxxO**rkKReceG8dts65`fB}$y$VgH&y-iwfl zDVG_~o{5DO^Cu}mq2wP4^O+qB&3m0DguK1!UT{H+SPanB6?VSK+!0_`pAB^L=CXEg zi`+h%5Cj$vvJ$ce-tU2p0ov`MULOSEE6RrG`6znrcUf}hJP5{kvB~m-yYY(qA-www zHhQYe*g3MLv;z+HDs?I|K=Ij`grF+>C3Z@>oLFVoc+`nQi?-W$EF1>(b#r?VCZVgP zBPW0Z0M&4vHvHXJs#pApt1OT5AGzrEmM4|p`i{1vC!X7+%Q08Ytj@@!cWU*F#}dPV z+o-Q0PfkTwvu|~B-qsr*GxP18I+^@6m=RyXDj3_sRJDf8PZ!{W;H z{9^GMF#M5?%(SK0j?E?DVOexC3^xw2BDk2Nq0zRN&B>2V?q00@Nj;{7i2=6&|3_6d zBq(vLy!_gKiGI{Zs-(+u{7=0v3IvUJNNh>{t81f%YLLk5kF1Y@^bLH}j^OUiW%&iU zHc{N1PN9p%;u8UGt4p{_V#Car&~wSa&3$@&YvnL}^=-aqEBc=wp_i({d$Loa#RihO(2f|ww{dc0m0XSmcXxD0`7;- zh@QE}RQAFM)x}4|V>-74rMP4-r_vuCbYg@2i#AGYdM=|W=`?=Hm})$au8u-GQh*eByP-_rE%R)Lu!tp@M_dfv0~H zGNV43V>hIdGj=@R-YW2cbzlzoYaqjdpn0*c6^KT+vHPp($`+?e!q={QwqoC=t>?*$ z670zaMO}k(vSFJNrtsgc9YDQqm}|?rO6Y&zdyq`J*@6vC1~Yct?u)!PzPGg$U07_! z{Kc;5Zwu}w7)JDxV7Gy}+J{<7y+XP2fhm5NP8eVA-R-_qe?T#DZcbi&G|(NnxcZ8= zdz+rXYoGfN)&B>CL>65WEOePALpk({a*|)ivho)$4(t+Y`3(0O!MM)B>#@`NywiFI z&S{WV0FpZHc;w4FsF~RZg*R=P!ouLpM>iDJ5|rtENjZ@8WS4 zW74v_P8<-{W|~U)WOGMF%~dxIRc~`|7CWZZJLL}q{EkjMf0$?()JgNq*Z0h;;LGDV zbmEBDoL-j~5@>aRI*l=o7gb*lYmN6WivnWiC%MRRC`J&)yd^Rd_QpMp9RA~%QrHev>(GgApcjflQ}%8xLMO|r0uY%1_XvUgtgyw&WRfEIV2xC3^(}b$`5JN zp!*BT9>-#00?LAG=3Iy-#2s!Mp|kOl411<4;pgZY=6T z+@h%W6`1f%nD;q34aOgL+nDqLEHz3FriNNhEOUmzTMh31!W_6{G`6K+0;{-~I;0wSMU=oc2M2k2usCyOWWD>gMV9 zXC7#^ePxv7^2{MHPjc(2>J*r941NPphXH?>J~r)5<@b{_$(|Y~Wus+m1LNPvp1rC~c>S`T{QE>@ zM;PGuW4*jQ5>KO2%lP;_j;H#1;Z&s;Ov`jgTTYag;3wRPtJf2_rT3+vdJBsQfV7_N z5E9F7EZ5!lbTo7#mD(&U-TBS=Xi~aAZQgj!gN4*lnwzTfe1`v-16k~Noul%v`Pchk zOWXvzLIaov8flkm!AB)O;hP=-o~?T8(`z!y4G7Rgc<2@v7i(1elWbzwuTW3Yn-+h^ z&h3T}uU^Ks)O2kHOb)ap&+NRKzm|T_MTC7EwK;U#1-PTuRx*~_BLX^SKDI1{wz$K# z2N>PJ+4AYO$(O8McXamh*H!HKWce2bp?5$bT=^;&HO)!?>;%&H9Y-ifc4OWyU$O`@1Ff@5ruQQ zFWq>?5Rg5T8$k@8HiTVUSBuZ9OntPOJ~!BJ4l=cO3dxovH4q`h3oUi-U^+(inY zEn7F=L9CuAJN6;kPW?R(JpS+g`^*=>IS;Ie8o29kz}5UgFvF3}nR(^JKwwW^>)eJw zV%$jTNDnZve(l9E=kt#C%U}9`P@QAWtSpgCe5SfK=32L+c~iXt*miehGxj8DhdI03 zPYp)T(}m)Md8+8umZ)OpAT=tf51<03-&|tuva4>Vxa}#z-%lj(@22{@?Jz}s1Md%m z;I`%Wg0hFq=4k+KUEFu0oC3Z0-tv&DRxZP&%D;Eb{d+w4t`PGObY_Y;qpWgsmFYO~ zf38=1s#AhkPdGXzSk1yAu9}sEtDn~Qa+5E>rr{#-LxMC}9xz7Y|L>aUO*ER(*0>jb zqyeSUn!#`GX;mCD<-%BE6vo0n^BsP4`LX>~vpBXI@2Bedi{8jJeJDGAf2OoJ2B914 z^Se#)n8P4cf&`@CJIHvjFgYAe&|;D=$uq0l*$>gJkILvIJ~tN%(Y=w+s5xY=o*~7k z$H=X_&V;xDZKsLjwD8$S&I@yB`3E{CN9UJf#QhgXoVN2|DnE|?dy5?YA0aTP!wcZe zew~LOgftl3D(PaaSm7Od!HepfxbeBGrEvAGgD+s@CD-52#s+#I!i1LAenuohfQuq^| zRdF+O6VbFuM8`sFWluL>!k?oP$#OJ?K3hFzZZ!tVvtOFJ1!ABo(aBqM@knY4 zTjoH{gm{6ZtpXsGc>^aYPWhD^;?V&i3C zV4!Pvrp?Zq)36Y6Tq1n7BC7;0FJEkXd)rE9-ZO-=Q%TW{K6}5O1eC?zD4EN2^ZYZ+`F?P)93zNz3o!lqM$z)xMT^y;kBD}UYKPP z)XX^VKMit|s;XP>rhBcsQ||gKE;;|hDayXsK7SbCL#(X*O5{pw30K}h1<-aL9c7k= z^c#%R?6U8P;QG-KhVe8Ee=a;fmMHHo)We z8E|+t)TCpE2`d;uQYv&+N*yx}7U~4t& zfWhu%KHDA0pol)r^@4O}Z*H|Q8=JhWTxE)zzs5Zvy%*I0iw<^=pt{Yv+kaYO-6fkr zJ!;kc!K_=eL}p8mYNa2Q78Uo z%;SHAZ43x@x>zn|0aouI*;pQsrjkh>gT(-P2HtxAS`P2ED;beb8JQ(gLn9h|@CpE*Z$yO>qlh^n$@7(f9h(m8jpP=_5&mh;<0R(OoB>;H6QF zB7&VFoUJ6~{L38NCx#xD5LM^@J-*;C0G%F>sG6u&D(Zf7FdaNICUgcNF?8Isr&U$c!?fYdNK zmc7V46P)h0FrT&cYC!?Kyy}R%vkH4&##~BY#8TKEU6E456!8X5KNrscScYs7Bk6h8c#f|@vPU3t_0J`!RNd-g2;27DCn2z<@V&9#Wp>HFQ#M}^}w zenVQOSeDtTK_)XDtLbLuIu!JJSw3DCzadjMCWLM4S=eU)Q@%&D#0ie0=qeHsXH~%1 zEJY8&Ha&li(UTUut(>=Qpu4eYs5rVk$-!7Uye3e>@bKw+Wu-0L-UdrYD!m6a;lGrf z1;>*^F5UukVXs~|DD0VC;8JaWVS!$`x4I??btClxDT#y|1S1okz#`gi?eE-S!-ed) zZg*O7yb4BK`wE!`S%~}^=AhC6g!Mlx-t7N+c#o($>-8k1cz{z&6QTytsJ_EULijdu z(;+vUD|C*uNUHZErO-LCF$l;_jT&u;j=;sHSk%p~g0pv5e?>(((bN z9#|Y60Mg@3*JJEo6mONRCcO67~x{fWhWl2W}z3@e~yHS zHRwsIR(J)i*n(Q4_K(gAwds0ob*omP;)xL zz`!1@4ttCV^wWgrLh~V>cO4GRZAt;m6u`YHt*z6I7%mqM^jZon8=dqyMu=k}I+H#n z)FlLzpYEEa)Vb}uzKhOKxVwI2he24W7T3Vd&LE51HB{=n9R9QJUvFGBjli9518pEd ziU*&(hIt$cAn$M+)^zDLT@FRGvmmn^OdppDK~9Q?A1>T+Cmn$es=l)|q9&!2H`^9{ z*Q>X41v`J~>p*W})P&boBym1-Tj6dkY!eAgQnINoQ7sR8o!)0T?Y2b-8vS=0z|_c! zg|CP^5w$D&l>P;~oQ1AQ{Gn``Pwf35Kx4OOwj=v`E#h~A+>eL51T>ruZV1NR3B1Rt zU#ts!5DvcX4HnQQCN1T0lOpnAcuageAd>j`jE~7~YW(uot&-j?rZbd2qG4OIM9AIJ3n@cAdrq~17vP-BE34fSlChL>FA6CU~JGB0d_Ft z;)FIvk#t*x!ZPO0hjeC{=zlqnUFi!A{JPS+6WvaUd?Xg_&x?|pMB>mz;2PV@*s9TAX_) zf*wxqpq+mW4w;*)xe4%hiKaJo9n|a)_G(ZTd=N)8%Vh1D-`{!64LxGje0+)fL3>Tix# z=xX47lUh4o=s>Y@$nk_%hZqK+u`*?LfjrK?plP}gfq8o*A^cq2EpC2#^dBEbZjskj zfNpx|G8?JGnoD=cak^>v-@LE={{UGB5X51#^g=|J>p_fHS&GO%B=3|j8+lVvI}R_wLjH9bT+-lpIgFX`4iC%sy9qmBskvTgVVej|Ih8iT>aXIO z>2YZY*SFzb^qN5>$^;`e8V~@d<$&SMn=>qai8XRa6P`m#Md-$8sA|hI zFdQBKOWPf|tcJn#d!;Nm$5X2BT{KSGc-FF(;h>XEe^7sT0L6=oWL!`LDJqzQ7}~}? zo1QjqFRMcfewo1e8~tSlq!QqH9=h;3(S&l zUZ}uxppZ$GhFn=hU)y=i?sMm0kVaSz_^#{%JsV^Chdud2c4a^okU$f6lPSU7QGKX+ zT1(TM*mJJeqAsg1OH9aU1AeFSe|?%|whVr&l`*!9Bd9H>TbVNr4Tr1MJS}Pi+QUi) zFiL8EDnt2;1B=nXaL7q<>GUN?K#m&pcwTk=kO9=;RmB+11`%c!8|&AEFf+G07wCuA zbA*@jN-^iCGesm`2;j#!s3 zzR+WHvB%KWX-)|fB!eLDr2h*1^FMw9x3D@0i=gT-oot(*o&y$ypQ%3HcmpMiN%xxw zoBcg+!FIg_1g^lv13*22jV{1MPE&+EKu#7uaNNEnr9qIs-LN;sqqH%L&jtka>P5!VB*)R2Fbin|>a(}av=k|5ZT<;t$A<-ALHAoYdC$r;m`rdl{Qv&w;APxcllF$o(!h8BlBJLv1nN=3BpriIHEW*Y21Fgm6yw_8G{i3wN0 zjDoNnz`>6sB?y5};R|4p4RwIsfR~vAFG&>y3=IC|dzHb;Y&r2A@qRvdq&!KY?U^U^ zMGjvp<=T-tUcPl*_Lbh@S``Aue&t(H8py-ct34f!q7BQ93&v?L`o&Ef>97*x+w#Z-5=*eQV|_}14UZ&kQ- zt`NZqWdG5`*+qeT58(M=FpW87SF@T$oU9`)w%JRXoxAQ3DtUuYvP52(T3y8p4$*-f?GXTo7oo641aQ zxrD1VQ0gl{6!@TOifr*<6DktT;wCI6D#p~_iOD8RD2Loa7 zk{jRxElMQBKeoT^d!~mF1NHGlz_iCdznuz;mCn1r6F1kGnJM*-8UIvmf;FvXslyB!dC9wE8hz(75g)tAnT?Zl+&9#p6MD51;Qi_Nayuz$_mp zlelnjd~wv1lC-8gv~7WfJgz%rPUHqypCD)?rq5LZ*ilx9GNQIH3qZwZw&zczw?)jg zgtjNfiYZ;UpygfM#37G zk?xIAPSIGe!{CGQTm-_A)I>#4FohUfQHX)Aw~JjNJ02*-D{XDPU-4fPXI?qrO$($u znLB148oDu9atSV|w4aDHG(*Z@e%@da^0xc;d&I=^4w?=sd~tQB1)>nP8@@4~ZmZCY z10?JhF=4oZ)&}sFoIexJF_gI2HqgeAC+qN-{X=P8T;Huz@$Kw?ywcyy+p2Iv*2Vl# zF7Atufn!^JW+>%n2mq&6oB<3~b$t&w7dC=;m|Tn#1!<8D!LePY<#2^`4a^tkTDR7D zQhWzy7wl>mm5Pwg7TcXr;Pq7#UC|v;Tjg&4;0p0}`(o>~5Qw)$hk}k+{Af`3N>Myr13^zPN zf`Ou(aS%1o5shTjvwQr+6FN7B{J@KS2SkP+T)K@P`@AZ4;IHWe#Fu6<^88tC8D@>y z4kaap=uH{YMvpIA)A)hF<(l&F%qGa8ZZ>LDVR0S9>A>6L$H>-&tUf!s;*f07l+XXH zrU?fu!wQ-wTvrQ)kt)jq1e;8^9z(9}I7pJT;D^uKAn3{K=0{>1!mleI+VG(!fXkaT zEAVw8)G)1kle41)=-P$K05BsN&D~1yk4Dc2{%9(~?lBuZg$a{l-|nu*UW*M~%!voQ z6^cvBZq#uro1hHAY{Triv5b(GqS(&#m9_}~j?xrKQ$Tu3LzqU+;UkCO><#U4_L`DY zq})(*L#`kaY=V zbudwSMzyj(AP<5ETpx)h>|SHEd< z&)YP|d)SQNPtHIEJdBj)AKL2;`rRv*SlJ76=u`I}JzR5oC`rx8B8PlG5DVKPC~^0v z4|W0+zB_$b;xqs)Buw`*U+sj?b_$|Hr?Mw-jNaYOQ_kZZ_rPH4u{PiChtw1KU7O8S z$t_8M2k>Ekx~VQ0^Zxp*kt`u(mG>Y4eY~X!-<2$%oVj-97|==_&kZOef(k&8o7WiW zry=uG3K zzgD$=@e#KUXj|^iyR;s(SxtXlEmAyW+(=(+A^aN5?*bm1OX;(W=0q;)iV=@Ix0F70 zf4hHmgGUN?!Usj5X~b;#t_`!Hh8M0KrE%vPM8gtt!!rk_QsS8Ajc0Mmxiaw(|=TzcYuwTx3f zJ2}t;$_<_D|8D>BpD@*>)!>|aqk}ePDtVx$F#ie=^Bl-@uGBa}ni4KR=@aunl%;E~ zr9a1PK7#TqATBRHTdecJMul{y5pH)D&-ErA*lr8=(q_O2S5M!>^{psI(NSOQSJ?u& zlQ^3Yb%KG#%n6)8W3ZfDVbFOZfe9454Dq${;2~m9qR*+$2b93#nKot8TxYOvdq5zt z_px5=YDGPISatJ0#FGQ@I`XWE=D>BhsX2JN4n7r!t<4rPoLSgG<96WFEEV^3Eb1*%$YQAY! zUp*M&N7V{}KI}L#R)qq7!zxDPs^8mRfEO8DXwo^<-J@QP3Tx-fQ12Ubrx!6A8}Njm zljupU8&sIU!ZV*g2B+VE=Mw(sPj>d&sgw-j_L+B2pg<6H6vgepe6iGP-2KmopZ;;A zyWbiiR1dl8plO=xECK>6Q$zkHUG}qVGXvXWz?V39ngZja~5&vlPUt|4Ao z0na#zIgf3g>y4mzF3j7%I^FOgWq&FQHS_SEyDr5#18PDo)&YUg!DDEF^lwpY~Aodw7Q! zyL{;%`tQzylOm!bw?GRS)8xpJr{Mg7ZL@w%E(t+~MpB`~#BgA}!SOhY(9n<37#<$> zDDiYuCpm(H0YufrDl?kIu{7r;$NZdhCoT4{Ej{Re&TK(!M=DiGOCu4H(kC_5Bv7V; z!~CuP=qWjjHdH+;Hys1%RG!~l2A06$0t&A##3A>eWtH>Nvy-UuLJRyPzFr^f15da~ z`=U^|#{Ql(8`nJgM)&Y#=DPBrdjb{okM6Dixe<{q?|E|1t1JKpPK;ukGGwl%KAEmh zqw-fNLCw;_YHv^>hL>qqirdN|YOsMTw53FuWk=DRXs3QV^Pp#!2nY;J7a$l5O5cu9 zI17#wDgwxY442IRpQ|^4Yx3Ooh2Ic}fWgZoh9LI~5F&E}Bp_IOgA65*u$d)@?l2^f zKu`%_we7h9F_rN!LlUrINEAre%m@w_0g>5207X#i1fo@UTifpToO6G71^4;B^WEpC zN!~X=-gjj^YhLRQZLr-7Pi(ZlOX^(iIz;lVSi#nyZE5 zrasmz0~x2QRPA&Uw&!l$UAIOrj%N{vjEox*4W-S0tI2r@k)ve2u*LMR=U+AL-0k3% zE4KR@?V*7ZTJmzYYX0@h2p%iTTg(Q2hD;k+FUVHjy%Vy7zGH(GqrKgJssc!jSN@Q( zjC+mwe>(qn&6IQJVpBq}JwLQe-!wR+?rzn5VUVQh=ZcsZUw2M~H+F`o2e2Q)O#jtT zD-om#pIqMH-wCddAB_LFa0_sDmxsS@1!wU%)BnKLfRPg*GFZV<-g4LQ7j-%+A9#A@ zF}}YIFFW>e=hz(OQQMW0?M_(PeRbSe!X78}#bw(XB&qsmj}Nzp0cF%ZE?8)L(4&$`|O zokvYCE^n!x%5$43Ep;VvJbj2W5&$2sKijb|4;?i+5OSV_GjTj|Y>~oGB{ zrN6aX!kvR-e$C!6_IBTq7nf3%gT=OocX8r>FcJII{3`ZaA=|00u&4BLBOrt5^oCj!@aH=`3X>DF_J%`fURZ3fjrcAw%-}%Bx4jx$wBncCcjE3rMg3yqVl!n&{yK`5;l~TcNA5XR zKBT^py+LD!F^yD|9gmICHGEVso~N+k@UxZ6L#2g2BEodYF|VlVtprP$4vhut7_g)y zS^d@7DM^`@fb+hTA6m_|Cts?o!Ro;`|(~ml^ z$NniP`cxy0yoJ8+zF>!}AM1J1lm5+n)@6vg-u%#gp(62>CQ{4430H5K>cS-T#n z9Rt1hKfVxVTSVJ~I4~q^xB6D^OGA4%E}kE>-lV!#3ni0D&6yi$XclJUZyuK6`>`AAE7n z)^ii)*8YSDw_p3={Pk5?|84Dy?JIm4gXho0gKa+cP_s9v`xp2x5F_V7fiakuO{AZ8NDBpJsR@v zficqh=FjJYZawRnj>m&nEu-kik8s!4YI(tyJR1SQHOxuNY>&!XkAFWZ;Ile9u5oL4 z{1ri`OjJ!lFjY>uXe3*P{7F?%ou7H3MS~P=dic)+t@X zh*`Zg8s#4LtduzUs+!SdRBVVbXK<;9N8B0_{YEUQUE0_+bJpj+z7=svwiFeY z9@8yb8Bt!SQ%pTbx~5m+pEq~Dzon(GjsII~XGwT^q#(YgZf996jr#J7`L40Ol-9SI z4$Q7mMeDUi>8hnTuUb%YZFM7Fjn_3pVh}cjFDlI}0>EVudvsGARV)VCZ9KT`itvyh zd7MVPW8EJ2?0gyoxpF4-u^96wZsyPxZA0377W+JzSWTCxSX1o?Kz=4$1&`DN*kVRs zs5n&5YkE9WhfIgIr!VI|yzK^a_(c~@pfbcUo!T`1eBZu@T7AxCF&W(LvFxNSC6rVd z;l^~+u|=o9__^{qIA_dX?X}W1<@!37W36`L(*j%215q%0$|jD;5)Q zHpGLf^l)ojv};A>YgJ8jsOQ-;RoKdzdeBd3pkZ>+*mTHbwILZ^RildL*S!1&i|GruvsDso zXsRIsKE>tWSFY}&DRW477$WQEZ2#!>I7Y`G*ukwrz}UP8C>7O4glU!Mb%vxm6Ty5L2EE5u`FGks-ty)(K6(oc z%1{?Ncl-Kwc>YRmr$7Jnmr0KR==QIH=hw1!P8_$n%5Xzi@qhis*hxOR%H@wHen5#NTqylbLp9^JKM6ry@e>|MsvOhc+S42{Z_+=DCPp{H~Mnmr6+KwMM zV0ry|N=n%C%6>c2vDu)DMg@d%h6AJfW?gMHY8v>m-h9n_Z+Xg0QMq*6q5(>8j^H z<=+(=(Se+3L*(M#iPT*Nm8G8n^x!LHA78#GyG+LA=I!|6avnI3+&pJ-Hs+f@&yQya z@5LMy1Z zSMV%(M_%~Qn(Tlg4u8i@gBpZc$HCGJ%C<(Oo^2JWoh(ldcZEzDw`B%&b;vbR6B>eG zBatyVn~FHq=&_R;03l8SN}q(|6@luH-Rad<=>?F?p&~81uP&rSJC5njcIVZO zSE+{%CCCEZbc_j69t*+4tWZ29RMSzq#}6_rA72P2c>@qWf#A z&2tO-`R$f{geCb@&0iJY-v7Khm@ST}HBGJ#s;Umb<~-@50WB-CB39GGwO? zSR(!jn@=P?QNd`dhGXvr;}n*)i*ieza`iR2vn`CGcZt$WzSb6oXn1kKC*t3{mzB>Mkt05W;BM9nV+Nm=3e35eU&{r&?$Z@CQ-#7mlDJCKp{(HfF*?sMO z7{9%qnlzZ6G;xF}lGG{pj^cnd;rDy4l44K-&;w{c6C{ zSJ@kNuQW(hy#K2XZi7ucmYUaE>Ki_n`e{Q;=PdftU;+s^Us4<8md61ZWu(4k@j4tx3r&LlD+H)$y8X$;>R0+{3~mA_`ed^+h#;=dT;BPW9Bw@m&{MDcBWpw@zL2)UL@%1)jS`-|{_E+*va(_jLe<2kVl(fnJ}>Bt>3%g5 zwEM!0(3=RORLBt4Alv$kwiwBku|Ds!{y-FI?bY;EH{t2e{h4w8# zQ|WIrGRkX8Ysc}0U_2^#pCor7*gcpZMZ=WT|NZgY%H!bHnivLIQpnl6A3OA zvuv49v9Ym9r%+8>!6ImG{P3oIRHjI?wBG6 z@<3I66F7R`d_?<}QbEG?djRP#8a^cJY83)5`urg<3v@8Tn6p9W0JweREa#?juBebf zu4FrSJFfB58RUx*Y)QvG*06KENyPc_^&w#;M6-$eFVX51@(}Op!2YXd5WLlX&r6pz z9=zjdds5K5egBJd%`a|u!?2P%cIr^L@jiV@hF!(?@^An3^J==-nmA*w%(3U&+CQW( zazpLO9LXA&C~YRSS2N5c4CC&NNQ2;KquTiQ4&hy8U2f|4?`}r?+w;{M{Kx(c+|5D$ zn-?v?2aZQ*?pm^x?^r(9ZaT?P3TxGxY`?-ibAN1xG0&aTn^@{I9Fx0T_=Xn>nRmeW ziUq^d0G}*%%Hp`>+Mr#7jLVT@BI^JInpdDv0@Y*MQfFBde*!>cC$Pn2w1Yi6Z1xB8 zm^X>_s-t5mxtOS0UzAE@d#iAq8V>|TY>ZfEkekV%U=H9nU7N?*fR|1unwk)6j1aA> z7j|T-nhpLaaXdmY2JBf)mu_Eq6l63qd50g71N2WuzGNU<>w!4>zLA?ALDg7`lb#PQ zia^f3zV&$O%eo1-o%Q@`fvaJte9Q|6g(qIJ!=29S<*CL z$q1+#>6b2Y+vut?evI2RNJ`tGN7v%&#N8j_Cj}hi*4ZcBZ+?EW{q4+Kdbel0h0kI2mOcBROVDM8K-elw-RtQF2j%p4VltKFyUqll5iX znENp@DThOf4`VOP@2Fn(QmaEe%&`bApbpRR3d)$l(d<;b8X_QAipBulkD*_U-S5vK zrg(d%`|2E3BZJia(4<6|aNPFqR~=&Xd5V9VBEmFeQ5yXcC(<*yXUaUV`}E#Q!dSq@ z_t_CS)27LUA9t2CLHDIUt#{o^)_Imj2_LX8Xg>skE&BF9?mhS=x%${v!eaZJMZ52! z5<;mYVu7qtwZ+dZnaRn-?(r)VA)W6AIC*)!TFmdq-2>u|sct2%z41>!`ukmVT-;jo zzTz9xk59KpX{@rFF$*sjETe+sg5Jfk;$tI`{eh`rn`)P>LG#B_B$Km#j*rukiTZ2CBJ)0?gdl4PfQHi^g+bn>`K$s9Y`{dsRu)j8?x z*dB6#);1?1n++a)-l_LLoXL547b?)?y7_78S-)=G={bK#qhFTyzvtfkak&Z?Hor-= znp~uN1$a96dJFx=DJ3&8Ss!sto6kfD`u2o_vNnFd`d#h(yR#uYPMubvc=jNvD;jWG zANlVWj+XM@Jg*S-=XR>`pLufYdF+MGF5?m>gqL@LIh(lhI6adITNpYpqoXxy^&CyL zWJ6M}MTK0RwaLIsGt!`26M+OGO0Ju>W8yRL2p~D8rx5{LWTm(}fhsN*IZYh!&hb+A zlR|N3tYjl%BdusH=neP8{qv@5j4Ad|5Ch_GMloNTiH`Lg!umiK7v; zH`GIppLgs1w82$A2WW?TS(gLT4qHAnsz35SIUoPMkzR9_>KhZ~UCpRuKs9cjq_L_! zK1??M!Jbu5dYLRTXF)Fl?$l$G(uLFUlRLqZxcK;A&&4&+D>h!Pbv_yn_qS2GckwsM z-IiyS50uZElS`bec$zzkxF0|;a%C*lnzYO36@)X;OvJ#+K;KE9wrYrUnph$a1FSP5 z`{M#>NPLko-hlWhO)d8sJIRPH5EtR~OaNzT4C@)yYKk$BDC=popVTwmO$-Ok)m3h* z7HSX-gnuDnB+`?Od&NL`-87W^fLuciwXQkyuVmF@2oB=(X`zc}^dbaC_kvbdestVR z2%UmD3UctPUgAY7yh{if+14O4the{S$+YEXmR1lSK`Ar3@!HZ29%RTb0 zYH)errtgUxO})oYm^kfZf5`uGJ=O-f^|>|^@vjEuJkEg=Lw9-C)3aXq@Dx&( za(URD(niD73d*N`Ry*Ngh#79w0N{=gELmeh)&L0QD%uUP1U}2qi<09Borp;-YQR$C zgotJg)ilpM2!XlJ&f4Ilj$@{xMkq0b?1g!93koTpIgxUas|-j%RW-{-!{E%#3z55xYPbho9XJ3nX60>_c)a4 zq*K46e!oIro$4{a#I09*L@*cGX;2@Pn3cV1W4&>B;bJ(YKOE5k1!p*I;LAhm@EP&h z9p0=2pMf#Q5NnT8uQ76XWnqhl#^@}9cDfjgk|$sa0)s^Y3!0i@dTa#G zMo5>?reGqo>ujiER(&$S=wLIw&p;6wMAnDwtEgnMDf+9C`k%R4Y=7vT0Zwl_0@y3a zbcAf->Jjs2;DUfTQz;w(9QL%E>C6Vl<|LK;4z6;n(n!DB{^y4f&mD@KGDk^!uaz(M z<)bZt;c#48(wVldt6$PShqf^or)v20;0WUPdp&2L=m!%~a)mnm&(BVO4)qAw|0G-u zNy)lAFKb%t&3PI7WWn&MDbhbw*rmwI)os!ZdaNtc|HO^Q_Za@CFYQQIPiQQoG`Z4Y z<7L>T3$9@^gTVru#eNzLW{->Gh?Yx0ZYibNa)tF?GT)7>7~@qHo+KwUAQ&`CiNM0@ zW?R8ru?ZR_zG#)zIfKLFd*0j5}b|ESRdq$OOmz1+L}E*-+N{ZXa<7G zXg51yb9cI%0ibV9l<_mmut@`;60~ed%qh|tGBjU5)fTn;!g568*hM4ht0O#0JK21` z58OQB#NI6k_V&z5`r1=bYWJC@DqjzI$jC2?XDcy+L0tc#;}I32GfjV-%D8!MRaX3z zfIgD`H(zuwqlsB-I`REE#V5*&~9 z$JmwYf@28mze+Y_o5mZoa&Q~8qR!XJ&}z-oIolCQRaN*z-5>m z^uXNrF54*Ko!i`@$Q*JmGDq29{oB8E3q9ss=IO;$e>!olh*M1`AlP!bUfji&ILgn+ zZ6pKX(eP{v!bZkSz@YW&!{9(yVcV0dN|K@qX!el^4RI1>So++NYb(C5fG@#b*LW!*t9IzA%CE7j}oQvyAXBq=Bp_R#^iy+LvtxvXra$A_iz!O1z7{aLG zM|{<)jDGpxXr}x0!!$=p8Uzj<$jx5;PMWM!35+$a`$CdrlS%%rHQPI3uBr-$tOwek z{rU*M;(XI*2YXH($y(6~A{0bmwtmQW-iIkig!B22Ie$$Z3N2%FbaW8MQ*s)|Qxhi> z%;zIGyhNnFfBD>OiN`1}?(F&O;drx8e3ZDFd0eub-u;K5_tr<>y$^GpUJJOg`tt7r z!;yZFSM(nrGq{yeat%w~7Hk)YQp%9zI*J}L&M2HsF7Zsm*;(7vdxW@PtOFq^Y6xUR z(^}+OntFe0UF!fkgKt8mY*1E=Beg*p6g*On(dh^da*0jG6I`(^kUc@l6m$vOoRxC~zx~WaQwO14E(zSF4c59H(&x;oz7->cPC0#>%z+ra$rH{xFoxdI~&U5!#-i znx%l3)pV6Ku%=8si@7NNwSfTr-jodeSK6aHIfp#(FMJ8P+pl$k9*P*}%)g_Z^~yzN zt=~K$|M_^NGZX4U7{#-89^oC407PalY9&v+_`>zzIe=~|!pISQ=t3BRk)|C^N zoXFFh{&sJTVtaWjPrddx>zVFmOF%huO{Hu~Dg6;5JWEm7MSruvWHOC(1-4LFQS3GF zXu$^)bSF9k*vqr^`K+U^V&zy;Ss5I|KeNI<^20I2t5S}+tVwPaUkrf62@^WPT$%gj z0X{>;gV)qv_56aCJecH~L2&^-G$61=!>*B7(4h|4NK_bEl2bVY`qMCkgP@^xIzTjA zE`F6H!_m{dQBWB~)axxHtqJe;#a2~3=jUT3`?6CF!KYW6v;9PW^(oAe4YrgK^)f5Q z(j1It+5)QlVs}=TbDBopet%S`_sdfA)IU^+=L1s9^qZJN79k?P-qqHb%$+|EKZ8=? zw29O&TT;Xlj+hL3LlVZkqzMjNF6AUD=Dw7{H8fM~gW$9^VSC0Z{+WgiiTJ=J`ea4;$^vpCVb@`RLWai-tF zK4Q|#X&A`AmG|JN!_|m~Q#1SO zP7Xn;c!H*U#0o}u?AHdAXjxQ%A&myxEGd#7ne0;N7&OJH5?cd4g*gWTY!3R#MTJ3) z88z-R7~BD~U8#rBIBA2kN_ob}3Ar39!lC6Sz912XHvAG5KEo`t>l@*swqap?#Hu#LJ!N>iP^VG%Z?a+f`e}DW@ znI~B;^%_#$;J+`u{`&6blFies)X;48+a3^Ri2oj1E@Gv-%cV9B570R;M_W(eUC4Mq z#2HItq|w0wCE=1QYaAOVh&9l9r(bL)s+-}2pdAw$EZq=&Ip3M2!Ap6A9UX(c1A431 z1-wqmayckZWkHyZ@lu)4MoPhFwDc-320Ixzp@54iI6`u34~|^`6Ih75N`|P%&yDPM znWhtThQ~hkx@;;)$5UzjfHDMvFRiMKdaVYk;>lx>!#Q;1PZ(EXFT28liMweI)8%6-~735aQRS}+l?;i<2lJrcVfbDT0iyHDXEDYjKa-@ zq?yP7#yUO=Iz$urLzMjyr%DfCp}Z0>{+Bg;eDpQFNrKs8QFVc z(BLS7X`vZKDLV)7qk=3!(Xwh~r9HlNX{g+4XGlZQ0R1zWK80e5d>KZbTx0;pVMNJw z%C#wJawXU*a@d@ZDjsJb2#3j)VY_4yIQnF$9Vp9c1l!E;KI1-3S4tz+^SsZ7ScoCU z!urJiyFJ6c*HZo%nD~y?T5+BuKtcT}0syoBas(6sinTMcdAhKWSFt=lfIV2yCz7Og zooBha|7*yXePf7-$4$BC z@MF8P(sXnA!|o-mIUEhRSn1q@?Ok$J?(vx$$$jeeT%oUzDD3Jfby^Vx`(%TDA@ycv zT_&FOpe?+#A@2seYEXJInN$B{=Ny%!$h3?cROb$rAj`8(73z{1g{83*vR9jnPIW@H z`jA7cb=Qw2*0}IUP@C0CC(=Eu87YkGHy_n29Z8HbT?AZIX5MB}CL-hXU|_1;#Ok$` zK}K+vNlWXsr9dWS6)n&n53{5?``j6d8ZsD-ijK=FjlVRSL1{U`<~wSGTM{`Asj0!> zpdyg)Er$<{1Z+YCm<(tI_{1<_-SvA<{8~C8K-BbJxMH~BYKZnrCx8IEQ>53oIbcR@ z0PGwjXCnh-91zOZ*3%9!b#>G7)04K7#?o82ytSmVgCd_uYwx9-Zgur{pWV0vmNTS7 zr)1AfB!?mjbR78c8T*}r$9cu1Uhwp1o{S2qjaph7>=k-9f84nje&~ey)FsHs;8{oh z5+{sw)9w?CqLd|uI03+>g3*AZS5f`bvKSKL98_e^K%wiTgp&e=Y#b7uK@71rcbq;3 z#aB+rwO+%U^302-==qN60^MC#N@O2=VU;L=l-YspyRT_%?E3ZVZLA?0swU}9zm4Gi-tDJU@yODbCx=E4h~Iu4fA8p! zsy~3^e)9c;rj@i+;5aMpaN;fCrd$I}#j|f7?WKUvqe<2UBcQ-+!k&Q!OzH_k6626J zafZw1Dw0X`P%?}-4==5%DlR6)yLCptOup!gG?+?4=ky{0*@&|^+aJe9QZuB{0)dn_FwCT!P>M`I7s$0y;fAP?JNZ$f zN#r`@a7+*!Oz1$Mr@Ywj2cxVE$RZs4w^}Hjx`=Gg!?+F_Akbn7dNy|fnj9B0tA|Cx zYqEYkdv+4th}_IyZ}GLb9e@ita#3X9gQW6KOtIXbmyEZlT0C6DvCEe{LlH)ISPZo* zQAYg=ke1Imv}jvPJ~LVSZFZ#mTAO^&F==L;f+O_%jG2?^|Cl#=%LEe9ZGAn^x=}jD zV_WjtMagnNrAA{(Rh9EIY2$Q4;|#G;lJ0924|&nraeW8x91?kQ`~Z~lHQuqth5Lni zur7Oz>79(MMSAQ)<7X*%a)Ke0s68HgBe8bWA|~shmKmk=Sn}zo^)o3NU|ubAIBb}y z;Po`bM86MdJ08}XE#+IfYr$O6`A`vkv#G1GvFB5IPhzy&>CfpCnhhiPS z0tcLVvSZu!#pi)=Ok@iebpDA0wk%_>HG&UzVVA!2{G z(@;HZriH(ab>L+BOe0$+5?kNn)QTI_qlXi~%HjlXsnsFvJHhoPZjS|m_y12EG29|MuNfD{K>=byE7!Mw_T>^)bVkd=awQ+h4u@Ue;EfV_Z7T&~0x@YAA z2U--bugsYhS5=8g@uY;>1BCX;WAlJfu8)|=F&fQin~7f3P>P#|zta_>zpBkM3f}Lr zHrFw9Ao)aCeCvQ-`F>sD)IeNYd_$1iN_+c;%XS#kYjZGLY5)eBhz-$h%uMTG2zcXY zW69=1rF%KweT-OR&?c;^@{+9JzWm}9bVrOM0LXR`MHK1hjs+B{h7d+?6`os2N1#wz zZhG$!0T{CWr;XT@kbkJ4S$Cx7vU3lTN>~2mGe?V$gE$fbrMTR6)ZTd;PxW6JrQ1(E zPP__f&b{Tf*&R3BaYPc!Vz-L_H0knR%)J-B*W@Ed8z^_v@VIqR59RP3nPAWXqL3*Z zcfF(9A&2|2Pe>jQTI8lxx%n<;8+FVVOJHL$CqF6;ooRTy*d_*}HHxw1u!#wE}zdWW^V=mGnJpt(OL>+YQDWPfH{;w8Oyjj1K7j~9&{%#L@$nIP-tylU*Qt6kGG>Dq~r zc@?#iNsG^uJUsYYq=ck_ViEQ@V7IvVE${J}MN*~Yih?3UUv&;`aZv<&Q~dw*R{pV(KXB5#TZmqgKg(KU^-o33cjS&2Bq`tNX<=_3C0a zCyG-WM0w5E( zl~z>TE%-%NdI(xk3z@}b^~t7K|zo61!9DWnUOV z-i-n!Hym|!FH6XRN`9l|TvIjzKyS$06^qL_njYYuVswKGt#>4^*)L<*h_%*#flHNx z@G~M>B1r5zhL(V{Yc>D%)|%^4SMYPL+|leTaT^xeu7(Sn`&7$!I41AQ`zpF~?+04h zyk6+HdGthFk5be|diC?xX%0CLH-}6y)?91zRt8~)v{~bA;qAs0W?Q9gdly-lXUBNB zwa-8w<-COJ8QD?n#Sq1Iv@61Ok!KuMHyQ&m9af46cHH+FOe1+%k%C}fE06Rk?g;Nv z7RRT!%}HzH`0q-s1ee!usrwYH;UktNiIfaVho!<5gj|M`HoLAM~bQF2Yng1e1pKBBCaq) zn?|W|IJ*gmNWV;-F=ZRP=w2wWdC_3+t@YL%G|ZAC2Y)ZMwWA#nk8Qy=bsqE#)e}bb z8|;jZ+|0MQ?IXzjEW6O3J$P%wqC=W%pjUA*aYs$c-da~)!1X-tUu|6LPXupBZ^1x{ zsMOO?MOZR(MrX}KhuEe03GZfMwoOrSBSgQ&F>Z~)60;bY*?muns-96+gQ}solf=3h z4T6jz0IZ4GFW1fbL}8}Yg&97^MJ*|p6_=btx|LF1mzI4lY?nEg|^9MtU^9SN*)lBBdN_#lnwYP8qu|8H46Cl!{M0cCsl77xe zmNs_I8V1^3#t{3+B5;)A;~H#-P4uaB_muWjJ$^pg#P6cR+1F@~)NfK{SVBj~$ogs9 zv8mLnW>DsR@sMdQg4C5S*2qz|WE>4HUAfWpq|fx`oqo%m6XT0b|6y_Fsf&whXAp`> z)}*T=i;}A}p2CW!y~>o_kTq_&X=SMV1tK_EHNG!hD zs3uCTq)D)S3A6M*zEOjBii4YHxL20rr9g+`y9~h{Bl$2l{sUD>k94 zHmIP4-e4yW=_pUMTs|TzyRKO8lq!}wqzn91iU~$`!ZM2&tv0dj50-LFC~aV1fUVJz zyX3La(K@sx3FC7IQ20`-ELnJ6arDbIC#`M#koqzIV?lKr6x74q<0r~_*YioUX>UV~g>V4dwNqDC=@~eS@o62FmalGATxIbP?1mz8XQz zqxW6N&W|l)g8)MUMEm|l^kszgL2}5pnt5htENi&pg}MJ3C=lK}i0Ts|sVu53g8C}U zP`4wp_g~7~e@&7k_40Uot{Etr`c3xB+~tZ<-ZziZnE(>|wabDVJ}(Z46dfy-3As%h z@29G6y&B>vLY+qt|E&sHV@IMKA3VM8i_(khB>5X2X0-B@+4 zkUe3vC~GswyQZwMywaeBzfxdN0}ly<%g~37UV~>#(`jWKf|)V{=i zhQH}M;Reyt)$+g3A>n>+y(Kllc5)>3Y*#Jv@FvC-E^tqvzF^_u1472kX(7M&LHxO? z+2z)cJF&wu|I!P=-nM8tIEZRav+pgiwVD>+CjB-?nd+dFf5;36mZ0ELEYk{^i)p1f z(9WsMcCT&PN~^I?5el7)yM<9C3#yT6!~XJFW);ho3S}dcll8P+s^}hGzXnDE-qbC$ zL54_S;AFm)Z?16C9WyB;mQ<4R*-=toyJdrVnwOJ$bF zwYeuKN)2ovM=S}$XTa}4#6pZ@0L>s=0SR0s3R?`4>&WBw-as&U;_}Ejr z;zh6I>5iydWVx$@#e^v2NSjvxe22o#%`Xc1$ZK*TU>k9X&oR)RG3c z3DT0uVtgb5mV{LXT#f@!Ubi4T6AZp2hv}M~zs-7_rjHN9NUtrV%?{y#ULmWPCqs~k?u>U(GvYeM1CR|Mm8up zcxGJr*7mCpWt$>b+vDD<-O#c3%p~Alp(HDrG*m(?C)f)v12C|Bww7)O6R28c@Gl>v z+tRxYL$5C6cJZan>2Cc>l7RZKddzL(+}C}Ls*Rg7L;FPaiWY6Ay1HE!4q(?!G z{08hbs1|^PO{*>ninNM!=OMzVTUe)M5rQyFxwXt5-EPx_Ntp+@*GNgP7L(qIpn+%L z#x;e^L%CLGV}sWhbUv~Pq){!s`U(f|Sc)zQ#}kbqn5i)wlV0oN3jI&+sWk7}#tbjo zo_z&=5yyt6FE^^4J6>rk{!uR7d~@!;@a9N@4n90!W+HJ4oJ9QvrUv;dxm-d3Ztr2c zY;`AYAsaWIm}zZad=t;owtUBQ8KpwYbid|iKcjoH9>uL_cBkw#{WyG^z*3s7^Z%A* z7~AaKG?=yF$(kXr6N|ao+_vLh5<3a8vBq2IlU6%X;Me!SujvrA+52qD`XDq9Sx-*l z{3oxbk;1J``@}EZjROYZf*O5gmqz(9?0wnvww?&=7K9 z;RuHee+AuwHE_(7B_ON3#Oa;;!(TLIjNX!fswQyiL=)u1uVnI&Fm1V#=sE|JI#DhiViU>0-Lr@664t%~_a9nWs-FU60Ja zq0}8C*4EbN!Qyz5>(k)ofwy(bIP-Wcg0uw`iF8L`VCbF@h-)O*s`l3+NdCAS8=T_m zwz>h1BWQMnIkM5*pPiq{9m?d2fwgA0-SkTMYjr6zBMK(}b$T{mWVqbMjCJCxBQ>&Q zO9VwjiKC(NXA^47!k#~?=Omwhhz8(H`N0oya|yU0C_zd_4h*e4BTG|00#4=G*4F<3o2>t%eukc3|Mbka& zG#|D@1(FNlpW@2n6M*l#nEZmGMmS@U&EL)|74>(3A-K(xAhWv@p%9iGI_2=K3}yd3weJ z5}_W1l;nEUB}-Q^vhUkj{eBO^YcMf$cPa$%bqRHsl%b>29rm8gr|!KT-ANzImw#(5 zb@>eQyUl$%p4}~4z7uQ$;3x6>ZG>Mx_e@-k-#%jhxH7q96}uJSw;55@8IrV>Ol%A~ z_~2{~*X2M{Q=jC_WEs!(NWHSM*wL=4tB5Fv&(STG93FN_gXnt}FTs_=?vTPc-7>HQ zfvwYU(psrVcLKpHJq@$ozzdYmcD5_ahT4Ck`Hjfa>m_G)JZ@-pFubebaP{=$T(dJT zFT7Z#>csPU%FE4KHG{NH6k=vPk!;UUa3yiF>jk0XK9PFdp}58MqM)()H^;4u(2#0` z@uDo&Ylm-gUNw6^L>2FIr0B)x)>bsu)sG>2$gtf)%1r%D{+@t(^7{nOLy{iI|E;5Q zq(7o*;XUBjNgXJ!VU!W{5v*EfAFovZ#40U0$s{}b_tT4NJeZ8l$HCqtE_ASYdtBgV zI)|P*f3vSB+$Vx1mCalaYK;y}vx+v|y-|3u)!imDh6Yc8xI&$o^#4%?v7|^N;cY6_ z8Q$JqV&v%Vv(fN=m7u_#`QsYMGHYRRgKM+@$&Gl;G-%8EUAPz;x>mHgL{`h8H#g-md37(e!(_5B`uCqzUigr9%Y;F11K&*Fu*KShyO(WwE4pXH*?SCiBp%*~poeC8Sj)fwf)Z=VP}hROZzPvtE*G zYbVE}X`k*;H;feIFAVC1V|~xd&Yc&&0+;!&;U-KLaHi zGtsXxSe;~5PW^--k<8hE#2Zs};fTnyF~`9+hHa)A)TfpM)+l_CKUzO3@M;q}@$I*V zO&YS8arc?{Q|CtS(c&%D?>B$$^!u1MN5LofqqK^Y_|9S1X)Hxw&6edP+>e3*-B~qF z{dUA@j_2HQyCT*iYw-`p{0P<8tj0fGn02|Do^DQu92|o5Bop9KSH8BZsDKz`D)_RW zbUD0(I5XjaN~Hp{#6OoY)J}d{$8fh^WB>@>??+bA9?`nZv+Z%5Di{=;pfPIB7GrBN zkH=*2^5i%H8*`CKp5I)2z4kHFIw!cmA}~O#=bdv|bctP7w!iDqIV2~w^a^Pq-ro`> z-9BJ;=|(2aFlP#FTN~_#2(wziorB=vL%&N>Xgu^6tbVwxdZ)?;YMku*+mXj93%)LM z7jl(83zxO++%c9yN*x@wk*j)UAKok+7tAj_FYCABb6NA%^s4K^?)>-WO~v;@{kHvl ziJpEpnqT%DFmiO1IKrOPNf8KeA*f(@`AL=_ll44x?vp75?LRr!G_sHyU;k)TG1Tkn*fb(*_7Tex?X1xR z6NP{`SV_%~q_AC)E+I%b;=4niV=fzdAX;1sMTrZdBG>b#T)!=|{FbEm*#bshD$;zU#@vb{MAyuE01= zXT|8~0nrfz8Tyrmz(rcbf|WN0uXM}AQjVZwSSy-Ohv3Vb{`1xDlkxHZg7}=g&sg(% zsXypD^5hz9nJFP_u9C`w)$Ybm^%D+2q_+r*u{jaQsWF8SvEZ_El~u)VqH>0gq0d77tHCX--X+eo!_q4%|lvy#mq zyMz%cQcZ^;P$&hSE(X0JMaUu;;s^iv+C({g9F`fmYm~rCSUO2zUc>t5?dzEq=}zjs zX^6GdJ;Q(0U?*Z=6vpWmq#-(XkOCMRY?GXA4;ngtO{yFkce5AiPd-{s<1< z9MgYQHGoW8m?!tGtaZlhbe26p4_byvIij)%IOs-qEIlUMg0AVX)CEP@buH_O&rs6V?)uA!CCEfZ@ z2U0^>Knz=3a)L#>r;#E%-J5ygUFuBQr!)WgxOd?;8^LU!@Qq;uGT=h0N6t$KnT>P~ zNfoO|ireH|wc8z+*wMCFlf4k&3O_7LdFF)Rvj!`E(BoWQt&@p+Mo<*#j6GZTg+mSq z*^TZX>j4XjqTH8hS1&xpj~uvv`$Jv2GV^=pwxC1V6!|9rPf6 z^hP$Xs#u(Un5S=JYA17N%(L{lQ=d^b-|rI!aToJQ<|%>XYG~|&o7P$D;I0FTDtzT9 zvUDdrsWf=}Bp;VAF}b4H*jPSuF+mPzfmpi?;L*LI9OyAM5CJKiBcqGta@~8d44>{7 zAxL{>N&mUuif4*KBT>|@~rE8{wk+lXk+X8kZ=?8|D zw0p_%SQP_4o`*E0{u5We!wZK$AeYH%sC+RrA^BZ?6cwlz+4@D7}wJ z(#9E~DOdw3odA~&_BpV?u9Bb%dUPjr3r2~;wTDq=o4qc*ii&FA+){$g3F{LP;$?ty z3`dSG(FzxxK81ynLlrNAq`U1!Ceg8QJCSe_v<9_oME7>|@|&ficKNDOAqlt)HHUjI z!^umq|IbViF@3o+a#RfgLAd>`m&$)Yl>}V<;#)AoO~*?NcL1n3U!C)q4JCmKIje2w z?km;It&s}RO&`2Aarmf#WkijtS4~@eX5KNf zB0bjDd|?UfcQPKdO(Zf7W+Pkye}fH=yG!S`p_H}Q4z1IvlU`a2D(MwX_l7Rsh#&%3 zx+5gaYWFF;v-XB_esuZn!Ka5^>47SiPHwvCPMACY?Z4U1M zaZXCZXC%OME8dq4Bds;uI+e=4H@OG$$I3fcmrmVX59PsKCx6B`H+ShiU9~gU{oqPX zcdFdg_>%g)L`i#XxZ#uwpF)P3uEzPHqR$Yp?Y`@_TJq$&@A^xI(;R7=3h(Q_>S-{e*4EZEyN9}m@XiK~ zN9Rf1H~W7tv`5ZX_9xP;!>FqMM0twA488D9-;WRVbQQ6c$V`ZY+6gsb0S(@&v=Qf= z82lyN3@U7Kwy?@Mh~y%op_n3JT%A+ymhdVgS1o)j4AeaH6jpZ>nK!f!4~ zA%2wmIy^OiD`5`QFv$~4U5sMFYZGSBWYuqFUg`C_sZ6IvS5*{pn%>%@+$PAzPEdkq z4tK8G*^ookz4#PO{O2uz7yu+?$cp*+zl!qp>!{bA-~H0jnVFd&9X>6iylAkM`J(?k z{=c5FBXg4LpY{lRy$y-G79`CI%NUufD==ERB0>xweD1Stp6UgEoN0-nNO8$dKuAgk zTG}c17kVBf}GpL+-I-1UvF#gKjq6ZaV+Jl^O)ZT&n^cjtXaxPtK>_%8^-#Y z6ies16!FVyuNP$5oTOej5Xh35iHZFSq$X+5Ks7uHi9L zWWREk#ZBdK3^wu&a29p01L|_W8P|TC-Lrf8(*y9p8^vn4&awEk=p$hNefrjs2F{uY zqB@ZC5QWK@X{la!e8g)j>8;VG#n!KbOKZYusAg|Ds2n^6wU8JelzXQo+nVe(&pOs6XFN=z%Io_HIZM25{4LOb#5rYtLaw*WfZijDwz^08h|{q=2t!SB9IYwM@C5 zB?#c%<$Gjx^8*lM*Aevmw2lAymcEl64G6W$8w#79ZVm+v2fRF6gfl zL;fzuTr@5z>k#>^Zl9Zi_cmzp`3dv{zf&N=PPfo>v(Q4t$doJ`87L}YnE3Cf~r6p+;o)Mzr3a%0?Z5CIj$bVLvp41%B-by~#@ z0TBdIG-ga>(U?sq6Em62^F6n^k<9P+yr1{4XL*lOb!+LWy7!)Y_IvJu1gR2JUBKqi z;6hy1EK^${U1FxEjNKtuv@WlK&Gfx~=Awk2uxD0fWo0^aiTtSoS9le+!qz=gQumCJ zPs&@bnQqJ?K*Rws!D96s$xEE=^>zq7Tt$}6SP3P7ko8qt;G*s&$sGmdLRNiSjFt&0 zcLu6O#)gdx9MNR0g$!etve4i0LV^F9mPr?47azTTy5`vJD<8aw3XE=Y%=v24yfg<) z8I8_498g?-|76#ks=V}6hty`z9W`~X3-UT^>k1}%d&Ld+STx-;x(G9-_V%qbeM8C< z2|I#=68wufKC!}ynozIY3Vi)0XV9%Q-~c}LnS|}Q8)eRCJ_FH@ZFEht+fKid0TW5` zPM&NlX>EnzI%0zS&v=n3LXK{DvWb4^a{qB%J-9f>7SANC4(X;`iu5;LyJys1@!KK_ zt5%iTJaU87Rx>)h0jsvDt8ZMM|GD|%!drzOuI#LA84&IBz~8C5d$hl1=Hv2Xw~~*H z^{BhJX^5g;TYr1^flS{J`+`7iu4`NZ5{KTLb)&z(N0y}tjb$#2+J>lP3(#Qb7&1@_ z4vqcX;$X*|*n?Lp%2C(;LRD3S@$1RtquB$D24CtLw;~7UP4I!}%Z<~DB`Pq~ngdh& z`2~n0RL-@R`tu9eIBNF5@E9uWncO(Pru0Q%+=)F?K)x_Qyx>|`ERu;u<>C<|NqlwM zz1wPGlT&{D2LyZxxp&_`=6FG!wx$(paXM`j4``+z)^qGKOLZ+U%FV*n%bRIEM4+-SH$EieyqARjAvdO8~u)3ZBV!yMvGHVwvh0dEEi$Eis- z{T=mFI;yK8;6>aMR(bm2xU%D#r-vT51RT>iIhog6#VZ2y9ml;9fS^$?mwn@>?Ahk};^^m$cU6io2L}F8lK?0H*U8M{jM9nc0Tib zo2d|sKF#e7iC+ivX(U}1lsTu7C^I3gphJ)!_I*J)Z(dklYpa6}C;ca9)gP*q^jf+> z7)Me$7`==-L=1!04NS(oY1eIRWYB)ksO+}cyZh%Ce0`>*mCW<0kW>}koiBS9zi;NV zs`wksY)@`ovf}(acyAV4|I=4_c;?J2`MJ{AB>(BijvLUr-LrVon``SGvpc)WQX6gz zpL%WL?to?cR4$cUF>Q?-b-9dI5g>aM$j!ikx|~AM+eCVjb*~x(-AJfXz zvb?tHc=UY!{+g)A5^7=zC3oz& zV$>DgMjJajkqnAlCkF#h|BvAg^`tq&qo88L__302#chT(O~K`1IR`_VFJHrt%-c@+ z@S5`;Bi)l=PIJd}zqnutv=fSFFl$AHSZ%ExP5_h`1kpMwSuI!)xolpj#S)wFTukGX zBN>w0x<23rL}+qZ(F0Q#&5>}c;QiG;<pl_m$?3G)q?H2c^zEC|wNL0oB&4#BbEvfPl}Jgu4bV>P)ur$DHB-4R>{L z`;*{n$D;v^rU<+(M0A)x(oZ*fjI%@CW6a-B)kV$Bf48`yIPW4=am3xD`CQ6`h-nl; ztVSJ6+(VrSLU+8(D=?AxggRgv9O)A#s4$%}-b%-aLR@pGaX9jJ2%R5Q7J`dthlr%G zyy6pHD@N=?Qy^&I67I7yjwdYR9Cu=pT};uq*-_brODD_~nf5}a<(xerdaRozP1=yq zvez?c=Zm(9;2iL?*5V^NBFAxYp$zgT#HWaSyqkU_?3uU%LWI5P_0{Q1 z=C{obR@-^PIrlR|pvmpCSJEDO^}qVg9~YeM`cPlG>fo9i$L|iz&F$BbxGnGETzAD{ z&wINyrD=E1k6Ymx9&j}*`Ki5o;KUgC&t}*}i&-LGpvuJtQ3^!IRAtrJ0-(3LH>c&z z88ce){h?gxDuUuY$CSf)Y0U}8Q?x*Bcqd3yQx1gg4aJKfu_LT?TvmPGrck08a#u`% zf4}S~k_uc?I;$mS&+n#*a-V<`)!&s5eby0Cz4&l{@5Jx#o_9R*fp2(Dp4HKo znQE7~wl(>+#s2$l@9&&-r1AcbTRx91ZK%HsX=K04#z4Lb0h#JZ{%_V}*Q?6((eJzyg$?rp^}X}x8~a^~=6&?k0;w$czM z;$OLi-D^G;Sf&!My=npe3)sHs=f-r5s=54CZIZ>ofVL$8n-c3flSX-@PjJ~S6x(R&Q#dNfCfYvjpxEYm zc;*`wCH)*Ou2*L!R~JRH8fn`&+&P9`_g}#~r?{;-L6wy=%J+@yr!h#b`5z0M8`{Jy;=*fl zS5VYEgzRrtmGPhE0|9d+mKQj&A}b&$>IG>7K2vI5B#n)+YdsZx=5gK?%t~K8@%RU^ z^G)`yNjtXkOZ&R}-@ajYD(LwBk$(tEtp9daj$>|MYU}0L32yTj%?a>misnz|7Aj1m z!+~upm=%GhT$qV?9nc76c#?B}y?=O5MdQoI*ACB4TbL59Wo(j9>EFQyb~K)lWq*Hv zxOduaSE~IdZ^SGO8YES-;S^Xg0ibFf6d4&26BDCef0Bhs2y8}lhse~DO5{R=TEr^} z93x>38xc52lc&T`?i#oJ`hY;!BT%@(&>>Jwj+Veu$5mDOtrBs!9hb(+d7Hd^DZ%J5 zxa)NLGIssIUqsKIT0|IC!Y7axlI}34`Pqy{WxwRJdus!O(kea2#TD0dM_oiF$GTY_ z&~NcD*-$4p0~e0D2@~zG=y1TH&@eIMu~rq3kzbnDuxM3%5+U3j{Os=0n}K;CtASVG zu)#x21LwS0dhec1{RH>AXi0CKfp&01D~#A5AW|#5J4-L@I;m=+7ZNBIgq|rGS2CNM zOF;!E@7+FOf2FgKsS?U?QjAK$xBCrj||(ks`ye=L}S;g1N%w?FE+Rpb@!xP`u))5`lV}* zZS}dlWKQvtNvbv5y}zo=-Z(J7KP3d9hw;b@d2|?MCU|@Ld17$<&`vV)beFqHZ_ap{ zJ3k_=_+IB74{*`5e+LsCxVEvp91ocD0$$KL>)kK)uP?S^Uh7V!M9v3wfWLy>JJXV& z93G!yrNe#5!vY&7M5Qx26Wu4KZnJ}N5`e*9S__O9GCe^`81t@9Z)>`~Izf}?MxG*E z8FBZM$_PZqE5d8Hx_0F|lgT&&HU|;Ej%}Qn*BJGew?1xy<%SiHab4Z!AYG|i`pL?N z13vs`=Lw%q_5x#i@1ste+ihLNrI=8D;KrufF2C@aRjzRtB(esuXjeQ5UqY;dYfrtx zGpqp3*IG1=gVHxac=QZBJqSU3yU76+c{uRIaernJW>R$^2g{*Sqw67lCl#)4byL`N z)=qRr(=01|J3KcQQ~d(V-0WcxT?(SCSg&iM*Y$z|7U5t^MKIDJGmBhkoKdCt81dQ# zd$8Q9s*^UwyZsLC0F&O=reV&XX(suM9VOZi{l-FFHygho10m6RjFQKX%fUWWm8tG& zumfeKtr3o=q~7ldUzwv-#$K#!F0Q>Fcx4Q()wZ;4Hch>!F)28h77(H@33=`>X zZaT&;i9S>`Do?No7A9)uK!!e1>el}{h3vaNTGbF&74+HSs9ct#sR^%q_dvb|9vn~$ z^zFST4}JBDxw}91UcnT(xm&>!;5kInF*2!8NsunsCMPGy<0T$pa_#AbeZXRN_UT3H zN(csw-LiXQF>v7IK)<;_0TRkGhi?TXFB}o)l(s zc;p`f5EKYr&$o{6>h1vp3K2@K)|9lLZpXXyZdzS`4Ku;~mpZ#KOe3&(CgOasl6^wc zViZxH7bHDzxog)hS(SQk05zE1+x^T2X0?cXW*%oxwFma&|M$-s>C&;Khz_U0U2RM<=EtdQ;`rEtDu(Vgxb;Bx=$J>lHgN>i4bH zjf=cyG6BMX4p?81f2<|sygyqKyD;(oHl@)j%RyWRl@Mo?O*f-lTR%TWB9Qbrq+lkx&% zKGQ_OATbHAf-fbv_(w>TezTVBwv$ZG|H%o_Goqq+l-=F8ADXwtTxD}*%Q&F; z+#;WG4qxf^Ol(=Txi0c%U_J}1eVV7o2w6}t7PB;>UQXD;{ecuO;(aU-NIng0z;xzJ z-;3pSVU~{O?d=%xc5d2FFtH>fG@c30%mx2`1D@q!mUR>e3cgRX3n_kbc6M`AR6q?Z zN4V7neuU&RO*RPKsT`BkEEemB1c>(HrQjx+U{Tj=iCwP*k1n)VwxRR{9jlhj{t zbUk!&j-Ov#UM}XHyXf%{OT3j!#av-B8piPTrUNTBM+YnCC$iWPUmma8GvK&?%AJU$ z-SdS5TO&Fv&=yV5TaK><>9Jh+O?4Bq4*GC@Ek(qVFI3fW$eL(hQ?}c)%cJ zpkZU%Bad>1Z^33MM4>;wtItNMF4dKy#UMu!jU>N}UBZS1d9`)fq`nw1n@xXf>P;QF zc?UE<7X)7mP@KKHk0&uxuM;&rK9{D>4hVP2-fa`!ddVgLwsL@JCU@A$B(0a2K@dJ# zV7vVW#nrG06>UCG8fw4I1+P3mMv<^HBf69`_6Z}Sp5yJRPnQIhNi6;SDYLCKI-uih z4TBF;R7->KExwoSMK<8XiDLWN7ewLMvGP-)Od;AZ`u9J9ScEOw^15PFAWw)OL0`Ux zUI#sEUGjm~u^)c<0&X73_OdfGS-8ftv!<#ZQN0;?H&#Y9UUWuiyLw1}(V*KXL|LpS zlHIp{XEJ#G&X$@?45vZ6vS3lcs9P)Vj97nQN6&fxNmI}M9V*^d@;X^J78F2|`2Eno z?JB}JRKf?0nURuuYsR2ZkV6WU^OZ0f9UWJdpPFH^-q`}LGC;rOO=DTCx_nH3Hzs*2 zR9C(-T)@OT9-ir?L*?{B5w<{OgMq~4uWwzy4-|^m1?|B7!?YG*_TvH<&n-}IRY6UP zX|Z4%`E#1DdB{>KS6z%^86rR54Z1KSU4n%A1_o$xZPL!f$l~hLNm*GZS{FxcU;DID zjID>HhRS99m{!Crf`UHW%bi-jd5i|9r|SSP6PQVgCH^8u$FZZu8N5iFvHipdMU%=o zxYp86a$Cf7IH&MluqpX7!MV1b?jTTw*-sxOGL@Z`N)pmBOsumrgCdf~ zqBZR8y-rl*#3c=!v`^>fx)<7TR*0)Sr-}($$)KHT@dG)GhHE14PBmE=$uj;XrZ4+= zL6XgytD_&RDh3)%tX_x7(OY3v@>_6`4#e)))yU?gCQsLlBP-r(QZSk@Q{5=wGs1t%l`~?;m;(RFi05+YwU57iK~K??4=63p+Uil5oE4jJ zqGI+|7s62eEX_r_%Gi8oibR%0Mnfni*R;zaEvc-+&TG5tsmzuthiU zu(PUJHnAWmjY4Oj$s@nop)CGj#WrWX?DcNIG53d(KmD!YoFG|>X%;8bw)s&Du6QC9_tA*bbI5I)~-O6n0zz~t8gl#~wWtc6XV#u{p zE?!x}U&n5&ZaoS#MmTQXz`3G)u6L`FtGMBlQFC_8bjD}Q%5*{BnH~!(v#>GQM7Jx) zs7s3=ysG~&?=MaKhY4ZHi@vzs5OCQ)-4^N%t>Y&+HwVa)wnI2<<}-00eHukYOR~kV zS#KKp^?>)|Jsa9=Eox33*of*SzBv5$r0Xji?>;%5bf63)Fn{Zv5eT7m{JLj0Q*PYj zO5C4VVc0g7N51mdRxmeVs8>ye&4B493 z<)df9;Ux>pWWEO>iMq-(-qVv;j94It`^Uy&Ke#M}kGMdNlkyd81u0l>s#TO*(izH= zgD6M^&{V$&THXY&X>>j?aK-?;qn9Is*{t0Iqn&Z)(ilzM>#tw!w$Wl#DYf=75L{*< zyYiBO{gKef&n;8-B%0d#Ig_DZw(A+?Rl>`;$i+@`Q&N)-bQN{! zKybhs=KSn*L}V*cA9a$Z2N}>YG90RDSiUICc_xo6<>JLFfkqKkiP+*}Q917DIxubK=Pn*MJSrRRm1Rv&m}2h6Y)>~G4_Yci7Y-_lXa4?2 zs`sCskLjFtFJ`xB&k)6-2pgAKnT-AV(amlK0-}k(;klcc+6Y@rDz}1Fnq-AI z!^7m@ll^DlPlAdX!b(LPx;N;epGL9u?yR%bD%Wo$ zh#?lgv3T5g5rOsT_o{7vN8V3N3ZtxZ-; z0u@c^(%sm5$KhN;)s3j>P8o4E&n`pJv^ZVx1G@ah)JT#2{+lRD@JK`kQKN&_rLZwR ztq-(#IeO`FFcT8nfYCO)=kiK1`|$AjoR~7lK{BCbRv9X3xJWd2DFM~VRVU6I|sxI~+S2Mtwx{pL?U;|@#BZbVf>yhbq%!w;H2k}bkfZc!2D^W<@TQpUpUZr`8M*A-Vr{rKqlow!X1Qoxi| z-*eV_Hf73pslZM6+E|KOGDQx`NmEah(wEA$ONw|^JM~0Aj6)-Ef@wVHvj;-@Zn2*` z-&c}P3gsCCPUsY4#td?+%g+%)LPCPy%Kx7FO>+>&Q(RTFeLHojWlQv5buv4ODJ+wSGs%hVOpNXwTyp(&+=hTDS3@Mib zzyU#_gsM!=|7Hf|P^=acPJ{!|BHDnOCdCQ#UghW{j3OiSnM`9m)w}m75igCNmTfpT zzlG_Jh%SrXHo{X<6n^p3n`k%JywfzN-!k5Ra`Yi2Ii`D^tR*H~(>u)fkRV74F)}MQ zs1BBH%Go9Dm=$CdU1Giu#_7^o4;_}0RK}TK)WUUNH_^0z#-2P}gZT%~Yo`04zaW!Y zmGUmLx&K+IgtrU`4>i{7P+J;Ku)w%|B6i6MQXRgmHx7m_{db^5f+3t2blAf1am)Tt zb2^mzpZ@w*6Kff``;88^XgZ60KdXMPQCl#Zt7XFOEs6%rn8ux7Tp*iM4-GMc3OVHnt4nQRl z7dF+K4uKUcDq7zRGY$z)G-^ z9Y0VCk{;7X$rhtfNI!k_R+GtLSFfY-usgt45~xy|Ynnw=;t9yAD#$r`0WdQ`tH^Lx z;$giiP&acgm^khIWYZgK*_9jbe?2@Zb&1`aV_PvWkT!uZ#Z#W zUV^mYkOBr}va&HEt68nb*StbR2dq$o6BNP15LzFqexoqpHx+|4g6j~WiSh#|K#dpp z2I$D+Q_y|!4CxnPEWGsc*Yy?_$Bx3&wuLDW^y=r<%(AyJ+pp24%JpDFFpb7Z2{AnS z+2}$CU93NHcTkQPbt+SR=q+qyTw9# z@&z)S{q*`tx^)!oOv9jd{B~tCd$wt4p$KH5~XR&Q{ zI)=3zQEW>nz%jeHx(-PAgHG@o^2PUjgC6T!uU?b9`mOyhf0cMY zAziRtf=gb=ru7+KgKec-?I!EvLFr9xfrQo)kdQ1zMs>h8*wn$d4gpWY-wz%}`QMR> zd-ST}J61oaR|UqMZaua05^O7=>nZCNNXmf?lN+*wxgrqGxcW`u-Yhu`{+YIuC*kg^ zEWxpAU~#9j$!8bFmz=`0NhhjSQbO=^wtD(xxLB|!M);msF( zU;zPl`*}2P^-w32oU~Upe&Sg_i-z>jMr|6bVU(CNQ%fHN@q?^U%N^j*oU63W_pTMg4Tgv0t7?HmRpX^G9i}#?_2Ny!Q-FKdj!HTV2A|MvZ`Mh34_D;OdRT{LN@w zj8cZcIgu$Medu!ngSHLHxhyh^l3Spa1~85`y&!>hbcg8V^GX4c(HcU4{{#}B7<()4 z<-Z>97fDvUh)}~2XLWa3+LXN(hq@a@ruy-ua@YDIDU~U8?BGsqvmQQ~Q2Al*P1fn5 z$&PJzl&d2iZs;1 za&)qL3K}l!7t!3rl;Oo`_!zsOyKn!{12M#-U?M)r0Aw7y#5{-*gB*s(NxT377?!;M z9->__#DDlVdrQX{mYQ*{2vA)KR(E$qPO*DCg{WyylVYf1+(|Gq%$ljdJRm%{x}85v zQ{K-c`OrcKSOrxU&_Gw5pOU)tUdxB`hV8s?-fL%-_k`gehB5ZS=S4D`T=RWu`x$b+ z7z7V)rLfv|Nn}ZZAORyL&cZWIdVDNz97j)~dLn-ZHt;B+$qh%AJ}5Nd2Qb3+B_wp& z<5k~b0tI3hy@IgY4@b*eR!+=voOiNG6QbTU>}C zYA>8Cg8(`z1JA^CksLn2Sgh|h{uXS=1i^zCk+FVklq@Ixt12K zu<597zcXmW;>xJpg;Nu^k~%FM>sejI7Og#OU$Kp>WRBsCCZuxh4l9YsL(8Ok6<(zp zc<@Z@auhr;J5mNR)54Et6z=V`D#;3%CD~aTZfJ`4elWPKpU7NbmXr)9p_du?!AB#X z|17v54QGFCf1S|Oy>I#yx(QTxJ^Bg?3=BM4DM5>h8iIGzSmmsaQA5(VJL-pJg{@n< z#_@||tK0IwD4*Em)d*4Qip#QXdiJ|LoM1$?H|sH;K;;!D%eWZKOk=~r!+u04-&_a0 zNqwZbuo&ZtsYfR3umkX52fy^+@L%}~ZBoXc=fLXiV5NXfBKuVM^$A1i`4TD{P zZFaI=k7ZcsvULHQVrLr+F$(MC&ER4bC-1ebK*KysH!RrwK8-9pR|Ik)^>72+m!KD# zo4!A_tqWVH00LGpW#!=|BKzv9*|0bX!wDk&nAuIl#$Xh9HW}0j+alNHj$^^+7UY#R=4g!~K0?=$!>4McNr0nR3yvg)pcA zeu5zA4MG;`wE39GFB>bx56Fvd_PtErU2G6xl-z=R$8-tvXsmrr^PyOLi7efYD%BxPzlO#<^YPTE5VJi;BL=ZDHz7v_V-4i3*w zX^|`rwQz%CZ2jkJOC|Qr)7EnKsO$1gEaAiHL&`!u4~tP$luAmkHIcCDY!iVX*~jPio?9ohz~a-(^4 zT3Q;vq(TPUi{4?Ezi_w|Z11`K>e`3yHRIn|{nPQc!&X0hv+>h6C0cg|?ui#ZlF7u* z6<|x4tk|=UjZc9{B0-3&`+=F3eGNn#g$Js_?gZc@8+fQ2TY#I6?_O<;uF_X$P#O!_ zxJq=4cZ|PIizxNEX7(N7nS)kg-x8u_Pf`pdftdwKf3~qk+Ak2fI9Z}KDES=G0*c=A zCMvgne)o|(6P9+AR@JLk*Mxug&nG+LCSBLE*CNkzX%CBd&BUa`Oj7T;$baH}nZnJr zm4Lj7H?V~?R6#of8Q>+u1~%fphg9}_a1w4`2(v_4u!gxw*A!=7;+v0Nd;T+Hv#)Gx zvn_YZs?3)7SqQMoef1$TvcL~5-7b;>VAK<>+!1r0#@TDM+A6oQZBp&rq6L#`O^Tx0 zd~UZ7I38ZgdeN*tjReI(hrS{@z-1xQItEu2>DcVJOuQ=SKZXqimEVA=tPtu!+l=QO z&J@m@X9~|JkwQ25x;-M^VtVg*{Sx9wOeP+><*;?uU7v}@q4jy&#`R`mD*42^t+h`0 zb+0{lTGN2)IX>DUW52Rv(MWknXsuR2JH&Qqg4Z|Y1daJ6YgWIP2m@F_NBnZNVYt&6XWXqj~ZZh=> zq+h_6ZkiX12%VDQ?}watH;A#%I>?|T2+qq4~Q_o>a2*}g0GoUMANi$f6j z0^<@h{TqS|pJ5eOe=R7eMN4TY9w=-|#wEaiq8KzdO8*5gk_02F;FQ|4GGMg#03BTh zXpfK=6Bg_IeOtHCNSb&ic*yAb2Xa&43dst!*U&u>$(k?J19^I9qYq9f+TdOHP5^~5 zUoidhPco|f;OXKR|{*4xHe@|)g+(JQOzfl_OgCgQ}Pt6>Q=$p_h4N$0?K|u zo&w;RW8~aSU>rGp7+li4HkONk=?d?j96e6DGi4Iw&$->VKywsOxBLA0A}W|8o3B-%3-4W5NE zL%qJM=JO0 z_68ZbWFd!lLw>VfGC?bWSBHq5L|%+W2StOX-1qLR9tm>{hF)Bd*PxB8ewvR7Kj1&> z9lp%F#$NMB*wF9R{4Tji3%fb>jgt@KMm?lKmu;~Ai$$0k;tI-XL?F=u|5(DbXm0ir zHuXXJKA6^vA#S4#*he-ZE7gXB72+lS3_{Y^ZvOh7h>q0hIZf<aRPYXaycP=;q$}RtP%yd;=HmahTYy;S&@GYgzS6fL5i*l%4Z0xycsm*t z%C;6;j)Q^HhVCgMO{Qj5MZuCfcx-8pi zKX2PNd7E1&zM-FHsNToexwtcKqYl#ahxg*Xuf|+5hse)h;i1&;jC+~PitgQGuT9+H ziJ$nu&xc$ty!|k%v5_258G85<&2)cFY{>PM{ZL7*I^b*FQFdYVm}9%<*3HP*dAf z7^h70%sn8Wab1mmP>I|oA?2l`v4-|^W_4^;Ql6e65sH2wCTeKe)H8oiW?0Pg8k(eX zTGa=>_E6I>TEJIY80Rbf76;>?`rXHOoY7=C7&!pcLMia^={G{I7fw{=ftE~YQv5hTg3E}%olF9gs&tI^M_|yUQ(kx; z7JHMhqZi;cpknes;cw!6m6xo-s&Y$ssn4+K6F5ncNruaPyM#X)Jvn)xzq8)bO|i{{ z3>`*Ji>g%y4A(84=lQuf3_jMt;}{``jtiCrv9N!h;i4s)(_y~%r^#FN7#7wNzST#| z`bD-gVd*+9ezkv#lbEQ-KcHD}93j&-8+)X;?U}=8t9*{~`wVE0vT|jKOz=>CTT;!@ zTpGniXu9szN3uS!t7YT>-%N~HYw03!YU3Ee3>Y02;9BVV)RJA#H2pgNffjkY z)*R6Bg<*xB)zy;C&74|%y`|frq6GW6cM)eqpGr0j)r&Jojt5Clkyc<9a3%)wvVk)a zCSjoCzE|jFYOEEr{XDT#!dKxtrWdq@;F|00z9l z+6^+{igb{eYCx0O(!}2ilh#@qE#@R35f}p;Q7qnr>D+YgH;yoJj+12i3e=^grRBQ5 zL&Xh8%qyb(_m481Vaj!4Q#NAEz8Wbo+c+s>K9krK$tP{Zd?r9DW;8zqbE_YIa$6Yn zcsagZ>5l}2Q=Y?)K}KM9A9697+65mE;1Z^IIDJQJ=HLn-4SyaRwo$*x-`tndI-I=y z&11UjKfTI^84kE2hajR58>_v2nf>V_9;E>hpMD1Xf+^1ix^jrfX|R#SCuli-MK#`+ z%(Xm0pee1Zu0YOoCUmdrZdY#qc!-A&nI^(=if2SaSmCPSS#Kt^=-|JagOT!%ILN7- zMc+u&(Yv^;!m|8o<#ie&oBSZ z@4>hr5y@=0@{@XSg2C_=gXtP2(!uenTHXKiL!!S8&D-L4ji2~XFw zlD~>5YUQ*RUC`V;f!SOW8D5M@#z|UcTGI`Uf49!bvnNxTyN`dO+<1bi17kLRad2k6yDGrvvzmT%<;>v61Bu-ypje$uK?x|{# z2{&VfJN+cr)6Wdw-Kq_y>U75PZ}xv$ z^TW?LksvAQI$o*$%AMr;a2?n3eSj?l;W|RCmc^y@Pn{KZiXZRc<*z8$t-nq$vD=TC zkr?j~&YDjS%q$~i1(>i<1dqbt9fh$_(k^sZN|T>?8LC0t9U!Bsx}f6GvNakmOTlT_26t;mh`t9SI^+n%Qv0HBeA9 zk#l*Y{0L7@(Z&OHJ-PQ|C8et`(uy(x{x+@kAAkP^GYh|Su3dTUZ(Hy&rndb$;(Z4d zH*p>hk0T?2Ly@MH&3w-`i+Nv`1JwwCyc{}>T>|S52N+6#is+K@W7F&8Q~1Oyk5Ay7 z5gL*lQ>!f!L;0y3)7f%`UN89Nyo9{nYLXy0DPHe(iBn=b=#jmY80tibZ)oz=N50=N zl{qFU4o4fE|6`TT6S+_r`}V+tRk~pxPef!87&xql!~4nhB=SCy16daAQ}2q_?V;8Y zz8m>RKq|m10d~`jgC$KqflLHPnyHM=DF%s?VOz!x(O71zBk#_eHOzmG;TeL(Y$*5O z`ErFSWW53!{*L`KDLI_A#97NLKFPul_4tIYs?Yd>sr!?h%bceCO!I_aO6+$#e)fqs z8}f&7T5Aa=3P{BJkBNNvlR*~akSX>a0{Pu3F?7)1s)OYY;$4UbsccAo1{nE0loRe7 z0F#}|(FWI4mtzV2j9`h{bYx;R7~=`HCnhiklk#3Zyn&}D%wTioNVwKhvA=QAR<5vc zgfoUIp)IYYjEXa{0gV;RYyuQ3kdU68Us&83)rQiGpnqwU^$og_aO;uwHC+gEfs2M*No?twwNF^a_n0JW@yCIG z4OETHxx_{#pxNcie7N`2lh7~IXs@Zv^zj|HA$G05kjdK&q=jQutC-24`tQeFO{ zSTA2ePlK*kJx(fft&yo9ddI?j9EEn34R@>l%^XcnmP#HhR&P?Yjpt3GZ# z|5gcO-KjD*L!{YPk0t}-;mp%$fkA*~-2NZmeVmMOqYBvG5f8k_1dCv^H@_n>E%_hM z%F}=U&3xh38NV2qYv8RtC~7W}oJpqTWl17U0ff}AWlk>(gVu4g8JZ)P=OHzIl#zBr z=yQm(F|s*S~Z_Qa$X&u?%{-wX2AxbwYw; zFax8UiH00(-tFYsHZd4PZDEIqPAvF*orFC0UorOd=Be)-D`M6I>@%YY{IeQ}`SgDHOJH(;6(E%rIVZB>6-_Wi#QXmN2GehLMk z_~dknl-+GuTsuxO>X#&|rwtEiT6JksJrg#7;Tv$wM2@Zu@A>?jXPsRQH}{(P{>%FO zn*GA6a*#VjOuJ`Yr~z*@3)1p9EU)|+#)ke3r~SUvCIb;L%~LzeNMZOkZXBeEQddRb z;dO(M&BhOmHQWGfr6rUC%hfh}MqDq=n;ULmSMqgk>y=3X!YcWoL|}}^N}wM^wu?0S z5kt%G#YO8)DcL@qh(Tc&$jt|yfO&z8dzqARpEW+vpk9rB8F(0ggM;{;y zZC396wcI>Ir_A2=!`4klWv|H3gR$$TGU^4yHGs*v?>pq8NAC9`mB2>4*ku%m8z`TD z^p~%}@;j|1y0)`mTJ1GxQV#P??0^7#E*a0Og$ECQM|5(X=M0Jv)+!n(g4rJqEJy3D z={dKuYx|asR_{fg{^D<2MxW`i19tY)bXvN-z4>|2J{=>=ENKZ8>7YDNhgTVlF)%#z z$~WAPZ|szLff6cWkm#_q7=FTGOw`jTy8D@y zP?hDD8homJxifmiHrUJq{nA?}x{5jtnE=)*bDv>ia_g7nEcKx&n*BZhs`350>_mh+ zlwTd`{HD`@^qJ32VlJ9%?$U5wsrPUlt)YjPKZ{qi--dD>B;iwJl0YIzuh~pf9!*+H zvmTeZ<&AL>5C;M#?ipan`Kc=n#i6pXBrz?niS8NGZw%s;FFW(0dRY8-bdd9r&m=36C0bKS+ z8(h-T5kc9?GA%DacH}atY2__hg%Z-o+1YO5=!ba#Ssc9)0#P`!KS---o`nkttV5)Z z=2(sTk6H~|;EiXJn5|gVxT+qnzx}QCa{Wb`+-_2Nxpu*-dmh)I%2ft9A3XS7M$U)# zKohY1G`=jdT{#DaHb_7KP8UD|5XqFFr4z)Vh!NVw(*c>}@NBY~0!XDYz{Hlr{SC#O zTs=zNH+@CJ3BhF}jVRk-ldLpw5DXKTK%CKlW};jrilCIM1iEF_qER44H?#L7qW88m zWM_v)CVH5upL=${v^(O(XF|ix{Jr0n?--w=bJO{4-jhDCDmFaY(Tz-P6!a%LG*mEy z!-gXn)r(>-_$Q$md-Wpj=P~#!WVyre)hU<1&6JB+s~QC-yKc#F3BP`)^RKVByEj>Q z@FzNX&*cJ;mAgWXI29dNRe6o@DyBjT#kji+CTT9tajOnX?dihPT3?*`eg&KMWKFAb z`;N+%puCtEuv%^ZkhNhU#q$DGp~KlKw0wEXU&X!TDY#_0 zb8qz2rSF1pEAHK&f#;)-NYPW5+!754#YYjZQ75lpAI@v~`L2WbjgdwmISCFpm~<4h zd3ozmmF?R{2jhdz6zpv>TtoY~|8n!of5K@?b|bXWsqz(`pa#%~>Vd;t=oZ|!VV-#| z9#AL}YccWQ77sQClTQS!MJ{5bpX=!CWW}FNWm9UNr}i8URQWc68RVs1T5NIeI|$pV z-0mwjctVSgkp}_d2wukPz-?^^l#2n=#W@2pKuHKpnp;dmN~T=!p@&7{NCsrv+AWG9 z>qRw}WX;LUUhp~%_<8iS%i)t?3}U&<(V#n^HlK4R+4(o)f{ zS}qlFvnbah5K?%kMlxIT$KVN*CtLqBB`7jd4Ap~aD6$@0b+H<^zTkwrxN)T~qw;=aAo50Emf z!;aXrk>4`RzcK>C8;!+vL-ocY@(8>&@uy!Kw*;FErgLBcuT949HzIR68b1Hli$ciJEqw1-s&@o;N_i|V zWWQGb>sysN)*nM2ZimCcB!iY*Yz;e;?9&i9(a?F ze=hSm)1kE<=h-kXrD8ZuFX^YTSvW6qU_`QzF5d}bfmtvvEL^a%>+qZM zkmr6*VRN=%Hj#UDUsZ~H)A+p`jW*Sl+Gc#l&b{=l1c>bBdu+_Y#u|%EWf%OG=BHmj z3l>HYDp5E!W+=1DKzB?+0h+f~>luc6$2uLyW~*$HpO~44Y&xKYCt=A({0-tJ5`cUU z^fot#3;^v8nwyKGF45nFL zfQZj8?B0S7%bSl51AXAiMQSP;x2eNab=>%&G~v!@s0@GjSr=H#+1^3P?46*Ul66q9 z{@d!?(Yr9)PMB#Iy<&dCrj(Fy2zGlWRd3qy*qK|nh}ojcE;v<`T*_^EyMbQKBUs#Y zOf_^X@g_r$8PzuX$a35RV}r`RI4l^mZ0RR9|IpWXW#wIuxPewNfZ*5KTf68H4#LY* zSAUFWmx6V;PBBIsA=33$ujmZUrlz9*xP;=MVFh+z0$Kt3E3Uk<3E?+V;*YCaX_5P* z&#Gr=A!?Y~YQ4vg-7!36j1?SXY00`Bv2yKf8$79Ymljt$m>-WA&1*-Ab2xJB-sg;# zG|25dPLQ}TCw=hCASXihF+E<*RQEssY5k^CpfE;I&S@!hmJcjkDn+x-f3w%ynJi{e z@PwH&bSh0bmU2o16Tlx!pMa4@tO{A;m4(1^ciM*aj-gl?uX0ieJTYXXF_r}zs6%exN0a**Mij7lsZMieCr~~ z&snLHz4j)R?ljJt@Dq$PB0ct=eEuV2$adR~#A@H}WhTeKIgy7dC3wn|>B{pRA?YG< zf%5oCqpyb?JU058@3xxalQt719*#&v)#Ucqqo-=w0(>ANy4^Vhwqlfq!f!+bVajX2w| za*(H$O_8_;&rBDW1xlC-8a^AJf??58SXOOjrk;Jg!~Bvn5k*9QzwyI>gVkfKhEH2r zRdmGARsKtYDNtndJIRPe+*d5|w_~!LGH5f(8*#`Pm$9c}^N;H27W1>!wBvw$$HpSx ztBQ&$b&6@}G!_`w4&}>Eqsn=e;(ajB2#C!Wv}K*0a8q)Da#XoVw;r~ieT-tlp~GMf zsM2Q5jd3C)`P%eU>+MA=R@9#J>Dh(!ZwV1X@ntMDFe4tRBSVUFc1I-n+1H6A{_zPW z2t*27u(F9rIG)9!Dwf>f15ycUSo(KjE%&eC9z^TchBCv8#=h8Y3tyYmp2!7328~Z>ANXF>Cy3)d9`l+Mn>sbJgcfk%FJs| zdREu1-2bAdC}GzWODr=tPdO&;$=_J)m{7|b0~c$@M%XablcTHh8l~d2I(Of|j6TmZxIS^dFQqfA5xcX*sG)m-#0DU}LF`sa7N?YlCQ2P<;D z3-Sgo*_Z3Fos_nTqo)>B7#6eo`1ujiCBE_MO5DPz?ibw zJ{WoE$rXAWfk##b`=#Z}pPz{)IXXJ=KdBy)t@1JE9n6`|P`xbdatFX7O!vnxiw?2G zf2={ex~O*oeG;YwMIy}$yzf0ZUzsGF2sXL>EG22$a65Pf;p$9;N&#Lbw2a#qxU$8K z+Y>l?;3XcNA}b8+Rpprj)-u84v5-|MI>5X~qD605zfRs8=9Ww-^`Z~wpgJ5UGYcHS zA!kNnd=r!{x;UVvWSAZVc3KlCEyfpjq%WH8gYe*{XeeTsX8&o)_y5Y9&o-c=VLXUzpS%y6 z0r+nx3GT9DKT{)**IPPb!3sNBZ080tKG_M$=AJ!IY=rl4h*Ldf7O`=W#gckFUSC#QAZs*z?^Q(stY)4@F8QPPt>u=;T@D8SgV+FAGv z#L<&9i$RXxla-Gv0LXJ&Cr}BPM$W ztlsngbVz@b-yQyA@Z{4s-qiFI`_7Dq^VD=mPOL+0nm*Q7pS&sD;j2F) zY}3z&N3B^sOMprRLpG`SO|pz^w>KNX65x%ho;)tjs`pU{(J+ywY_Qn+Wn0j{OZ*oG ziGF2BBmu8f{hD@PgbdmSyIj0+$>Lr`X?aFA&B2A>Ql%rFONua#613RRh@WQkP2rtt zXR0azygk^u>9B#ghxrl)@P717MD^cT`MGIYdE(3EGYQ#th3#UPyBvG4p}9yG1h6#Q4_Xz@XcPh?tsW2sg)= zjfO^Va9l%_$883>ExezM0}g|Zzguc3nv`-qqaNQG^YiXG=6l)}$~qt()#M@3}oRK!OLoNSY==Y#nFj)g z(E^6L8QnniaGH2X+VJF0?o9Lo?K6k33GbyzgvibNlZ0h!K40B)c+wx1uADXY zQ~y)YH>~qKX-2^(D#Zm|yKlT~uOjjS=vzKg28&EsCR*!jmJbJ&6o_A6=kWnM#U-fSROC|IE+bs3@D0y_jxLB8g)8nnUScL2SE@`pt0|KT6y*lJk zStCB0^3$*74B_80<}OPLTH*nwfbhI}i1o@s9sdEzdU>gL=jBxTT!U$kk0GnZZ{HLL zoVV99lXI01t1sF;uhE+M_Ke6hwT0guzNHo}=L|{LQ`Q*694U#d>CBkYO~xGn-k^`? zC3#~QOQxreImQD0SDwvxGhCQ&=%C)4k)Nlx%uP`02{rFE{`!`Vv5ElG5%fE&p0t=p z8a?6+{pDaIE`H+z2G_wYEt>Xc`yBPC4JG2}6VYZq{=m8_cey{SlP+VkFb#AoSA zK&o_1^Z>oAoVQcYXXdayx2C>mdTn^RGqA>CJ~~aEq2uDTNt&KyOg;yMW<>f#H@lwx z+BA=U7H;O?qLcTslmeH1^>-QBU<8Oa*2-7-WD-MB-u2=b&rhZ9x6P|SWnZx8`NzAv zp`ILMqeh9iG3{>9k_j^)e^F!+1cKhV*4=QW`QBaNS-b?Z>-Hi<8om+4tC&2^eu~o1 zBma~qbgoE8gd(PmRegZvrMPY;VA26)Oyg6g>_f`g>WhWePO>RMRJbwtQBi>+TiyAz?n{5&8k z=s;Sx!sDDoKj$GcWSW!t!JF9>Ac#t^(>?jbK z8<{jt4<}S0$Si}U<;0++)m7TvRo(sWy8r!!pw)ffTX&uH-dgvbT~_$Aza-xt|NB4w z{ zI}oxXkKI=Rx_#2CgEUrnet1tH^OW6x5#SvJ?J^AAlzGk=;Csmp0dZ8c9c={U8iFSR zVS^w9?RIZi%($pqzb2V{GgjU-VL(4VfpCVthfe+>2rU$!)| z(RNTiKE>Io&AK<-X50#t7`Bp)N|R^rlzfa2JUe1bAWTl!nwbM1%@!x*;!(RzpM{1Ex+cN%T-*Qmv=Qly+Mh5HX z$*@|(f)7t1Z;a8o*VzL8eCQI*pT}Ka06AL zAbt`Vj?Yy&r@=0OpQYsC=Pv6jpcQHtNjN{{7Y>kHS&e}QcgZsC*WXW&SC(Az52D%I z)8#h*Tg0?d17IbSMdbrUUjFA}T32!52S982;7(XQ3@A;;1~y>DA`OIQQF|ki{W!0Lnv2-P^9T0RmjNCp%Kw~p6cqK<8#5Ip_TmD$5?i9>0)P$ zJ}I9Ln-(M9@ntGIEBp+W2_Ql@TT$^Ng#qvp1M9dbMQ9EW3t%1}=X9JI@gMw4?*ld$~ALZ0JrWmfLj zM^?ahAT0F^WULxcjmsza0%Q0iDin@9m=QcLVcbvVh2GFuGHj6pJO0-YH;rS$eBqTeGDAQU zOwK2LA;%QoMW$`(j_SUs2?E8)3`hxCAoM$}Z220Y-~2|M83j{D61GNX8M#7F09ESn zZ;UlY!q$MZR6a6`di@Ag9F=l!LY0r;K6-j=(3 z7v>p|EAB0lZ^;#kLyZlr&M`@5`4@8n5nYDBw@W zM%#X!vKDOQzG(Lhgtj(ga)tx!xTKL3TOL5wIlCVd-DSNrsT9-?z|*68g$vlP%j!?K z#BqwMqB1*@*Hi#jq!P>Z8fi!2a@8My^RIFmSw+%e@CZzLZUeqMKz2vS=qdG?qA6WN zfP=^TwCet8@U2M8dJ8#PNK))J2y>&twp3wPECTkqA9fl{6Tq6;q)R%Ussg`6`^(QknMn%kHmO&%t*{~?I*Y#>dztM>(}3BoScv>gP#2B#{Vh+ zFR-`Eve3?c!MB&tiOTdAI0%SZzHKx zr;WYML@I1FkVoBH{QJNuhGdLEd!Yj2z;Q*!evizv;X%uBE6d9Zi?jf`E`uAY@=J(8 z(sGUrN4e_Ts=sDtW);WO5JLamaf~Q&hG?mBC4c9RyhGD@zQSeu@mf4CMMrUv4uv<6Pj7fsV!JtIm7M*MN!kUkR$} zTMShNxKF0hbmL{r0zj+!Rt1W*iW`9KTqJaj7SQ)FZdY*Qbd-_C9vzpYtOL@%$xBf` zHA2?yYk#I;h*3(=>jMb$V(_I!v?;X@&kiO42;)D1o{Z8uX92U)KrXZubP?<~z+f5z z!2|ELPngF~$kvLk4h_0j9ETZZu>0UO9)uVCH7IlnS77w_O@m{RGVu4PkS!xgfU;qg z!G@bym2mzDR{E_3OPWK}k{W{#@-07pQ*|M5v|WHUnfIouqNd3c2IroFkT)TbnHj=` zkV^8X^nE5HV=}Nk7vRI>J8=uttR<%0+Uz>GgGiWKd=D4g&E=wo(||+9GP|=AxE+#; zE#IZ&r*UL}%l_F9e{T3sqwi&1h2*af+7uXCi1gSty>V$TD*N#=bN~P&x@$1d6Dcj? z2pO=}Ari5QZg7c&hh7dKQdu^sK3v?icxV(HKXAH2;gGyOzEV5%!F<@`OoZUX8f#{X z@8DuAEDeM|W|F^q3@nyu4s>}$lJ)R{kyH1%c)^Kyp5SzlCyg3EK~wq>fRF9-E!J%R0>NYmLL z9>Qw946iE`oaEu~!`0;@_ol8vCRwxVj>}e1S{=Xq_DXR)NorsKQ z@COQ(*Y5Y7KV<y6@NN~Va=bKWfPm+%;6(r9-hm@(oC_cLMTsH7)tN|xVB+OU76wTY|K0rkUsK^M z1DJK>WlmehRww7hoWcZG6595Nndb^6$MNbjNK4&-1^;^cUk`5^^E$k~HTTCM_5w%o zYn#3TFjX@1G_CaW&yPz%B*59#uzL$Boq}~twct#Zt}=L@RO$5!2sBzDbE;G67fcY` z2JA$51rB07b2Jt3F3C5Dy1hW3ydtAZRH;H%{rKD8$d3kqs?nm)(m&M8Tx%%B0)Ggs z6PA5A0v#5EgC3S;)JlUj#JV(`u4^>$OAVL6hrHnzhmCNClXY}2TXGvYS3R{R&=#ku z5p?je;-Y#Nk$&}fhpa%ZPslm&B$J4SFUWngg5aw{^eWZmz?S%*6x~aibNiQX{S&Z1 ze4gwR0Wrm7`rcLB&gCasKs5xWSYRM6$`9$8nOo;{zn@i3^<{<^D)YkU^+kDVuASpGS+L^mu)j3)wm&&76096WRd zOpcVcAqR+BAfg*XRyg>ifUedRK;FhnzL1m}X;Zf!u|Vnq@cydH+du!e-vc1AzJPt} z1RJ6~&VTS^MU!IT|Jm71;{Sf(;Ue(!OydB^&8R0Aeb`k~sx43B!a4>!=F51aNQMPw zsBZ!j3x{uxYB;)l03j#!}e2@)a8#lsx}VswrwGD_PWb}^h_&j7&HaW-J_jvD&P@nta+%!M=qIf2d)wIGy$E#VudR0 z2d+~W2HvU5B_JPtHvez`o)OH2_^^LS`!okb0vb+FV+iYKBQM|sNc>`T_ztvj5$vU~ z(V|5t-ulIjKWzEqj;pUBUv`xDtA#5I2j6yWbFzZ1mbM5unzZ2;%323F$bXR^iS)7Q zX>$bin=}QQfYY38a*{ycyEf^dtZF6Z_ZX1$iJT%zLj|5*TvTGM>iU=BSpf4~Ulg^Z)*&P32E*7V>07er01wnEU>SHeFW7p^v01?+}NBc5b zD>3=nf&Rn`=Av&-Jk?}X0TEGxu1EzJ*z$V+B>K!gPmX7Sy^rbk{Ll}3I&rlsdL0 z*(34N5F#>XKn6*Ltavbz>VlJGFJG&^31kzW!O)O2*@*g6>c8Z)!6E(g!{0Be^8G=S zb$&@egR#Hycv!r@t~ueqj-ado7T^}(Q6QT!a(gT*TtOQgR-e&UczY}49yV^xZBjsH zB%mUDpIY3D96#KBZNG8p4Nn0gS&wDX5Au~dcP+_$kUNdcQlTRLz(~1r-My0cBIE3_ zoR0!8w3uXz$(D2KV3WlYeaqdTOLgglO8QsV;N=L#>gR{6>L4F)#XexESXhgrMe~a8 zKoJ+YV4zH4V;>lhtJcL^VCtwAL_o1jW><4a*P%yvoSk#?TJT!PnjL$;M;hf#|0x5k zNF?6QnxaGI1h^<%enx7>@q~fLHf23#88o7Hs7Nq?(+4j?1*RNkM(fKVb6n$yIztH5 zuQ+GJRq03K2M+yMyZ5oE79y8fIyPF*WVJUMmke6~@rQqP{?u@r<$h^^9{SUC ze`>7-fN#58NQ&A)$$r9hDfwY83Sdr#zxh+l{3A~5{^&<`)vX^)_L;o|FVj6&u~c&4 zbKrR4pZggCizTEL2+Z@ao1RP&XgOW20bd?UJ%9ek5r*fITiGuFUGbQbg{Dg73fFKB ze7emjM4x~pGSIL1e662$f97{IqSSPfgYM)5ePkV@_@iZ?E{*Oq$TO<+X9?8&OP>Cyy^3a3z<<0x4d!lO2;2yWnP3Sod2X_c6Qj8gyyTt z1m(1=1AdL1GIA->8(bTq0+SF(?P_F1(`p>IQ78GsH=rB%4^RwlTe7J9YJcd$({ zX<;Lc!<$ysasO+kcRl*+&yM~7kdb%z{hTn5^wwI15w7VQYX=~E3g+xV8l!+;w0rD2 zJOw0J5}EODnax*8l$yTD+e_=gNr+>JKlMpb6AIM~f|x}XU_7t^08%z0ROC)K38Yzl z`{fqcw*Q}GP&Uu{{(qYc%13|wuP|TGS3Lj>vaSs~fw^J=4+4(8{TghkT5O>AG#&{V zsRmO6DtQjX{}u}~$ffD=u(zGL=Qx?l`U#XwIMO1%oE5rUrIA`xRKy-ovhV6k zxD@{3fBj4bcYc|p9Dcp72~xiaD8ec(UOeOA;sm<)6}1NBR#Ce8L`PCR%86?0#P)Vq zvllxXyw={>ob|t)qr5Jcz)d1E^8TV@Dn&WIhs!vRPLLPBe4#>$@=-|ot)*I!2)VC4 z@6JKK$q5Z65!o_3DD3|(CM~&!X)FkRfJ35$t5KrMhR%iD#W~8?r7^L#MTbdhmp^Jg z4TYHT0CR}O%qH`ESF=|;8{8G?ClVFnPm`}}Zfcl|M3%qzu3*7*0nvsHhU4fpdOUX8 z7vsi~J#%Yl;UcPP%8*N^yzG;1sPqBL6@(05_?;k)AGbv5cFPQj)%FbCA~=Whz7doO z>mRq^+|pdS@&7ga)87cZ9`yytxT@qn1TujsUmx(~baFY6{12oTe3&6keJn_?_^ZNU zwh>aw#Uc=4s>>G|2df^LUQg>8jN4{DC|$U;{_Itb$`G&f+ig8IC~$9fzAr3Dus?(D z12g)%(x&~d1n`R}Di%0<)3HezTF#{mjPAI-4Zfu=kSpp#=Dj0 zsXC{dr+eh0434O~PR0$!5}`<6)w#=;8}9t{FTaL6{#kXO>LE`wP|Kn&PAFnF%1X>@_1ZmJHpwO1Tyj}BXW6)+(CkYDN+~dE%oG0 zPy3x1fepBx`m7MLz7M*&D+`N|al-TGWvG<(Z>uUVBZ}}yogcrf3g8eKTSNG>xmT z*%*lTY=PL9%ad<-?J+M-0`W{Qjm8X0rE|L-NVOh|xv&av4w!&?8*BWdBqpG_??%=Q z6LVy{H6n2`te74VOou_lR*|ZclyX+&7(k9gB`q~%0f9gI$97mrB|(C8{S!M^3g zEc1t`G58X-kXeka@0>oE&5uc(AZJ$7G<4EL_(n(L@!Ufn=#bl?@$?FXLt-;lEIj^j z?Sl&QN3|odxTyRC6ieZ&gPDbRrvipz0>#@wCrz;8`#`@cevAv?hZ} zOq*uty5kN5LX2B}C>+(&R1Qkg&C{UdhsT9~3pG%nhf?TazAYEeB2=(zf9+9;zXg5V zUUWR^1p9mdx^w4FSt;dX7nPm_p6dUFF77xGlDDU@|B&nG-lvYBNbzH(*SvwY)Yd`* zE~?45uWVqbFx4@V)evR?G_ZoWZ&scxgWgOw+u_zg2U&TlX2CmXrj9XcMNt$kTvO!7 zc!vDIw6BqCe*}Aj-|bQoI*I7DV>GLQs^$G^*Xm z)G0$8S4ZxU;WqJLCdmu@hAfcZ&6px5K-r@yFgjWs*%%m#>$R!e;5O^jcE@gL+MfrLY&TymTjHw_aY;X;0JL7#wA!o{D&d1CQ_f!$zXCNRV`g9pEg z&C0caL4Twot3$>ccs~Js<1FnwXZHLe=iZK@eb^%fD6BO!<_`x#iU^edrDq@(I&DA% zYVq+*qFmVlRCd{vNx7(i@xmqfs%X*>UqI)YWccEfLbHebi8AC9TGr&Zq1cU!nEv`2 z1WbENR9*pfs|9?NQVyv{2sjsize(kngH9zTK~yE*a8JIacEWlZdAd_wjz!5C+D8g#rr? zit5A-Tsd1M2Q{k1RkbQr47G_SJ8A_{hdKy0w7iuAysuZpgG$|(x z=`4xBgo|&0(j5 zwTuEf?8YQW<$R3%_Sk*)|4aX#$*c}WYe`x^G+l(;coj=+?WQm5TXXr+g@%Q8C8g4} zoiD(r;>=hXvi9`+QGk^YSn-M>Y3^6~O@W<+;-@+@P)6jHCW;>URQ%HINCEqe@sVwM zHVNq52`T|~S~L6Cc7CUE%s>Ed$YK(mjGaP^1;F~y!5#{}F~(q5`IpZ&%0SsB!1iRy z`r07{oM6b5lPK(bTDL!{!8 z%AsijCmAyxdmiYc1_2LK70t`3>j;r=$g(WR{d91bJOffYnO=VkcfX za7D7Iq`pjLgY46cTqK$CCtE7{dsaB)}FVcT@(u5@84rU9LHLn!YgXK|& zzPs4!+R2cXY6n=Aoovn7);$N;6Ln~INcQte) zNVLR)>2b@6@g+u%Hs(6Rz383i+uuwg3tPlPIul6xM4R@TQq|fh8 z1>YeGBMa}}!<`Gl*B>VKl=PX*WWUIG{I2VIDgf-gS&a}SbAJx_LPeDRo`qBnGZ1M) za(vM6cu1@cg1kFEOLRfvC*V1ltd8pd(a2|z@<(L`eA4!Z3wamM8_9|9^ z&pXcHQLmg@iDgotkY4=xPDE|&k(&#`mEwtU@2gN#)?1=WRKM)yb!=- zqjN_I?g-LDp)?yfQAac=G73DM!eszg&xK{bcaTnl3P^BfWyNssnANTyOSAQhdo>&f zVcQ4=byfy_)wVUD_-qGaJ zgKxHG(G99OcUmDVI`udLYj$ zz5=V}22fSuy+8*R-bNsUt6vm~ZFnWary?2m(bP&KSm55xi5;Jk_obsvwWWu1V zD{a~77La`W_`UY<2kU}ky8tYWQgqk8bZ^V@7mijL3eA(U0w0h$%UtG1&`RP8m6Q# z@2zK7$S-YiONm>E`*R#?qgSAEu*ub(q0yz3AP^jI8-S;T7gD*jk_FQ+lwRQnAz7^) zE53+QlG%rIt6~$R={H`Pn6(V-um+~311%rkun5e0o49)S+$|-DT3PoyQ~jYXSO}(> zY25p?^z|A10x+Y~{j~0*k3*0EV=#PCM$w!( zrx;BOME4i=S{4LwA&e&?)(!KWM4ll@@I-mBcz^RnwT{w3?0dgGdD0yYELBvPip8e1S`uL-gWq#u5{ zmn}#Y5E?=?VGZ(MZ;b1_HQwO<$Q=X;iX$*-2vrZ~9*56UE9;lWUYBVLjq{ViSFUC9 zs%Z93MRH9*5~5E|Rr{NmZA*m(0mc(p2$<$sPaA7jCmsxg)4rOi>;}r(s#b;KQ8W%JTR|tKFCLV2BUBz{_lmyUC zmybd66!_(OfU&t4ArH5+w*U-K$e5;_@)BP3ns;l?8NHESi~w&dMXm%Xll8*wlmc2q zl{X#o$jpSXsDQB$tnz!?A}UJ=+FUZsvY?3y+nQSmbbpqXio1;q#i@B$dS4^@Yc;i;`Q9nf89?0bU+}`;#HeeVEaLO4qzA&x%VLPE$PD?wnP- zYjeoqnn}r%GfqMLsz=`Y_`!kejLS+H9Ahs0=<*Rkt`W7>9`Bj3?P*fo!rNTPq@%&s zpE{J$b>m>R?O5&l>S#C_bcb8EYisgAAN+>?*j&_PPmjZG{b396%`xqr?8yu# zoIzU%#iz$NYHCViVnVaX1a%40mBAUQhiDd*VtONdnWhIXxX`D7?bnX*<*^7DD8*on z%l3$XW{hH8;4rwkco-O6iql|Q#@Mb<{AtzNfg?2d`!%000=rA`3U(fCb)yW|+Kv@G z)hw@l9=TL^IGs1P_rCcqyI%S848|LwoYz@hvpd+YqbztTCHSOi;C#9*JKvdEN|Eae za4X26P+`%ibAN-0lv)TGRyTAut~R}Ogi)N)bN2Gko7Jncu8hY$!aRcFo0LN%mfSmo zHB&Ax@vrEQjeRrO9U$aaaN(S6kT~eUH+`F5{(|t&qKz{U-7x(<0 zo@P*qg`$e&Gaj3Vxs&pywwP38T@#R^&&Qk-qAN4VvjUo`+B}G2mswkBU|^v4!1Mh( zl6jbSl|zPeFYniH7rf^oX5Zk(uKo9Gx;u8yMMh5PO9Tcc6%&$%M7i<@alsi@VvBq3 zsS1{)GcYh{gEm_hU;!;6olrQ&B-v0wt&;8^0CFG=DGl^Z4%K=R1>jp|Zjj*KB-`$t zl;@^wh3{otJzMPtM{k1gqUxZBT@x#sZ5ZQMBm-d)jYm$Bw-bU~fOep?o*uucYCcM$ z6vNJd?~{eXUB4~Xsi#>7c1$q2m<%V~0MGVFL4m{bpv{CfyAPNrU>Le$Wbg$T_I}Jz zX*6|D1?3wbw>-xD{O7*{EEJmBqcMJgom6YSsLWOhAhz6NF!$_L@%*~fO(D|M;hDvN zr;c60OcMhq{^qM*ywVMdi<_4uPh9hq!i>_L7S_pu(3$D*}Xe-))>(daFsxJ3B2>IXWHU|eOj97ELE|97PPtXC@>m>t}ZfC zM}zbyo+x1nLSZOib3~*2PC?zSUj3cngy3c|iZdiYCb zFXkdkD+9T0SE8h@SCkh#n?||uEI(dS3F{oQ;gxggzFK*9`g&JE3BO`{NxV#@uFI^>=y(Du-jv<$S?<>mynRa2=+NaAHipeJAv7VcE9G(GF%^+9tk(O2tQcf)XIy4 z1#+i?3qoWcd>5E#u_{yo_*q`RiEU6xrM1o6DWD_9>?CSg)4>-qkR<&cKlL(aGa_=9 z(#$u5Ww4U@cFfP5GYx2RL4)o5=t#y!zxMeIr!N1L4Z?Z{sH@#E^bT5 zr<==yQ}%)r7pg$8bad?IR3vM`P=VAuiF6?q8-a&`ybDfJ>Hw$7$;sY7<#H?bfr?QN zVf7Uz3t0zLyMYm`V6F9VCt-__K~_L1D=@rFBjZ|E2Vl|`DQ+B!ega2D+Eqo-4`y!s z$9u|^IZIWyZ;TR4qhb5xuVkxZ#zuz4p5tx_Lrp~wcZ=z-JQZ)^-tXJ6$I`XP`9=~r z>9F*c^?K0;ZBL&i!5O+)Rb(QV*$xVE(iSuzOhNW`N$;7{oe_om0-Euo*4 z{YqQ`HCS{p?7njOz6HGb=Q3$pw=+`o`t@r9?E4ZSpGE;M8~B+1cayyD;Q90oL%|CE zi4N`I3tIxUdl|>Ln#1yGURPFjT!GRSB=O1}rkD2uLrHbpWR&PR$>DA*^Q6ParDO&zPRsr=KK=2xwwHI5>1CY2xwFR8Xl2=U%{WZUq~xDspN7 zJe-_vK1=13w!&tEG2~bv=QgJno0utP1AUYdJ>)(+F{|yPk`XedV48qBQhCF1?b&^* zzJsk!stdpQi(-1^O7~QIBi>q6Sl-FjHKZg7GUfhsSmTi(TYw}bKG6a9#Us_ipi(|3 zl;V~1tmLJ$|q^j@7xoZlGkG(Q4zf*P)-G4DejiNM0*>JaaT!B9R}EJlbOA z;Nx)1-$oxZ(xfB-rWlezSONV3eFNn5wH)}`5Nz;KoMEB>?rzTTz+i-y?S8;9( z+~a{g4#)DC-D003>dS2DIDxm9#R7xOHZ#Y99Yc?<2O)TXsrT)D~t z`_eEg-S{N*V7ZvW^6v(yaiD4-LpiJdQ{P0?u;!z$^Y9m$k6#T8!IC+S@42M2E_mC} zvI2H`yOnOg(;skxOUcb`)qf7O#8_d+R{~#5(`|W>_@!%ucUbMOp8qiIclkrDNA#Sx z=tGyJ;b=!A00o)dB1{=}?ndlYUf14a->(oVYJNztcCPOn3MxHV?HFKUpq(NWINb7K z5~}&<*W)ZV@v>!+5?eM@On{8h)H(vT?CMr%fQBU)@}ZEF4L$(0iaeYxxyBN#{(wEZ zQfQIk1S-SRjSUi&$u_h|jk;yQ3G)p7Aa;<�e(cDSy9GF^5bXltMqCv)}B)3x%rx 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≱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�w^Bt$h*!zxMJ&<|aG39m%L&p^{cG1*m85wyo4JRkEQ z>8fd{FE@<8yQqNJ%Pde8npL?X)w%{lAQ>!Z_doD|2cXxnus|=!1|70OQwqr)xNeIj z7s@Jc&S9>Awo1yE{*cD`u9Nl*mGtj#xLx5>ek_g!wk-usVu`5#{SqFNuy_!gWc^F@ z*0QEXE%5N;j^M3*w3;M0^Jr2@IJou&S@2uFq;yod#MU6zVzzfwE<4}-@{2i3qcdp( zTGtV~Q8IS$l;rXM7J7Ky9p}o4z4gEIJFk(zT$a_3ESA7rcGZDwftUyk+Xr;; zaw3?EdevFd#72K*C&bG|LO}X2DGq*sx`jsx)a;ahHgGw7VCC^BcC{Pea1>2zT`Qdg zI?YSbR8b9Ef6wi%iv)*Lv!bI|)A8GabC&L7_7?%!iHh=u0v`p`<(teXV%9XS*K}TM z(-m;Ooub^wicG%6))M4#beb+LDXa_6fMv@&%OQMMQ`XH%)3OszH!=zdD(7aVv-=hK z6BV$yJ+06ZrKs|E#qEK?DysB)7jlc8?<%tV(JkX^^ z+C5-5s*eKoUNRB2?H`~Z1JCWVG5e!E!V2%EIy-8d82q+i3uTY^u*I=y1`bgH3p_T0 z2s3s#+e6IkizN8uzFCHqLbaI$wv}_tA^VK0|BhEAM^MNdxEv@ttoBx61-Fl}|{m6SAn7za^s?9-6)$ngM2x!VrbRjFve77`B!Dw~{>VT5?|7i)<5X zpc0_c!&VKr|A+u{vkcyVr5V_%R~3v@k2xvi8ke15-~F2ED?hPP*W|r2zOWK=rqUIp z2+qlWlm%XbsQtjIM|J=P;W%6)hCbP0_DBaO!RI~VFUEw8GdctRG~_j^VK#y_MH{4l zUzeC#Skw@+A6A=vl67S_)B$tTF+k;>V!G~^VBgrx;H4v(#yiSdX=^=0H?K$g2UOv* zI5Yr~K7)mn{QCgD!az}&J&(YCEgIz!y&f4^gm-ByOotNj1x^kEja{~qgw$uMK0qU1>FTe`?W9OvJ ztV2|AF7y!8_kH{CA$du{MKO>4M#9NT(SwQ8wjqXmEUcL@2PC^JNk?ExO4lLS5=AS zkgSrZq;&W);``E%#^5fTV;t`99Sw|nk|b{;0RNx;9B=cpeR!U2$p+~bMcUc#vX)vi zDPazALxK4wsX?+hL-ot9upnh4Xct6Ii~Q0XYjV_IqwbAQZYmpsp=h#Q(eel_tRIwh zd$wEBweT`&AEB@5VC>O$72FWVrqz3ww%hd8oU7#<`^@^(7twPV>N}E1#CrKeER3n9 z$Qls_{#PGSgMcn3*-}D5GL{cNiBW|xI7pDhPtZK*d!>w%8-bw_Ma7Y4*gC>slfohO z)AV-`;TWN>d6GuRI3Gq2!+ROW;8oZ#RG~B{j=IY2<6*6_Wyy@*b%N?Q&9y)E8grDy zk%HOfGc_8{9+8**wnEhOCdu+HsTDR*s7jg77`Ccm<)5BjKSq#na41{p>Lxb9ud` z{mIMx3p&XMjD6&7jV!R93}??-IE~Wqu)%OZGS5aU*1DA+U^xdhmx1kU?jl~_tFyJX zWTp0y>;jED2SS^bpV-!37Pg8=bkd&ehJPXd$)#s|m5#-i)5e7% zZ-Z|cr{822PLXV1T`q%A7~K%!(LFMn`va_u???7Ptc2#DPbc>DF6GZmWVc&C(_oL% z35Oo+CoZj5K6Vqupt%WwJGHd5zvde4FuS#Xt?CH-2Cet6MH9&bCzpQpMj`0SAV~eD zMSseNp-APnVaJ&`F7Oz^UN=4dw!nX9JIzwP#;?KiL&^LW3!p9m|M5>0hun5|h)lyT z^&QARfYc(E=aVDT;BA?Eoz;Vr%=VWm=``T?ckm!O_Z?qeQme!Otgnp9J>jkA6L%CgrVp_ z3a#aW8oO(O?PQ~x(=3SJdUv`%H4`EiqSapZ51^I+dCM|I;`1d6On1SSgg7hwHQLrQ z>}EtqOSNZ zRPj=5x7zUo63R=N0uIlUvmoUfj43ZmJ+oU4Vz<&fd1Gw4i_Akksjc++pAlew`Lw?(!oPs2BTsJ8@KDtOuv48yUbJm32)h9O|MkMxJ4RMY>6)tYUJqxy9(eCG zs(q_rKLGcO4Wud0Ozloh0bdb<&JrP(tpK7zQHua1GE?JS1IYt`#aY|(0Weik>?k8J zjyFFM73eJGHDMpflpC-6g#W!Jp<#6|)iTNM6PG24#SLI@)?)G^5*nE zj5Q-*R-g2<6WTpK%`W#pYAn$<=j$o#`vLR5o{Yaj4I;{ajVNHKL(@VPJ%4~OD_|nX zhlJ+=v=He#{zC&Wi@kvP)@#&jQ#H)#*Dc<|AtJt>N2o3l=z38R3OcEaukzo2xrUY& z-w3CbsvBSx?XW)j@MdC9W*6Wi`!#N}BmI{9CpW97$-I&&2YaSVig^1N)}EGv;P4;X z?k7UP{D&2X$9m6`3)}hI2d(~Z(xEU@i+DJMy_cb?o;0ph1HqPhfihWP#+D+Q0l z=>g5uUh7VhU07o);=8SG-(<{Tt)4yC09a1`66D#Cn7%HG?q_{cG_oteslTz^ea$Bq~ZFT8Yn*j8yQ7q-#*MEu*!zb39uOix^WE57FB()Z-c)2nYKN6Yis z*1}H#{H70D-#ekcb+$v!hk@pQ!1G5TV86cu*WF$ma?vPQx9lCTnl96V=0(fuP zzlCXe-%cLqbpC${r`Ngwt2zM(9F6bP*f9xP_P>a-ZI3CZ>^|cuw$_Ya89+l$O~aRV z*&k7|aOt%^jTMFr_EINwdX?&d1YWfo$aO})+sMBSfyn%aC!@AWu4Df7XoI;x9Vi>P zVamT%Hgs7~$&2`P-X8d(l^|?}8X zehjBFdIge|;rYAT3X(j@-xCoW38-zeN ztTI;Tn2)>l^k&EN44BthHw$P{D=0!(@b*@kcjC8~Dd17;eOLua9m5TI>vdZo`un#9 zSsHWJG4r(D*26awdj<25>ZGwTHY_&m>P|zOk>Q=>b>*k$y&tOB^+4a6o`TXwMb3bk z0ZA1k{(3%U7EdEPm4MoJIAV!QY z#emV;ZfH}OUG8gl&3j&l^1$V%JB4NO7t0$Am(X! zqKvAX3B7!6Jb*?s0lo{RB5Z!cV+lN-rD#aLEy0LOV8Shc2Irrg-)v*R=w97-E9qg_ z$gO$#cUxCG*EYKvJA%O{%J8;uQM&*w4v4y1HPlRiD8J1m`hrYen{9v ztS$dfOamT@X}}o)6$5>t;}oYsJ0#`6JA7;DIG{QJSt|^5%kmEDq&f4y{+vvEKuA}0!2sy7X^O6U<;tirSN=7 z$sk7wPYsaf621aUO~PT3hPLNl;QU{)B6g)Mo#LClGU>MZ9@gUL_p~t-uhe-;7 zM=S!V1U{$LP5MJv3sfaQ;h{|n`~$ov<;hW-=lsbYc`!q77zeSt)x|NQvQ7KEM0cbXr-$up4*glEP7 zMl|V{H^yNP!y&3_PvsFTFA#S@`uhKB(m$GsF4UxhM0_b}|28C43C9Gj$($(F%U!jK zr|0RL$o*OGmWcCu2uo`HFFw-M&j%m>ZZ72h!eZT1H(9QeveRJHP$N+hsF6@J`V+A^ zpgZx1(IMeapo|Qx>st(K`pf;_L-d$|@6lr}jb~YAtv%@8{F6IMrKfWRJQY?Obpc$@ zS_?|`T@J>mrII2gHJ~3-HYNH^Li>3;?i@%B~MC&16ZXk!J22*P*Y6#WXMcoRE zl3xy}%kH**_D=VVq9&y41Fv`XQMh>kFVGpbH9Zsf4FBjc8h?p2B;}$}0jq)fWxD2XC>K+MiD)Py$!KyVM?g|mr`$&)PsuWSOdrHay_}~m9Nliw~g(_T)IqxDxvMh zuhVM}#xu3@Zlte$0xM2KK+=4T}5=8-&Gs8dm>F`e05_eisUEc5u8do8J&2SU;GSP>tjT6iCGVcnMre z7y=}HHkbZsAc=A+C#j(^1Wpw`F00Zm-gneCx6t0Dh|!E5XzJ39^yab@tm&K#sF)vB zEv;TE`^vt+rGuH9-<)n_uK|z4Ym|mb5E;$pDt2Dxj_WiTu~jvb~!jP~WN>nhpgJsBg*J*-pb} z@uTz>X}3rXDsXq+D)#%5ne4Kv=^D&Krx>}wJpxO!i4yagOF2FK6yOiBLM0;rpa$u` zz!ft!5j$IYVKa#<)ehzBuJ&pXkqJM=ru2D_0=EY&C8*yhtaTEJ_<@X7PxZfk%v@xl z1)jCW`w^Y|^{o9cT%0Hsle3W9h09v|{SrR_>5_mn7`S&K;po$2Ee|3d>Bw>S=_nFb z5im_|e1F&kpK-;x<6u11`(u9<&R-t+l)de0-Q5 zst}HVr4b7$s~`kxhwb%mm0YDd7vB5AGeh}9TicJ^;~&Jz3#rVFFSh()};|YZo^v36KFTk z0&(EwN zj>UR*su?Lg{8K|h5UbV(M;!-k)++knQ{0cLm!6*;X2uUUWFlH0lWlqtP*31H;Pd^~ z%i0aV*h;#{2-y{J4x6|YYpZ~@#ou+V^f32gHv_wmob(1HXPp3x0<1`=nfyyB606Dx zva4S9c_}04Y1=ewX=fme#5H(-Q}!BBHJ&iP;nDK*Zcry+QioTcRz#W)Wvs8IeU?4LV_NZ-L29_S^bP z@puxqCp(syoe0}Z9|OCM5RL;H-cTu#TNm5}T@_KEJj?X+#3@xs-ovWwt;q8V``uiK z@{rZ`An`r1NwS8SVAHb`va_;W~PPlIekgo0GPA>@zc5%s6>9K-2JiGR~uYx z=>5sY`l0Hn8yLhJ;{hQBd<9_Vv33KW{v#+Tv?lxJ;g`Tc9R_+M>mj7;!e75OcYVj* zIzBOp`E5a?&=uZJlPU8gtZPJ?`mqceJ`FrqK|jMs-{@9P zJOS~#Ix5YNEZS2}lwo?6eF77qKqn_Ap>~Byq08O%H(97L$v_8`28Emd` z<#W3i{%d`?O1uqQmCxlc0*KTky&oxh7t<}vhW2rppNxGBtP@nM8#rK}8VE)co@0Ez zYkyOBq~hlo%*Fl{*+N&D8g)t7?J@uODgFavmQUvePKrQCFT8r#d%z8%o%D|c-8&=q z^c{D_wDsX?eYfaE7M`|=mVYXxF8)R3Yr3{&N<-;kNIiw`Z{Ij@G(q3GA=89j*`WHQ zBFMdE_)t-JGevf->2k?SY69_(lx4CG!vc|iS=VrvL^qk4#~I#Li7F-91m^<1#i5Ob zuh|6#g`*v$2#5%fl$eTb$8E-K>V z%MjIc8?2=XnfgaFk2hAoX*ZboL!G(mi$lhR?%J(Nl@QfRLHQg%TF*){h0vz0bX%s; z2Z&_>V*^RTE~q>>np~Hv)S2&oHr=c>U)Q5<__+O(s&PiG7K+&xs%xm@PuSDtRXq9$ zmWmT};8gdsmd4Eeti~q$sAC7+n;trE2?gH~X5~7H0B(7nRMTqp4I=VA!|a1ph9JN_ zoICm%2^>433JIFG1GqNp=PPv2d+dAG(lu4)n7evhy%YHj`aZAk3&4vY36?dmR1-Kh z@x!syZLG0C*C#o5LkqN>s`fPZ?N&SHyso=U38l|F?VuaqKUu>*wI!pY>K485CRhyo ze7IcgZd3oZ$GPe)1=NK3V_JE^H_od+iv5=+*yzkedMW7@CoJob@9$#h`0?z#$`20Jn`=?^nx*4KZ#r zZi6>}L#Wnff4t~vU`7pH^+}Yf?kD{t&NcExv3lLp>!G+^Paqy0I1N(zA_`s+@m*V;q1~DsQ>aZdnJ0s0E#68*5~N7R=Q7i<#hKcda$~Ric|U zN>gK%tU^K98;VqhB zhw>!V)G$xcbRmA`B-$pxdf2$;alo#vnlmuz=^+Q`2jxeeCmsuz;%ZgHtcPMMb_8 zy#Z~jvM=;1*Dzwsj9%ZK-)rpZ$e(S*d`6Az5>a?;1|lE}MUhR@G`m3;MQ}9+?D&%W zgWI+*z>!(lX{0o0r<%;3>a?CjS#KbzB4H`BO>bc2Dr}&uBuj12v|eAxdkynW@{trq zU_nPoKvl!r`A7T5DBiOnZ!K8XdC)nk*SL3;ne<|2P@ zEw^k_lQlJd)_nhT}EHNOg@S&M!i)5MMug>XHAAwy3oNAZu zLi{9|5MW5No@uBB;zD8HIRjDe(|54of(P7xPT~MJXu?2rf(v~v`a9oKDGR%DV+Q<; zeT(I(2!W%!N|8tUPzND+`hr-|n>JB*`v=MXNMh|$Y^JSClBZg_{60ysrZ-KNm=Jz& zTME!o#95@s_6b$!1O=8y3qNP@fF$=3gK%P(a3vrCy?FS-(HJY#3xS^l8ixf$B5dePM5qru(Y(Q_5v1+tt3 z-r1d-DE6magU=ge%$s(Nt;GCDIc3!y*bNDu8hPKmDe0~qV9PafJhsKg*qm^+J z8n@=wf2^Cdu`6V*$6P0vc~3rb=^J4gBz7Ca9ZVU9C2TNV_<`>wUR6CDSoNNi-&Igw z83dc4P#(3xWj7>nDF|?!d}ifaCwbJ|zFxQPnlV#`L|u7&@A3m$Cakw2Lv zi^M}VG#R$+c*Jm5L2}KRN}i1UwAUsB7s7q>WR1#_mGX8KW=#dQbcB}r~+&-wv}O!XUO$ zCvNsU_}l6pdY3d4PP@29GSACc-n){6nI}g^GR+z}dkUGKzAdO2Ncdu|W^sKo3-bSI zLJ;a3swE%z;#TkA+rEIXDD8}RrDpEg6nuL|LG7fA@be5)$0Gk1C|mf##W|!jB)(m5 z=BS<^GWsqv|89Ie>1sb=_NV!iM%r;(sKR@6qbE7-5U3b_U11T*F3f^OzQ#V-VSY;e=stW2C zCLdV!2OKEQ;F@uc;nZL_E>Tm=u?%dzZpPUizzBHd5?4&RBg2y!h}%iEbY87jF89T~&9_X~tpl*#|7mxY4<@4wNg9pdeRa&r;!DPY~sT`BVT zd)nhReKtnRu@Xe;8nzCn7;F+E4`g{8t(Xqq+Qpc0U!E2TpcxF}1GCQBGeCh0-#BUs zJp1Ui>vy>P8R8gmIEI0>t#DT0n|0F8L`3Z)7k{|W`V%{Szd}mz=IPIJ7NkYnEwGJh z-VbO;3uK&vcHB2>%E2raJvQ}#RH<;}hftjHB_&*^8$0%Cn?2T1JZ4`~1KysZsK|(N zEkh553j31W>}8AATWwSWR=}Qgy=nnOn}nFl#*0G-IFA4{ub{QtSMXS`impl2R8KRE zwu&gaoITvJIprAS5ZP5%fEm-|$z)|^F^Fqw%-DAV6!_i+T6OoG{zwU?$eAC(dfJ9r z{+4dfHLLbIn$AvBDAGG#%thZXJ z$Ahtg|H_Gx*@y4jhd1q{Z2VJ2Ur`e<|Mi_Y!Fo7s;`R#IZsv0Z+0NrfGkY_bWyc&K zi&Bn<(6;~(50MPIwI!jBAI$TQIV7}v4w=vG?A`+q&=qobL1v=RvfxDpo?%B6u%3&2 ztj`v$E9@tB%$xYQ10G*NQ}LKfpz{v6uvXWFxTwyXvPT`PcF7eOoT2R;Z_3dGyiz3q z&?kI*N`Hb~d_e&mi3NA|neWd}IUe{vI~x)Kvu5gZ=EDn}Di4JRlNV2BSgk2BfZ{q* zH{~u&hg2_*40`4b%sw0bUTX#UimyDeZXZ{mrX;$N zZ10?_uCBFIzEt6K15yD2M$>6`wyM$H0}sXapaQ$Mq71ay!qYb@*6YM`__rV-_6_4r z8IY*t;IK5W44l@&w1hYXj{^pT`VN%kI2yaEDP7B1sc9@}-0KX@ityVM05*Yx0Lg5e z6uT#I02C#qZh(~1L>Y$q#^PfRkJj70l4Ni0*AC5xD-}S`y29wZa4|EhJ{(>HeylKi zXE<YnKA&VfrG38euLa(#ObJZ?^*r+?*HCLo&{mw^PZS9@7bBp%oGA4029v{H|uf0bj8QK2)_9JS$XtGf+dNDL9K1L8+mv1uA&bH&TJLyCT<3Xb+2d^GZ;22x^T$Sk3z>oZgwBWlqI&N-p9`-8%+&TKpiwIk zV9@XWgX5_I6@6UAJ_$H#ag?QA^M zV#{u_B+UAAD?xO>&cq{z8ld5zz6}Ne{2LI{L(fdD0)mpvn^pApK!zC=`A$a@8;sH; zETe(~dJ3vPSR@{0LNqQa2D=HnsY%UVm@sZ*P-rXPNj!uBVu8nvp7jF;5bOl-YQ<0$ z$-OMV{*6^VO~gcuH1WK;$q04^A0Hvc)O$K#=w|&(7v$U@)KC=_mSTmJE=se6-dTC$ zf`JP`dl;gacnAZMg8v)5?#2}0A_w|`8U)E0K^DOi$o-MJ92F!^ms}3?PZ?ilvKgMX zz^eQ6=UP@?(`lV_8K`6dC|-<^0I3ES$6(5o7@SY69Y)rwgfS@sa~0T-4n`9Y$Spt# zDnbEtg7*wkrL#H+n=0>e*8u2?)P)C$a2MzgF9%q1KuG^DdIb{?0~*D^oB({4t-+A_ zVDEqsvanqv@=_DU9w>O$kt=aTl>u66vQDqL-Yw_nO&Em^3}{w2HwlB&2XJkdzPxfr zLnOx4iou#ep)^eF3ZS9?$=CmTw|}=HGz8A%$H0U^j_E7N|4l`83sU9!OngQRlo$z1 z9hZ|4c?Vldn6l9W{v6^YP*d*Tg@D9W`7fq|hrAi%dJPX*H|GP30ZhG%MFI)LOE8Ke zJ4Yh6QuXx!nImcM-8nwy{}55kATi+)|3U>Yu^u3(i2fZCL`53u-}C~ORdP8zVDZM& zRpKrK#M3X3(%U(Qtz@;t*QVyTe{xUMg7U)&h|%YvcK};``;U{xYy-?NLE8Xteg3z3 zP*;qXBvGJT*F;efN-hTmX-3-(iYlRjUhBe?EAZ_r`^A@O4ubbM0Gy49iy*H8Aq#&8 ziCN`v)6IW{STIXM48@2L<_^5Xub4)rKo3ESfZOY~iCO^q4Ho?sRP0@K&fOnUIy_hj z!RT0^T`--Z0^;_sRUp|I(J4Mw`S(ZPhLnEdaXzSocA<$bkiIa*?q`sGlm1}|wpH)c zFL5krZYmIN2tvmGhKT*$ub@Op)W5M}`iR;0+{Y<^LjEpYMZzZS4<5@_c#6Q}A2Qbb z+~gOAJ`)uMSkj<|hUPWz4k1Z z;Nc52JYgBA{cWK(U(NGNf}Nq5aPpGf&tle%lY~syF6D=eShgUeR-Vgg8>5E z7)-wON-50fFwKAwf~g0J`X8xJk}XNe^c1~W&VH1~d`9Nrj7{U1f z=%+5iVaP!4Xih47C+i^Wf$)R4ulI>^ABcTvx3sz1du1PP`u4B^6B`IN1!NJk<-s<_ zgjeX+>xS{^E=XFXnSqXhf(14SMXH~y=QG(z0E=2LE@Lon4W;}4oqnmLlEWD|Fqnhp5mikZ4`J05(0yYkZY-Cr??<^ zf@Ehds2{k*3_M7X_}Od+P+n>kz2+#)-9d0AW^#CvfTjqKxh3LNncf4%(5{Nz7LXiB z>#uZxekG|2N@Qhza?X68TY1{`tnSKrLMOb6@PH4*VPeWzHDDy~HF(;B!XaJEivl71 z@sKf?psJ{#`qG0E>)DCOPQf#kX6D7kqK@33mT$o@y821M_a}n(`bhp`&XKo1Jyu4a;wcTU56fmx5Xh`kyvo z0Ql#i;wG07g6EcmmnuzPc*-ZtX#rf#ACu5!nK__Z6JnX2Ibc2Y04^qBG4Wu!SN!R5 z6VYr{W(P< zOzs>e9C_cCcPDENpt{dP>_mGx7yEOHvw?t>XJvL-&%*M#d>KID%1@%b+8`xm?^4ox z;#b)F&t7d9b%6sO3n61xJh?LM;*KXeRjeiReHL)S5P{2GvV7W}SnPv}L_nYQBG|j# zxeHT3{pDAucRbRb-F_{$3@WZ!esu#Y_;XM_Vb$@O!r*bT%e0crRP(R%HzBLA%#&ZR zCttZb?LzotQuqWzM1g-v65uBw|0tWIWs043iKAua`{X6z2L~Lv{7RD(ccxgx&@WHf z-Ay*~SXVB391Xgk$Gs+8k<0)Df;z@Q1iX5G@7J2irX1UUEZ_q0&EY%3T`3RZwWnZF ztSLVGpY4Z@#|uz# zQf^{(mfjD6G+39?=DZ-vd4?7cgB}WKyGp(WxaFx^#3BDIHnMzHu{lLwbm&i0aI7%z{&`VI`%P&Fo zvHl&&{EOe$Jn!tPA;8`?R}23cK)Fhlt}9`KToXAgXp6G-r~9;g_bs|i>Nfl)v@ zf&8zrCBXHKnbK#s;H-le)>qj#B`48i8ZCg9p}%iTU+RP(+6atr;GvE6Gum>ZQd4QHp?Zfas?ijQagJOhY_$zlnFQS1~x-5v0mpe!B8@ef3po-Y@Gy#&Z(K%#*Q z{}O-yn-I*@JeUP>6tv3#X9TqdKvrUl&8261(zeE(tDhvEwa829BfWNjV}BQu3BNzf zg3Zp-V@LHt&Y(<*B=8P`eD3O=Xy9#Mw;0*67>x5iy?)@^6Xy(PH=Xf{F`WxKz8v;}FX!NdcDM8X-JPLzIJp}F|;9K>204o8X7u^E&-TQJLgFm1F zu>sHo3|s-|84UOK7rwj>rm7RrmH+NQ1GXOqr31rT1TBJviRS~005amKdjn3_uM>zI zX1-|FtxN2zGk4+QUoM}oW*pQei}YeB3&7;8V`jD!%(*?Lm4AR324ch@sDScJ!Z3~C z1u#FrRIZLGCGkn7s5bFdECw6|?*TIoZqO+36Zjj)2GysHtY0*5CO)EFeh3oC0~QrX zS||n%0KU6g@C}V&>_AhXaR5C0555E}#Xk%I{2KIWEl}1Qu+MqDRf*J+2IxhQu6hTk z*;Pl^KvQq%I;O9UV9n}Tft zfSSQ&(6!A}j0(!kf7@y?1~3(j+{J+e$lxs?+3G(UPyy3R%y0ho`Tt%pxCTHNQo#%u z^d7JS&I;s$rP=ps1(n)CS6#f-FO$1RX$~a;;DzznVDcTSW7^p@z_j%@Q~cjnF_Qyg zs0?X)iNye;b<_%kdFIRL`zANInEGWFt1hr}gGw1Z7I*)3jQan20yf^?CjP!)xJvL} z&{=Rt@Eb7ksYB<#QcF910oyvV2@2tMJ=+oxm%Lj$T7nV&zxM^J1K#`JB>sN~3Cbn@ z*Ek?0!P0s5W}hj5cbE2gx6xBbSiczSwf8l^iMgP1~e-~u_Z!3S{*S|mY!oXX= zy}kkFi2&?Q4rA)I6=fn2UULA%$Vn8=(xeIPI|RwQ5@lj706&0f;IFLw|LS4X!0e>I4yFIQhNkz!Aw~fMG&s&3q~5x5O-dbbZUSRy%dfqof3W^^V@X1=uyL@7@$qnQu`vIz2(YmrIOI1O znFQpt&0Kc)gOdwuWjlu#w04;VpUUf)JG+LY6pbj6X-ett`bMrCkNbULLoIoMZzYRA0wBGwdpH}V zsF^gyvcHejL%w1>3o){q1x<0zVT%Px!;>eUrO`3wnS%Bc0z-Vc1a-Nkic*^J)ADuS z+(vjp??{gBQe?UeY~AN`OMa=sUTIF+T8A7g)(m`U#`+QaeD)t(3W6tI`jt<4!|SBl zbyvh;!>qA0CDEO2ja$pESReaM%Ra(x{=MA-JQA`!3%=D4=X9@+ zwks)+TvU(?f!t7d0W|H}oq|C{WFH?o&-7i>R*p1;vipr9$%BuX;vO5ZW>Gwnl69SP z&ZDuf+yZe|=ImV8k+A%b9zipC=iV7j8Y;o$fx z=2(A8?IC{2w~hNC_aDRW91rT}og$CM-jnWWq}ZogwU?I(sKY72xH1LQ^*I?#)m*;$ zr!Ad3y^&mLxAS~_Mfn?~rtH>=76{d{k&az3+CMu(Y9<|_%!c!I5AwWuM z+aAzMk*a^NPfJ~D*2jLT&+hpR|Y#(O=TDLBTkNHnDvLHWq+zK@wgAy9%5-q zKherms+qUt3T~aTn6dc&il|;AtA?^Suz1R;ia;#w7sa@E_aV$vEyvUR6#jK?1#FmK z_av7w@?X1CdIz3kTUW+xg*%?@9ns^gl-v}yH<`av^D*GuR&QO;!b#nOYH4^NEVTOc zf|BwoMC>XNs(YHUHw+vW>9Lcvo|cpdv8zq8_sA^V zJ(1Qs?nt-tn+-_1j~Z`g4UbTN1d~&%M9|XQ*a{xssdX9b=|R#6Lj7YnG0{>aN0ZN{mWLSoC7&IE)*Ew_?p+~_D!VFj`mN90-{Su}TTT|~+_?8lNxue&lH%?w<%n6-OX`<55qouQ50l(Sd zso*<6H-WN)r!AvL!>VY*gVm0 z2;+BKZ;uxw3T4DTU>O#5BkH zCt}Tortx(@$PeNu*fh{Hh>vuXm4(*F)>4!LCO&uPP%4G?Z@UknQ4VAqre1Sjf*PZ4 zL2>Q)8>5d~FNQ%3V!CwgPEvL;D+xTcY3i#ikvhKP>deIf&;;rl)9065;pvS>GmeOC zz35s^#Z){M>hejlXNzO!Z~gNe02!0{I8k3S^8UmR%h}}RfU9)lD&1U(z|Z2aT(OJO zrA+05Rnc$Z{UVAU=x!@vp{ibjW3_(!x%9=|_Bpa(bmCW^%QVI7Zy+Z2+VbPEknQ&K zMp@%OSk-^9t{nbg=@N>lQt}!AU3sORZ)jI*6a)>5gI=gGwY{eL_{qz-T?e5*G3Rg3 zQz7}b{+IBKU0y0X?mYX-o2I#)^};6ciJksat^vCnz3yw7cg_ejQDNw#Ior{+3j)po z|8uVW$G-ia2UZjZTyrIWSS({CLrk+9{4elJo_LxwJNx2$SSdR!NBe08+ZW^>Vx`CK zzWQyad$Ec{6$~sU^?D7Ya24jW6S1;F2UaR?8R90qJM9SvpddOwDxI(Iw&oQLF(Tc( zQGw3TsBvbx5rw68#lPy+rp-D%^0@AIJ~2<0yceogi8)u$j%xR@#0&0HSgu4)PHEAP zz8(R%?pS{axHElplYW<#u%LOyh&%cuA^(DNzT-^*!sPK(mu3GOUr=W-xj5`#_i$O?>6)sR!Ssd%t!NLVuWwn&S_LF{CN5YbuUjiJfV2q*OKBtU};fbd}?Y z_LvKph{6#~>BVK*mLoK2ixpf>1?*^v7j$9ku5KDJKmn7nluief&Zr)rX(HV(2w?es zoM0Z8XUbnmZ)8>JbK~`=vI(}hqepihO9b}k2{g*7WPinFh;Kf9;IU5M1XR5{VMy{__Vlyu^($|x(;*@UzI1jrGlOB{7ibDcc= zsYcXu04?pnKnzw1ky zYMGAr>Wmwx_OcM(WVA$JXDV8@U_)2Uic&*|HCyY3=kDevy!1J5HOkZfb7i6;P{aqj zzQaNdX+H^I-h6r4RKon~91{K%IjLuP%DyFBc9#9&w}`r&bJz`1ucJi!SX`c z3eYEfIWIU8=(_|JRIU&!wx&UnI2A;lgfX!9uWibq#;&bw4d8rE5tmHgi$V|_tU$;nY*zQ25(&V zoPkZ3PkV?;eU4-6#r@4&nBHHoU#Q-}joGQwi|5E!8RKb)6k2e* zt98SB#V9MIM7nm_as*eFdVYdPwuL#=jJIVRb?||Dn4FnR;-W-Yce*0)s~~Rf`Npz! zu#ftED;3OSnHz}$p#=cCEW96JHQ6%zgRbZYeMf7%IMI-VCSD}}cxP)88+5MG2 zSf+1;44jZQZ|8J}&DxP2XXz6e8m$zRy`z%xjFQGA@nIxI9LBsYr|0`s1<6kypBD_{ zDfr#F-P=pTkj+dBj!o;q*Jh^ctvswav3?YV#h<3#);xVq)xs47%}8t_Ef#Q^Gy@ew zU)FzM59>z@OD*PS1w#8@@vhquqb4GR-Cqotq4;4Cj#Retu@xiB+1!wzHwQ~k9#C1iwgR0cU#ApHbi{%ocw<01npR_k-INHV!h>OU2ZtRT5{$6wTzr-T zcBj9`i4oBF-|;eH-nHILp{bS9pndc!Y zj^sCK-p({uz*W>7u_f6x(2oicO|ifdBWP{wS>S+(-ocL-+p%5gm+jjJc> zCo-UB2OfG;BY&_^8;m?It-9PdGvrRe(Px{HSA{`G^EHmVR$*2QTYcbjPsjB+o!G}F z@p{Jt)2c{g;o_yn<82)Q37k+kdzc1W$(}x%ci1p%T$)68ucaoCsF@-)(*PrWo%{t# zKNE>0vn_FLXLZJ+>ze7$-!-?SzsoXB-Xb7$8xjdU@#3B&+gEelt>xdI1#Ba<^e(s|9BG%nCG!$)+-x_$(wvtsNge+#U717w`>+p- zWgt|fZfmF9PsvZo5qPEhlyGiHgV>*($nUeyag*op-sI%FFCnS4N*z8=-V^tBlmeVSO?(f9RyU*fv z1%&mTngVPT@t2AVh6zSe(WXq8|By^U*L}7Bn#0}tj#3f-*u(BzO9h2f1H+yRe}aOFyq4@&EPom6MCzmu>6Jx z6e!&fB_AWxK4K38J;U*lEayu1%Xz?SqT3eRx(SMFiY~J`b01N-BrE;;WGc#uR=TRq zcu7E#oV&;sC=3$>XEB5`XOdV)&F&}d47AI~qgXj^Xbrs0 zDNSuW@?-DO&8(Q+hn-IsQ8;7UswCaU8v4R**;hk1J3w%}pLf6#LgH_MYT+eE{yg#; zG;|VZ?;)Uy=~;RasM1B~?aR2NfI7Y&e63&oK5~u|yXeMi_K{`sn<+usiq3Q2?_oby zhF8C?A!_?j^*p6&hjWwa_9C7=gK||MK`&%x@&9-~}st6Kr7jn0WtLYCa00CyK1T`=c<5R>gzdf%RIHbXfkQBp@YL zPP^2mUUlzyqrc3!8NOXH)~ff&T?_J!xM~VQU?ZA(T0J*;)9{jSAs0|r#kgUbSm~K1 z_{`xHYg6m8LJqB>l6)qs;Ki zqpY*j-_ZfrE}INf2C!5iE$3IF+bp7ld1N*txI0+vSF%nF@sn|xGqM)YLfMyOanQ9O zZ-=Hnl!OFbp5u1?O1_93pFX;8!7H(j>q30 zMawCg`$hz^j~Jgulz7XlBq@z?O5CF&`To7B8BQa`{T6S&rFhJzG>t-F@S3Xw+iZNTxw9 zu41|w&iRSviUdp0^)MAu><=A&EB!cR%GcfJ21N={TjkhR*ENwbx2i9<9V;SPnXlIt>=?^iaq(f&(iaoOIsHcq*Y?VIsN}y1lq9)NeN&mCLUX#xK_*_^zKS{07t^%{hc2 ziY4ftBwdu2Ayb2S45eDcBZMpq{asz*guXEnhp*L#iCiwCjoE?RMu$ln)DtNGuvKoJ z$&rC8LxFadf#Sh)>Amq6>519eK{gq2K294TCnD8nKioQg+~k@5BGM=7LL%keMpA8; zTro@%zB~=ame(VYTf6GCgh}+YBz}X0Epx%MThFyA8H$)A1FH=j-{>7XO!}nIWEDjP zxIiIx;8Tzeb_4kj^Fkg(1DHFag94pcKTq?L)Hr0wPFNgtRRe)+#HagyS&hbw`6m` zLORFLpnm~76!!kbIvNr|Q~PW+boNQg%wD^4(?AXO1UisMcF4cHImHi;tF_1PtK7Hz zxdvU;=emmD!oDS{we*Qyuay5XaFg8UvIIAZcRqpUkSu?QVX{bJL}-Ajz+l+m58Yb6Pbnd^f-O4Qtp)P6IjrnQ7KwV{8-HJ5)Bx=ZrY zDT|dZW5wK+=i!{N40#USje)XxIJT9Jpe^=m^Vun!DkucCZS)ix z!*kBHBvPb}S53gEJl~zGaRsb6InB=jWB)y+$we_Kk@w^IM{Uj4(h*j#>%u6sg3 zDu>dr{1}cb5xYn{L-d#G{83!K;~JcgE0BZ2`(;}(B9%rTEw*K1JeyZVXA~@!XXxec z2x5n_lTGv)?9B^W$feTCq)B+5$qNLI;2+Gs=oF!H@XU9W{IGrfK#Syo@p0kP0=#7En|?bn z$I4MIOM0BiYxW$s>Vof5m^ih!q(`G6ile2_<)tT9(yeqlFDNmSvLx*Ax`OQkSty$S zgS$HaU5e`j(A%pko$lx_@hnoJsZi05v};^F$R>^L)poY?I-KOR36A+h1BT;I^+DGo zgXF1#Dx-Ise9nKd%9&IVs@W%n@!VE}aoyadc-58g)kX(L8D<;PF4{p9{8>?i=|K1B z*)N2Rz(2UIj09^onlR{@smiS6%q;K70ABhZ*dN zGPEUAKA{{l{M~dTF;yqn=HcJs<>ShkrvQYe< z)|b+)Oj%%^52h`ZU1&vQfB%8tlsW(nhwJ%fjs1@d04wY+$sBZ$j1uYfQ)ZnNU*3O~4B)LC2` z2yY#_`mi+r+Jya<$n%|`qisgQDcNnmI(g@$o24YZ&`Gv}_1D_Owp0m6hchaQ?xvC* zX!51b;~CRIN)f}vk$1HX)s>GM6>)iy-IrQiV+wkr$Cz0ICx%(%mrry@vh`-IUIz*z z_8iY%JX~o>Z=C*RvcDc>b=`};EXV=T^(1woHTx6S@KlEb-$D8tg3%a}bci3%FQ;k0 z?D5bCh$CBvz+$|mm7A*-{Jk#+-U^4sdR~ynN0wjyYK6WIvm%`Cd73GZoHo|Y?q@5} zn5q}GG-fB6QIdFa$&XNecT#yyjER|@ik()T5T=*h6byM^s^ocB(i!$QnFauZXxdz5CHz7)Y3 zle^f|-qdxIafaBDWhf%?x(p_x@T~0Y?L9(nq8*O3 zJ_c%RBV`8IR#t9@%_0e%B$N3}wV|q1aVQja(+K2)uhF)jbnt}Bk{?oS6xW=EzICU9 zL|JdrOw@Y`v_tl&@iKCtF&eaK>KH*OdwBNL#O(W*QCTa&=k1E8&_^ZC6Rr*PqHQ9aidx zlDYAC+sacNNsQvSjm4(XLth5BJTNqT~_bIl18IVo&l$>u+HN1nuCDz6pG^_t<3rbJ=|6tm?O|B<_kV7TEWFKZsuhnFmTVN?9=v6|v7zBn zU_&`>yCw&$B9#5sBE7gdo*>bI#F5hkiGZFVT)iKg(xoB@}Rv#WR2P?{xw$8y0Z+4C; zPI^q>Ul+|Yp4F#Id?33or(`=JZY13fda- z7tY8~rRzSHDZ(8O(~^a+w68T>UTM?Z`n=(*LTqKyXs8}{Pe`SNDxA^_btu0JEok!a zxsO^vX_Ha1+1f7)POs|Rk*30GTNA@VS9fw~kZZZm{ zQ8(JQNAYFu< z{d&{Qf#b*0>key0Vuqx~=qUw~viNTu^ipMbpbiyvWdI2qSFvE~6BR{l%^3)q7Mq&M zZWewW=V@hcM^^wG8Iz4ln=1K(wef38BzKgp-_X@#KnLN?b;Jsw1^K(1W8=bt4wD($ z?x!xsUSRKYH58!N1kJOfX3GZ1o5)35n)O~|wY(9z<9oqO*eLgjJJ3cIHSwY0Iz+iy zK1qUR+uL#KOfxwyV*kv^1q zkhW-)$~GwctsfYjR)G648yws^4rBuhR=87-Ynep1DN00W6028_rXN=_! z-&Bq?=RSNI((#ji4bg-J#{=~4QYcdiv9Mkh;bP^`FtZN5O5{bj!PekxAs?hBt&oY|EXU35g<31*mUOuB;%v6AgcQpL z?*f;VP05$Bh(1n0s^gv6+r)N5FJhYN*{gPj89Z z&MI6ewI7|UL0(_4HC8W-EMOT)hU&14OMnmKM3eTf>4`np;q|Z_&W}_Qcl^tTmR4Y& zk(Jv=6+MnUt%ic-2wsEj6c2HkJ9uKeJpmHDo6BY!^g()s9|Tdjgu=5Ka})Q26G!YR zb~LWpVkgCzx1>jfZ-w6s$Gvzo(*z#UEzHK2_)xK@Lyh5HW@Anplw`N|YN}49?79{| zPk;6lJwSy1!AhNeu~uMXT`xP{-_$D3y(b)3J15~;b=ha>iyOiGDTC_=fA?8g;YYu1 zUx={&GtY-p_`eSvREl(Q4r$*j81{LIZ4IP7ncP~oi+qs(B%IK#ZR+E8R>G`KjJ!e5 zUW_yl_JaN-sEbO`!IbE{p)L|e5qHK_k6`bYOn{$>aK3RrFplcsSC;*`y^%_oOT~ZzPA4 zNX5Bt%!-omATCHlHi4-=u0Qn!c4V1(rciaBo_cmze+Y0e-Y`{vi41wB#~9vbJK*ZR zN255-e0$b-Hbn+2A}ty(GH9Ygp6QflEol#zCH`cBRUtwvg-f!SSvD?zQjiJNY-YvC z5p7N-!@FK6>UfqQR>WYUt55g)S1VupflSgDog)RS+Z*e%)5pf=dK;aBQdr)s+?4l> zkxfR76*iqzy(x@z2jP?@sHywUOj_ejgQ1TVAVot$nT% zIb&l4;h_&+P>u^WEG4?6)zqgo2>ZOJZ%;kGd2js#9cnA;TsiB{BuSM6dO!8jX5bA z^jxr$nD5!uNBr!W?v#J>@(-3xWQEuMYz>hGl8Kmr>RgWe$K!8TLOt9ZxSdP}!KSwO zj_;nvECCmT8i%pp93MaBW;L3$b;gdaf0|=ZBL-tDdEKNb+K=T{6gR`eF?tPd#FV3Q zgTyF3`Vw+SKA&=IMv80L|6avzWhVbCzsu6}R2ObU^^5c_;F10uqaK_Zrh&~^qD?zB6AU5AQNitT(NuN&X%$;uUzooLI3T4?ab%$Aq59bLZdSMHP4Cu3sH zO5pc!(5IM~X$>sWD;j4q!U8T?ek+J;unmJ}-*}^a6b?nJ9klIr$o1OTWxC}i)WvKi~+20I6o4cc77uSd)@22vpB0JsEYhi1|$_aZJ z&S=zHlqIPkCoT*89b;4~3p5%VDhfPVOB$CSDaHc*wwI&d^kkRc{)3hD&a+}ufnwa( zp0xqOgtcB-R&nzgC4D9lG$zk+8=r{R(EVXYm@RG>v#dSAE05JAr50xH zc)wmU?uE{G1x3-7$&(@h_=+S(1EZ2g#HTF@1=rRKAoW2UG){M=MT?j!YRJ8|kPkb2 z-A$)Idb7m%BeGO(l+vguQ>8lFO_##*Qo+$yWJZ*$oymJ$bmFKmVQJjh;BwnXnvfFu@<*lK4iqd|_FRY6rFl=&cg+oIWxsw}e3Bau zM}jy}0gel4q~zXE)$981Gw5=hr~hheZbK(7CDj(-bHjOtT8u_HDyo)XS#v_-LP3;GdC4nf;3p%Nx(PA)) zFmx}@yMG=p7)(GTtIRaV;-0~=$+G);y+xt)-VBxZcF8WXLswqd>08~d`hev%`Gn)I zdFF$QRZxk&U|(KFE{-P%km4hHwjGgvyR(9L2e~x$cNRoqUK>0d^n@h{Hld9&%cJpQ zIL)-DYXZWFoQrCAs;t67f@S+4Wy@aezzE9KeIU00*+-r8ZjBT9IV8m}7D*A-B}=c$ zg(S?k%ujz^eMutz+W7fzTRL*63o+Aom2k_rHQyq!$_%ze++2bZ^td;ppn3)y(YW2a z9>>GJlBse*GZrT_|GXG1Pf0yH2r!Oo&kJ?jVeQm0ZO8rkkshe=dw!Q}v19}FHoxI_ z6W@%Mj#a}qn-++FYanMg0MLZq<7_~yHmFw?V2d!*(VHbfj3%9g*cX-p(!H8kyF$;N zC512c6kSWkC{({$p&5gCn{c~p$=8FSgzX6DvF9|~+;+F7je|q@Lz8D`^ogdaF6*M4 z=2F@pc@&M!zPU!sDW9-{9|5NMqVmliZ4 zt#rkB{+UUDa|mNIp{*QwgUsS{DTMQLnf0rSvx#j(e;hDyhFAYgxJ-(m2yC+Aw+7Cn zbbfQ)&S?09&7+d7cTBx?I1IDXA(~~^6xwThwdpfco$tbcKZZVdv=0zD+|HSTWYzW*Yfm;ZQu$mbT!K(03j@SGF108D}y8Qh-2(|2seP1-^oCZ{JI5@4w78jOP5zS%D7X6E->r-kOj#_Wbgh>Nnq%ZRV_ zY)*!6+4)<8=)nHYN*qtb4>yGzKZ<%Sz6mq%s z^xG_BMpgR6%)`sVz++IkkY(Jq>-G`ob55?b-`e{lgn14-SaO(cog)dGMz@bRvT4PJ zLJ_sy{Y5QHwBy#q8$;!K1WGAMH1#lvPr&Ofnu&+4}Xnpgv1v zNUW@wkel#pO#->`>=sltkoIbrkeV;p_vA*GB>~w3t*@xVmjW+{u>l~$wtEAOzXL4WQWImob`TKjK8RF z+iJ`DpgQpi_4~5k$jJ{GT8dyJ3X9P5AoLnVsZa|larsjc7TTA{`J(XbWt-i->1NAR zph3d~q1)4bcFSS4_I`IaI2Y?2X;ZkB^2pQpsSIAX=GRd@G~0sk_3|B`F3^ipUb}<6 zX2O;FG~=wvWB{28SjdWk{!|x3{-u`6sg5uv(QV)Ipl7WJ1w8axo&C50GTnf^U&5`o zg8uaa`n_fnf~!^|%d&TeQJYOaEryBav7V^sF+x5wt?zpF>}CmTJyg-Du2G(A>>x{D z`LW=v-D_>^i?tV*!x5kC;{&D#O=)pRq_i#CUVhqY@)~x{mBI=#_ljOw?4hx!@|z3C zE`Mui8M*tglPVnNtr9xmVm9h*{ugJGc3?GrN}z+|iPkIHSW8I}jh<-W69Q2B%h&Cf zX`Xuv(S!@QN?gfl3_72blT*3UO$#w3-i%tCpSI;}aP#&zZ>JWUgbOCJ<3Rh=8*@D| z)i2qL28x&PRzp2BGJe$|C(ns1FZ_}5NvB+%S_klfTxw}b41=tg7%su%52$46Md2DW z$lX@s`Q)SUMd0C-kj&9Tp!p8YXpLT2XixfROWc=mVFt@+SkiR)?@Ns^mi*x-pUH*JpIr4?>0f^Hz|2$N9ip)d z_Q)&LfPdRXX`k0AjDIihI@xK>(jP2?){Bxz+!5BHd0*&XC2w8wRL!RL&e7#)Z_u2u z1kXcCW>A%Sxiq%7#rr;KTiTGl3`bX>j$YLn{b!F$33GdOXQ9W^Y85Y$#r-H2trz4% zi{ZzO^AOnqZ>*ZRx_VD;NA)P#>JehzdoS4_bI%@cQw}S%v^U6hv>VU-mOb`+xY@#j zO|8Fzqxd)mg6r@YR8H^fFAL^m%^Un(Namh2#VT~Y(1<)~NB(nhM8@UL^`xw8v22vN z4|n3r4B`oY|C05Yy-dDtq+$?4)?pJ-bUiYRBdMqCMkk2%km(Yv@Ut?FZcYqKXP+C% z(lq_yCo055-2&nPxY>Gi^J4Fi{Hk3cgfU7p$k>K2=LJ#~3|g!z8nqKGe(?DG%c~SQ z=@Yef^L)Q|pBBDZ!$8#|2Y*--JHe^=M|mG@FTB)|C9S{lh`Az62%L562* z0C&DWMXp#BTMDC6eal%UXu&!*Quj1dupD4m?29eTT9z?%y;7%_l}+CQ(8*90Z#s7} zk*$7*aq?UzjVaTdYkKTT5D!yP9lW{EM=nXheojJ9I|DhqbReM)I&U?YcOT7qH3Z~MHNlY~T%BC*1KZ{E?abk5TfQ^d0j8_!6&zwQ-46B`Aq!x?^h zft2p+5;EIYVUVM#+D+sBgN37Hn>bG^6wmEKuNLCZBTHekp?4-?XEQh0eod_)SF#eR z8RGlE{Bo-umIbj5pw{|m>cJLEE<_mYv$4Ay;;k5bK*!nt`3dqEX?Nsb@}-3OBA@f^ z35ejZO~vcV#_JT!$`WI8}>*jJ0!!C$rlF8dt}ARpSsjbX~0!1)+>;oXFjY=TlaV)?wa9m!;P((e~k6 zy!|w)&!p^j))c&@kjWMPS#ZVzOTs?KMIx0FQd2RlOnZ(UqBJu0?&@BTXwnEdCzb_> z;pZ27GP}Q4R`5TT^&EU7)Qb7CiRQTA0X8m+wM@Zfjyfm#4Zkxv5Kl6!!FDt~nc?K) ziXlXac8J!nG-4d@wdO@(I}3OcC1~wwkp6n;7oWCt#dJWolgAV3;ZU46lWMh zNw1S%Jp=i@Q0SieavqZ#y2DCLZ?TQci_{$|?@&>zbp2s@v6Mqq#D?R(QI50AAFNlC z)tAojU?}b$<#dndxb@|ho@Lb}<+@137tW4D$z%wL&HnFFc7zKaYat=soar7pDbm`E z(41QEhPR^~htvN<*H=bG^@aTo-QC?Ghyv0%3_~gD&?t@4gGdNS58Wx!B`GPP(j{Tg zARr|mDcuZsH~;s&Yuzt*Etem}HJmeNpS_>wR}cPkIJI)6)HCQSZ5YnZ8-17q6UnI| zg2Rq$^nq4>>_5oUl-pwfnq-~pjyT*qz7>OEYB~SZ6^jivo%>GXb!Od1H2V834n>C? zz}S>K-vOrOej*45qms2q}q`)aj-swIWGPt<{l zdu|4SAYc$qYon?dBF{OQ&(TGZd@h%#)d|vpVmc#U%r`ncepdVP9#g+=X2ow8fjw{A zed4P#L_CXk3(c#^w5LqV2H|J5m3LCeR4;&jFgr)aE!!=RdRbU2q)MjgCdMzYgXrQ( zziHge^ic76xANIR8=~{&-+3)3QtQ<ls|CLSGUh$qNO#uWDe1hyi`4+< zMQ$kl#W~jqzQ%yHZstAi=7%};0=LqpgG>ry-$H03(53MAM|jFDp{y^HoZc%@KxxQ5 z?j$L_lcVGE%D3>`L%MTp)BZwq97MxFLdJc<=}#tFpbP}7Q@zu*N~H4`M(I9@k6Ul) z^x@5JP_ZGtUlEA(FbUEXdixdFUdh0mJn^!fgjj~F|Yjh?{xg7tDYZ6gXK&?Ts)3zlfCxKe;WTPGrtace!-Yv- z>7>IuKa7(<3V&(F{A?LNcTQjVtnCc;Ij)(x`OLar6)vzNp}t+G6Gy9=qlle)7_IV@ zUAJ;_8Dx+^*>8U15~0fD9@J)RUXzT4uq+}KD7_2^QwHqy$!Nf;YLc4z4$LgKhWwk~Rz?yaeqr6FkW~6hPdk z7l&q)X3+isqOP&I0%h5U= zzFZ-~Cd;leH%F}Re|G#Xxa;&`?(8n@Ah`{Uh}ycjPxXF@u3Fd|xMTH*%f%dj*zd2` z?c8`#rqvHSL^lg%7e8mxD9QK|S4_&qW-+$z85*QpddecD?leh%`C7r}Y2I-eTJ=-^ zbmQUY`up|OH;8WW0SkXS>58s|HnpV^##6Fe`cH0JrF#|40wXHP@yVg*D!QJhf8%*$4K!=IVVqFvda`SftcgBl(Mk zL>25;m@t|~>OWMGI|wVQ4=ZWO9e;9j&rZ0&24lu}waQ`&9#<-K^NpNHVbz7@a8 zxC7y@&Ztq#m($;8YF6DD%v`r=PgPz1`cI-2xepxPo?n;D_dvrnQV3mhq|vskXkJws z2_;qmH~t_!R1907jAJf`x9LrD+=tsOSou|(CT`De33F;svVFmOFU0p{O2sY7B7s^L z)(#0HQ}R&Tr{G7zN$jzUXZxkf38_mz(d}DXg~-dJ56?|p>W&+=6b)H7fMS2Ux&dqP z=roqwUtrJNb=X(v$ZWIyxwLtZmiKE#GfyiU&1h&LP0QcjDK#A~Aq4MrCAl1}W=4rt zmnb$jepX#_&jyL)5;fJ@^=pgq--rIjDvV2;vqiJIPh>cHbR({iSa*m`BlY<8mO?oQ z3+W5-$LpU}kG6P?gOK5QHwXTm?fFJBU9dA z#YPgYSxa%yalwtO!qx4YVQVJ})AJQMX`Y+y(H|T(FE32>GfGOf+ye)IV}uvZ{=jvs zwe8Zs^a~85;Z6p%71t)FN+i(XO3~HyKR;7#Dr4NPq9~j2E2OWVA9~Sut7(4o(ZuV? z*_ayU`uZ_&)reVUn2x2;GL2Hjkec1ux#4Qgy(W*fc#O?NMNAR&^sz9D{TysUdD4Go zcdbekFqOZ}cv6}C792nkc$2*7vdymi*R-JHRbgOy?!aEb3YMCJlw?7Kmcsjugm+>O zL%*Pl^c>jh)k9eid#=NG(?tRWRC}c?2d2XupVfcu?-sUvU)kJS!xQ+%6FIx6m%{{Oa)iAb3l&sL$20_B_i!-MpV>dTS&0k{d}e)zJM9G7Z|sBL{;a&yk3O z_Na~>$L_B0a-3ZsawQfj2h5&rZDr*&O}mt*AOJD7HZSv{%eI#9a7K+g`uZyx!7U%pIsWj^WdSu2-<3aFZ zbsnzxV}UzK1Z`MDnjz3S0|Eu9r6CoOPJX_fRfmB64{VzDX&6;?deJAzSY|fd-i)eW zHmlkv!YMH$m$9JTq-AsHpy9PXjPnRYN}2^lVwe_VsV!*fY?t_;lv$KBrmBT&20@B1 z_oWpa;?`R0riK~#FgrEQE>Ei4st(R#eRVlScuD~u8-leiY^^Z0uF2wCt7d*L3)hL1+QQU3 z@0DvZl)pV)+-g|TcUn8lqyq7^$^XHFVC#CD2{tcPeDI&>)stV$>?`{fDmlNrtgQ4g z+MB_T+`ZQ#v*S;_^m1S#Rx&>8V1En+&mVATl}FyYAg~ZA)lnh-OJb3!?L(B&3p|SwJ*td@cK_S81dP(M zi=nh+Q@ibl_ygbZgNKqB@V?y%S_ObWbE{GNdeTo32@ZM%} zeTA*ADAt{0((H#Y7c?gY!0VRk%cY2(Zg=2kB~r823p?b9$C&i@=EwetqCeHdi2~NW!P!9wj~2?*zkOmmXdY?cKR7DEQ%_P7vY7T<_D9-w zrERuT<>B<%W64m%e-JN;%J%0gr*Hq(%=uFRYD*fhKx8EEEL{naLVMU_vzg3t1m+7=h0QEBR?y@Sd>%L zD18`;)&BdZbFyn@DZ zH4mLt>8@>)CwBjB32PE(+osVUl@|P0rB?o2aI`X^^Nq_wSvRIIR=rzZ zK?h!WmX<&zif{=(8@N^W^4=-?43LK$qtDH4wve-yH}}$?g@-RJTw|5|EVC+yV%WxK zkJ){m)L4E0=WUfx`oZ;5Hj&Vl?@wt(o+qJd+kd&J*|jvf1CJ6m8N}jqH3~=dv{l+% z*F!ieKbC(t(rHyWF^`oB_`>yzREbzk{z0WH1yyK_w|-C|4}Jv0uds%J{IMvP`S!HT zUe3ZU;iPcFs?@nHD_yPw+!=N2u_vTJ&7&_KA{}>ZDGMbyFx_{3 zyJqULIL`933ZWaGb*XyiR`Oz*@emZiT^;W%-^zG)%zGA*vPfEO4jPK!!zZ0uoHr{t zwiz>9O)Ox#QOzy)RBKmQHgmqrh!&A|AlpwrQxD|Bn}*a%al;%Y{pLy$sp$VaG@}B; zvzV97d&_W(2|{Sq-fWQ2ITg1A4uF1=8M`7fabhYDPhAss$t!sKZJvnh;Yw>btssBg z*nKSpa^3}CKxW?xYl>_rYHZZoz=}7&#p>CaX1c+!(jzvtFt4vxGuTBJ z#X1G4O0~1ctoS@;{^q$F9k5->H&4<>mFWu;Iy6kSN+!GAC9COn4|I7p|9z{brTsMr zL03d@+d{?kPop${s$LI-x4WZu-k2y>(8E9zQ=8z8lD>#A;Z+pFslv|xvSp#-|3iC8 zfNk%8{hH2FJ_xIxp{P*Yn*K_Uo75^&_XfN?=N(KKXjV}i(5Q= zVP55l{3=dNSsyYsy(e3N?v$zN@%^7t_vYHapBiol4i7&8DmqF9h3p^~1ZHNYDxsrw zC7q{^N{&{HiX>ILJq%~wu6lZ3V9(AWVpE?gOg8j!z$579+bHR#8|punGI{Szddoki zAB}2bUB>&J8BSRQ{K)ct{jyE+=54j_(fkH8o;$!-ST5x|#(ubX@`v;++PmwEq=Ef>sMu7NcgwbfOgQhKNY0PG zPHn$BqiZ*i_n-A8XWQYB?@G3`RFXVU;~rpSJ*3#2zx@nKnLuL_Dor*+mv^9=GCSoD ze}M|UP;RlsiLS4Vd+Vv!^Xkw0e%VHRs~0=oMw{fn*zGAc*y7BE+J2R^)l7m`?LTV< zZ*1Z;A44dhy2-UCcVqv!Evdjz}|7j zA`&sarX~HdrZH=Bi_BTAnqewCJB1f011`NlXn>vY;^Pc)E&Pv23+M{PBz?iO&wn14 zA9)cT#|+X0=R&;R8&w=zk~Wh+kKxQ9#-&D{8`Wrp^dBv2>sLNrmCxkD7f)C?NaPZ# z;P69w+J}kqlQ(hWhMy!Rd?)1F=Z%8a`Eb!4CS#dbhy9rGtIWDwLq7~|q4*RrcF&kdfe3r&apgJ9GN%`|!X#r^i+ z{C=cEQ7fVN{1|n=4bUK?ek{H)w!fj2+R|kWb z6E<{)rP`Kma_cJqMl$;d}rGw_91mmS{@I6X>Zwj{5vCDo*IpL^PG*) z+4vQL^x-p5Edj4&`Tzg@&mv{j2P^JBTM&3H8iiL&SoFsumU6VUsdx=g#{*EXqbi6n zJe@Hj08uB_zuKD}0Rm*gxXm=N;8aLK*0z`YA==hQ-Q(=xSFZqzXHk?`aNn<_XQ+2D z+9{-VpQE>At_BX<>ZssB^(2rZ+;vaz$NwIqB!wJdp!CkMMNg1AV@{aw_m5d zshJlp*0OL@j>YBseDL;#S`jVxO2u^6#3@aDU;fizzJU)!Sf+NG`Vb)|4a{m?f6>_f zDf#Vd=ykz|bs2YIkQY2Z5+;tP-EykaZ^LyPEpUfIV^kpnPq!PlLn&fpD! z1K%fNh&#)c+~zTai2q}sHhmGb%$~U1v;X|WQny)1y_-7uU-Dnl2A`-cOoq>o3)dTB9nF;%u^?E*|m|a1y&K2iYeH z4muYGbf{jITZ$TYoHDZhZ-@M}35oGaJMxPDeMu z_{t7t7gLql)nUT!NwsAcO$%iai*Avw^rFpG)|qNL{HVP^0+e{>1RB%3VXq%G=d8U$ znqkx)XHwD6B}2*r4pxlJ@NkT%gc+wdGfya zqf{#>wQ@W`@z4xg_+n_eK?IWww>p2qV|W;WIqe& z22oOEb_)E3ObK0fhH1kEU!(C)k`2s9Q_|Dz8U?gdmEstNXJGFG!=Dt8`CIOj`gzeq zjz}mPS9Ms8_*xoi#meu~!bmm>$)0W)ig14GA6pMU z8?q3yraL(}j(|jaZ42&aVJ`;T4aWi%!VV?Sg?w#Qg8M$GEo8otQRZJgWhj#LxkyH^O6e-MJs3f4t_ z#ZB~|l9i_ngX7kDqz`zH;rop0ZPdaG&LHsT6{kisIwjwMJlKIV?ES){#k2rPkDx~T z-;yOdV^dXTP)_=DFzezEm(dZZx zS)Lb>=#bx|5wBeQ5}YKvIL`YT%}dQ9m&W(I9;vDWA$xS~B=JjlI#5;A{U78W39tWa zbb(&YyuRw`)<^9e;Y+yw@2`h`f197pa0nFudxE=~-{Mzm#{qvf{y4d25BGhn*tsbxeeEmrN@YCm9GUJ_Dpxx{Bk((8WA7Ms8CWMS58b>RZd^9T+Y9o=@87u=3r6AIS%5`I)6{5sA1TGXDP$V?3_`Fp5sWXjPLMo? zEnojY&lK-Sw!Jmpte%&mHL8*Qyqr-dJJ(jb_YKoo3%{XVIgntm40n7@MEZ}n`4&Ru zzp`Zv4FK`*qW$`NOZzd>bB8kTN`A z+3ip=PNi1C6L9x5q6xv0W)LYEYc6(B;X22>lbD$inScsRXF$r})gaaZmYLR;BjWb>>p zHJ=hJuZ2TI&`nYG^`!T9t8_ia4q4mcpcdxr4=i6kzfK0D72o`6(ngH0r@n%J1Lk%B z9ry5D$oI}KRjutf2tUq-)4Yn zM)6LXW<_BQy&y?j4-BJ*Pg++2#?{Gec7AbLiWYDB$K3B1l9TC!hUjd$b_dVYoNjY zMM>@iG#BM>!e#$ZkB8w^w9QAziHqV#j$@*rt8V;}NTdgpF0{41JTmB010rl!{Pv(z z<@@Le&!@5$PI4q~TN%8S1;&or`3<&>FEM@EhB=Izrgr(rMf|lNiNAO~d)uMybR^Xp zq$z1(j*kZnF4G!S%_l`(y`B#ALnz$n24$y?D17C^?E3NjT=gy$%QXj~BWb0yKnOs~ z(HvUPywm)#$iRV@7qHq$kiZs~zO(+_fLhXIq>}ryZWT=-eWgE%d%f*1z9sv-*v)h1 zNr&_GZ=naIRF(x%4ap#8z^Wrp3@87QGX;xLoN$giC8HTxPBDd$OyXZ z1_n?Cd-_~|+K+{&gi~tq!|vBqxZT~kL{@FRkTht$^2=xPb7?8*sov63**8r+=aZwo z(?N=Z88{cJX1G2Wh)C*KKu^iCuvPO@0j2HW8U1c$s`UjX=hHNDSPgtaeOX?@wA$hO z<~jEPiz0K44_-n~5;sqEAU|DdH=%H@aTNSj(E|kw_i6qF)}h;HBlF(h`75hj!GDYWZbl&6Y6h506|Sa2+i{@AdKuD#08oWbL$n@#C^q2ftRK zWr05>zk@W;9&qp4G8-@X)^nWB<1Bn=6d|}5ynOfa9-W6KsGbtG1YuFN2shjZ!J(aN ztq3Xy=Z2=5S+~2ibM=+Y8{qN?@8yLr#`9fw!qrKzq7{d}@3#LwCY2plA#XL6Y)!gR z7FqOZw;_if9Fa4~w@-*3ieThM`+P*!=ei*PThksX zzx-*C!l`pQVBpOUJpx60n6_zoMw&1&qWsI!){FjGRZVU?F{kRekj-;vpofZKp@8Sx z(#Y|>QFNId2p64$hrhnJz@{BRoS-_`CaXRsYNe9q_1NP$He&x<_NZ--*vOU99eUbN z?Yr=o1-F8~|H^JF5q{;UjUZscHn0=MZ(@OEmEVT^eblDfpF6bu2MM>%D6ep|%y46n z{B5oTeUINvtaqc-H~+c_9UkEAVzN}(>{r?7o^6L8fq%7Eh!?I_Y&#*O)rUb%CF9D3 z@Hi%k!FEAQGt-IIgE%qG9Kzk*uZG%{ciuHh;((6xJT~hP^$!wk{Z>m;o(X#~UYrib zJ9ZGB$GBBUVqE+89W{m?(Ph=%>kiDpch$#(A3>g^KH`yY8(Xia4KSF!15O=YEiP0K zj@Yx360IJO%`}bM&n!NWJPnli4?oeC+R57Q4&`FM$D3=qRLOF|a@aSML>D7x$J6MM zs;*2;Mx3BMn0RN^b})5ff<^k+bR4)8DcQb?AP_H}DzbFk)42eLYXBE7T5yCvR{HeJ zXcFP2+OaAf_xCMUoDG3%Dh>II6`uhqTiZ zeA`8|@aFgkvJ=>pou`!0p>~)2;oEZzE)}s#(KsK|&8(5;U6Q3-XrfD1Q0aBXB0wN& zW(jy?wu8|&8!S?39T43ja%lZsW2PN(gS3tYN1?@EkL<^EBi;Pe$tVXIM9}4Ixq<3~ z9WpxSz$RqdGkS|5Yrb;LG0mFBh6fE9YPm#^oR7+DI=66j6z?*XNPkkmL6xg$N<$E%Yx`|8SWy|A36Y-vW1CsekjW)}qvR;bnmc5I`Hs*JfDnxWG zJp~*1S{Kj2Z$aB!8fsR2MRO=Ff!1?IOEZv=n}e92u~p)9BV4xbDezA!>)&VcpF6qp zMK{tniP(e;)+H|4XRzIEnRP^(t9pDl3oWgfYr7bonY9ngR-$*5uomk{o2R>b_IXi5 zvG$v%VmS_dXzbL*?gT%nEbkjXej`1tZ6O3geJ~ot6{AytJp~;4WhR1wQG7@5vktyd z1#teb@9sBf*=ludbx~sW5MH0<(b-7e_aM58m1&^zlnu~ zhB$$VWB~>PPD2z-l_1S2wd(8s?~ zIl#jX7dLjEKe^&}!ezDbYhwgxlj-H+-ox1RA?`>;p{aGxf^*s>k$k*&&(RdhqxugF zQit*@?{s{jx&S6G%)t~!%MqjoIiMqcM*M8==s-EuAQL1ynK zs*7j;Alwt`OQh7+*MAc$)6~4|1~`9zSF0WBFWu8*>3&k|# z5gftHWo%a?*D(KSs@hqw63f28zEC;p-eKN#lrp%Ee71G`VyPD~BRn5ywuGCuZfc@` zHMbvzL>7^^k!(ccUArX~JU<@`MIi3f_vVEHt5Q1!DO1M6OdrNm3~r@Lv&Du` zoWM&eB(b{ghkuYDAb8aTx*sl5F6e^Ce3jc%9>->Wd z(-j{NAH?|6orXVBjrTENR}CwRADD~$^5h?6B&i4Y5!rct;JJM?ELEvL4C9lU-c-|f z%)ZgGGfL2(W_~KUBE|d5Sb_c;_SkvSN+z&}qMHLVQW>rH53*b@m1ICwgf0m1=T<~c zRk^Oc4`!t0lsMa+ybiY+NDX)zVrQIOMH}@GLa2sqS(7{jg30raNP)w{-4kT2rl6Lk z&@+@t?8UdPNaFd!>B2~nLBg(~w&PSQxN%c}ufaGD_5F&4tCy?q(Ju>nE#Del5Ybc& z->?M;rb#RQ!B0ypbV-&&&REQ{s0GgAL`RAYnK|^4EIYsEIPbQ_Iz+iu84A9lby(T{ zk{<91h~xugsR0DBkAtJf!0*V*ay@ye7c+fI^6Gr?IS=91WLs}ZP-@KF)4d^aLsa$P zKL`o(5B{?0d%(&zVeKb;vF$;N=q`xVtg~*31e_g)*%(|~&j%h8%|6*6Q1?)#O*(69%_YC~l@&{5epQ_#t&BRX1tz2414-p` z?20=L{$+>wzQ&U;LXw_HRX8NI9pU)F(A$Y7prapME{MpA0rAzto zr*e_$bcfE@ws>d)^eeVd-q65wQO54@vHKqzb3WZn>Jcjj%Inj`QeeAo;RcD) z*fIILIDRt0=;aMRb=FDtxJgXi+>p{y>Sue1WLI1wTLD)g+I*2;MAI%nW!@OktjJ(o zNP_-cI7%3Q>ZAKPQj}V$LDsD3^?ixGA6sdF%|1*~0R}*M22qd)FUEq!LHP-ha=@6f z!mgOBxXP-l`28){dl@BV5~!u2}O#H=#Wbf8^T%lu!l!0P!K=6k@BHdH%G)qqyDm>#4jT79-mwc&5bWoYwHB^DeO03)dvGT)w zqq$g-HE=kT5B8Vxrls>9|A~pmD%G|RQHiDxPK@RDKvPOVZtQQw$U0Nl*)lnU6hlO5 z2+HF2G#FlKls9$ziN1V3$jAAgDLTi!wO0Ny%&KG{;V0F{Lu&8XE<;XJZGJC4#S(+`NHVl@R%z@@N&Xh! z6PvGZt$`<;1O?!e4O2kbI^W)vUkxv`lHBX&h{ox$sJ$kE#Bpe%V2n*?`-s#(xs8v2 zmIH+bo;aC01!|nZ||~ z$qQ^IkGgTzaL9ul`9jFnbXFi}a<--0dwM8<sTlCG);Swfy$i6Na^3Uq4ZW^0$!_z{tgy$Vtk&T|bcQ znLwr!Jvedaa}M>CUTyM=e&#TN#}nP?&Vi@1-?NYV5IA3-$kc9{*XFd-R+7DVM`suf z-G3HKg*{~d9jJLiX~6V4g+)iJL3;I6*eT<_Y)x{FU!}fs1@L=qPKVg|IH68%&cSd zeLSxV8GkvBZ~uAJlHiXX!5_yP`9`N7i@P-rzo*-KS%T0buGFpoC0&0AN4r3Mho7gM zF-8ye-RfEHOHo^1U4AMk3|Wp3O$2x}r)~BN#1Dj%{!$ytkY=nI~+ zpP-6LW~G9j&~=1xu;D&a5XoYqVhroYOo%VvlC*Yi?CK4Q(N+%xBBVw`ZXjO?KEHPy zUh(4Z(?KO>Uc_D5Z?S)=*2icG+PtR1vQJI2Qf2DKsm9aq7GySSziJfuGXFY3@WSe6 zsU!%=9?)}kJQ`n9U<-Uw9M1He(qAZz(-!j)H?JP97-v)?yiEk7y%<6Xo^7XVbzmucnez2c*fuRQ+;S+5uFxtu{*_3kBS zmQ)-pygJe>DZr=JI7U@ch+^=hVsnG;38nW$df?||OBMzk5&aa2SCM^OV!WkNT7)~_&kmq~a^OM#@6!EA~ z1`$f5 z@@p-#<5bH~+A^bGR-uKb(e*8KT@_VQQdn^d7tZQj{S^X3wr&`ly}&9a`E&lK{8lPf!xz+J3l`)27=!-mx_jB12lCPP=l>hFFyyiPGXIcHTOZ^WgSU-R zN=IY-^0BQHr!9&-D*1!%pCIH*FeoI}c5O|WWIZ(rK07k1Oe%YEzybd8+15w$UTqsc zpf7DCx2kEwkPwKpi7cllSq!8E00pshyrI+TQU){g`L=mkhIt=_um+NjXxhu}z)nKATX0e_-ZTRt)3_IJgO&04@mR=Y zA;X87Exib>fDxmjgi@<$Pdzk8@^?K^jA#rh-oY-&SVoqbBC170`p9RQxEmB` z|E&ArPdHA`s~Gz??=1xJhauM?Af+~uUq#f+1S~M{4H%g87BW5g(C_nAYF>B#CJ#3$ z+n|yuK%mdW-hfHy$4$W94(g|SjI*d$Cl`zQ`&s>p4VHca`;nXzMD|r!e)A_>hPjeq z(O!M2kxR-{`p$_7rnZ#1RDpE8=*y%|THhkLFJ>U?9g1$eeO_h0(+H8aP4;Fliy87S zl_b`?TbL&+dPnz0gC#ab;IIH-b7%exPN? zkl?_TPYQa9bUA@jxUjp{T)Qvl4--PmwsUozaK`5dz6%}z1+hC|ZM#Ui-R3s^=t3<_4muvD+9Z0sJ3X!;V zbY5&#{t;qWPSMeVVHiYH8qK-t5NbV%vNucknVque@^zluy->YZTbakCH(!MPB^1N@ zb_0t2FX0eS&`Y;$G<|{8cK!R>qx!_igyy7O3C~T_EJVoF(fBM>{rrlgi0K@v6I4K{%0`gx1lro&t-5wSm8*ZvGcNj%ks@#AQ&N2(m)rQZ!Hu=7GjI zR~MT8J|yxw@q@(fSx41?0Tq%QBzhShE>1sWFIqpaeE1L(X6plm*ZM%9oVGO6Zb$8h z$pdc|Era~YNo?!X+_qu#rXRS$K$;tDILwMx^{T~U8e54rpEcj96Me;rpGaFLEFPcB zTInW!xq`q+*BKu9;G0S}R z2Wni__j~lnD4;^1XYHB6D`?$NcO;j$UdzGVOf~Hw9d!aO@g{r%g3oGI5&Bprz_ZA6 z_LH40K==P%nwbe_)D|<801mq^pEuqzNvE%Dc=zLN0x__pQG_)tT#pEuzMyGjN^^VT z+E}&z%@6&)8)u%HSDf_q4Gsp2ZL9u%ya@eCaY-<|=&5KKUokeS7OG*3DpMw2<2i;Z zpz|4xi#~d$;z1?K(i>H%HhUnc>~vGHuRM<}W9AGmcl$s-gBB@E(=3>lBI#T`h97Cb zxK-ckQ&!OGk+e``j(gC8H0UwDN4gEbHGW@Yce91;6|}8sFHqk!L&zmLX+xusoLQJ& zG9XKMC&5gS*2Zyg!Hk7)t{M8M@v#u#V2Cq$ z-}Asw=-TU4rFt`rq@6`>ZpI#^Q)z(AyxCI)!;1#sa|_?M*6GZ41?4}KRTS12%I>KR znzTSCAnP*`(Tm_y#6=-SjYGoGMMPB=&c-Rumq;J9b8&oz;$ zjE?;A&5pHo>EM~K_^Oz<`0cORB~hnFM}SZ zpg0ZA(VJP=1)GWM1QFL$>-TM6wnpW)-b=E~%$vD1Q~3J5=mEn$$eh%OS=A6ncLOZqq8cN_C5ygD-RTVpsNyn-((T1 zx&K@GsINK?huVdOTx@W}7?(FHnRX@T*%r!}otWz6_H2%J0w2yMoYFFThj^9UY&7zj za+<4w(N0TL0Pu@7M1b#tTjhs&zWOW7;m7vzK=)1j-~+Y1gBWMSD9;@G5J+Zmm>44* zk;;Dza*aegFhIP~B^LB82Qhc#FCp1QJ8a3^$4I}+XkM^1{<}``^t~V3^;*|t9g9_t zcO#c^JCZI2$yLe+&Ob@r4_hJJ9jveT1GgZt>2CJho;r+l_6di!fQboyeNyh2{m;E}pv7jx+1V>0@Q_H98gx;)$ zn`<*(E!El_xkio0j_mU^kv*>#4s_b~D*XCI*5AZ9^T+ham;9JNyz6GGm|o*hy>Rm6 zB-WT(*%W2O+O#7dBd9toZ?PuAXmfO!Q$`U%GCpRdI)n=}G|BcsTlCOrFZD-wClUKa zBY8h^g}IG^3$yKxm}1@72}LG^y36wAV(XjHXU1Ge;sAUgxSAc%EN-YJx=?rfQqHM( z(C@b&Wx4U@{#}mnrb4ryoEFjj*kB4v(Iq*5yTQ%TW#U(S@RF*4L`$vP4uvY82z+cDAVhhUTTXa1h9_ zL+W8Blp3ceoHJS-AreFK1n7g6$SgR%gc}=5Gd82VES)sUNAD=x{m4&cokB zxUpqWYT|s(DUAx1uP=gmy`!#}viy8D^6Grvs0_(hy?>@hS4m(+mm|4+(nmSCxK%Z6 zK@RoMB9>k|IgEW}&}Re7FXhWe(`n~u80bF9)1o^~2_-FxYCnuApA7rRO?M>Ry$%7C1@fg|&?jaGBb?