Transactions
Token Transfers
Internal Transactions
Coin Balance History
Code
Read Contract
Write Contract
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- BActions
- Optimization enabled
- true
- Compiler version
- v0.5.12+commit.7709ece9
- Optimization runs
- 10000
- EVM Version
- petersburg
- Verified at
- 2026-04-22T09:55:01.364662Z
BActions.sol
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
pragma solidity 0.5.12;
contract ERC20 {
function balanceOf(address whom) external view returns (uint);
function approve(address spender, uint amount) external returns (bool);
function transfer(address dst, uint amt) external returns (bool);
function transferFrom(address sender, address recipient, uint amount) external returns (bool);
}
contract BPool is ERC20 {
function isBound(address t) external view returns (bool);
function getFinalTokens() external view returns(address[] memory);
function getBalance(address token) external view returns (uint);
function setSwapFee(uint swapFee) external;
function setController(address controller) external;
function setPublicSwap(bool public_) external;
function finalize() external;
function bind(address token, uint balance, uint denorm) external;
function rebind(address token, uint balance, uint denorm) external;
function unbind(address token) external;
function joinPool(uint poolAmountOut, uint[] calldata maxAmountsIn) external;
function joinswapExternAmountIn(
address tokenIn, uint tokenAmountIn, uint minPoolAmountOut
) external returns (uint poolAmountOut);
}
contract BFactory {
function newBPool() external returns (BPool);
}
/********************************** WARNING **********************************/
// //
// This contract is only meant to be used in conjunction with ds-proxy. //
// Calling this contract directly will lead to loss of funds. //
// //
/********************************** WARNING **********************************/
contract BActions {
function create(
BFactory factory,
address[] calldata tokens,
uint[] calldata balances,
uint[] calldata denorms,
uint swapFee,
bool finalize
) external returns (BPool pool) {
require(tokens.length == balances.length, "ERR_LENGTH_MISMATCH");
require(tokens.length == denorms.length, "ERR_LENGTH_MISMATCH");
pool = factory.newBPool();
pool.setSwapFee(swapFee);
for (uint8 i = 0; i < tokens.length; i++) {
ERC20 token = ERC20(tokens[i]);
require(token.transferFrom(msg.sender, address(this), balances[i]), "ERR_TRANSFER_FAILED");
token.approve(address(pool), balances[i]);
pool.bind(tokens[i], balances[i], denorms[i]);
}
if (finalize) {
pool.finalize();
require(pool.transfer(msg.sender, pool.balanceOf(address(this))), "ERR_TRANSFER_FAILED");
} else {
pool.setController(address(this));
pool.setPublicSwap(true);
}
}
function rebind(
BPool pool,
address[] calldata tokens,
uint[] calldata balances,
uint[] calldata denorms
) external {
require(tokens.length == balances.length, "ERR_LENGTH_MISMATCH");
require(tokens.length == denorms.length, "ERR_LENGTH_MISMATCH");
for (uint8 i = 0; i < tokens.length; i++) {
ERC20 token = ERC20(tokens[i]);
if (pool.isBound(tokens[i])) {
if (balances[i] > pool.getBalance(tokens[i])) {
require(
token.transferFrom(msg.sender, address(this), balances[i] - pool.getBalance(tokens[i])),
"ERR_TRANSFER_FAILED"
);
token.approve(address(pool), balances[i] - pool.getBalance(tokens[i]));
}
if (balances[i] > 0) {
pool.rebind(tokens[i], balances[i], denorms[i]);
} else {
pool.unbind(tokens[i]);
}
if (token.balanceOf(address(this)) > 0) {
require(token.transfer(msg.sender, token.balanceOf(address(this))), "ERR_TRANSFER_FAILED");
}
} else {
require(token.transferFrom(msg.sender, address(this), balances[i]), "ERR_TRANSFER_FAILED");
token.approve(address(pool), balances[i]);
pool.bind(tokens[i], balances[i], denorms[i]);
}
}
}
function setPublicSwap(BPool pool, bool publicSwap) external {
pool.setPublicSwap(publicSwap);
}
function setSwapFee(BPool pool, uint newFee) external {
pool.setSwapFee(newFee);
}
function setController(BPool pool, address newController) external {
pool.setController(newController);
}
function finalize(BPool pool) external {
pool.finalize();
require(pool.transfer(msg.sender, pool.balanceOf(address(this))), "ERR_TRANSFER_FAILED");
}
function joinPool(
BPool pool,
uint poolAmountOut,
uint[] calldata maxAmountsIn
) external {
address[] memory tokens = pool.getFinalTokens();
for (uint8 i = 0; i < tokens.length; i++) {
ERC20 token = ERC20(tokens[i]);
require(token.transferFrom(msg.sender, address(this), maxAmountsIn[i]), "ERR_TRANSFER_FAILED");
token.approve(address(pool), maxAmountsIn[i]);
}
pool.joinPool(poolAmountOut, maxAmountsIn);
for (uint8 i = 0; i < tokens.length; i++) {
ERC20 token = ERC20(tokens[i]);
if (token.balanceOf(address(this)) > 0) {
require(token.transfer(msg.sender, token.balanceOf(address(this))), "ERR_TRANSFER_FAILED");
}
}
require(pool.transfer(msg.sender, pool.balanceOf(address(this))), "ERR_TRANSFER_FAILED");
}
function joinswapExternAmountIn(
BPool pool,
address tokenIn,
uint tokenAmountIn,
uint minPoolAmountOut
) external {
ERC20 token = ERC20(tokenIn);
require(token.transferFrom(msg.sender, address(this), tokenAmountIn), "ERR_TRANSFER_FAILED");
token.approve(address(pool), tokenAmountIn);
uint poolAmountOut = pool.joinswapExternAmountIn(tokenIn, tokenAmountIn, minPoolAmountOut);
require(pool.transfer(msg.sender, poolAmountOut), "ERR_TRANSFER_FAILED");
}
}
Compiler Settings
{"remappings":[],"optimizer":{"runs":10000,"enabled":true},"libraries":{},"evmVersion":"petersburg","compilationTarget":{"BActions.sol":"BActions"}}
Contract ABI
[{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"address","name":"pool","internalType":"contract BPool"}],"name":"create","inputs":[{"type":"address","name":"factory","internalType":"contract BFactory"},{"type":"address[]","name":"tokens","internalType":"address[]"},{"type":"uint256[]","name":"balances","internalType":"uint256[]"},{"type":"uint256[]","name":"denorms","internalType":"uint256[]"},{"type":"uint256","name":"swapFee","internalType":"uint256"},{"type":"bool","name":"finalize","internalType":"bool"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"finalize","inputs":[{"type":"address","name":"pool","internalType":"contract BPool"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"joinPool","inputs":[{"type":"address","name":"pool","internalType":"contract BPool"},{"type":"uint256","name":"poolAmountOut","internalType":"uint256"},{"type":"uint256[]","name":"maxAmountsIn","internalType":"uint256[]"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"joinswapExternAmountIn","inputs":[{"type":"address","name":"pool","internalType":"contract BPool"},{"type":"address","name":"tokenIn","internalType":"address"},{"type":"uint256","name":"tokenAmountIn","internalType":"uint256"},{"type":"uint256","name":"minPoolAmountOut","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"rebind","inputs":[{"type":"address","name":"pool","internalType":"contract BPool"},{"type":"address[]","name":"tokens","internalType":"address[]"},{"type":"uint256[]","name":"balances","internalType":"uint256[]"},{"type":"uint256[]","name":"denorms","internalType":"uint256[]"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setController","inputs":[{"type":"address","name":"pool","internalType":"contract BPool"},{"type":"address","name":"newController","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setPublicSwap","inputs":[{"type":"address","name":"pool","internalType":"contract BPool"},{"type":"bool","name":"publicSwap","internalType":"bool"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setSwapFee","inputs":[{"type":"address","name":"pool","internalType":"contract BPool"},{"type":"uint256","name":"newFee","internalType":"uint256"}],"constant":false}]
Contract Creation Code
0x608060405234801561001057600080fd5b50612458806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638a5c57df1161005b5780638a5c57df14610259578063991991c7146102de578063c1762b151461030a578063c7a305c81461034657610088565b80631a78a2751461008d5780631eccc185146101d55780634ef39b75146102055780637b7d6c681461022b575b600080fd5b6101b9600480360360c08110156100a357600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100ce57600080fd5b8201836020820111156100e057600080fd5b8035906020019184602083028401116401000000008311171561010257600080fd5b91939092909160208101903564010000000081111561012057600080fd5b82018360208201111561013257600080fd5b8035906020019184602083028401116401000000008311171561015457600080fd5b91939092909160208101903564010000000081111561017257600080fd5b82018360208201111561018457600080fd5b803590602001918460208302840111640100000000831117156101a657600080fd5b919350915080359060200135151561046a565b604080516001600160a01b039092168252519081900360200190f35b610203600480360360408110156101eb57600080fd5b506001600160a01b0381351690602001351515610b84565b005b6102036004803603602081101561021b57600080fd5b50356001600160a01b0316610c02565b6102036004803603604081101561024157600080fd5b506001600160a01b0381358116916020013516610dd2565b6102036004803603606081101561026f57600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561029f57600080fd5b8201836020820111156102b157600080fd5b803590602001918460208302840111640100000000831117156102d357600080fd5b509092509050610e2a565b610203600480360360408110156102f457600080fd5b506001600160a01b03813516906020013561159a565b6102036004803603608081101561032057600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356115e0565b6102036004803603608081101561035c57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561038757600080fd5b82018360208201111561039957600080fd5b803590602001918460208302840111640100000000831117156103bb57600080fd5b9193909290916020810190356401000000008111156103d957600080fd5b8201836020820111156103eb57600080fd5b8035906020019184602083028401116401000000008311171561040d57600080fd5b91939092909160208101903564010000000081111561042b57600080fd5b82018360208201111561043d57600080fd5b8035906020019184602083028401116401000000008311171561045f57600080fd5b5090925090506118e2565b60008786146104c0576040805162461bcd60e51b815260206004820152601360248201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604482015290519081900360640190fd5b878414610514576040805162461bcd60e51b815260206004820152601360248201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604482015290519081900360640190fd5b896001600160a01b031663d556c5dc6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561054f57600080fd5b505af1158015610563573d6000803e3d6000fd5b505050506040513d602081101561057957600080fd5b5051604080517f34e199070000000000000000000000000000000000000000000000000000000081526004810186905290519192506001600160a01b038316916334e199079160248082019260009290919082900301818387803b1580156105e057600080fd5b505af11580156105f4573d6000803e3d6000fd5b506000925050505b60ff81168911156108ac5760008a8a8360ff1681811061061857fe5b905060200201356001600160a01b03169050806001600160a01b03166323b872dd33308c8c8760ff1681811061064a57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b505050506040513d60208110156106e357600080fd5b5051610736576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b806001600160a01b031663095ea7b3848b8b8660ff1681811061075557fe5b905060200201356040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156107ab57600080fd5b505af11580156107bf573d6000803e3d6000fd5b505050506040513d60208110156107d557600080fd5b50506001600160a01b03831663e4e1e5388c8c60ff86168181106107f557fe5b905060200201356001600160a01b03168b8b8660ff1681811061081457fe5b905060200201358a8a8760ff1681811061082a57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b15801561088757600080fd5b505af115801561089b573d6000803e3d6000fd5b5050600190930192506105fc915050565b508115610a8557806001600160a01b0316634bb278f36040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ee57600080fd5b505af1158015610902573d6000803e3d6000fd5b5050604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b038516935063a9059cbb9250339184916370a0823191602480820192602092909190829003018186803b15801561097057600080fd5b505afa158015610984573d6000803e3d6000fd5b505050506040513d602081101561099a57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610a0357600080fd5b505af1158015610a17573d6000803e3d6000fd5b505050506040513d6020811015610a2d57600080fd5b5051610a80576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b610b77565b604080517f92eefe9b00000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b038316916392eefe9b91602480830192600092919082900301818387803b158015610ae557600080fd5b505af1158015610af9573d6000803e3d6000fd5b5050604080517f49b595520000000000000000000000000000000000000000000000000000000081526001600482015290516001600160a01b03851693506349b595529250602480830192600092919082900301818387803b158015610b5e57600080fd5b505af1158015610b72573d6000803e3d6000fd5b505050505b9998505050505050505050565b604080517f49b59552000000000000000000000000000000000000000000000000000000008152821515600482015290516001600160a01b038416916349b5955291602480830192600092919082900301818387803b158015610be657600080fd5b505af1158015610bfa573d6000803e3d6000fd5b505050505050565b806001600160a01b0316634bb278f36040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c3d57600080fd5b505af1158015610c51573d6000803e3d6000fd5b5050604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b038516935063a9059cbb9250339184916370a0823191602480820192602092909190829003018186803b158015610cbf57600080fd5b505afa158015610cd3573d6000803e3d6000fd5b505050506040513d6020811015610ce957600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610d5257600080fd5b505af1158015610d66573d6000803e3d6000fd5b505050506040513d6020811015610d7c57600080fd5b5051610dcf576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b50565b816001600160a01b03166392eefe9b826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015610be657600080fd5b6060846001600160a01b031663be3bbd2e6040518163ffffffff1660e01b815260040160006040518083038186803b158015610e6557600080fd5b505afa158015610e79573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015610ec057600080fd5b8101908080516040519392919084640100000000821115610ee057600080fd5b908301906020820185811115610ef557600080fd5b8251866020820283011164010000000082111715610f1257600080fd5b82525081516020918201928201910280838360005b83811015610f3f578181015183820152602001610f27565b50505050905001604052505050905060008090505b81518160ff161015611131576000828260ff1681518110610f7157fe5b60200260200101519050806001600160a01b03166323b872dd333088888760ff16818110610f9b57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561100a57600080fd5b505af115801561101e573d6000803e3d6000fd5b505050506040513d602081101561103457600080fd5b5051611087576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b806001600160a01b031663095ea7b38887878660ff168181106110a657fe5b905060200201356040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156110fc57600080fd5b505af1158015611110573d6000803e3d6000fd5b505050506040513d602081101561112657600080fd5b505050600101610f54565b50604080517f4f69c0d40000000000000000000000000000000000000000000000000000000081526004810186815260248201928352604482018590526001600160a01b03881692634f69c0d492889288928892606401846020850280828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b1580156111c857600080fd5b505af11580156111dc573d6000803e3d6000fd5b506000925050505b81518160ff161015611418576000828260ff168151811061120157fe5b602002602001015190506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561126357600080fd5b505afa158015611277573d6000803e3d6000fd5b505050506040513d602081101561128d57600080fd5b5051111561140f57604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b0383169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b1580156112ff57600080fd5b505afa158015611313573d6000803e3d6000fd5b505050506040513d602081101561132957600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561139257600080fd5b505af11580156113a6573d6000803e3d6000fd5b505050506040513d60208110156113bc57600080fd5b505161140f576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b506001016111e4565b50604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b0387169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b15801561148357600080fd5b505afa158015611497573d6000803e3d6000fd5b505050506040513d60208110156114ad57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561151657600080fd5b505af115801561152a573d6000803e3d6000fd5b505050506040513d602081101561154057600080fd5b5051611593576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b5050505050565b816001600160a01b03166334e19907826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610be657600080fd5b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101849052905184916001600160a01b038316916323b872dd916064808201926020929091908290030181600087803b15801561165157600080fd5b505af1158015611665573d6000803e3d6000fd5b505050506040513d602081101561167b57600080fd5b50516116ce576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b806001600160a01b031663095ea7b386856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561172e57600080fd5b505af1158015611742573d6000803e3d6000fd5b505050506040513d602081101561175857600080fd5b5050604080517f5db342770000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015260248201869052604482018590529151600092881691635db3427791606480830192602092919082900301818787803b1580156117cd57600080fd5b505af11580156117e1573d6000803e3d6000fd5b505050506040513d60208110156117f757600080fd5b5051604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810183905290519192506001600160a01b0388169163a9059cbb916044808201926020929091908290030181600087803b15801561186557600080fd5b505af1158015611879573d6000803e3d6000fd5b505050506040513d602081101561188f57600080fd5b5051610bfa576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b848314611936576040805162461bcd60e51b815260206004820152601360248201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604482015290519081900360640190fd5b84811461198a576040805162461bcd60e51b815260206004820152601360248201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604482015290519081900360640190fd5b60005b60ff811686111561241957600087878360ff168181106119a957fe5b905060200201356001600160a01b03169050886001600160a01b0316632f37b62489898560ff168181106119d957fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a2f57600080fd5b505afa158015611a43573d6000803e3d6000fd5b505050506040513d6020811015611a5957600080fd5b50511561219a57886001600160a01b031663f8b2cb4f89898560ff16818110611a7e57fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ad457600080fd5b505afa158015611ae8573d6000803e3d6000fd5b505050506040513d6020811015611afe57600080fd5b5051868660ff8516818110611b0f57fe5b905060200201351115611e0c57806001600160a01b03166323b872dd33308c6001600160a01b031663f8b2cb4f8d8d8960ff16818110611b4b57fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ba157600080fd5b505afa158015611bb5573d6000803e3d6000fd5b505050506040513d6020811015611bcb57600080fd5b50518a8a60ff8916818110611bdc57fe5b90506020020135036040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015611c4c57600080fd5b505af1158015611c60573d6000803e3d6000fd5b505050506040513d6020811015611c7657600080fd5b5051611cc9576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b806001600160a01b031663095ea7b38a8b6001600160a01b031663f8b2cb4f8c8c8860ff16818110611cf757fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d4d57600080fd5b505afa158015611d61573d6000803e3d6000fd5b505050506040513d6020811015611d7757600080fd5b5051898960ff8816818110611d8857fe5b90506020020135036040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611ddf57600080fd5b505af1158015611df3573d6000803e3d6000fd5b505050506040513d6020811015611e0957600080fd5b50505b600086868460ff16818110611e1d57fe5b905060200201351115611ef757886001600160a01b0316633fdddaa289898560ff16818110611e4857fe5b905060200201356001600160a01b031688888660ff16818110611e6757fe5b9050602002013587878760ff16818110611e7d57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b158015611eda57600080fd5b505af1158015611eee573d6000803e3d6000fd5b50505050611f86565b886001600160a01b031663cf5e7bd389898560ff16818110611f1557fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015611f6d57600080fd5b505af1158015611f81573d6000803e3d6000fd5b505050505b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051111561219557604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b0383169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b15801561208557600080fd5b505afa158015612099573d6000803e3d6000fd5b505050506040513d60208110156120af57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506040513d602081101561214257600080fd5b5051612195576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b612410565b806001600160a01b03166323b872dd333089898760ff168181106121ba57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561222957600080fd5b505af115801561223d573d6000803e3d6000fd5b505050506040513d602081101561225357600080fd5b50516122a6576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b806001600160a01b031663095ea7b38a88888660ff168181106122c557fe5b905060200201356040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561231b57600080fd5b505af115801561232f573d6000803e3d6000fd5b505050506040513d602081101561234557600080fd5b50506001600160a01b03891663e4e1e538898960ff861681811061236557fe5b905060200201356001600160a01b031688888660ff1681811061238457fe5b9050602002013587878760ff1681811061239a57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b1580156123f757600080fd5b505af115801561240b573d6000803e3d6000fd5b505050505b5060010161198d565b505050505050505056fea265627a7a723158204a1ab0d87fbd303a0f0397f988a6bfa46d2921129c2c5d54951d2a5726883c7c64736f6c634300050c0032
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638a5c57df1161005b5780638a5c57df14610259578063991991c7146102de578063c1762b151461030a578063c7a305c81461034657610088565b80631a78a2751461008d5780631eccc185146101d55780634ef39b75146102055780637b7d6c681461022b575b600080fd5b6101b9600480360360c08110156100a357600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100ce57600080fd5b8201836020820111156100e057600080fd5b8035906020019184602083028401116401000000008311171561010257600080fd5b91939092909160208101903564010000000081111561012057600080fd5b82018360208201111561013257600080fd5b8035906020019184602083028401116401000000008311171561015457600080fd5b91939092909160208101903564010000000081111561017257600080fd5b82018360208201111561018457600080fd5b803590602001918460208302840111640100000000831117156101a657600080fd5b919350915080359060200135151561046a565b604080516001600160a01b039092168252519081900360200190f35b610203600480360360408110156101eb57600080fd5b506001600160a01b0381351690602001351515610b84565b005b6102036004803603602081101561021b57600080fd5b50356001600160a01b0316610c02565b6102036004803603604081101561024157600080fd5b506001600160a01b0381358116916020013516610dd2565b6102036004803603606081101561026f57600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561029f57600080fd5b8201836020820111156102b157600080fd5b803590602001918460208302840111640100000000831117156102d357600080fd5b509092509050610e2a565b610203600480360360408110156102f457600080fd5b506001600160a01b03813516906020013561159a565b6102036004803603608081101561032057600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356115e0565b6102036004803603608081101561035c57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561038757600080fd5b82018360208201111561039957600080fd5b803590602001918460208302840111640100000000831117156103bb57600080fd5b9193909290916020810190356401000000008111156103d957600080fd5b8201836020820111156103eb57600080fd5b8035906020019184602083028401116401000000008311171561040d57600080fd5b91939092909160208101903564010000000081111561042b57600080fd5b82018360208201111561043d57600080fd5b8035906020019184602083028401116401000000008311171561045f57600080fd5b5090925090506118e2565b60008786146104c0576040805162461bcd60e51b815260206004820152601360248201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604482015290519081900360640190fd5b878414610514576040805162461bcd60e51b815260206004820152601360248201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604482015290519081900360640190fd5b896001600160a01b031663d556c5dc6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561054f57600080fd5b505af1158015610563573d6000803e3d6000fd5b505050506040513d602081101561057957600080fd5b5051604080517f34e199070000000000000000000000000000000000000000000000000000000081526004810186905290519192506001600160a01b038316916334e199079160248082019260009290919082900301818387803b1580156105e057600080fd5b505af11580156105f4573d6000803e3d6000fd5b506000925050505b60ff81168911156108ac5760008a8a8360ff1681811061061857fe5b905060200201356001600160a01b03169050806001600160a01b03166323b872dd33308c8c8760ff1681811061064a57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b505050506040513d60208110156106e357600080fd5b5051610736576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b806001600160a01b031663095ea7b3848b8b8660ff1681811061075557fe5b905060200201356040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156107ab57600080fd5b505af11580156107bf573d6000803e3d6000fd5b505050506040513d60208110156107d557600080fd5b50506001600160a01b03831663e4e1e5388c8c60ff86168181106107f557fe5b905060200201356001600160a01b03168b8b8660ff1681811061081457fe5b905060200201358a8a8760ff1681811061082a57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b15801561088757600080fd5b505af115801561089b573d6000803e3d6000fd5b5050600190930192506105fc915050565b508115610a8557806001600160a01b0316634bb278f36040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ee57600080fd5b505af1158015610902573d6000803e3d6000fd5b5050604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b038516935063a9059cbb9250339184916370a0823191602480820192602092909190829003018186803b15801561097057600080fd5b505afa158015610984573d6000803e3d6000fd5b505050506040513d602081101561099a57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610a0357600080fd5b505af1158015610a17573d6000803e3d6000fd5b505050506040513d6020811015610a2d57600080fd5b5051610a80576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b610b77565b604080517f92eefe9b00000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b038316916392eefe9b91602480830192600092919082900301818387803b158015610ae557600080fd5b505af1158015610af9573d6000803e3d6000fd5b5050604080517f49b595520000000000000000000000000000000000000000000000000000000081526001600482015290516001600160a01b03851693506349b595529250602480830192600092919082900301818387803b158015610b5e57600080fd5b505af1158015610b72573d6000803e3d6000fd5b505050505b9998505050505050505050565b604080517f49b59552000000000000000000000000000000000000000000000000000000008152821515600482015290516001600160a01b038416916349b5955291602480830192600092919082900301818387803b158015610be657600080fd5b505af1158015610bfa573d6000803e3d6000fd5b505050505050565b806001600160a01b0316634bb278f36040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c3d57600080fd5b505af1158015610c51573d6000803e3d6000fd5b5050604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b038516935063a9059cbb9250339184916370a0823191602480820192602092909190829003018186803b158015610cbf57600080fd5b505afa158015610cd3573d6000803e3d6000fd5b505050506040513d6020811015610ce957600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610d5257600080fd5b505af1158015610d66573d6000803e3d6000fd5b505050506040513d6020811015610d7c57600080fd5b5051610dcf576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b50565b816001600160a01b03166392eefe9b826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015610be657600080fd5b6060846001600160a01b031663be3bbd2e6040518163ffffffff1660e01b815260040160006040518083038186803b158015610e6557600080fd5b505afa158015610e79573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015610ec057600080fd5b8101908080516040519392919084640100000000821115610ee057600080fd5b908301906020820185811115610ef557600080fd5b8251866020820283011164010000000082111715610f1257600080fd5b82525081516020918201928201910280838360005b83811015610f3f578181015183820152602001610f27565b50505050905001604052505050905060008090505b81518160ff161015611131576000828260ff1681518110610f7157fe5b60200260200101519050806001600160a01b03166323b872dd333088888760ff16818110610f9b57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561100a57600080fd5b505af115801561101e573d6000803e3d6000fd5b505050506040513d602081101561103457600080fd5b5051611087576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b806001600160a01b031663095ea7b38887878660ff168181106110a657fe5b905060200201356040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156110fc57600080fd5b505af1158015611110573d6000803e3d6000fd5b505050506040513d602081101561112657600080fd5b505050600101610f54565b50604080517f4f69c0d40000000000000000000000000000000000000000000000000000000081526004810186815260248201928352604482018590526001600160a01b03881692634f69c0d492889288928892606401846020850280828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b1580156111c857600080fd5b505af11580156111dc573d6000803e3d6000fd5b506000925050505b81518160ff161015611418576000828260ff168151811061120157fe5b602002602001015190506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561126357600080fd5b505afa158015611277573d6000803e3d6000fd5b505050506040513d602081101561128d57600080fd5b5051111561140f57604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b0383169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b1580156112ff57600080fd5b505afa158015611313573d6000803e3d6000fd5b505050506040513d602081101561132957600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561139257600080fd5b505af11580156113a6573d6000803e3d6000fd5b505050506040513d60208110156113bc57600080fd5b505161140f576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b506001016111e4565b50604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b0387169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b15801561148357600080fd5b505afa158015611497573d6000803e3d6000fd5b505050506040513d60208110156114ad57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561151657600080fd5b505af115801561152a573d6000803e3d6000fd5b505050506040513d602081101561154057600080fd5b5051611593576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b5050505050565b816001600160a01b03166334e19907826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610be657600080fd5b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101849052905184916001600160a01b038316916323b872dd916064808201926020929091908290030181600087803b15801561165157600080fd5b505af1158015611665573d6000803e3d6000fd5b505050506040513d602081101561167b57600080fd5b50516116ce576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b806001600160a01b031663095ea7b386856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561172e57600080fd5b505af1158015611742573d6000803e3d6000fd5b505050506040513d602081101561175857600080fd5b5050604080517f5db342770000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015260248201869052604482018590529151600092881691635db3427791606480830192602092919082900301818787803b1580156117cd57600080fd5b505af11580156117e1573d6000803e3d6000fd5b505050506040513d60208110156117f757600080fd5b5051604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810183905290519192506001600160a01b0388169163a9059cbb916044808201926020929091908290030181600087803b15801561186557600080fd5b505af1158015611879573d6000803e3d6000fd5b505050506040513d602081101561188f57600080fd5b5051610bfa576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b848314611936576040805162461bcd60e51b815260206004820152601360248201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604482015290519081900360640190fd5b84811461198a576040805162461bcd60e51b815260206004820152601360248201527f4552525f4c454e4754485f4d49534d4154434800000000000000000000000000604482015290519081900360640190fd5b60005b60ff811686111561241957600087878360ff168181106119a957fe5b905060200201356001600160a01b03169050886001600160a01b0316632f37b62489898560ff168181106119d957fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a2f57600080fd5b505afa158015611a43573d6000803e3d6000fd5b505050506040513d6020811015611a5957600080fd5b50511561219a57886001600160a01b031663f8b2cb4f89898560ff16818110611a7e57fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ad457600080fd5b505afa158015611ae8573d6000803e3d6000fd5b505050506040513d6020811015611afe57600080fd5b5051868660ff8516818110611b0f57fe5b905060200201351115611e0c57806001600160a01b03166323b872dd33308c6001600160a01b031663f8b2cb4f8d8d8960ff16818110611b4b57fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ba157600080fd5b505afa158015611bb5573d6000803e3d6000fd5b505050506040513d6020811015611bcb57600080fd5b50518a8a60ff8916818110611bdc57fe5b90506020020135036040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015611c4c57600080fd5b505af1158015611c60573d6000803e3d6000fd5b505050506040513d6020811015611c7657600080fd5b5051611cc9576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b806001600160a01b031663095ea7b38a8b6001600160a01b031663f8b2cb4f8c8c8860ff16818110611cf757fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d4d57600080fd5b505afa158015611d61573d6000803e3d6000fd5b505050506040513d6020811015611d7757600080fd5b5051898960ff8816818110611d8857fe5b90506020020135036040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611ddf57600080fd5b505af1158015611df3573d6000803e3d6000fd5b505050506040513d6020811015611e0957600080fd5b50505b600086868460ff16818110611e1d57fe5b905060200201351115611ef757886001600160a01b0316633fdddaa289898560ff16818110611e4857fe5b905060200201356001600160a01b031688888660ff16818110611e6757fe5b9050602002013587878760ff16818110611e7d57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b158015611eda57600080fd5b505af1158015611eee573d6000803e3d6000fd5b50505050611f86565b886001600160a01b031663cf5e7bd389898560ff16818110611f1557fe5b905060200201356001600160a01b03166040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015611f6d57600080fd5b505af1158015611f81573d6000803e3d6000fd5b505050505b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051111561219557604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b0383169163a9059cbb91339184916370a0823191602480820192602092909190829003018186803b15801561208557600080fd5b505afa158015612099573d6000803e3d6000fd5b505050506040513d60208110156120af57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506040513d602081101561214257600080fd5b5051612195576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b612410565b806001600160a01b03166323b872dd333089898760ff168181106121ba57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561222957600080fd5b505af115801561223d573d6000803e3d6000fd5b505050506040513d602081101561225357600080fd5b50516122a6576040805162461bcd60e51b815260206004820152601360248201527f4552525f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b806001600160a01b031663095ea7b38a88888660ff168181106122c557fe5b905060200201356040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561231b57600080fd5b505af115801561232f573d6000803e3d6000fd5b505050506040513d602081101561234557600080fd5b50506001600160a01b03891663e4e1e538898960ff861681811061236557fe5b905060200201356001600160a01b031688888660ff1681811061238457fe5b9050602002013587878760ff1681811061239a57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b1580156123f757600080fd5b505af115801561240b573d6000803e3d6000fd5b505050505b5060010161198d565b505050505050505056fea265627a7a723158204a1ab0d87fbd303a0f0397f988a6bfa46d2921129c2c5d54951d2a5726883c7c64736f6c634300050c0032