[ { "inputs": [ { "internalType": "contract IERC20", "name": "_asset", "type": "address" }, { "internalType": "address", "name": "_initialRewarder", "type": "address" }, { "internalType": "address", "name": "_owner", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [], "name": "CantBlacklistOwner", "type": "error" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxDeposit", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxRedeem", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxWithdraw", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidAdminChange", "type": "error" }, { "inputs": [], "name": "InvalidAmount", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [], "name": "InvalidToken", "type": "error" }, { "inputs": [], "name": "InvalidZeroAddress", "type": "error" }, { "inputs": [], "name": "MathOverflowedMulDiv", "type": "error" }, { "inputs": [], "name": "MinSharesViolation", "type": "error" }, { "inputs": [], "name": "NotPendingAdmin", "type": "error" }, { "inputs": [], "name": "OperationNotAllowed", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [], "name": "StillVesting", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "oldAdmin", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "AdminTransferRequested", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "oldAdmin", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "AdminTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "LockedAmountRedistributed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "RewardsReceived", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bool", "name": "isFullBlacklisting", "type": "bool" } ], "name": "addToBlacklist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "asset", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "convertToAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "convertToShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getUnvestedAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastDistributionTimestamp", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "redistributeLockedAmount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bool", "name": "isFullBlacklisting", "type": "bool" } ], "name": "removeFromBlacklist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "rescueTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "transferAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferInRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "vestingAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
6101a060405234801562000011575f80fd5b5060405162003c8f38038062003c8f833981016040819052620000349162000571565b6040805180820182526006808252651cd85d9554d160d21b6020808401829052845180860186526001808252603160f81b8284015286518088018852600c81526b14dd185ad95908185d9554d160a21b8185015287518089019098529487529186019290925260035586938392906007620000b0838262000662565b506008620000bf828262000662565b50620000d1915083905060096200023d565b61012052620000e281600a6200023d565b61014052815160208084019190912060e052815190820120610100524660a0526200016f60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c052505f80620001868362000275565b9150915081620001985760126200019a565b805b60ff166101805250506001600160a01b039081166101605281161580620001c857506001600160a01b038216155b80620001db57506001600160a01b038316155b15620001fa5760405163f6b2911f60e01b815260040160405180910390fd5b620002267fbeec13769b5f410b0584f69811bfd923818456d5edcf426b0e31cf90eed7a3f68362000354565b50620002335f8262000354565b50505050620007db565b5f6020835110156200025c576200025483620003e0565b90506200026f565b8162000269848262000662565b5060ff90505b92915050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b03871691620002bd916200074e565b5f60405180830381855afa9150503d805f8114620002f7576040519150601f19603f3d011682016040523d82523d5f602084013e620002fc565b606091505b50915091508180156200031157506020815110155b1562000348575f818060200190518101906200032e91906200076b565b905060ff811162000346576001969095509350505050565b505b505f9485945092505050565b5f82620003cd576001546040516001600160a01b039182169184169082907ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec6905f90a3620003a35f826200042b565b5050600180546001600160a01b0384166001600160a01b0319918216179091556002805490911690555b620003d98383620004b6565b9392505050565b5f80829050601f8151111562000416578260405163305a27a960e01b81526004016200040d919062000783565b60405180910390fd5b80516200042382620007b7565b179392505050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1615620004ae575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016200026f565b505f6200026f565b5f828152602081815260408083206001600160a01b038516845290915281205460ff16620004ae575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620005103390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016200026f565b6001600160a01b03811681146200056e575f80fd5b50565b5f805f6060848603121562000584575f80fd5b8351620005918162000559565b6020850151909350620005a48162000559565b6040850151909250620005b78162000559565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620005eb57607f821691505b6020821081036200060a57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200065d575f81815260208120601f850160051c81016020861015620006385750805b601f850160051c820191505b81811015620006595782815560010162000644565b5050505b505050565b81516001600160401b038111156200067e576200067e620005c2565b62000696816200068f8454620005d6565b8462000610565b602080601f831160018114620006cc575f8415620006b45750858301515b5f19600386901b1c1916600185901b17855562000659565b5f85815260208120601f198616915b82811015620006fc57888601518255948401946001909101908401620006db565b50858210156200071a57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f5b83811015620007465781810151838201526020016200072c565b50505f910152565b5f8251620007618184602087016200072a565b9190910192915050565b5f602082840312156200077c575f80fd5b5051919050565b602081525f8251806020840152620007a38160408501602087016200072a565b601f01601f19169190910160400192915050565b805160208083015191908110156200060a575f1960209190910360031b1b16919050565b60805160a05160c05160e051610100516101205161014051610160516101805161342e620008615f395f50505f818161042b0152818161071101528181610dda015281816110cd0152818161239f015261261b01525f611a5101525f611a2401525f61186501525f61183d01525f61179801525f6117c201525f6117ec015261342e5ff3fe608060405234801561000f575f80fd5b5060043610610303575f3560e01c806384b0196e1161019d578063c336a084116100e8578063d547741f11610093578063e7c2a6081161006e578063e7c2a608146106eb578063ef8b30f714610634578063f298f42c146106f3575f80fd5b8063d547741f14610680578063d905777e14610693578063dd62ed3e146106a6575f80fd5b8063c80ef110116100c3578063c80ef11014610647578063ce96cb771461065a578063d505accf1461066d575f80fd5b8063c336a08414610621578063c63d75b614610470578063c6e6f59214610634575f80fd5b8063a217fddf11610148578063b3d7f6b911610123578063b3d7f6b9146105e8578063b460af94146105fb578063ba0876521461060e575f80fd5b8063a217fddf146105bb578063a9059cbb146105c2578063b37fd190146105d5575f80fd5b806394bf804d1161017857806394bf804d1461058d57806395d89b41146105a0578063a0776b82146105a8575f80fd5b806384b0196e146105115780638da5cb5b1461052c57806391d148541461054a575f80fd5b8063248a9ca31161025d578063402d267d1161020857806370a08231116101e357806370a08231146104b657806375829def146104eb5780637ecebe00146104fe575f80fd5b8063402d267d146104705780634cdad506146103635780636e553f65146104a3575f80fd5b80633644e515116102385780633644e5151461040e57806336568abe1461041657806338d52e0f14610429575f80fd5b8063248a9ca3146103ca5780632f2ff15d146103ec578063313ce567146103ff575f80fd5b8063095ea7b3116102bd57806318160ddd1161029857806318160ddd146103a657806320950933146103ae57806323b872dd146103b7575f80fd5b8063095ea7b3146103765780630a28a477146103895780630e18b6811461039c575f80fd5b806301ffc9a7116102ed57806301ffc9a71461032b57806306fdde031461034e57806307a2d13a14610363575f80fd5b8062728f761461030757806301e1d11414610323575b5f80fd5b610310600c5481565b6040519081526020015b60405180910390f35b610310610706565b61033e610339366004612d9a565b6107cd565b604051901515815260200161031a565b610356610865565b60405161031a9190612e44565b610310610371366004612e56565b6108f5565b61033e610384366004612e95565b610900565b610310610397366004612e56565b610917565b6103a4610923565b005b600654610310565b610310600d5481565b61033e6103c5366004612ebd565b610981565b6103106103d8366004612e56565b5f9081526020819052604090206001015490565b6103a46103fa366004612ef6565b6109a6565b6040516012815260200161031a565b6103106109f9565b6103a4610424366004612ef6565b610a02565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161031a565b61031061047e366004612f20565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b6103106104b1366004612ef6565b610a34565b6103106104c4366004612f20565b73ffffffffffffffffffffffffffffffffffffffff165f9081526004602052604090205490565b6103a46104f9366004612f20565b610a84565b61031061050c366004612f20565b610b54565b610519610b7e565b60405161031a9796959493929190612f39565b60015473ffffffffffffffffffffffffffffffffffffffff1661044b565b61033e610558366004612ef6565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61031061059b366004612ef6565b610bdc565b610356610c16565b6103a46105b6366004612ff6565b610c25565b6103105f81565b61033e6105d0366004612e95565b610db9565b6103a46105e336600461301e565b610dc6565b6103106105f6366004612e56565b610e8e565b610310610609366004613057565b610e9a565b61031061061c366004613057565b610f29565b6103a461062f366004613094565b610faf565b610310610642366004612e56565b611033565b6103a4610655366004612e56565b61103e565b610310610668366004612f20565b611134565b6103a461067b3660046130c9565b611163565b6103a461068e366004612ef6565b61130c565b6103106106a1366004612f20565b611358565b6103106106b4366004612ff6565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260056020908152604080832093909416825291909152205490565b610310611382565b6103a4610701366004613094565b6113c9565b5f61070f611382565b7f00000000000000000000000000000000000000000000000000000000000000006040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa15801561079a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107be9190613136565b6107c8919061317a565b905090565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061085f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600780546108749061318d565b80601f01602080910402602001604051908101604052809291908181526020018280546108a09061318d565b80156108eb5780601f106108c2576101008083540402835291602001916108eb565b820191905f5260205f20905b8154815290600101906020018083116108ce57829003601f168201915b5050505050905090565b5f61085f825f6114d9565b5f3361090d818585611511565b5060019392505050565b5f61085f82600161151e565b60025473ffffffffffffffffffffffffffffffffffffffff163314610974576040517f058d9a1b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e5f3361154d565b50565b5f3361098e8582856115ff565b6109998585856116cc565b60019150505b9392505050565b5f6109b081611775565b82806109e8576040517f6317a0fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109f2848461154d565b5050505050565b5f6107c861177f565b6040517ff50a3b5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610a64565b60405180910390fd5b5f610a6e85611033565b9050610a7c338587846118b5565b949350505050565b5f610a8e81611775565b3373ffffffffffffffffffffffffffffffffffffffff831603610add576040517f6317a0fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff848116918217909255600154604051919216907fefdcbba819467e00b0262c12892dda980bac68580b72178e57a162368b808766905f90a35050565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600b602052604081205461085f565b5f6060805f805f6060610b8f611a1d565b610b97611a4a565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f610c0885610e8e565b9050610a7c338583886118b5565b6060600880546108749061318d565b610c2d611a77565b5f610c3781611775565b73ffffffffffffffffffffffffffffffffffffffff83165f9081527f1b6393e878bd556f19ddc4d62b1faf8b79d68ac5561b3277e15c2f28fb3b2820602052604090205460ff168015610cce575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f1b6393e878bd556f19ddc4d62b1faf8b79d68ac5561b3277e15c2f28fb3b2820602052604090205460ff16155b15610a025773ffffffffffffffffffffffffffffffffffffffff83165f9081526004602052604081205490610d02826108f5565b9050610d0e8583611aba565b73ffffffffffffffffffffffffffffffffffffffff8416610d3757610d3281611b14565b610d41565b610d418483611b5e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fb8ef21f2b52f8ca740012254a6b10f17d2fd6e589f97ebf401fde0e8b921893784604051610da091815260200190565b60405180910390a3505050610db56001600355565b5050565b5f3361090d8185856116cc565b610dce611a77565b5f610dd881611775565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e5d576040517fc1ab6dc100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e7e73ffffffffffffffffffffffffffffffffffffffff85168385611bb8565b50610e896001600355565b505050565b5f61085f8260016114d9565b5f80610ea583611134565b905080851115610f07576040517ffe9cceec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810186905260448101829052606401610a5b565b5f610f1186610917565b9050610f203386868985611c39565b95945050505050565b5f80610f3483611358565b905080851115610f96576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810186905260448101829052606401610a5b565b5f610fa0866108f5565b9050610f20338686848a611c39565b7ff988e4fb62b8e14f4820fed03192306ddf4d7dbfa215595ba1c6ba4b76b369ee610fd981611775565b5f82611005577f8f7080408a06296c6347c87c115ad99669141ae35eae974c12dff8bd01680cb6611027565b7f0a4af4bcc1942295207d9f047442ebdae6170a6e324850f758b14cf99b65c3bd5b90506109f28185611df0565b5f61085f825f61151e565b611046611a77565b7fbeec13769b5f410b0584f69811bfd923818456d5edcf426b0e31cf90eed7a3f661107081611775565b81805f036110aa576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110b383611b14565b6110f573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086611eb0565b6040518381527fbb28dd7cd6be6f61828ea9158a04c5182c716a946a6d2f31f4864edb87471aa69060200160405180910390a1505061097e6001600355565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526004602052604081205461085f905f6114d9565b834211156111a0576040517f6279130200000000000000000000000000000000000000000000000000000000815260048101859052602401610a5b565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886111f88c73ffffffffffffffffffffffffffffffffffffffff165f908152600b6020526040902080546001810190915590565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61125f82611ef6565b90505f61126e82878787611f3d565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112f5576040517f4b800e4600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301528b166024820152604401610a5b565b6113008a8a8a611511565b50505050505050505050565b5f61131681611775565b828061134e576040517f6317a0fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109f28484611df0565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526004602052604081205461085f565b5f80600d5442611392919061317a565b905061708081106113a4575f91505090565b600c54617080828103916113b890836131de565b6113c29190613222565b9250505090565b7ff988e4fb62b8e14f4820fed03192306ddf4d7dbfa215595ba1c6ba4b76b369ee6113f381611775565b8261141360015473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611477576040517ffe7c574000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f836114a3577f8f7080408a06296c6347c87c115ad99669141ae35eae974c12dff8bd01680cb66114c5565b7f0a4af4bcc1942295207d9f047442ebdae6170a6e324850f758b14cf99b65c3bd5b90506114d1818661154d565b505050505050565b5f61099f6114e5610706565b6114f0906001613235565b6114fb5f600a613366565b6006546115089190613235565b85919085611f69565b610e898383836001611fb6565b5f61099f61152d82600a613366565b60065461153a9190613235565b611542610706565b611508906001613235565b5f826115f55760015460405173ffffffffffffffffffffffffffffffffffffffff9182169184169082907ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec6905f90a36115a65f82611df0565b50506001805473ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556002805490911690555b61099f83836120fb565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600560209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116c657818110156116b8576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610a5b565b6116c684848484035f611fb6565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831661171b576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610a5b565b73ffffffffffffffffffffffffffffffffffffffff821661176a576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610a5b565b610e898383836121ed565b61097e8133612315565b5f3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156117e457507f000000000000000000000000000000000000000000000000000000000000000046145b1561180e57507f000000000000000000000000000000000000000000000000000000000000000090565b6107c8604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b6118bd611a77565b81805f036118f7576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81805f03611931576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff86165f9081527f0345e2c1516a911f2186107e484f2e7d92495a743775dfd87a2ea9407a42f659602052604090205460ff16806119c6575073ffffffffffffffffffffffffffffffffffffffff85165f9081527f0345e2c1516a911f2186107e484f2e7d92495a743775dfd87a2ea9407a42f659602052604090205460ff165b156119fd576040517ff50a3b5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a098686868661239a565b611a11612438565b50506116c66001600355565b60606107c87f00000000000000000000000000000000000000000000000000000000000000006009612491565b60606107c87f0000000000000000000000000000000000000000000000000000000000000000600a612491565b600260035403611ab3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600355565b73ffffffffffffffffffffffffffffffffffffffff8216611b09576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610a5b565b610db5825f836121ed565b5f611b1d611382565b1115611b55576040517f010133de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c5542600d55565b73ffffffffffffffffffffffffffffffffffffffff8216611bad576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610a5b565b610db55f83836121ed565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052610e8991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061253a565b611c41611a77565b81805f03611c7b576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81805f03611cb5576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87165f9081527f1b6393e878bd556f19ddc4d62b1faf8b79d68ac5561b3277e15c2f28fb3b2820602052604090205460ff1680611d4a575073ffffffffffffffffffffffffffffffffffffffff86165f9081527f1b6393e878bd556f19ddc4d62b1faf8b79d68ac5561b3277e15c2f28fb3b2820602052604090205460ff165b80611d98575073ffffffffffffffffffffffffffffffffffffffff85165f9081527f1b6393e878bd556f19ddc4d62b1faf8b79d68ac5561b3277e15c2f28fb3b2820602052604090205460ff165b15611dcf576040517ff50a3b5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ddc87878787876125ce565b611de4612438565b50506109f26001600355565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615611ea9575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161085f565b505f61085f565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526116c69186918216906323b872dd90608401611bf2565b5f61085f611f0261177f565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b5f805f80611f4d888888886126cf565b925092509250611f5d82826127c2565b50909695505050505050565b5f80611f768686866128c5565b9050611f81836129bc565b8015611f9c57505f8480611f9757611f976131f5565b868809115b15610f2057611fac600182613235565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416612005576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610a5b565b73ffffffffffffffffffffffffffffffffffffffff8316612054576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610a5b565b73ffffffffffffffffffffffffffffffffffffffff8085165f90815260056020908152604080832093871683529290522082905580156116c6578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516120ed91815260200190565b60405180910390a350505050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16611ea9575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561218b3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161085f565b73ffffffffffffffffffffffffffffffffffffffff83165f9081527f1b6393e878bd556f19ddc4d62b1faf8b79d68ac5561b3277e15c2f28fb3b2820602052604090205460ff168015612255575073ffffffffffffffffffffffffffffffffffffffff821615155b1561228c576040517ff50a3b5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f9081527f1b6393e878bd556f19ddc4d62b1faf8b79d68ac5561b3277e15c2f28fb3b2820602052604090205460ff161561230a576040517ff50a3b5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e898383836129e8565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610db5576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610a5b565b6123c67f0000000000000000000000000000000000000000000000000000000000000000853085611eb0565b6123d08382611b5e565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d784846040516120ed929190918252602082015260400190565b5f61244260065490565b90505f8111801561245a5750670de0b6b3a764000081105b1561097e576040517fb4b836aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606060ff83146124ab576124a483612b8f565b905061085f565b8180546124b79061318d565b80601f01602080910402602001604051908101604052809291908181526020018280546124e39061318d565b801561252e5780601f106125055761010080835404028352916020019161252e565b820191905f5260205f20905b81548152906001019060200180831161251157829003601f168201915b5050505050905061085f565b5f61255b73ffffffffffffffffffffffffffffffffffffffff841683612bcc565b905080515f1415801561257f57508080602001905181019061257d9190613374565b155b15610e89576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610a5b565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461260c5761260c8386836115ff565b6126168382611aba565b6126417f00000000000000000000000000000000000000000000000000000000000000008584611bb8565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db85856040516126c0929190918252602082015260400190565b60405180910390a45050505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561270857505f915060039050826127b8565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612759573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166127af57505f9250600191508290506127b8565b92505f91508190505b9450945094915050565b5f8260038111156127d5576127d561338f565b036127de575050565b60018260038111156127f2576127f261338f565b03612829576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561283d5761283d61338f565b03612877576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610a5b565b600382600381111561288b5761288b61338f565b03610db5576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610a5b565b5f838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050805f036129185783828161290e5761290e6131f5565b049250505061099f565b808411612951576040517f227bc15300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f60028260038111156129d1576129d161338f565b6129db91906133bc565b60ff166001149050919050565b73ffffffffffffffffffffffffffffffffffffffff8316612a1f578060065f828254612a149190613235565b90915550612acf9050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526004602052604090205481811015612aa4576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610a5b565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526004602052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216612af857600680548290039055612b23565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b8291815260200190565b60405180910390a3505050565b60605f612b9b83612bd9565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b606061099f83835f612c19565b5f60ff8216601f81111561085f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015612c57576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610a5b565b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051612c7f91906133dd565b5f6040518083038185875af1925050503d805f8114612cb9576040519150601f19603f3d011682016040523d82523d5f602084013e612cbe565b606091505b5091509150611fac868383606082612cde57612cd982612d58565b61099f565b8151158015612d02575073ffffffffffffffffffffffffffffffffffffffff84163b155b15612d51576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610a5b565b508061099f565b805115612d685780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60208284031215612daa575f80fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461099f575f80fd5b5f5b83811015612df3578181015183820152602001612ddb565b50505f910152565b5f8151808452612e12816020860160208601612dd9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f61099f6020830184612dfb565b5f60208284031215612e66575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612e90575f80fd5b919050565b5f8060408385031215612ea6575f80fd5b612eaf83612e6d565b946020939093013593505050565b5f805f60608486031215612ecf575f80fd5b612ed884612e6d565b9250612ee660208501612e6d565b9150604084013590509250925092565b5f8060408385031215612f07575f80fd5b82359150612f1760208401612e6d565b90509250929050565b5f60208284031215612f30575f80fd5b61099f82612e6d565b7fff00000000000000000000000000000000000000000000000000000000000000881681525f602060e081840152612f7460e084018a612dfb565b8381036040850152612f86818a612dfb565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c086015285518082528387019250908301905f5b81811015612fe457835183529284019291840191600101612fc8565b50909c9b505050505050505050505050565b5f8060408385031215613007575f80fd5b61301083612e6d565b9150612f1760208401612e6d565b5f805f60608486031215613030575f80fd5b61303984612e6d565b92506020840135915061304e60408501612e6d565b90509250925092565b5f805f60608486031215613069575f80fd5b8335925061307960208501612e6d565b915061304e60408501612e6d565b801515811461097e575f80fd5b5f80604083850312156130a5575f80fd5b6130ae83612e6d565b915060208301356130be81613087565b809150509250929050565b5f805f805f805f60e0888a0312156130df575f80fd5b6130e888612e6d565b96506130f660208901612e6d565b95506040880135945060608801359350608088013560ff81168114613119575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f60208284031215613146575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561085f5761085f61314d565b600181811c908216806131a157607f821691505b6020821081036131d8577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b808202811582820484141761085f5761085f61314d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82613230576132306131f5565b500490565b8082018082111561085f5761085f61314d565b600181815b808511156132a157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156132875761328761314d565b8085161561329457918102915b93841c939080029061324d565b509250929050565b5f826132b75750600161085f565b816132c357505f61085f565b81600181146132d957600281146132e3576132ff565b600191505061085f565b60ff8411156132f4576132f461314d565b50506001821b61085f565b5060208310610133831016604e8410600b8410161715613322575081810a61085f565b61332c8383613248565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561335e5761335e61314d565b029392505050565b5f61099f60ff8416836132a9565b5f60208284031215613384575f80fd5b815161099f81613087565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff8316806133ce576133ce6131f5565b8060ff84160691505092915050565b5f82516133ee818460208701612dd9565b919091019291505056fea2646970667358221220093bb4e33068400a1e39daf8b2f4e2169e3e267a4d7a942f29a99cff46a40c6b64736f6c63430008140033000000000000000000000000412d48c3467177140b83c0dbdf786317c5604f4e00000000000000000000000019596e1d6cd97916514b5dbaa4730781efe4997500000000000000000000000019596e1d6cd97916514b5dbaa4730781efe49975